Tutorial Pics

Embed Size (px)

Citation preview

  • 8/2/2019 Tutorial Pics

    1/65

    ENTREGA 1

    La electrnica ha evolucionado mucho. Casi todo lo que hasta hace unos aos se haciamediante un grupo (a veces muy numeroso) de circuitos integrados conectados entre si, hoyse puede realizar utilizando un microcontrolador y unos pocos componentes adicionales.

    De todos los fabricantes de microcontroladores que existen, los ms elegidos por loshobbystas suelen ser los modelos deMicrochip, en gran parte debido a la excelentedocumentacin gratuita que proporciona la empresa para cada modelo.

    El lenguaje nativo de estos microcontroladores es el ASM, y en el caso de la familia 16F

    solo posee 35 instrucciones. Pero el ASM es un lenguaje que esta mucho ms cerca delhardware que del programador, y gracias a la miniaturizacin que permite incorporar cadavez ms memoria dentro de un microcontrolador sin aumentar prcticamente su costo, hansurgido compiladores de lenguajes de alto nivel. Entre ellos se encuentran varios dialectosBASIC y C. El BASIC resulta bastante ms simple de aprender.

    Antes de comenzar a ver los temas programacin en si mismos, debemos aclarar algunosconceptos bsicos sobre los microcontroladores para poder entender lo que hace cadainstruccin BASIC. Eso ser muy til para los que vayan a comenzar a programar a partirde este artculo.

    Lo ms interesante de trabajar con microcontroladores es que se necesitan conocimientostanto de electrnica (hardware) como de programacin (software) as que a lo largo de estostutoriales iremos viendo temas de ambas disciplinas, ya que ntimamente vinculadas.

    Un microcontrolador es como un ordenador en pequeo: dispone de una memoria donde se

    guardan los programas, una memoria para almacenar datos, dispone de puertos de entrada ysalida, etc. A menudo se incluyen puertos seriales (RS-232), conversores analgico/digital,generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas ms. Porsupuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclasindividuales o utilizar pantallas LCD o LED para mostrar informacin.

    En general, por cada cuatro ciclos de reloj del microcontrolador se ejecuta una instruccinASM (una instruccin BASIC consta generalmente de mas de una instruccin ASM). Estosignifica que un PIC funcionando a 20MHz puede ejecutar 5 millones de instrucciones porsegundo.

    Los pines del PIC se dedican casi en su totalidad a los puertos que mencionbamosanteriormente. El resto (2 o mas) son los encargados de proporcionar la alimentacin alchip, y a veces, un sistema de RESET. Desde BASIC es posible saber si un pin esta enestado alto (conectado a 5V o a un 1 lgico) o en estado bajo (puesto a 0V o a un 0

    lgico). Tambin se puede poner un pin de un puerto a 1 o 0. De esta manera, ymediante un rele, por ejemplo, se puede encender o apagar una luz, motor, maquina, etc.

    Uno de los microcontroladores ms famosos de todos los tiempos ha sido, sin duda, el

    http://www.microchip.com/http://www.microchip.com/http://www.microchip.com/http://www.microchip.com/
  • 8/2/2019 Tutorial Pics

    2/65

    16F84A, que ya es considerado obsoleto. Un buen reemplazo es el 16F628A, y es el queutilizaremos en la mayora de los ejemplos y proyectos que veamos. La disposicin de suspines es la siguiente:

    Funcin de

    los pines del 16F628A

    Como podemos ver, los pines 1, 2, 3, 4, 15, 16, 17 y 18 tienen el nombre de RAx. Esospines conforman el puerto A, PORTA de ahora en ms. Los pines 6 al 13 forman parte

    del puerto B (PORTB). El pin 5 es el que se conectara al negativo de la fuente de

    alimentacin. El 14 ir conectado a 5V.

    Como habrn notado, muchos de los pines tienen ms de una descripcin. Esto se debe aque pueden utilizarse de varias maneras diferentes, seleccionables por programa. Porejemplo, el pin 4 sirve como parte del PORTA, como RESET (MCLR = Master Clear) ycomo tensin de programacin (Vpp)

    No es mala idea descargar desde la web deMicrochiplahoja de datos de estemicrocontrolador(esta en ingls) para tenerla siempre a mano.

    Ahora bien Cmo colocamos el programa dentro del PIC? Para ello necesitamos algunasherramientas. Por un lado, es necesario un quemador de PICs, comoel que publicamos

    en NeoTeo, o alguno de los varios disponibles comercialmente. Uno que me gustaparticularmente es elGTP-USB+, ya que al funcionar conectado al puerto USB es muyveloz. Adems, necesitaremos un software que enve el programa al PIC. Para ellousaremos elWinPIC800, que es un excelente soft gratuito.

    Y tambin vamos a necesitar un compilador, para traducir nuestro programa en BASIC alASM que es capaz de entender el PIC. Despus de mirar varios candidatos, en estemomento parece una buena eleccin elPIC SIMULATOR IDE, que no solo es un excelente

    http://www.microchip.com/http://www.microchip.com/http://www.microchip.com/http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://www.mstools.com.ar/http://www.mstools.com.ar/http://www.mstools.com.ar/http://www.winpic800.com/http://www.winpic800.com/http://www.winpic800.com/http://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.neoteo.com/images/Cache/12D2x900y900.jpghttp://www.neoteo.com/images/Cache/12D1x900y900.jpghttp://www.neoteo.com/images/Cache/12D2x900y900.jpghttp://www.neoteo.com/images/Cache/12D1x900y900.jpghttp://www.oshonsoft.com/pic.htmlhttp://www.winpic800.com/http://www.mstools.com.ar/http://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://www.neoteo.com/tabid/54/ID/1479/Title/Programador_de_PICs/Default.aspx?1479=Title&Programador_de_PICs=Default.aspxhttp://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfhttp://www.microchip.com/
  • 8/2/2019 Tutorial Pics

    3/65

    compilador de BASIC, si no que adems (y por solo 29 euros) ofrece un entorno desimulacin de nuestros circuitos. Existe una versin de prueba que se puede bajargratuitamente desdeaqu.

    El GTP USB+, un excelenteprogramador de micros y memorias.

    El WinPic800 enviara el programa alPIC.

    El PIC SIMULATOR IDE, entorno deprogramacion BASIC.

    http://www.oshonsoft.com/picsimulatoridesetup.exehttp://www.oshonsoft.com/picsimulatoridesetup.exehttp://www.oshonsoft.com/picsimulatoridesetup.exehttp://www.neoteo.com/images/Cache/12D5x900y900.jpghttp://www.neoteo.com/images/Cache/12D4x900y900.jpghttp://www.neoteo.com/images/Cache/12D3x900y900.jpghttp://www.neoteo.com/images/Cache/12D5x900y900.jpghttp://www.neoteo.com/images/Cache/12D4x900y900.jpghttp://www.neoteo.com/images/Cache/12D3x900y900.jpghttp://www.neoteo.com/images/Cache/12D5x900y900.jpghttp://www.neoteo.com/images/Cache/12D4x900y900.jpghttp://www.neoteo.com/images/Cache/12D3x900y900.jpghttp://www.oshonsoft.com/picsimulatoridesetup.exe
  • 8/2/2019 Tutorial Pics

    4/65

    Para comenzar, usaremos un PIC16F628A.

    El primer ejemplo que veremos, equivalente al hola mundo de cualquier otro entorno deprogramacin, consiste en encender y apagar continuamente un LED conectado a uno delos pines del micro. Utilizaremos el circuito siguiente:

    Nuestro primer ejemplo.

    A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, loejecuta y ya, en el mundo de los microcontroladores hay que, previamente, definir el tipo demicrocontrolador que se va a utilizar, cual va a ser su frecuencia de clock, como va a ser elcircuito en que se va a utilizar el mismo, etc.

    En primer lugar, vamos a aprovechar el oscilador interno del 16F628A y nos evitaremos elcristal y condensadores asociados. El puerto B del micro tiene su pin 9 conectado a un LED

    http://www.neoteo.com/images/Cache/12D9x900y900.jpghttp://www.neoteo.com/images/Cache/12D8x900y900.jpghttp://www.neoteo.com/images/Cache/12D7x900y900.jpghttp://www.neoteo.com/images/Cache/12D6x900y900.jpghttp://www.neoteo.com/images/Cache/12D9x900y900.jpghttp://www.neoteo.com/images/Cache/12D8x900y900.jpghttp://www.neoteo.com/images/Cache/12D7x900y900.jpghttp://www.neoteo.com/images/Cache/12D6x900y900.jpghttp://www.neoteo.com/images/Cache/12D9x900y900.jpghttp://www.neoteo.com/images/Cache/12D8x900y900.jpghttp://www.neoteo.com/images/Cache/12D7x900y900.jpghttp://www.neoteo.com/images/Cache/12D6x900y900.jpghttp://www.neoteo.com/images/Cache/12D9x900y900.jpghttp://www.neoteo.com/images/Cache/12D8x900y900.jpghttp://www.neoteo.com/images/Cache/12D7x900y900.jpghttp://www.neoteo.com/images/Cache/12D6x900y900.jpg
  • 8/2/2019 Tutorial Pics

    5/65

    mediante una resistencia de 220ohms, que tienen como funcin limitar la corriente quecircula por el LED. Esta ser nuestra "salida".

    El circuito debe alimentarse con 5v bien filtrados y regulados. Volviendo a nuestroprograma, vamos a escribir el "hola mundo" de los microcontroladores: encender un LED.

    El primer paso es elegir en PIC SIMULATOR IDE, desde el men "Opciones" -> "SelectMicrocontroller", el microcontrolador PIC16F628A. Luego, debemos configurar los bitscorrespondientes, como se ve en las figuras de ms abajo.

    Lo destacable por ahora de esta configuracin es que estamos dejando la memoria (FLASHy EEPROM) sin proteccin, que el pin RESET se va a comportar como I/O y que usaremoscomo oscilador el oscilador interno INTRC.

    "Opciones" -> "Select Microcontroller"

    "Opciones" -> "Configuration Bits"

    Una vez hecho esto, arrancamos el editor de BASIC (presionando CTRL-C, por ejemplo), yescribimos el siguiente cdigo:

    AllDigital

    http://www.neoteo.com/images/Cache/12DCx900y900.jpghttp://www.neoteo.com/images/Cache/12DBx900y900.jpghttp://www.neoteo.com/images/Cache/12DAx900y900.jpghttp://www.neoteo.com/images/Cache/12DCx900y900.jpghttp://www.neoteo.com/images/Cache/12DBx900y900.jpghttp://www.neoteo.com/images/Cache/12DAx900y900.jpghttp://www.neoteo.com/images/Cache/12DCx900y900.jpghttp://www.neoteo.com/images/Cache/12DBx900y900.jpghttp://www.neoteo.com/images/Cache/12DAx900y900.jpg
  • 8/2/2019 Tutorial Pics

    6/65

    TRISA = %11111111TRISB = %00000000

    loop:PORTB.3 = 1WaitMs 500PORTB.3 = 0WaitMs 500Goto loop

    Vamos a analizarlo lnea por lnea para entender su funcionamiento:

    La lnea 1 utiliza la sentencia AllDigital para convertir todos los pines del micro enpines de E/S. Esto equivale a deshabilitar los comparadores, conversores A/D y todos losmdulos que pudiese tener nuestro microcontrolador. No es la nica manera de hacer esto,pero si la mas sencilla.

    Las lneas 3 y 4 convierten todos los pines del puerto A en entradas ( TRISA =

    %11111111 ) y los del puerto B en salidas ( TRISB = %00000000 ). El "%" indica queel numero que viene a continuacin esta en binario. Se podra haber escrito, por ejemploTRISB = 0 y hubiera sido lo mismo. Personalmente me gusta esta manera, ya que "veo" elestado de cada pin. Por supuesto, es valido activar como entrada algunos pines, y comosalidas otros, haciendo algo parecido a TRISB = %11000111.

    En la lnea 6 encontramos una "etiqueta" ( loop: ). Esta no hace nada, solo sirve comoreferencia para enviar el flujo del programa a esa lnea desde otro lugar, mediante la

    sentencia "Goto".

    La lnea 7 pone en "1" el pin correspondiente a PORTB.3, de manera que en el pin 9 delmicrocontrolador habr 5V. Esta tensin har que circule una corriente a travs de laresistencia limitadora y el LED1, haciendo que este se encienda, ya que el ctodo seencuentra conectado a 0V.

    En 8 tenemos la sentencia WaitMs 500. WaitMs se encarga de hacer una pausa enmilisegundos. La duracin de la pausa esta dada por el nmero que sigue a la instruccin,en este caso 500 milisegundos, o medio segundo.

    Luego, en 9, otra vez se vuelve a poner en 0 el pin 9, mediante PORTB.3 = 0 , lo que

    provoca que ese pin se ponga a 0V, y no haya mas circulacin de corriente a travs de laresistencia y del LED, con lo que este se apaga.

    En la lnea 10 se hace nuevamente una pausa de medio segundo, y por ultimo, la lnea

    Goto Loop hace que el programa contine en la lnea 6 (que es donde esta la etiqueta

    Loop).

    El programa se repite indefinidamente, encendiendo el LED medio segundo, apagndolo

  • 8/2/2019 Tutorial Pics

    7/65

    otro medio segundo.

    Con esto, terminamos la primera entrega de este tutorial. Solamente hemos araado lasuperficie de un mundo apasionante. No te pierdas la segunda entrega la prxima semana.

    ENTREGA 2

    En la entrega anterior de este tutorial vimos como construir un programa que, una vezcargado en el microcontrolador, hacia que un LED conectado a un pin del PORTBencendiese y apagase con una frecuencia de 500 milisegundos. Hoy aprovecharemos esemismo ejemplo para ver como compilar el programa BASIC y como utilizar elWinPIC800para enviarlo al microcontrolador.

    Una vez que hemos escrito el programa en la ventana BASIC Compiler delPICSIMULATOR IDE, debemos compilarlo. Este proceso se encarga de transformar el cdigoque hemos escrito (un fichero .BAS) en un lenguaje muy parecido al ingles a una serie de

    bytes que hace lo mismo pero en un idioma comprensible por el microcontrolador. Estenuevo fichero tendr como extensin .HEX.

    Para compilar, simplemente utilizamos la opcin Tools --> Compile & Assemble (F8).Si adems queremos que el fichero resultante se cargue en el simulador para poderestudiarlo sin necesidad de grabarlo en un PIC real, usamos la opcin siguiente: Tools -->Compile & Assemble & Load (F9). En entregas posteriores del tutorial veremos como

    simular nuestros programas.

    Si no hemos cometido errores de sintaxis, el compilador crear el fichero .HEX y nosmostrar el mensaje de la figura 2:

    http://www.winpic800.com/http://www.winpic800.com/http://www.winpic800.com/http://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.neoteo.com/images/Cache/12DDx900y900.jpghttp://www.oshonsoft.com/pic.htmlhttp://www.oshonsoft.com/pic.htmlhttp://www.winpic800.com/
  • 8/2/2019 Tutorial Pics

    8/65

    Figura 1: el programa en la ventanaBASIC Compiler

    Figura 2: el compilador crear el .HEXy nos mostrar este mensaje.

    Este mensaje es muy importante, as que explicaremos lnea a lnea su contenido.

    La primera lnea solamente nos informa que la compilacin tuvo xito.

    La segunda nos dice que tamao tiene el fichero generado, medido en cantidad depalabras (words). En el caso de los PICs de la serie 16F cada palabra tiene 14 bits de

    largo.

    En el tercer rengln tenemos el tamao total de la memoria del PIC que estemos utilizandotambin expresado en words. Esta informacin, junto con la de la lnea anterior, es til

    durante el desarrollo de un programa ya que nos da una idea de cuanto espacio nos quedadisponible para nuestro programa.

    La cuarta linea nos informa de la carpeta en donde se guardo el archivo .ASM y el nombreque tiene, que es el mismo que el del fichero .BAS pero con diferente extensin. Estefichero es un paso intermedio que realiza el compilador, pasando nuestro programa

    http://www.neoteo.com/images/Cache/1333x900y900.jpghttp://www.neoteo.com/images/Cache/1332x900y900.jpghttp://www.neoteo.com/images/Cache/1331x900y900.jpghttp://www.neoteo.com/images/Cache/1333x900y900.jpghttp://www.neoteo.com/images/Cache/1332x900y900.jpghttp://www.neoteo.com/images/Cache/1331x900y900.jpghttp://www.neoteo.com/images/Cache/1333x900y900.jpghttp://www.neoteo.com/images/Cache/1332x900y900.jpghttp://www.neoteo.com/images/Cache/1331x900y900.jpg
  • 8/2/2019 Tutorial Pics

    9/65

    BASIC a ASM, antes de crear el HEX. Los ms curiosos pueden utilizar el contenido delfichero ASM para aprender algo sobre la programacin en ese lenguaje.

    En quinto lugar tenemos la carpeta y nombre del fichero LST generado.

    La sexta lnea nos informa de la ubicacin del fichero HEX. Es importante tomar nota de sunombre y ubicacin, ya que es el que deberemos abrir desde WinPIC800 para enviarlo alPIC. La carpeta en que esta este fichero es la misma en la que estaba guardado el fichero.BAS que escribimos en primer lugar.

    Ya estamos listos para el segundo paso: utilizar WinPIC800 para enviar el programa almicrocontrolador. Vamos a asumir que tanto este programa como el driver delGTP-USB+(o el programador que vayamos a utilizar) estn correctamente instalados, y que elprogramador esta conectado y listo para funcionar.

    Lo primero es asegurarnos de que el WinPIC800 este correctamente configurado. Para ellodispone en el men principal de la opcin Configuracin. En Hardware nosaseguraremos que el programador elegido sea el nuestro (figura 3). En Software hay una

    serie de solapas y opciones (figura 4) que bsicamente configuran los mensajes querecibiremos (o no) al utilizar el programa. En general, las opciones por defecto funcionarncorrectamente para todos.

    Figura 3: Seleccionamos nuestroprogramador.

    Figura 4: las opciones por defectofuncionarn correctamente para todos.

    http://www.mstools.com.ar/http://www.mstools.com.ar/http://www.mstools.com.ar/http://www.neoteo.com/images/Cache/1335x900y900.jpghttp://www.neoteo.com/images/Cache/1334x900y900.jpghttp://www.neoteo.com/images/Cache/1335x900y900.jpghttp://www.neoteo.com/images/Cache/1334x900y900.jpghttp://www.mstools.com.ar/
  • 8/2/2019 Tutorial Pics

    10/65

    La figura 5 ilustra el paso siguiente: desde las listas que estn a la derecha de la ventanaprincipal del WinPIC800 seleccionamos la familia y modelo del microcontrolador quevamos a utilizar. Este debe coincidir con el que seleccionamos en el PIC SIMULATOR

    IDE, ya que el programa que se gener est especialmente concebido para ese modelo enparticular. Como familia seleccionamos PIC 16F y como modelo 16F628A.

    Una vez que hemos hecho esto, WinPIC800 sabe como deber enviar los datos al

    programador. Otro punto a tener en cuenta en esta etapa del proceso es la posicin que debeocupar el PIC en el zcalo ZIF del programador. Si tenemos dudas, podemos utilizar laayuda incorporada en el programa, mediante la opcin marcada con un crculo rojo en lafigura 6. Luego, debemos ir al men Archivo --> Abrir y cargar el fichero HEX quegeneramos con el PIC SIMULATOR IDE.

    El led bicolor del GTP-USB+ estar en verde si todo esta correctamente instalado, por loque podemos proceder a enviar el fichero. Para ello, presionamos el icono Grabar Todoque se ve en la figura 7, y en un par de segundos tenemos nuestro PIC grabado. El mensajeque veremos ser el de la figura 8.

    Figura 5: seleccionamos la familia y modelo delmicrocontrolador.

    http://www.neoteo.com/images/Cache/1337x900y900.jpghttp://www.neoteo.com/images/Cache/1336x900y900.jpghttp://www.neoteo.com/images/Cache/1337x900y900.jpghttp://www.neoteo.com/images/Cache/1336x900y900.jpg
  • 8/2/2019 Tutorial Pics

    11/65

    Figura 6: Posicin del PIC en el zcaloZIF.

    Figura 7: el icono Grabar Todo.

    Figura 8: ya tenemos nuestro PICgrabado.

    Para probar que todo funciona, tenemos que armar el circuito y alimentarlo con 5V decorriente continua. Veremos (si todo esta bien) el LED encendiendo y apagando cadamedio segundo. Esto es as por que la corriente que circula por el proviene del pin 9 delPIC (a travs de la resistencia de 220 ohms), y cada vez que el pin se pone en estado bajodeja de circular por el, apagndolo.

    Seguramente la parte mas compleja y que mas tiempo nos ha llevado en esta practica es lade armar el circuito. El programa se escribe fcilmente, y si hay errores, se puede corregirsin complicaciones. La etapa de generacin del fichero HEX y la grabacin del mismo en elmicrocontrolador tambin es muy simple. Seria muy bueno podernos evitar el trabajo detener que armar un circuito fsico diferente cada vez que realizamos una prctica, ya que a

    http://www.neoteo.com/images/Cache/133Ax900y900.jpghttp://www.neoteo.com/images/Cache/1339x900y900.jpghttp://www.neoteo.com/images/Cache/1338x900y900.jpghttp://www.neoteo.com/images/Cache/133Ax900y900.jpghttp://www.neoteo.com/images/Cache/1339x900y900.jpghttp://www.neoteo.com/images/Cache/1338x900y900.jpghttp://www.neoteo.com/images/Cache/133Ax900y900.jpghttp://www.neoteo.com/images/Cache/1339x900y900.jpghttp://www.neoteo.com/images/Cache/1338x900y900.jpg
  • 8/2/2019 Tutorial Pics

    12/65

    lo largo de este tutorial realizamos muchas.

    La solucin a este problema viene de la mano de las denominadas placas entrenadoras.Estas placas tienen, por lo general, un zcalo para colocar el microcontrolador, y proveenuna serie de perifricos listos para usar, tales como pulsadores, LEDs, pantallas LCD,

    algn buzzer, reles, salidas RS-232, USB y casi todo lo que podamos imaginar. Por logeneral, su precio aumenta junto con sus prestaciones, y su valor comienza en unos 30 o 40euros para las simples, hasta varios cientos por las ms completas. Por supuesto, se trata deuna buena inversin por que nos ahora tiempo y dinero empleado en crear prototipos cadavez.

    Afortunadamente, los lectores de NeoTeo pueden armar su propia placa entrenadora. Dehecho, hemos publicado dos:una para PICs de 18 pines, yotra para los ms grandes, de 40pines. Estas placas son muy bsicas, solo tienen el PIC y 3 o 4 pulsadores y LEDs. Perotienen un par de ventajas importantes: su costo es muy bajo, y son totalmente ampliablesmediante mdulos, por lo que podemos ir construyndolos a medida que los necesitamos, ynos quedan para las prcticas siguientes.

    Las prcticas de los captulos siguientes estarn pensadas como para ser realizadas sobreestas placas entrenadoras, para ahorrar tiempo. Por supuesto, como tambin brindaremos elcircuito elctrico en cada caso, no habr problemas si quieren seguir trabajando como hastaahora.

    A continuacin, y para terminar por hoy, les muestro como modificar el ejemplo de laentrega anterior para que funcione sobre la placa entrenadora de 18 pines. La nica cosaque hay que cambiar es el pin utilizado para conectar el LED. En el ejemplo originalusamos un pin del PORTB, pero en la placa entrenadora (si no tenemos ningn moduloadicional de E/S) solo tenemos LEDs conectados a los pines 4, 5, 6 y 7 del PORTA. Asque el programa debera utilizar alguno de ellos. Supongamos que nos decidimos por usarel pin 7 del PORTA (de ahora en ms, PORTA.7. El programa modificado quedara as:

    AllDigital

    TRISA = %01111111TRISB = %00000000

    loop:PORTA.7 = 1WaitMs 500

    PORTA.7 = 0WaitMs 500Goto loop

    Los cambios efectuados tambin incluyen la lnea 3 (TRISA = %01111111) ya quetenemos que indicar que el PORTA.7 se utilizara como salida. La figura 10 muestra comotenemos que configurar la seccin Options -->Configuration Bits para que elmicrocontrolador funcione correctamente en la placa entrenadora. Lo mas importante es

    http://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1942/Title/PIC_Modules_1_0_%e2%80%93_Nota_3_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspx
  • 8/2/2019 Tutorial Pics

    13/65

    que le estamos indicando que no usaremos cristal para el oscilador, y que esos dos pines(PORTA.6 y PORTA.7) estarn disponibles como entrada/salida.

    La figura 11 muestra el trainer funcionado, con el LED rojo que indica que esta alimentado,y el verde encendido. El crculo rojo indica la posicin que tiene que tener el jumper en

    PORTA.7 para que se comporte como salida. Si tienen alguna duda sobre el entrenador,pueden releer el artculo correspondiente. En el video se ve claramente como destella elLED.

    ENTREGA 3

    Como aprendimos, los pines de los puestos del PIC pueden emplearse como salidas (comoen el ejemplo del LED) o como entradas. Cuando mediante la instruccin TRIS indicamosal microcontrolador que un pin determinado se comportara como entrada, este colocara enel bit correspondiente de la direccin del puerto en cuestin un 1 si el pin esta en estado

    alto (por ejemplo, conectado a +5V) o un 0 si se encuentra en estado bajo (conectado a

    masa o 0V).

    Sabemos PIC BASIC tiene variables definidas para cada puerto (PORTA, PORTB, etc.)por lo que es muy simple poder interpretar el estado de las entradas.

    Antes de ver como emplear un pulsador como entrada, vamos en profundidad como seemplean las variables, tema que resulta indispensable para poder escribir (e interpretar)programas que funcionen.

    La programacin seria prcticamente imposible sin el uso de variables, ya que solopodramos escribir programas rgidos, que no modificaran su comportamiento. Pero Qu

    es una variable?

    Es sencillo: podemos imaginar las variables como cajas en la que podemos guardar algo.

    Supongamos que disponemos de muchas de esas cajas, que en su frente tienen pegada unaetiqueta con su nombre. Estas cajas tienen ciertas particularidades, losque hace que solo sepuedan guardar en ellas determinados tipos de objetos.

    En esta analoga, cada caja es una variable, su contenido es el valor que adopta, y laetiqueta es el nombre de la variable. Como su nombre nos deja adivinar, el contenido deuna variable puede ser modificado a lo largo del programa.

    En BASIC tenemos distintos tipos de variable, dedicadas a guardar distintos tipos de datos:

    - Bit (un bit de longitud, almacena 0 o 1 nicamente)- Byte (un byte de longitud, almacena nmeros enteros entre 0 y 255)- Word (dos bytes de longitud, almacena nmeros enteros entre 0 y 65,535)- Long (cuatro dos bytes de longitud, almacena nmeros enteros entre 0 y 4,294,967,295)

    (El tipo "Long" solo esta disponible mediante un modulo opcional al PIC SIMULATOR

  • 8/2/2019 Tutorial Pics

    14/65

    IDE).

    A diferencia de otros BASIC, la declaracin de variables puede ser hecha en cualquier partedel programa, y todas son consideradas globales, es decir, su valor es accesible desde todaslas subrutinas y zonas del programa. Algunos puristas pueden considerar esto como una

    falencia del lenguaje, pero en general se puede sacar bastante provecho de esta situacin,como veremos a lo largo de esta serie de tutoriales.

    El numero de variables esta lgicamente limitado al monto de memoria RAM disponible encada microcontrolador. Las variables deben ser declaras utilizando la instruccin DIM,como se muestra en los siguientes ejemplos:

    DIM A AS BITDIM TEMPERATURA AS BYTEDIM TIEMPO AS WORDDIM AUX AS LONG

    Tambin es posible utilizar vectores, que son una matriz de dimensiones 1xN. Por ejemplo,la sentencia siguiente:

    DIM DIAS(7) AS BYTE

    declara un vector (al que nos referiremos algunas veces como "array") de siete elementosdel tipo BYTE, que sern accedidos mediante el uso de subndice (entre parntesis) del 0 al6.

    LA sentencia RESERVE le permite al programador reservar un nmero de posiciones de laRAM para su uso en rutinas en assembler o para el In-Circuit Debugger de MPLAB.Simplemente, si queremos reservar 20 bytes de RAM, escribimos:

    RESERVE 20

    Las variables tipo Word, como vimos, estn compuestas por dos bytes. El primero de elloses llamado byte "alto" y el otro "bajo", dado que el primero contiene los 8 bits massignificativos. En BASIC podemos acceder individualmente a cada uno de los bytes quecomponen un Word mediante las extensiones ".HB" (High byte, o byte alto) y ".LB" (LowByte o byte bajo). Veamos un ejemplo:

    DIM A AS BYTEDIM B AS WORDA = B.HBA = B.LB 'Esto es lo mismo que A = BB.HB = AB.LB = AB = A 'Esto tambin borra el byte alto de la variable B

    Los bits individuales de cada variable pueden ser accedidos uno a uno tambin,

  • 8/2/2019 Tutorial Pics

    15/65

    simplemente poniendo como extensin ".n" donde "n" es el numero de bit (1,2, 3, etc.)

    DIM A AS BYTEDIM B AS BITB = A.1

    B = A.7A.0 = A.5Todos los registros del microcontrolador esta disponibles para usar en los programasBASIC, como si se tratase de variables del tipo BYTE con el nombre del registro utilizadoen las datasheet (PORTA, PORTB, TRISA, etc.). Por supuesto, se puede acceder a bitsindividuales de los registros con la tcnica vista prrafos atrs. Algunos ejemplos:

    TRISA.1 = 0TRISB = 0PORTA.1 = 1PORTB = 255STATUS.RP0 = 1INTCON.INTF = 0

    Existe una "forma corta" de acceder a los bits individuales de cada port, simplementeusando las variables BASIC tipo byte RA, RB, RC, RD, RE o bien las tipo bit RA0, RA1,RA2,..., RE6, RE7

    RA = 0xFFRB0 = 1

    En BASIC tambin podemos usar punteros. En realidad, cualquier variable definida comotipo BYTE o WORD pude ser usada como un putero de memoria, usndola comoargumento de la funcin POINTER. El valor contenido por la variable debe tener un valorcomprendido entre 0 y 511. a continuacin, algunos ejemplos:

    DIM X AS WORDDIM Y AS BYTEX = 0x3FY = POINTER(X)Y = Y + 0x55X = X - 1POINTER(X) = YY = 0xAAX = X - 1POINTER(X) = Y

    Una forma de escribir programas que nos resulten ms fciles de entender es el uso denombres simblicos, o SYMBOL. Un "symbol" es una cadena que contiene cdigo,asignado a un nombre. Al momento de compilar, PIC BASIC hace la "bsqueda yreemplazo" de nuestros smbolos y luego genera el cdigo ASM y el HEX. Supongamosque tenemos un LED conectado al bit cero del puerto B. Mediante SYMBOL podemos

  • 8/2/2019 Tutorial Pics

    16/65

    hacer:

    SYMBOL LED1 = PORTB.0SYMBOL ENCENDIDO = 1

    Luego, si queremos encender el LED, en lugar de

    PORTB.0 = 1

    podemos hacer

    LED1 = ENCENDIDO

    que es mucho mas claro y fcil de leer.Las constantes (valores que usamos en nuestro programa, y que, por ejemplo, asignamos alas variables) pueden ser escritas en decimal (directamente el valor), en hexadecimal(anteponiendo "0x" o posponiendo "H" al valor) o en binario (anteponiendo "%" al valor).Por ejemplo:

    DIM A AS BITDIM B AS BYTEA = TRUEB = 0x55B = %01010101

    Por supuesto, se pueden asignar nombres a las constantes, usando la instruccinCONST:

    DIM A AS WORDCONST PI = 314A = PI

    Hay tres instrucciones para el manejo individual de bits, que si bien no hacen nada que nose puede resolver con otras instrucciones o smbolos, ayudan mucho en la lectura delcdigo. Se tratan de HIGH, LOW y TOGGLE, que ponen el bit en alto, bajo o lo invierten,respectivamente.Importante: Si el bit implicado como argumento de una de estas instrucciones es un bit deun PORT, el mismo bit en el TRIS correspondiente es puesto en cero, y dicho pin quedaconfigurado como salida. Algunos ejemplos:

    HIGH PORTB.0LOW ADCON0.ADONTOGGLE OPTION_REG.INTEDG

  • 8/2/2019 Tutorial Pics

    17/65

    Seguimos

    utilizando el PIC TRAINER para las practicas.

    Con todo lo visto en mente, vamos a ver como hacer para leer el estado de un pulsador.

    Deberemos ver primero como conectarlo al PIC. En el esquema (figura 1) que hay masabajo puede verse como conectarlo. Veamos como funciona elctricamente: Cuando elpulsador esta abierto, el pin del PIC esta puesto a tierra (masa, o 0V) a travs de laresistencia de 10K (figura 2) que llamamos R1, por lo que el bit correspondiente a ese pin(por ejemplo, PORTA.7) se pondr en 0.

    Cuando presionamos el pulsador, la corriente circular como se ve en la figura 3, pasandopor el pulsador y entrando al PIC por el pin en cuestin. El bit correspondiente se pondr en1. Antes que me olvide, una parte de la corriente casi despreciable ira tambin a masa a

    travs de R1, pero a fines prcticos no lo tenemos en cuenta. La funcin de esa resistenciaes que no se produzca un cortocircuito entre +V y masa cuando presionamos el pulsador.

    Hay un tema a tener muy en cuenta, y lo haremos en la quinta o sexta entrega, que es eldenominado rebote que se produce en los contactos del pulsador. Por ahoradespreciaremos ese efecto.

    http://www.neoteo.com/images/Cache/13B6x900y900.jpghttp://www.neoteo.com/images/Cache/13B5x900y900.jpghttp://www.neoteo.com/images/Cache/13B6x900y900.jpghttp://www.neoteo.com/images/Cache/13B5x900y900.jpg
  • 8/2/2019 Tutorial Pics

    18/65

    Figura 1

    Figura 2

    Figura 3

    Cmo debera ser el programa que pueda leer el estado del pulsador conectado al bit 7

    del PORTA? As:

    http://www.neoteo.com/images/Cache/13BAx900y900.jpghttp://www.neoteo.com/images/Cache/13B9x900y900.jpghttp://www.neoteo.com/images/Cache/13B8x900y900.jpghttp://www.neoteo.com/images/Cache/13B7x900y900.jpghttp://www.neoteo.com/images/Cache/13BAx900y900.jpghttp://www.neoteo.com/images/Cache/13B9x900y900.jpghttp://www.neoteo.com/images/Cache/13B8x900y900.jpghttp://www.neoteo.com/images/Cache/13B7x900y900.jpghttp://www.neoteo.com/images/Cache/13BAx900y900.jpghttp://www.neoteo.com/images/Cache/13B9x900y900.jpghttp://www.neoteo.com/images/Cache/13B8x900y900.jpghttp://www.neoteo.com/images/Cache/13B7x900y900.jpghttp://www.neoteo.com/images/Cache/13BAx900y900.jpghttp://www.neoteo.com/images/Cache/13B9x900y900.jpghttp://www.neoteo.com/images/Cache/13B8x900y900.jpghttp://www.neoteo.com/images/Cache/13B7x900y900.jpg
  • 8/2/2019 Tutorial Pics

    19/65

    AllDigital

    TRISA.7 = 1 'Defino PORTA.7 como ENTRADATRISA.6 = 0 'Defino PORTA.6 como SALIDA

    Symbol pulsador = PORTA.7Symbol led = PORTA.6

    loop:led = pulsadorGoto loop

    Analicemos el programa: ALLDIGITAL indica al compilador que se deben emplear todoslos pines del PORTA como E/S. Las dos lneas siguientes usan la funcin TRIS para definirel pin 7 del PORTA como ENTRADA (poniendo ese bit en 1) y el pin 6 del mismo

    puerto como SALIDA.

    Las lneas SYMBOL declaran dos nombres simblicos para que el programa quede masclaro. Es obvio que esto tiene ms utilidad en programas extensos, pero es bueno iracostumbrarnos a usarlo siempre.

    El resto del programa conforma un bucle que se repite eternamente, ejecutando la nicalnea existente entre LOOP: y GOTO LOOP. En ella se asigna al pin cuyo nombresimblico es LED (PORTA.6) el valor que tome el pin de entrada llamado PULSADOR(PORTB.6). Esto har que el LED copie el estado del pulsador. Si utilizamos el

    entrenador de 18 pinesque ya explicamos como construir, veremos que cada vez quepulsamos el pulsador, el LED se enciende hasta que lo soltamos. No se trata de unaaplicacin demasiado til, pero es suficiente para ilustrar el funcionamiento de las entradas.

    La prxima semana usaremos un modulo conectado al entrenador que contiene 8 LEDS y 8pulsadores para poder crear programas mas complejos. Hasta entonces.

    http://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1894/Title/PIC_Modules_1_0_%e2%80%93_Primera_parte_/Default.aspx
  • 8/2/2019 Tutorial Pics

    20/65

    ENTREGA 4

    Sabemos que un programa es, bsicamente, una lista de instrucciones que elmicrocontrolador debe ejecutar en orden para realizar una tarea determinada. De algunamanera, se asemeja a una receta de cocina (programa) que el cocinero (microcontrolador)

    debe ir ejecutando. Con mucha frecuencia el cocinero debe tomar decisiones en funcin dediversos parmetros, y realizar una cosa u otra.

    Esto tambin ocurre en el mundo de los microcontroladores. En cualquier programamedianamente complejo que realicemos, seguramente en algn punto debamos tomaralguna decisin basndonos en el estado de una entrada o en el valor de una variable. Porsupuesto, PIC BASIC incorpora instrucciones que nos permiten este tipo decomportamiento, siendo la mas sencilla y frecuentemente utilizada la sentencia IF - THEN -ELSE - ENDIF.

    Resulta muy sencillo entender su funcionamiento si traducimos su significado al espaol.

    IF - THEN - ELSEENDIF significa algo as como SI ocurre tal cosa ENTONCESrealizo esta tarea SINO hago esta otra FIN SI.

    Existen varias formas de utilizar esta instruccin en PIC BASIC. Veremos los tres casosposibles, comenzando por el ms sencillo.

    El caso ms simple es el siguiente:

    http://www.neoteo.com/images/Cache/13BBx900y900.jpg
  • 8/2/2019 Tutorial Pics

    21/65

    IF condicin THEN instruccin

    Como vimos, "IF" significa "SI....", y "THEN" significa "LUEGO" o "ENTONCES". Porlo tanto, el caso anterior puede leerse como "SI se cumple la condicin, entonces ejecuto lainstruccin"

    La "condicin" es una expresin lgica que puede ser verdadera o falsa. En caso de serverdadera, la instruccin a continuacin del THEN ser ejecutada. En caso de la condicinsea falsa, el programa seguir su ejecucin con la instruccin siguiente al "IF - THEN".

    Seguramente un ejemplo servir para que lo comprendamos mejor. Supongamos elsiguiente programa:

    ALLDIGITAL 'Todos los pines como E/S.

    TRISA = %11111111 'Todo el PORTA como entradasDIM AUX AS BYTE 'Declaro la variable "AUX" como BYTEDIM TOTAL AS BYTE 'Declaro la variable "TOTAL" como BYTE

    TOTAL = 100 'Le asigno el valor 100 a la variable "TOTAL"AUX = 5 'Le asigno el valor 5 a la variable "AUX"

    IF PORTA.4 = 1 THEN AUX = 4

    TOTAL = TOTAL + AUX 'Sumo a "TOTAL" el valor de "AUX"

    Cundo comienza el programa, se declaran dos variables tipo BYTE (que como vimos antes,pueden almacenar valores entre 0 y 255). A una de ellas, TOTAL, se le asigna el valor

    "100" y a la restante, AUX el valor "5". Hasta aqu, no hay nada que no hayamos vistoantes.

    La lnea siguiente realiza la siguiente tarea: evala si la condicin PORTA.4 = 1 es cierta.En caso de que efectivamente el valor presente en el bit 4 del PORTA sea "1" (ese pin delmicrocontrolador estar en estado alto), se ejecuta la instruccin a continuacin del THEN,por lo que la variable "AUX" toma el valor "4", y se pasa a la instruccin de abajo. SiPORTA es igual a "0", se pasa a la instruccin siguiente sin ms.

    El valor final de la variable "TOTAL" depende entonces de cual sea el estado de PORTA.4al momento de hacer la evaluacin. Si es igual a "1", "TOTAL" tendr un valor de 104 (100

    + 4). Si PORTA.4 = 0, "TOTAL" tendr un valor de 105 (10 +5).

    Veamos algunos ejemplos validos de este caso:

    IF PULSADOR = 1 THEN PORTA.0 = 1IF B > A THEN LED=ONIF B = 5 THEN A = 0IF (A = 0) OR (B = 5) THEN C = 2

  • 8/2/2019 Tutorial Pics

    22/65

    IF PORTA.0 THEN PORTB.3 = 0

    En el ultimo ejemplo la condicin PORTA.0 equivale a PORTA.0 = 1.

    Segundo caso: muchas veces, luego de evaluar la condicin necesitamos ejecutar ms de

    una instruccin. En los ejemplos vistos en el caso anterior siempre se ejecutaba una solainstruccin cuando la condicin era cierta. La manera de ejecutar mltiples sentenciasdentro de una estructura IF-THEN implica emplear el ENDIF, con lo que la sintaxis de lainstruccin queda como sigue:

    IF condicin THENinstruccin 1instruccin 2...instruccin n

    ENDIF

    En realidad, no vara prcticamente nada respecto del primer caso. Solo debemos saber queen esta ocacin se van a ejecutar todas las instrucciones del bloque que se encuentren entreel THEN y el ENDIF cada vez que condicin sea verdadera.

    Veamos un ejemplo. Supongamos el siguiente programa:

    DIM A AS BYTE 'Declaro la variable "A" como BYTEDIM B AS BYTE 'Declaro la variable "B" como BYTEDIM C AS BYTE 'Declaro la variable "C" como BYTEDIM D AS BYTE 'Declaro la variable "D" como BYTEDIM TOTAL AS BYTE 'Declaro la variable "TOTAL" como BYTE

    TOTAL = 0 'Le asigno el valor 0 a la variable "TOTAL"A = 2 'Le asigno el valor 2 a la variable "A"B = 5 'Le asigno el valor 5 a la variable "B"C = 1 'Le asigno el valor 1 a la variable "C"D = 0 'Le asigno el valor 0 a la variable "D"

    IF A = 2 THENA = B + (C * D)TOTAL = A * B

    ENDIF

    El ejemplo anterior, la condicin A = 2 es verdadera, ya ese es el valor que le asignamos

    a "A" al comienzo del programa. Esto significa que las dos instrucciones dentro del bloqueTHEN-ENDIF se ejecutaran. Esto hace que TOTAL tome el valor de 10 (chicos, hagan lascuentitas!). Si "A" hubiese tenido otro valor, esas dos sentencias no se ejecutaran yTOTAL seguira valiendo "0" al terminar el programa. Fcil, verdad?

  • 8/2/2019 Tutorial Pics

    23/65

    Este tutorial te permitira crear

    controladoras como esta.

    Ahora, analicemos el ltimo caso posible. A veces, de acuerdo al resultado de la condicin,necesitamos ejecutar un grupo u otro de instrucciones. Para eso, utilizamos la clusulaELSE, que todava no habamos empleado. La sintaxis en este caso queda como sigue:

    IF condicin THENinstruccinv 1instruccinv 2...instruccinv n

    ELSEinstruccinf 1instruccinf 2...instruccinf n

    ENDIF

    Es decir, si la condicin es verdadera, se ejecutan las sentencias entre THEN y ELSE. Y sila condicin es falsa, las que estn entre ELSE y ENDIF. "ELSE" puede ser traducidocomo "en otro caso" o "si no...".

    Veamos un ejemplo de esta situacin. Supongamos el siguiente programa:

    ALLDIGITAL 'Todos los pines como E/S.

    TRISA = %11111111 'Todo el PORTA como entradasDIM AUX AS BYTE 'Declaro la variable "AUX" como BYTEDIM TOTAL AS BYTE 'Declaro la variable "TOTAL" como BYTE

    TOTAL = 10 'Le asigno el valor 10 a la variable "TOTAL"AUX = 2 'Le asigno el valor 2 a la variable "AUX"

    http://www.neoteo.com/images/Cache/143Cx900y900.jpghttp://www.neoteo.com/images/Cache/143Bx900y900.jpghttp://www.neoteo.com/images/Cache/143Cx900y900.jpghttp://www.neoteo.com/images/Cache/143Bx900y900.jpg
  • 8/2/2019 Tutorial Pics

    24/65

    IF PORTA.4 = 1 THEN

    AUX = 4TOTAL = TOTAL + 5

    ELSEAUX = 0TOTAL = TOTAL + 15

    ENDIF

    El ejemplo anterior, la condicin PORTA.4 = 1 determina que bloque de instrucciones seejecutan. Si es verdadera, AUX = 4 y TOTAL = TOTAL + 5 son usadas. Caso contrario seejecutan AUX = 0 y TOTAL = TOTAL + 15. Luego, independientemente de cual haya sidoel caso, el programa sigue con la sentencia que se encuentre a continuacin del ENDIF.

    Por ultimo, tenemos que saber que es posible "anidar" instrucciones IF-THEN-ELSE-ENDIF, con lo que se pueden tomar decisiones verdaderamente complejas, con forma derbol, donde cada condicin representa una rama diferente. Por supuesto, tenemos que

    ser cautos en el uso de esta caracterstica ya que debido a limitaciones en el tamao de lapila y cantidad de memoria disponible del PIC podemos ocasionar un desborde y elprograma colapsara. Este seria un ejemplo de un anidamiento:

    IF PORTB.1 = 1 THENIF A = 2 THEN

    A = B + (C * D)TOTAL = A * B

    ELSEA = 0

    ENDIF

    ELSEA = 19

    ENDIF

    Las sentencias en color rojo corresponden a una estructura IF-THEN-ELSE-ENDIF y lasque estn en azul a la otra, que se encuentra dentro ("anidada" en) de la primera.

    IF ENDIF no es la nica instruccin de toma de decisiones que veremos. Antes determinar esta cuarta entrega, aprenderemos a utilizar la potente funcin LOOKUP. Lafuncin LOOKUP puede ser utilizada para seleccionar un dato tipo Byte desde una lista

    de constantes del mismo tipo, en funcin del valor de un ndice (que tambin debe ser de

    tipo Byte). El resultado de la seleccin se almacena (como no!) tambin en una variabletipo byte.

    La forma de la funcin LOOKUP es realmente sencilla:

    variable = LOOKUP(byte0, byte1, ..., byteN), indice

    Cuando se ejecuta, variable tendr el valor correspondiente al elemento que se encuentre

  • 8/2/2019 Tutorial Pics

    25/65

    en la posicin ndice de la lista de valores que esta entre los parntesis. Es importante

    recordar (lo vamos a repetir varias veces) que el primer elemento de la lista corresponde alvalor 0 de ndice.

    Veamos un ejemplo sencillo:

    DIM indice AS BYTEDIM variable AS BYTEindice = 3variable = LOOKUP(25, 35, 55, 70, 85, 100), indice...

    variable tendr el valor "70" (decimal) al ejecutar este cdigo. El primer elemento de lalista, recordemos, corresponde al valor "0" de indice. Si bien la lista puede contener unmximo de 255 elementos, que es el mximo direccionable por una variable indice de tipobyte, hay que asegurarse que el microcontrolador que estamos empleando tenga memoriasuficiente para albergarla.

    El segundo ejemplo (extrado de la propia ayuda del PIC SIMULATOR IDE), nos muestracomo manejar un display LED de siete segmentos conectado al puerto B:

    Dim digito As ByteDim mascara As Byte'Comienzo el bucle principalloop:TRISB = %00000000digito = 7

    mascara = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,0x07, 0x7f, 0x6f), digitoPORTB = mascaraWaitMs 1000 'Espero un segundoGoto loop

    Lo que hace concretamente ese trozo de cdigo es buscar dentro de la lista cual es el valorbinario que corresponde asignar al PORTB para que los segmentos adecuados enciendan enel display, mostrando el valor que contiene la variable digito.

    Si algunas o todas las constantes de la lista son valores ASCII, se puede hacer mas corta y

    legible la misma utilizando como parte de ella una cadena de caracteres, como se ve acontinuacin.

    MASK = LOOKUP("ABCDEFGHIJK"), INDEX

    "A" seria el valor que tendra MASK cuando INDEX vale "0", y "K" cuando INDEX tengael valor "10".

  • 8/2/2019 Tutorial Pics

    26/65

    Por ultimo, en caso de que el valor de INDEX sea mayor a la cantidad de argumentos de lalista, el valor de la variable (en este ejemplo MASK) no cambia.

    Con esto terminamos la cuarta entrega del tutorial. En la siguiente, veremos como construirun proyecto que emplee todo lo visto hasta aqu. Hasta la prxima semana!

    ENTREGA 5

    Utilizaremos como base laPIC TRAINER de 40 pinesy elmodulo de 8 Entradas/Salidaspara hacer una serie de programas que empleen las instrucciones y conceptos que hemosvisto hasta aqu. Si no haz construido estas dos placas, seria una buena idea de te pongas enello, ya que a lo largo del tutorial las utilizaremos con frecuencia.

    Si no, siempre tienes la alternativa de utilizar un protoboard o crear una placa de circuitoimpreso cada vez, aunque seguramente perders mucho tiempo en ello.

    Elmodulo de 8 E/S nos proporciona 8 LEDs para jugar con ellos, as que vamos aaprovecharlos.

    Ejercicio 1: 8 LEDs destellando.En nuestraprimer y segunda entregavimos como se hacia para encender y/o apagar una de

    http://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/images/Cache/143Dx900y900.jpghttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspx
  • 8/2/2019 Tutorial Pics

    27/65

  • 8/2/2019 Tutorial Pics

    28/65

    Si escribimos PORTC = %00000000 estamos poniendo en 0 (apagando) las 8 salidas en

    una sola instruccin. Y si escribimos PORTC = %11111111 las encendemos a todas. Cadauno de los 0o 1 de esas instrucciones corresponde a cada una de las salidas. El de ms ala izquierda corresponde al bit 7, el siguiente al 6, y as sucesivamente hasta llagar al de la

    derecha que corresponder al bit 0. Nuestro programa modificado quedara as:

    AllDigital

    TRISC = %00000000 Todos los pines como salidas

    loop:Enciendo los 8 LEDsPORTC = %11111111WaitMs 500 Espero medio Segundo (500 ms)

    Apago los 8 LEDsPORTC = %00000000WaitMs 500Espero medio Segundo (500 ms)

    Goto loop

    Como puede verse, el programa es mucho mas compacto que el anterior.

    Ejercicio 2: LEDs saltarines.Nada impide modificar el programa del ejercicio 1 para hacer que las salidas se activen enun orden diferente. Supongamos por un momento que queremos encender los LEDs 0,1,4 y5 primero, y luego apagarlos a la vez que encendemos los restantes, y repetir estoindefinidamente.

    El programa es prcticamente igual al ya visto, solo varan las instrucciones que le dicen alPIC que salidas deben encenderse y apagarse en cada momento:

    AllDigital

    TRISC = %00000000 Todos los pines como salidas

    loop:Enciendo 4 LEDsPORTC = %11001100WaitMs 500 Espero medio Segundo (500 ms)

    Apago los anteriores y enciendo los otros 4

    http://www.neoteo.com/images/Cache/14A2x900y900.jpghttp://www.neoteo.com/images/Cache/14A1x900y900.jpghttp://www.neoteo.com/images/Cache/14A2x900y900.jpghttp://www.neoteo.com/images/Cache/14A1x900y900.jpg
  • 8/2/2019 Tutorial Pics

    29/65

    PORTC = %00110011WaitMs 500Espero medio Segundo (500 ms)

    Goto loop

    Sencillo, verdad?

    Ejercicio 3: El LED viajeroTodos hemos visto esos juegos de luces donde la secuencia de encendido y apagado da lasensacin de que un punto luminoso se mueve de un lado a otro. Con lo visto hasta aqu,estamos en condiciones de hacerlo. Solo tenemos que escribir un programa que enciendaprimero el primer LED, luego el segundo, el tercero, etc., a medida que se apaga el anterior.Eso justamente es lo que hace el siguiente programa:

    AllDigital

    TRISC = %00000000 Todos los pines como salidas

    loop:

    PORTC = %10000000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %01000000

    WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00100000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00010000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00001000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000100WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000010WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000001WaitMs 500 Espero medio Segundo (500 ms)

  • 8/2/2019 Tutorial Pics

    30/65

    Goto loop

    El video siguiente ilustra el funcionamiento del programa.

    Ejercicio 4: El Coche FantsticoSi hay algo que a todo el mundo le llama la atencin, es el efecto de luces que tenia a bordoel Auto Fantstico. En realidad, construir un circuito que haga esa tarea es muy simple.De hecho, unas pocas modificaciones a nuestro programa del ejercicio 3 bastaran parahacerlo: solo hay que agregar las instrucciones necesarias para que el punto de luz regrese yluego se repita indefinidamente. Eso es lo que hace el programa siguiente:

    AllDigital

    TRISC = %00000000 Todos los pines como salidas

    loop:

    PORTC = %10000000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %01000000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00100000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00010000

    WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00001000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000100WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000010WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000001WaitMs 500 Espero medio Segundo (500 ms)

    Aqu comienza la secuencia de regresoPORTC = %00000010WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00000100

    http://www.neoteo.com/tabid/54/ID/3097/Title/Baliza_luminosa_tipo_%e2%80%9cel_coche_fantastico%e2%80%9d/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3097/Title/Baliza_luminosa_tipo_%e2%80%9cel_coche_fantastico%e2%80%9d/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3097/Title/Baliza_luminosa_tipo_%e2%80%9cel_coche_fantastico%e2%80%9d/Default.aspx
  • 8/2/2019 Tutorial Pics

    31/65

    WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00001000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00010000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %00100000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %01000000WaitMs 500 Espero medio Segundo (500 ms)

    PORTC = %10000000WaitMs 500 Espero medio Segundo (500 ms)

    Goto loop

    Si queremos que el efecto sea ms rpido, vasta con reducir los tiempos de demora de500ms a, por ejemplo, 250ms. Incluso puede ser interesante poner tiempos distintos entrecada led y el siguiente, para que se produzca un ejemplo de aceleracin o frenado en la

    velocidad del punto luminoso.

    Si vemos el listado de arriba, notaremos que es bastante extenso para la sencilla tarea quelleva a cabo. Seguramente estars pensando en que debe existir una manera ms eficientede hacer lo mismo. Y de hecho, la hay.

    SHIFTLEFT y SHIFTRIGHTEstas dos son funciones que operan a nivel bit que pueden ser utilizadas para "correr" elcontenido de variable a la izquierda o a la derecha. Cada uno de los bits que componen lavariable se desplazan una posicin (a la izquierda o a la derecha, de acuerdo a que funcinutilicemos). Esto tiene dos consecuencias. En primer lugar, el bit de ms a la izquierda(SHIFTLEFT) o derecha (SHIFTRIGHT) se pierde. Y el espacio creado en el otro extremose completa con un "0".

    El siguiente programa hace lo mismo que el del ejercicio anterior, pero utilizando estas dospotentes funciones y algunas de las instrucciones vistas en captulos anteriores:

    AllDigital

    TRISC = %00000000 Todos los pines como salidasPORTC = %00000001goleft:WaitMs 500PORTC = ShiftLeft(PORTC, 1)If PORTC = %10000000 Then Goto goright

  • 8/2/2019 Tutorial Pics

    32/65

    Goto goleftgoright:WaitMs 500PORTC = ShiftRight(PORTC, 1)If PORTC = %00000001 Then Goto goleftGoto goright

    Lo que hace el programa es muy sencillo: enciende el primer bit del PORTC y esperadurante medio segundo. Luego, desplaza hacia la izquierda el contenido del byte querepresenta al PORTC en la memoria del microcontrolador, y verifica si esos bits llegaron alextremo. Si es as, se invierte el sentido del desplazamiento. El video siguiente muestracomo se ve esto en el PIC TRAINER.

    Como pueden ver, es mucho lo que se puede hacer con un poco de imaginacin y el puadode instrucciones que hemos visto. A partir de ahora, en cada entrega del tutorial veremos

    instrucciones nuevas y realizaremos diferentes ejercicios con ellas, de manera que sea masfcil recordar que tarea realiza cada una. Siempre que sea posible, intentaremos mostrardiferentes formas de llevar a cabo las mismas acciones. Los esperamos la semana prxima.

    ENTREGA 6

    Seguramente habrn notado que usando una etiqueta y una instruccin GOTO podemoshacer que una parte de nuestro programa se repita. El problema que tiene ese mtodo es queutilizado as, en crudo, solo permite que el bucle en cuestin se repetir un numero infinitode veces.

    Los lectores mas atentos se habrn dado cuenta que si empleamos una variable y lainstruccinIFENDIF, podemos ir contando la cantidad de veces que el bucle se haejecutado, para salirnos de el en el momento deseado.

    Vamos a verlo en detalle. Supongamos que necesitamos un bucle que se repita 20 veces.Podemos definir una variable auxiliar, de tipo BYTE (que permite valores de hasta 255)asignarle el valor 0, y en cada iteracin del bucle sumarle 1. Cuando el valor de la variablesea igual a 20, sabremos que las instrucciones dentro del bucle se han ejecutado ese nmerode veces. El programa podra quedar ms o menos as:

    DIM AUX AS BYTE 'Declaro la variable "AUX" como BYTEAUX = 0 'Asigno "0" a la variable "AUX".

    bucle: 'Aqu comienza el bucle que debe repetirse 20 vecesinstruccion1instruccion2...

    http://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspx
  • 8/2/2019 Tutorial Pics

    33/65

    instruccionnAUX = AUX + 1 'Sumo 1 al valor de "AUX"IF AUX = 20 THEN 'si "AUX" es igual a 20GOTO fuera 'Salto a la etiqueta fuera.

    ENDIFGOTO bucle 'fin del bucle.

    fuera: 'aqu comienza el resto del programaEND

    Este mtodo funciona perfectamente, y puede modificarse para cualquier nmero deiteraciones, recordando que la variable AUX deber ser de tipo WORD si el nmero esmayor a 255. Si necesitramos iterar ms de 65535 veces, deberemos utilizar ms de unavariable.

    Pero afortunadamente BASIC tiene instrucciones mas especificas, elegantes y potentes pararesolver este tipo de situaciones.

    Un bucle actualiza las temperaturas de este display.

    FOR - TO - STEP - NEXTEsta es quizs una de las instrucciones que esta disponible en todos los dialectos BASIC,desde la poca de las home computers. El BASIC del PIC SIMULATOR IDE tambin lasoporta, y seguramente la emplearemos en casi todos nuestros programas.

    Esta estructura, al igual que el caso anterior, necesita de una variable tipo Byte o Word parafuncionar. En cada iteracin del bucle, la variable va cambiando su valor. Cuando el valorde la variable alcanza o supera el valor prefijado, el bucle termina. La forma del bucle es lasiguiente:

    FOR variable = valor_inicial TO valor_final STEP pasoinstruccion1instruccion2...instruccionn

    NEXT variable

    La cuenta comienza asignando a variable el valor_inicial, y termina cuando variablealcanza el valor valor_final. Cada iteracin del bucle el valor de la variable se

    http://www.neoteo.com/images/Cache/1522x900y900.jpghttp://www.neoteo.com/images/Cache/1521x900y900.jpghttp://www.neoteo.com/images/Cache/1522x900y900.jpghttp://www.neoteo.com/images/Cache/1521x900y900.jpg
  • 8/2/2019 Tutorial Pics

    34/65

    incrementa el valor fijado por paso.

    Veamos un ejemplo concreto. Supongamos que queremos sumar los nmeros del 1 al 100.El programa quedara como sigue:

    DIM A AS BYTE 'Declaro la variable "A" como BYTEDIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORDTOTAL = 0 'Asigno "0" a la variable "TOTAL".

    FOR A = 1 TO 100 STEP 1 '"A" va de 1 a 100 de 1 en 1TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".

    NEXT A 'fin del bucle.

    Hemos declarado la variable A como BYTE, ya que su valor va a mantenerse en el rango0...255. Para TOTAL utilizamos una variable tipo WORD, ya que la suma va a superar elvalor mximo de un BYTE. (Recordemos que WORD permite valores en el rango0...65535)

    El bucle se ejecuta 100 veces, la primera de ellas A vale 1, la segunda 2, la tercera 3, hastala ltima en la que vale 100. Ese incremento (1 por vez) esta dado por el valor acontinuacin del STEP. En los casos como este en que STEP vale 1, puede omitirse, comoveremos en ejemplos posteriores.

    TOTAL comienza valiendo 0 (se le asigna ese valor fuera del bucle) y en cada iteracin sele suma el valor que tenga A en ese momento. De esa manera, TOTAL va tomando losvalores 1, 3, 6, 10, .... 5050.

    Tanto valor_inicial como valor_final y paso tambin pueden ser variables, lo que permiteque un determinado bucle FORNEXT sea utilizado dentro de una subrutina (comoveremos ms adelante) con diferentes valores cada vez.

    El siguiente trozo de cdigo hace lo mismo que el anterior, pero emplea variables en lugarde valores fijos:

    DIM A AS BYTE 'Declaro la variable "A" como BYTEDIM INICIO AS BYTE 'Declaro la variable "INICIO" como BYTEDIM FINAL AS BYTE 'Declaro la variable "FINAL" como BYTEDIM PASO AS BYTE 'Declaro la variable "PASO" como BYTEDIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD

    INICIO = 1 'Asigno "1" a la variable "INICIO".FINAL = 100 'Asigno "100" a la variable "FINAL".PASO = 1 'Asigno "1" a la variable "PASO".TOTAL = 0 'Asigno "0" a la variable "TOTAL".

    FOR A = INICIO TO FINAL STEP PASO '"A" va de 1 a 100 de 1 en1

  • 8/2/2019 Tutorial Pics

    35/65

    TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".NEXT A 'fin del bucle.

    Y el mismo ejemplo, sin usar STEP:

    DIM A AS BYTE 'Declaro la variable "A" como BYTEDIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD

    TOTAL = 0 'Asigno "0" a la variable "TOTAL".

    FOR A = 1 TO 100 '"A" va de 1 a 100 de 1 en 1TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".

    NEXT A 'fin del bucle.

    Si quisiramos sumar otro grupo de nmeros, bastara con modificar el valor de lasvariables INICIO y FINAL.

    Hay casos en que es necesario que el valor de la variable de control del bucle se decrementeen lugar de ir aumentando. Un cronometro descendente seria una aplicacin practica de estecaso. Para lograr esto, se puede usar un valor negativo para STEP. El siguiente ejemplocuenta desde 50 hasta 20, de 5 en 5:

    DIM A AS BYTE 'Declaro la variable "A" como BYTE

    FOR A = 50 TO 20 STEP -5 '"A" va de 50 a 20 de 5 en 5instruccion1instruccion2

    ...instruccionn

    NEXT A 'fin del bucle.

    De la misma manera que ocurra conIF-THEN-ELSE-ENDIF, pueden anidarse diferentesbucles FOR-TO-STEP-NEXT , uno dentro de otro:

    FOR variable1 = valor_inicial1 TO valor_final1 STEP paso1FOR variable2 = valor_inicial2 TO valor_final2 STEP paso2

    instruccion1instruccion2...instruccionn

    NEXT variable2NEXT variable1

    La nica condicin, igual que ocurra conIFes que un bucle debe estar completamente

    http://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspx
  • 8/2/2019 Tutorial Pics

    36/65

    contenido dentro del otro, sino el compilador nos avisara del error y se negar a generar elarchivo .HEX correspondiente.

    El siguiente anidamiento dara un error en el compilador:

    FOR variable1 = valor_inicial1 TO valor_final1 STEP paso1FOR variable2 = valor_inicial2 TO valor_final2 STEP paso2instruccion1instruccion2...instruccionn

    NEXT variable1NEXT variable2

    Para que el anidamiento sea correcto, el primer NEXT debe ser el correspondiente alsegundo FOR (el de la variable2). Este FOR se repetir tantas veces como lo indique elFOR de la variable1

    Para terminar, veamos el siguiente cdigo:

    AllDigitalTRISC = 0Dim a As Byte

    For a = 0 To 255WAITMS 250PORTC = a

    Next a

    Si lo compilamos y cargamos en alPIC TRAINER 40conectado a laplaca de 8 I/Ocomolo hicimos en laentrega anterior, veremos como los LEDs cuentan en binario desde 0 a255.

    http://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3406/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_5/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3406/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_5/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3406/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_5/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3406/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_5/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3316/Title/Proyecto__Modulo_8_Entradas___Salidas/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspx
  • 8/2/2019 Tutorial Pics

    37/65

    Los LEDs

    cuentan en binario desde 0 a 255.

    WHILE - WENDLa segunda estructura de control que proporciona PIC BASIC es WHILE - WEND. Supropsito tambin es la construccin de bucles que se ejecutan un numero de veces, y se

    puede decir que esta a mitad de camino entre la construccin de un bucle medianteetiquetas y GOTOs y la utilizacin de un FORNEXT. Su estructura es la siguiente:

    WHILE condicininstruccion1instruccion2...instruccionn

    WEND

    Mientras que la condicin sea verdadera, el grupo de instrucciones dentro del cuerpo del

    WHILE-WEND se ejecuta. Las caractersticas de la condicin son las mismas que vimosantes para la instruccinIF-THEN-ELSE-ENDIF.

    Por supuesto, si no somos cuidadosos al momento de elegir la condicin, puede darse elcaso de que el numero de repeticiones del bucle sea infinito, y nunca salgamos de l. Dehecho, esta circunstancia se aprovecha en algunos programas para repetir indefinidamenteun grupo de instrucciones. Tambin hay que tener presente que si la condicin no es ciertaal momento de ejecutar la primera vez el WHILE, el flujo del programa pasara

    http://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspxhttp://www.neoteo.com/images/Cache/1524x900y900.jpghttp://www.neoteo.com/images/Cache/1523x900y900.jpghttp://www.neoteo.com/images/Cache/1524x900y900.jpghttp://www.neoteo.com/images/Cache/1523x900y900.jpghttp://www.neoteo.com/tabid/54/ID/3353/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_4/Default.aspx
  • 8/2/2019 Tutorial Pics

    38/65

    directamente a la instruccin posterior al WEND y las instrucciones dentro del bucle no seejecutaran ninguna vez.

    No hay mucho mas para decir de WHILE-WEND , solo analizar algunos ejemplos:

    Ejemplo 1:El siguiente es un bucle infinito. Como dentro del cuerpo del WHILE-WEND no se cambiael valor de la variable A, esta siempre vale "0" y la condicin del WHILE nunca es falsa,por lo que se repite eternamente: es un caso similar a los que vimos en la entrega anteriordel tutorial.

    DIM A AS BYTEA = 0...WHILE A = 0instruccion1instruccion2...instruccionn

    WEND...

    Ejemplo 2:Las instrucciones dentro del siguiente WHILE-WEND no se ejecutan nunca, dado que lacondicin siempre es falsa:

    DIM A AS BYTEA = 0

    ...WHILE A > 0instruccion1instruccion2...instruccionn

    WEND...

    Ejemplo 3:Las instrucciones dentro del siguiente WHILE-WEND se ejecutan 20 veces, y al terminar

    la variable B contiene la suma de los nmeros del 0 al 20 naturales:

    DIM A AS BYTEDIM A AS BYTEA = 0B = 0

    WHILE A < 20

  • 8/2/2019 Tutorial Pics

    39/65

    A = A + 1 'Incremento la variable AB = B + A 'Sumo a B el valor de la variable A

    WEND

    Cuando A = 20, se suma su valor a A, y al llegar al WEND el control del programa setransfiere al WHILE, donde se evala la condicin A < 20, se determina que es falsa, y elprograma pasa el control a la lnea que exista despus del WEND.Este bucle hace la misma suma que el que realizamos antes con FORNEXT. No se puede

    decir que uno sea mejor o peor que el otro: solo son dos formas distintas de hacer lo mismo,y en cada situacin decidiremos cual nos conviene ms.

    ENTREGA 7

    Continuando con la serie de notas dedicadas a aprender a programar microcontroladores,veremos las instrucciones que dispone el lenguaje de programacin PIC BASIC orientadas

    al manejo de displays LCD.

    Existen en el mercado una enorme variedad de pantallas de cristal liquido, de un precioaccesible, con caractersticas comunes en cuanto a la interfaz y programacin, gracias quela mayora utiliza para comunicarse con el exterior el mismo chip de la empresa Hitachi,

    el HD44780. Esto hace posible que con un puado de instrucciones podemos manejar desdeun sencillo display de una lnea de 8 caracteres hasta uno de 4 lneas con 80 caracteres.

    El aspecto fsico de estas pantallas se puede ver en las fotos que ilustran la nota,bsicamente son una pequea placa de circuito impreso con un par de integrados (tipogota) pegados en una de sus caras, y la pantalla propiamente dicha en la otra, rodeada de

    una estructura metlica que la protege. Esta placa casi siempre dispone de agujeros parapoder fijar el conjunto a un chasis o gabinete sin grandes complicaciones. Desde el puntode vista elctrico, hay un conector (a veces solo agujeros metalizados donde soldar loscables) que tiene 14 pines en los que no poseen iluminacin propia (backlite) o 16 en losque si la tienen.

    Vista trasera de un LCD 2x16 tpico.

    http://www.neoteo.com/images/Cache/15ECx900y900.jpg
  • 8/2/2019 Tutorial Pics

    40/65

    Hermoso: un LCD de 4 lineas de 40caracteres, color azul.

    Mediante las seales apropiadas enviadas y recibidas mediante este conector el display escapaz de representar caracteres, mostrar o esconder un cursor, borrar la pantalla, etc.

    Descripcin de los pinesComo mencionamos, la gran mayora de los displays existentes en el mercado respetan lamisma distribucin de pines. Igualmente, antes de conectar nada, debemos asegurarnos deque as sea, para no daar de forma permanente el LCD. Siempre es necesario tener a manola datasheet (hoja de datos) del componente electrnico que queremos usar.

    Veamos que funcin cumple cada uno de los pines de un display LCD genrico:

    Pines 1,2 y 3: Estos pines estn dedicados a la alimentacin y contraste del LCD.Efectivamente, el pin 1 (VSS) es el que se debe conectar al negativo (masa) de laalimentacin, y el pin 2 (Vdd/Vcc) es el que va unido al positivo (5 voltios). El pin 3permite el ajuste del contraste del panel. Se puede unir al pin 1 mediante una resistencia de220 ohms para obtener un contraste adecuado (pero fijo) o bien utilizar un potencimetro opreset de 10 KOhm para variar el contraste a gusto.

    Pines 4,5,6: Estos pines son de alguna manera los que controlan el funcionamiento del

    display. El pin 4, tambin llamado RS (Registration Select) es el que le indica alcontrolador interno del LCD que el valor presente en el bus de datos es un comando(cuando RS=0) o bien un carcter para representar (cuando RS=1).

    El pin 5 (R/W por Read/Write o Leer/Escribir) permite decidir si queremos enviar

    datos al display (R/W=0) o bien nos interesa leer lo que el display tiene en su memoria oconocer su estado (R/W=1).

    Por ultimo, el pin 6 (E por Enable o habilitado) es el que selecciona el display a

    utilizar. Es decir, podemos tener varios LCD conectados a un mismo bus de datos (pines 7-14) de control, y mediante E seleccionar cual es el que debe usarse en cada momento.

    Pines 7, 8, 9, 10, 11, 12, 13, 14:Estos ocho pines son el bus de datos del controlador dela pantalla. Llamados DB0-DB7 son los encargados de recibir (o enviar) los comandos odatos desde o hacia el display. DB0 es el bit de menor peso y DB7 es el ms significativo.

    Por ultimo, los pines 15 y 16 son los que se utilizan para alimentar el (o los) LEDs defondo de la pantalla, que brindan la iluminacin (backlight). El pin 15 debe ser conectado a5 voltios y el 16 al negativo o masa de la fuente. En estas condiciones, la luz de fondo esta

    http://www.neoteo.com/images/Cache/15EEx900y900.jpghttp://www.neoteo.com/images/Cache/15EDx900y900.jpghttp://www.neoteo.com/images/Cache/15EEx900y900.jpghttp://www.neoteo.com/images/Cache/15EDx900y900.jpg
  • 8/2/2019 Tutorial Pics

    41/65

    encendida a 100% de su brillo. Nuevamente, se puede utilizar un potencimetro o presetpara ajustar el brillo. Como una nota curiosa, muy frecuentemente estos dos pines estnubicados ANTES del pin 1 (ver esquema). Debemos asegurarnos de cual es su posicinconsultando la hoja de datos del fabricante o la serigrafa que existe sobre la placa del LCD.

    Estos displays soportan dos modos de trabajo: en uno de ellos reciben en DB0-DB7 los 8bits del dato, y en el otro, llamado modo de 4 bits reciben los datos en dos mitades(nibbles) por los pines DB4-DB7, en dos pasos sucesivos. Si bien esto puede complicarligeramente la programacin en assembler, en PIC BASIC es completamente transparente,a la vez que supone un ahorro de 4 pines en el bus de datos, y esto en microcontroladorescon pocos pines de I/O es muy til.

    Los pines de un display LCD genrico.

    De esa forma podemos controlar elcontraste del LCD.

    A grandes rasgos, y a pesar de la simplicidad que brinda el disponer de un mismo integradoespecializado en casi todos los modelos de displays, la escritura en estos es relativamentecompleja, dado que se deben respetar protocolos de inicializacin, tiempos entre envo dedatos, etc., lo que hace bastante tediosa su programacin en assembler. Pero PIC BASIC

    http://www.neoteo.com/images/Cache/15F1x900y900.jpghttp://www.neoteo.com/images/Cache/15F0x900y900.jpghttp://www.neoteo.com/images/Cache/15EFx900y900.jpghttp://www.neoteo.com/images/Cache/15F1x900y900.jpghttp://www.neoteo.com/images/Cache/15F0x900y900.jpghttp://www.neoteo.com/images/Cache/15EFx900y900.jpghttp://www.neoteo.com/images/Cache/15F1x900y900.jpghttp://www.neoteo.com/images/Cache/15F0x900y900.jpghttp://www.neoteo.com/images/Cache/15EFx900y900.jpg
  • 8/2/2019 Tutorial Pics

    42/65

    dispone de un juego de instrucciones especiales para manejar displays en modo 8 bits y

    en modo 4 bits que nos evitan toda esa complejidad. Veremos cules son y algunosejemplos de uso. La prxima semana realizaremos un mdulo para el PIC TRAINER yescribiremos varios programas de ejemplo.

    El manejo de los LCD se hace mediante el uso de sentencias DEFINE, que le dicen alcompilador a que pines del microcontrolador hemos conectado cada uno de los pines delLCD. La forma de la instruccin DEFINE es la siguiente:

    DEFINE parametro = valor

    Donde parametro es el nombre del parmetro al que le queremos asignar el valor. Los

    parmetros disponibles para el manejo de LCD alfanumricos son los siguientes:

    LCD_BITS: Define el nmero de bits de la interfaz de datos. Se pueden asignar valores de4 u 8, siendo 4 el valor por defecto.

    LCD_DREG: Define a que puerto del PIC tenemos conectado el port de datos del LCD.Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

    LCD_DBIT: Define cual es el primer pin del puerto que usamos para enviar los datos alLCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y3) o 4 (para usar los pines 4, 5, 6 y 7). Por defecto se asume 4, y esta instruccin se

    ignora para LCD_BITS = 8.

    LCD_RSREG: Define a que puerto del PIC tenemos conectado el pin RS del LCD. Losvalores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

    LCD_RSBIT: Define a que pin del puerto tenemos conectado el pin RS del LCD. Pordefecto se asume 3.

    LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Losvalores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

    LCD_EBIT: Define a que pin del puerto tenemos conectado el pin E del LCD. Por defectose asume 2.

    LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Losvalores permitidos son 0, PORTA, PORTB, PORTC, etc. Por defecto se asume 0, que

    significa no usamos el pin RW.

    LCD_RWBIT: Define a que pin del puerto tenemos conectado el pin RW del LCD. Pordefecto se asume 0, que significa no usamos el pin RW.

    LCD_COMMANDUS: Define cuantos microsegundos demora la escritura de un comandoen el display. Por defecto, este valor es de 5000. La mayora de los LCD funcionan biencon un valor de 2000, lo que hace ms rpidos nuestros programas.

  • 8/2/2019 Tutorial Pics

    43/65

    LCD_DATAUS: Define cuantos microsegundos demora la escritura de un dato en el LCD.Por defecto, este valor es de 100.

    LCD_INITMS: Define cuantos microsegundos demora la inicializacin e la electrnica del

    LCD. Por defecto, este valor es de 100.

    Luego, tenemos una serie de instrucciones que manejan el envo de comandos einstrucciones al display:

    LCDINIT debe utilizarse antes de enviar cualquier comando o dato al LCD. La forma deesta instruccin es al siguiente:

    LCDINIT n

    Donde n es el tipo de cursor que queremos que muestre el display. 0 significa que el

    cursor estar oculto, 1 significa que el cursor parpadeara, 2 nos mostrara un cursorsubrayado, y 3 un cursor subrayado y parpadeando.

    LCDCMDOUT es la instruccin que enva comandos al LCD. Se emplea de la siguientemanera:

    LCDCMDOUT comando

    Donde comando es alguno de los siguientes:

    LcdClear: Borra el contenido del LCD.LcdHome: Lleva el cursor a la primera posicin del primer rengln del LCD.

    LcdLine2Home: Lleva el cursor a la primera posicin del segundo rengln del LCD.LcdLeft: Mueve el cursor una posicin a la izquierda.LcdRight: Mueve el cursor una posicin a la derecha.LcdShiftLeft: Desplaza el contenido del LCD una posicin a la izquierda.LcdShiftRight: Desplaza el contenido del LCD una posicin a la derecha.LcdLine1Clear: Borra la primera lnea del LCD.LcdLine2Clear: Borra la segunda lnea del LCD.LcdLine1Pos(x):Coloca el cursor en la posicin x del primer rengln del LCD. Xpuede tener cualquier valor entre 1 y 40LcdLine2Pos(x): Coloca el cursor en la posicin x del segundo rengln del LCD. Xpuede tener cualquier valor entre 1 y 40

    LCDOUT enva datos al display. Si son caracteres, simplemente los ponemos entrecomillas a continuacin del comando. Si se trata de mostrar el contenido de una variable, seescribe la variable (precedida por #) a continuacin del comando. Si se necesitanimprimir varias variables, se pueden separar por comas.

  • 8/2/2019 Tutorial Pics

    44/65

    Un LCD en

    accin.

    A continuacin, un par de ejemplos de cmo se utilizan todas estas instrucciones. Elprimero se encarga de mostrar un texto parpadeando en la primera lnea del display.Intenten deducir como est conectado el LCD al PIC mirando las instrucciones DEFINE

    del principio del programa.

    DEFINE LCD_BITS = 8DEFINE LCD_DREG = PORTBDEFINE LCD_DBIT = 0DEFINE LCD_RSREG = PORTDDEFINE LCD_RSBIT = 1DEFINE LCD_EREG = PORTDDEFINE LCD_EBIT = 3DEFINE LCD_RWREG = PORTDDEFINE LCD_RWBIT = 2

    LCDINIT 0 inicializo el LCD sin cursor.

    loop:LCDOUT "www.NeoTeo.com" Muestra el textoWAITMS 1000 Espero un segundoLCDCMDOUT LcdClear Borro el displayWAITMS 1000 Espero un segundoGOTO loop Vuelvo a loop: para repetir indefinidamente.

    http://www.neoteo.com/images/Cache/15F3x900y900.jpghttp://www.neoteo.com/images/Cache/15F2x900y900.jpghttp://www.neoteo.com/images/Cache/15F3x900y900.jpghttp://www.neoteo.com/images/Cache/15F2x900y900.jpg
  • 8/2/2019 Tutorial Pics

    45/65

    El segundo ejemplo muestra como imprimir el contenido de una variable (A) en el LCD.

    Concretamente, se muestra un texto en el primer rengln, mientras que en el segundo secuentan los nmeros del 65535 al 0 en el segundo.

    DEFINE LCD_BITS = 8

    DEFINE LCD_DREG = PORTBDEFINE LCD_DBIT = 0DEFINE LCD_RSREG = PORTDDEFINE LCD_RSBIT = 1DEFINE LCD_EREG = PORTDDEFINE LCD_EBIT = 3DEFINE LCD_RWREG = PORTDDEFINE LCD_RWBIT = 2

    DIM A AS WORDA = 65535

    LCDINIT 3 Cursor parpadeandoWAITMS 1000

    loop:LCDOUT "Estoy contando! Texto del primer renglnLCDCMDOUT LcdLine2Home Paso al Segundo renglnLCDOUT #A Muestro el valor de AA = A - 1WAITMS 250LCDCMDOUT LcdClear Limpio del displayGOTO loop

    Esto es todo por hoy. La semana prxima veremos cmo implementar estos ejemplos enuna placa de expansin para nuestro PIC TRAINER, y tambin como definir nuestrospropios caracteres especiales. Hasta la prxima!

    Veremos como definir nuestros propioscaracteres.

    http://www.neoteo.com/images/Cache/15F4x900y900.jpg
  • 8/2/2019 Tutorial Pics

    46/65

    ENTREGA 8

    En realidad, construir un modulo de expansin para nuestroPIC Traineres muy sencillo,gracias a la electrnica incluida a bordo de cada mdulo LCD, que se encarga de las tareasms complejas.

    Nuestro proyecto consiste bsicamente en una serie de conectores que permiten almicrocontrolador situado en el PIC Trainer enviar los caracteres y comandos a la pantalla.Dado que los LCD tienen (generalmente) la posibilidad de ajustar su contraste o luz defondo, hemos previsto la electrnica necesaria para poder seleccionar mediante una serie dejumpers alguna de esas funciones. Y por supuesto, hemos dotado a la placa con un preset de10K para regular el contraste del LCD.

    Debido a que el consumo del modulo (sobre todo si hacemos uso de los LEDs de backlite)es algo elevado (unos 200mA) para cargrselo al regulador de voltaje incluido en el PICTrainer, hemos dotado a la placa del LCD con su propio regulador. Hemos elegido paraesta tarea a un hermano menor del 7805, el 78L05, que en una capsula mucho ms

    pequea puede entregarnos 5V perfectamente regulados.

    La siguiente imagen nos muestra el esquema elctrico de nuestra nueva placa de expansin:

    http://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspxhttp://www.neoteo.com/images/Cache/15F5x900y900.jpghttp://www.neoteo.com/tabid/54/ID/3285/Title/TUTORIAL__Programacion_de_microcontroladores_-_Entrega_3/Default.aspx
  • 8/2/2019 Tutorial Pics

    47/65

    Esquema elctrico de nuestra placa de

    expansin.

    Como podemos ver, el circuito es verdaderamente sencillo: una tensin de alimentacin deentre 7.5 y 15 voltios se conecta en la bornera de alimentacin, pasa a travs de un diodoque protege al regulador de voltaje de una conexin errnea de la fuente de alimentacin, ymediante el 78L05 y los condensadores asociados es regulada a 5V.

    El modulo LCD tiene conectados los cuatro bits ms altos de su bus de datos a un conectortipo molex de 10 vas, al que hemos llamado A. Los restantes cuatro bits estn unidos alconector B. De esta manera, si queremos utilizar un programa que emplea solo cuatro bits

    para comunicarse con el modulo, usaremos el conector A; y en caso de querer probar unprograma que utiliza un bus de datos de 8 bits, utilizaremos ambos conectores.

    El tercer molex, llamado C, es el conector de control. En efecto, las lneas de control

    del LCD se encuentra agrupadas en este conector, teniendo la posibilidad de seleccionar lafuncin R/W mediante un jumper (JP1). Si el jumper se encuentra colocado entre lospines 1 y 2, el control de la lnea R/W estar en manos del microcontrolador, por lo queel programa deber poner un 0 en esa lnea antes de poder escribir en el. Si el jumper est

    http://www.neoteo.com/images/Cache/16C3x900y900.jpghttp://www.neoteo.com/images/Cache/16C2x900y900.jpghttp://www.neoteo.com/images/Cache/16C3x900y900.jpghttp://www.neoteo.com/images/Cache/16C2x900y900.jpg
  • 8/2/2019 Tutorial Pics

    48/65

    en la posicin 2-3, el LCD estar preparado para que escribamos en el todo el tiempo. Nopodremos leer su memoria interna (tarea poco frecuente) y utilizaremos un pin menos en elmicrocontrolador.

    El cuarto pin de control corresponde al backlite. Esta es la iluminacin trasera del display,

    que permite utilizarlo en condiciones de iluminacin pobre, por ejemplo de noche. Como elconsumo del backlite es excesivo para alimentarlo directamente desde un puerto delmicrocontrolador, hemos utilizado un transistor 2N3906 que se encargue de esa tarea.

    El jumper JP2 sirve para seleccionar si el backlite va a estar encendido (jumper en 1-2),bajo el control del PIC (jumper en 2-3) o apagado permanentemente (sin jumper). En casode seleccionar el control desde el microcontrolador, podremos utilizar pulsos PWM pararegular la intensidad luminosa de los LEDs. Esto y el control de velocidad de motores decorriente continua ser tema de otro captulo del tutorial.

    Por ltimo, el preset de 10k, que aparece en color azul en las fotos, es el encargado de fijarel nivel de contraste del display, para que su lectura sea lo ms cmoda posible.

    El mdulo LCD conectado al trainer.

    El mdulo recien armado.

    El armado del modulo de expansin no tiene secretos, es muy similar a otros que hemosrealizado en NeoTeo, con la salvedad de que en este caso hemos formado una especie desndwich con la placa de circuito impreso y el LCD, que se monta sobre pines de bronce

    para permitir que debajo de l se ubiquen el transistor, la resistencia de su base y algunospuentes necesarios.

    Para el armado utilizaremos de referencia las fotos incluidas en el artculo, y comenzaremos

    http://www.neoteo.com/images/Cache/16C6x900y900.jpghttp://www.neoteo.com/images/Cache/16C5x900y900.jpghttp://www.neoteo.com/images/Cache/16C4x900y900.jpghttp://www.neoteo.com/images/Cache/16C6x900y900.jpghttp://www.neoteo.com/images/Cache/16C5x900y900.jpghttp://www.neoteo.com/images/Cache/16C4x900y900.jpghttp://www.neoteo.com/images/Cache/16C6x900y900.jpghttp://www.neoteo.com/images/Cache/16C5x900y900.jpghttp://www.neoteo.com/images/Cache/16C4x900y900.jpg
  • 8/2/2019 Tutorial Pics

    49/65

    fabricando el PCB medianteel mtodo explicado anteriormente, para luego soldar todos loscomponentes, dejando para el final el montaje del LCD.

    En caso de que al alimentar el circuito el LCD este en blanco, deberemos ajustar el

    preset. Cuando el cursor del mismo est en la mitad del recorrido, el display debera ser

    perfectamente legible.

    Para realizar las prcticas, deberemos conectar este mdulo con el PIC Trainer de 40 pinescomo se ve en la foto siguiente.

    Disposicion de los conectores en el PICTrainer.

    PORTD.0 a PORTD.3

    http://www.neoteo.com/tabid/54/ID/1075/Title/Construyendo_circuitos_impresos/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1075/Title/Construyendo_circuitos_impresos/Default.aspxhttp://www.neoteo.com/tabid/54/ID/1075/Title/Construyendo_circuitos_impresos/Default.aspxhttp://www.neoteo.com/images/Cache/16C8x900y900.jpghttp://www.neoteo.com/images/Cache/16C7x900y900.jpghttp://www.neoteo.com/images/Cache/16C8x900y900.jpghttp://www.neoteo.com/images/Cache/16C7x900y900.jpghttp://www.neoteo.com/tabid/54/ID/1075/Title/Construyendo_circuitos_impresos/Default.aspx
  • 8/2/2019 Tutorial Pics

    50/65

    PORTD.4 a PORTD.7

    PORTB.0 a PORTB.3

    Una vez conectado