MicroControladores PIC

43
E.E.T Nº 460 “Guillermo Lehmann” Departamento de Electrónica Micro Controladores PIC Curso; 5º B Año 2010 1 Micro Controladores PIC 16F628A Arquitectura, Lenguajes de Programación, Pic Simulator, El Basic, Instrucciones, Manejo de LCD, Puerto Serie

Transcript of MicroControladores PIC

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 1

    Micro Controladores

    PIC 16F628A

    Arquitectura, Lenguajes de Programacin, Pic Simulator, El Basic, Instrucciones, Manejo de LCD, Puerto Serie

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 2

    Introduccin Qu es un Microcontrolador? Estructura de un Microprocesador PIC16F628 Puertos del PIC 16F628 Lenguajes de Programacin Lenguaje de Alto y Bajo Nivel Pic simulator IDE IC-Prog JDM Programmer GTP USB Lite El BASIC Comportamiento Digital Manejo de Instrucciones y Variables LECTURA DE LA PROGRAMACION ALLDIGITAL TRISx PORTx Comillas WAITMS - WaitUs GOTO DIM SYMBOL IF THEN ELSE Ejercicios FOR TO STEP NEXT LOOKUP SHIFTLEFT SHIFTRIGHT WHILE WEND GOSUB FREQOUT HSEROUT / HSERIN Ejercicios Manejo de LCD en PIC El HD44780 PinOut del LCD HD44780 Ejemplos en BASIC Bibliografa

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 3

    Introduccin:

    Generalmente en cualquier proyecto electrnico que diseemos nos vemos en situaciones donde un solo circuito integrado o bien la combinacin de estos con sus aplicaciones especificas no siempre llegan a conformar el Proyecto que tenemos en mente ya que, justamente, este o estos circuitos integrados poseen una sola aplicacin especifica, es decir, sabemos por ejemplo que un CD4093 es una compuerta NANAD Schmidt Trigger, pero es solo una compuerta por lo cual ese ser su trabajo, otro ejemplo seria un CD4017 el cual es un registro de desplazamiento, solo cumple la funcin de desplazar un bit por cada cambio de CLOCK, pero solo har esta tarea, si queremos realizar algn proyecto donde variables como tiempo, entradas, salidas, RS232, PWM, comparadores, etc deberamos juntar un puado de integrados con sus aplicaciones especificas y congeniarlos para que en conjunto realice nuestro Proyecto. La pregunta seria Funcionaria?, Posiblemente si, o bien en parte, o en el peor de los casos estos integrados no serian del todo compatibles ya sea por diferencias en la alimentacin de cada Integrado, la sincronizacin entre cada uno de ellos y otros factores a tener en cuenta, y ni hablar del diseo del PCB con tantos integrados.- Pero bien, que podemos hacer entonces. Y si les digo que estas variables y funciones la puede ejercer un solo integrado, que el mismo puede hacer casi cualquier funcion que necesitemos, que adems se pueda Programar como quisiramos y que solo nos puede ocupar 18 Pines, que cada Pin lo puedo programar para que haga tal o cual trabajo, y que el PCB solo posea uno y solo un integrado...seria genial no! Perfecto!!!....les presento al MICROCONTROLADOR

    Qu es un Microcontrolador?

    Un Microcontrolador es un dispositivo electrnico programable capaz de realizar tareas que el usuario programe. Este esta formado por una CPU, una Memoria RAM, una Memoria ROM, Puertos de Entrada y Salida, etc. Lo que nos da una idea de lo que comnmente vemos, una PC. Sabemos que una PC esta formada por una CPU, Memoria, Disco Rgido, Teclado, Monitor. Un microprocesador es exactamente igual ,salvando distancia en cuanto a tamao y capacidades obviamente, veremos que el mismo posee una CPU donde realiza operaciones aritmticas, una Memoria RAM donde lleva a cabo los movimientos de los

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 4

    Bits, Una ROM donde guarda el programa que generemos y unos Puertos de entrada y Salida. Hay que tener en cuenta que un Microcontrolador al energizarlo, este no har absolutamente nada si no tiene una programacin, es decir, el Micro tal como lo compramos viene vacio, ser nuestro trabajo programarlo de forma correcta para que realice las operaciones que queremos que haga. Pero antes de entrar a la Programacin del Micro veamos cmo est Construido un Microcontrolador.

    Estructura de un Microprocesador

    Figura: 1. Estructura bsica de un microcontrolador

    En esta figura, vemos al microcontrolador metido dentro de un encapsulado de circuito integrado, con su procesador (CPU), buses, memoria, perifricos y puertos de entrada salida. Fuera del encapsulado se ubican otros circuitos para completar perifricos internos y dispositivos que pueden conectarse a los pines de entrada/salida. Tambin se conectarn a los pines del encapsulado la alimentacin, masa, circuito de completamiento del oscilador y otros circuitos necesarios para que el microcontrolador pueda trabajar.

    Una de las ventajas que tenemos con algunos de los microprocesadores actuales es que estos poseen una memoria EEPROM o E2PROM (Electrical Erasable Programmable Read Only Memory) es decir, posee una Memoria elctricamente programable de solo lectura.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 5

    Esta ventaja nos da la posibilidad de modificar miles de veces nuestro programa ya sea por correccin del programa o bien para futuras modificaciones.

    Registros

    Son un espacio de memoria muy reducido pero necesario para cualquier microprocesador, de aqu se toman los datos para varias operaciones que debe realizar el resto de los circuitos

    del procesador. Los registros sirven para almacenar los resultados de la ejecucin de instrucciones, cargar datos desde la memoria externa o almacenarlos en ella.

    En realidad los registros es una de las partes ms importantes de un Microprocesador, esta nos da lacapacidad de nuestro Micro,

    Cuando escuchamos que un procesador es de 4, 8, 16, 32 64 bits, nos estamos refiriendo a procesadores que realizan sus operaciones con registros de datos de ese tamao, y por supuesto, esto determina muchas de las potencialidades de estas mquinas.

    Mientras mayor sea el nmero de bits de los registros de datos del procesador, mayores sern sus prestaciones, en cuanto a poder de cmputo y velocidad de ejecucin, ya que este parmetro determina la potencia que se puede incorporar al resto de los componentes del sistema, por ejemplo, no tiene sentido tener una ALU* de 16 bits en un procesador de 8 bits.

    *ALU (Aritmetric Logila Unit o Unidad Lgica Aritmtica)

    Por otro lado un procesador de 16 bits, puede que haga una suma de 16 bits en un solo ciclo de mquina, mientras que uno de 8 bits deber ejecutar varias instrucciones antes de tener el resultado, an cuando ambos procesadores tengan la misma velocidad de ejecucin para sus instrucciones. El procesador de 16 bits ser ms rpido porque puede hacer el mismo tipo de tareas que uno de 8 bits, en menos tiempo.

    Unidad de control

    Esta unidad es de las ms importantes en el procesador, en ella recae la lgica necesaria para la decodificacin y ejecucin de las instrucciones, el control de los registros, la ALU, los buses y cuanta cosa ms se quiera meter dentro del procesador. No hay nada dentro de un procesador que escape a las garras de la unidad de control. La unidad de control es Dios en el procesador, es omnipotente y omnipresente, todos tienen que rendirle y nadie escapa a su voluntad.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 6

    La unidad de control es uno de los elementos fundamentales que determinan las prestaciones del procesador, ya que su tipo y estructura, determina parmetros tales como el tipo de conjunto de instrucciones, velocidad de ejecucin, tiempo del ciclo de mquina, tipo de buses que puede tener el sistema, manejo de interrupciones y un buen nmero de cosas ms que en cualquier procesador van a para a este bloque. Por supuesto, las unidades de control, son el elemento ms complejo de un procesador y normalmente estn divididas en unidades ms pequeas trabajando de conjunto. La unidad de control agrupa componentes tales como la unidad de decodificacin, unidad de ejecucin, controladores de memoria cache, controladores de buses, controladores de interrupcin, pipelines, entre otros elementos, dependiendo siempre del tipo de procesador.

    Unidad aritmtica y lgica

    Como los procesadores son circuitos que hacen bsicamente operaciones lgicas y matemticas, se le dedica a este proceso una unidad completa, con cierta independencia. Aqu es donde se realizan las sumas, restas, y operaciones lgicas tpicas del lgebra de Boole.

    Actualmente este tipo de unidades ha evolucionado mucho y los procesadores ms modernos tienen varias ALU, especializadas en la realizacin de operaciones complejas como las operaciones en coma flotante. De hecho en muchos casos le han cambiado su nombre por el de coprocesador matemtico, aunque este es un trmino que surgi para dar nombre a un tipo especial de procesador que se conecta directamente al procesador ms tradicional.

    Su impacto en las prestaciones del procesador es tambin importante porque, dependiendo de su potencia, tareas ms o menos complejas, pueden hacerse en tiempos muy cortos, como por ejemplo, los clculos en coma flotante.

    Buses

    Son el medio de comunicacin que utilizan los diferentes componentes del procesador para intercambiar informacin entre s, eventualmente los buses o una parte de ellos estarn reflejados en los pines del encapsulado del procesador.

    En el caso de los microcontroladores, no es comn que los buses estn reflejados en el encapsulado del circuito, ya que estos se destinan bsicamente a las E/S de propsito general y perifricos del sistema.

    Existen tres tipos de buses:

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 7

    Direccin: Se utiliza para seleccionar al dispositivo con el cual se quiere trabajar o en el caso de las memorias, seleccionar el dato que se desea leer o escribir.

    Datos

    Control: Se utiliza para gestionar los distintos procesos de escritura lectura y controlar la operacin de los dispositivos del sistema.

    Conjunto de instrucciones

    Aunque no aparezca en el esquema, no podamos dejar al conjunto o repertorio de instrucciones fuera de esta fiesta, porque este elemento determina lo que puede hacer el procesador.

    Define las operaciones bsicas que puede realizar el procesador, que conjugadas y organizadas forman lo que conocemos como software. El conjunto de instrucciones vienen siendo como las letras del alfabeto, el elemento bsico del lenguaje, que organizadas adecuadamente permiten escribir palabras, oraciones y cuanto programa se le ocurra.

    Aqu es donde centraremos atencin ms adelante y donde veremos las instrucciones ms conocidas para el tratamiento de seales DIGITALES

    Memoria

    Anteriormente habamos visto que la memoria en los microcontroladores debe estar ubicada dentro del mismo encapsulado, esto es as la mayora de las veces, porque la idea fundamental es mantener el grueso de los circuitos del sistema dentro de un solo integrado.

    En los microcontroladores la memoria no es abundante, aqu no encontrar Gigabytes de memoria como en las computadoras personales. Tpicamente la memoria de programas no exceder de 16 K-localizaciones de memoria no voltil para instrucciones y la memoria RAM ni siquiera llegar a exceder los 5 Kilobytes.

    La memoria RAM est destinada al almacenamiento de informacin temporal que ser utilizada por el procesador para realizar clculos u otro tipo de operaciones lgicas. En el espacio de direcciones de memoria RAM se ubican adems los registros de trabajo del procesador y los de configuracin y trabajo de los distintos perifricos del microcontrolador. Es por ello que en la mayora de los casos, aunque se tenga un espacio de direcciones de un tamao determinado, la cantidad de memoria RAM de que dispone el programador para almacenar sus datos es menor que la que puede direccionar el procesador.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 8

    El tipo de memoria utilizada en las memorias RAM de los microcontroladores es SRAM, lo que evita tener que implementar sistemas de refrescamiento como en el caso de las computadoras personales, que utilizan gran cantidad de memoria, tpicamente alguna tecnologa DRAM. A pesar de que la memoria SRAM es ms costosa que la DRAM, es el tipo adecuado para los microcontroladores porque stos poseen pequeas cantidades de memoria RAM.

    En el caso de la memoria de programas se utilizan diferentes tecnologas, y el uso de una u otra depende de las caractersticas de la aplicacin a desarrollar, a continuacin se describen las cinco tecnologas existentes, que mayor utilizacin tienen o han tenido, hasta el momento de escribir este libro:

    ROM de mscara. En este caso no se graba el programa en memoria sino que el microcontrolador se fabrica con el programa, es un proceso similar al de produccin de los CD comercial mediante masterizacin.

    El costo inicial de producir un circuito de este tipo es alto, porque el diseo y produccin de la mscara es un proceso costoso, sin embargo, cuando se necesitan varios miles o incluso cientos de miles de microcontroladores para una aplicacin determinada, como por ejemplo, algn electrodomstico, el costo inicial de produccin de la mscara y el de fabricacin del circuito se distribuye entre todos los circuitos de la serie y, el costo final de sta, es bastante menor que el de sus semejantes con otro tipo de memoria.

    TP One Time Programmable. Este tipo de memoria, tambin es conocida como PROM o simplemente ROM.

    Los microcontroladores con memoria OTP se pueden programar una sola vez, con algn tipo de programador. Se utilizan en sistemas donde el programa no requiera futuras actualizaciones y para series relativamente pequeas, donde la variante de mscara sea muy costosa, tambin para sistemas que requieren serializacin de datos, almacenados como constantes en la memoria de programas.

    EPROM Erasable Programmable Read Only Memory. Los microcontroladores con este tipo de memoria son muy fciles de identificar porque su encapsulado es de cermica y llevan encima una ventanita de vidrio desde la cual puede verse la oblea de silicio del microcontrolador.

    Se fabrican as porque la memoria EPROM es reprogramable, pero antes debe borrase, y para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de grabacin es similar al empleado para las memorias OTP. Al aparecer tecnologas menos costosas y ms flexibles, como las memorias EEPROM y FLASH, este tipo de memoria han cado en

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 9

    desuso, se utilizaban en sistemas que requieren actualizaciones del programa y para los procesos de desarrollo y puesta a punto.

    EEPROM Electrical Erasable Programmable Read Only Memory. Fueron el sustituto natural de las memorias EPROM, la diferencia fundamental es que pueden ser borradas elctricamente, por lo que la ventanilla de cristal de cuarzo y los encapsulados cermicos no son necesarios.

    Al disminuir los costos de los encapsulados, los microcontroladores con este tipo de memoria se hicieron ms baratos y cmodos para trabajar que sus equivalentes con memoria EPROM. Otra caracterstica destacable de este tipo de microcontrolador es que fue en ellos donde comenzaron a utilizarse los sistemas de programacin en circuito o ICSP (In Circuit Serial Progamming) que evitan tener que sacar el microcontrolador de la tarjeta que lo aloja para hacer actualizaciones al programa.

    FLASH. En el campo de las memorias reprogramables para microcontroladores, son el ltimo avance tecnolgico en uso a gran escala, y han sustituido a los microcontroladores con memoria EEPROM.

    A las ventajas de las memorias FLASH se le adicionan su gran densidad respecto a sus predecesoras lo que permite incrementar la cantidad de memoria de programas a un costo muy bajo. Pueden adems ser programadas con las mismas tensiones de alimentacin del microcontrolador, el acceso en lectura y la velocidad de programacin es superior, disminucin de los costos de produccin, entre otras. Lo ms habitual es encontrar que la memoria de programas y datos est ubicada toda dentro del microcontrolador, de hecho, actualmente son pocos los microcontroladores que permiten conectar memoria de programas en el exterior del encapsulado. Las razones para estas limitaciones estn dadas porque el objetivo fundamental es obtener la mayor integracin posible y conectar memorias externas consume lneas de E/S que son uno de los recursos ms preciados de los microcontroladores. A pesar de lo anterior existen familias como la INTEL 51 cuyos microcontroladores tienen la capacidad de ser expandidos en una variada gama de configuraciones para el uso de memoria de programas externa. En el caso de los PIC, estas posibilidades estn limitadas slo a algunos microcontroladores de la gama alta, la Figura 5 muestra algunas de las configuraciones para memoria de programa que podemos encontrar en los microcontroladores. La configuracin (a) es la tpica y podemos encontrarla casi en el 100% de los microcontroladores. La configuracin (b) es poco frecuente y generalmente se logra configurando al microcontrolador para sacrificar la memoria de programas interna, sin embargo el 8031 de INTEL es un microcontrolador sin memoria de programas interna. La configuracin (c) es la que se encuentra habitualmente en los microcontroladores que tienen posibilidades de expandir su memoria de programas como algunos PIC de gama alta.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 10

    Figura 5. Algunas configuraciones para memoria de programas en

    microcontroladores

    Cuando se requiere aumentar la cantidad de memoria de datos, lo ms frecuente es colocar dispositivos de memoria externa en forma de perifricos, de esta forma se pueden utilizar memorias RAM, FLASH o incluso discos duros como los de las PC, mientras que para los clculos y dems operaciones que requieran almacenamiento temporal de datos se utiliza la memoria RAM interna del microcontrolador. Esta forma de expandir la memoria de datos est determinada, en la mayora de lo casos, por el tipo de repertorio de instrucciones del procesador y porque permite un elevado nmero de configuraciones distintas, adems del consiguiente ahorro de lneas de E/S que se logra con el uso de memorias con buses de comunicacin serie.

    Interrupciones

    Para entender de una manera ms fcil que son las Interrupciones daremos un ejemplo cotidiano:

    Imagine que est esperando la visita de un amigo, al que llamaremos Juan. Usted y Juan han acordado que cuando l llegue a su casa esperar pacientemente a que le abra la puerta. Juan no debe tocar a la puerta porque alguien en la casa duerme y no quiere que le despierten.

    Ahora usted ha decidido leer un libro mientras espera a que Juan llegue a la casa, y para comprobar si ha llegado, cada cierto tiempo detiene la lectura, marca la pgina donde se qued, se levanta y va hasta la puerta, abre y comprueba si Juan ha llegado, si ste todava no est en la puerta, esperar unos minutos, cerrar la puerta y regresar a su lectura durante algn tiempo.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 11

    Como ver este es un mtodo poco eficiente para esperar a Juan porque requiere que deje la lectura cada cierto tiempo y vaya hasta la puerta a comprobar si l ha llegado, adems debe esperar un rato si todava no llega. Y por si fuera poco, imagine que Juan no llega nunca porque se le present un problema, tuvo que cancelar la cita y no pudo avisarle a tiempo, o peor, que Juan ha llegado a la puerta un instante despus que usted la cerraba. Juan, respetando lo acordado, espera un tiempo, pero se cansa de esperar a que le abran y decide marcharse porque cree que ya usted no est en la casa o no puede atenderlo. A este mtodo de atender la llegada de Juan lo llamaremos encuesta.

    Veamos ahora otro mtodo. En esta ocasin simplemente se recuesta en el sof de la sala y comienza a leer su libro, cuando Juan llegue debe tocar el timbre de la puerta y esperar unos momentos a que le atiendan. Cuando usted oye sonar el timbre, interrumpe la lectura, marca la pgina donde se qued y va hasta la puerta para atender a la persona que toca el timbre. Una vez que Juan o la persona que ha tocado el timbre, se marcha, usted regresa a su asiento y retoma la lectura justo donde la dej. Este ltimo es un mtodo ms eficiente que el anterior porque le deja ms tiempo para leer y elimina algunos inconvenientes como el de que Juan nunca llegue o se marche antes de que usted abra la puerta. Es, en principio, un mtodo simple pero muy eficaz y eficiente, lo llamaremos atencin por interrupcin.

    Los ejemplos anteriores, nos sirven para introducir los dos mtodos de trabajo que existen para la atencin de procesos en el mundo de los microcontroladores. Estos ejemplos no son de mi creacin, pero gracias a ellos comprend cmo es que se atiende a los procesos cuando utilizamos microcontroladores.

    El primero de ellos, la encuesta, es un mtodo eficaz, pero poco eficiente porque requiere realizar lecturas constantes y muchas veces innecesarias del estado del proceso que queremos atender. Sin embargo, es muy utilizado en la programacin de

    microcontroladores porque resulta fcil de aprender, la implementacin de cdigo con este mtodo es menos compleja y no requiere de hardware especial para llevarla adelante. Por otra parte, la encuesta, tiene muchas deficiencias que con frecuencia obligan al diseador a moverse hacia otros horizontes

    El mundo est lleno de situaciones; de las cuales no podemos determinar ni cuando, ni como ni por qu se producen, en la mayora de los casos lo nico que podemos hacer es enterarnos de que determinada situacin, asociada a un proceso, ha ocurrido. Para ello seleccionamos alguna condicin o grupo de condiciones que nos indican que el proceso que nos interesa debe ser atendido, a este fenmeno, en el cual se dan las condiciones que nos interesa conocer, lo llamaremos evento. En el segundo ejemplo vemos que para atender a Juan, ste debe tocar el timbre, por tanto, la llegada de Juan es el proceso que debemos atender y el sonido del timbre es el evento que nos indica que Juan ha llegado.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 12

    El mtodo de atencin a procesos por interrupcin, visto desde la ptica del ejemplo que utilic para mostrarlo, es ms simple que el de la encuesta, pero no es cierto, el mtodo se complica porque requiere que el microprocesador incorpore circuitos adicionales para registrar los eventos que le indican que debe atender al proceso asociado y comprender estos circuitos y su dinmica no es una tarea sencilla.

    Los circuitos para la atencin a las interrupciones y todas las tareas que debe realizar el procesador para atender al proceso que lo interrumpe son bastante complejos y requieren una visin diferente de la que estamos acostumbrados a tener de nuestro mundo.

    Los seres humanos no estamos conscientes de las interrupciones, en nuestro organismo existen mecanismos que nos interrumpen constantemente, para ello tenemos a nuestro sistema sensorial, pero no somos conscientes del proceso de interrupcin, aunque s de la atencin a las interrupciones. Eso es porque incorporamos mecanismos que nos sacan rpidamente de la tarea que estemos haciendo para atender una situacin que no puede o no debe esperar mucho tiempo. Bien, esa misma es la idea que se incorpora en los microprocesadores para atender procesos que no pueden esperar o que no sabemos cuando deben ser atendidos porque ello depende de determinadas condiciones.

    La cosa se complica en la secuencia de acciones a realizar desde el momento en que se desencadena el proceso de interrupcin, hasta que se ejecuta el programa que lo atiende, y en la secuencia de acciones posteriores a la atencin. Piense en cuantas cosas debe hacer su organismo ante una interrupcin, utilicemos el segundo ejemplo para atender la llegada de Juan. Piense en cuantas cosas su cerebro hace a espaldas de su conciencia, desde el momento en que suena el timbre hasta que usted se encuentra listo (consciente de que es probable que Juan ha llegado) para abrir la puerta, y todo lo que su cerebro debe trabajar para retomar la lectura despus que Juan se ha marchado. Todo eso, excepto abrir la puerta y atender a Juan, lo hacemos de forma inconsciente porque para ello tenemos sistemas dedicados en nuestro organismo, pero en el mundo de los microcontroladores debemos conocer todos esos detalles para poder utilizar los mecanismos de interrupcin.

    Los procesos de atencin a interrupciones tienen la ventaja de que se implementan por hardware ubicado en el procesador, as que es un mtodo rpido de hacer que el procesador se dedique a ejecutar un programa especial para atender eventos que no pueden esperar por mecanismos lentos como el de encuesta.

    En trminos generales, un proceso de interrupcin y su atencin por parte del procesador, tiene la siguiente secuencia de acciones.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 13

    En el mundo real se produce el evento para el cual queremos que el procesador ejecute un programa especial, este proceso tiene la caracterstica de que no puede esperar mucho tiempo antes de ser atendido o no sabemos en que momento debe ser atendido.

    El circuito encargado de detectar la ocurrencia del evento se activa, y como consecuencia, activa la entrada de interrupcin del procesador.

    La unidad de control detecta que se ha producido una interrupcin y levanta una bandera para registrar esta situacin; de esta forma si las condiciones que provocaron el evento desaparecen y el circuito encargado de detectarlo desactiva la entrada de interrupcin del procesador, sta se producir de cualquier modo, porque ha sido registrada.

    La unidad de ejecucin termina con la instruccin en curso y justo antes de comenzar a ejecutar la siguiente comprueba que se ha registrado una interrupcin

    Se desencadena un proceso que permite guardar el estado actual del programa en ejecucin y saltar a una direccin especial de memoria de programas, donde est la primera instruccin de la subrutina de atencin a interrupcin.

    Se ejecuta el cdigo de atencin a interrupcin, esta es la parte consciente de todo el proceso porque es donde se realizan las acciones propias de la atencin a la interrupcin y el programador juega su papel.

    Cuando en la subrutina de atencin a interrupcin se ejecuta la instruccin de retorno, se desencadena el proceso de restauracin del procesador al estado en que estaba antes de la atencin a la interrupcin.

    Como podemos observar, el mecanismo de interrupcin es bastante complicado, sin embargo tiene dos ventajas que obligan a su implementacin: la velocidad y su capacidad de ser asincrnico. Ambas de conjunto permiten que aprovechemos al mximo las capacidades de trabajo de nuestro procesador.

    Los mecanismos de interrupcin no solo se utilizan para atender eventos ligados a procesos que requieren atencin inmediata sino que se utilizan adems para atender eventos de procesos asincrnicos.

    Las interrupciones son tan eficaces que permiten que el procesador acte como si estuviese haciendo varias cosas a la vez cuando en realidad se dedica a la misma rutina de siempre, ejecutar instrucciones una detrs de la otra.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 14

    PIC16F628

    Ya hablamos de la arquitectura del Micro, sus registros e Interrupciones, pues bien hablemos entonces del PIC. Centraremos nuestro estudio a esta Familia de Micros, si bien existen el el Mercado una gran variedad de micros de diferentes Familias y Empresas que los desarrollan y Fabrican segn sus especificaciones y diseos, nosotros dedicaremos nuestro estudio a la Empresa MicroChip y especialmente a el verstil 16F628.

    Como podemos ver en la figura siguiente este micro consta de 16 pines de mltiple propsito ms 2 pines de Alimentacin, necesarios en cualquier circuito.

    Como se puede ver el micro consta de 2 Puertos, el Puerto A y el Puerto B y a la vez cada puerto contiene 8 pines que van desde RA0 a RA7 y RB0 a RB7 La alimentacin de estos Circuitos Integrados es de 3.3Volts a 5Volts.

    NO USAR UN VOLTAJE SUPERIOR A 5.5 VOLTS, UN VOLTAJE SUPERIOR PODRIA DAARLO PERMANENTEMENTE

    Como se puede ver, cada pin tiene asociado una caracterstica particular, estas caracterstica son las funciones que pueden o no ser utilizadas por nosotros, es decir, podemos trabajar con salidas netamente Digitales (0 y 1) o bien utilizar la funcin con la que viene alojada en el micro con solo habilitarlo por Software

    Estas caractersticas son:

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 15

    Caracterstica Propiedad

    Memoria de programa 1 KBytes)

    Memoria SRAM 224 Bytes

    Memoria EEPROM 128 Bytes

    Pines de E/S 16

    Entradas analgicas (ADC) No

    Salidas PWM 2

    SPI No

    I2C No

    USART Si

    Temporizadores de 8 Bits 2

    Temporizadores de 16 Bits 1

    Comparadores 2

    Oscilador Frecuencia mxima: 20 MHz Oscilador interno de 4 MHz.

    Nmero de pines 18

    Encapsulado PDIP, SOIC, SSOP, QFN

    Puertos del PIC 16F628

    Como dijimos anteriormente el 16f628 posee 2 puertos con 8 salidas cada una, si bien el estudio que daremos en este curso es solo digital nombraremos las caractersticas analgicas y funciones solo para saber el potencial de nuestro Micro.

    PUERTO A

    RA.0 = AN0 Entrada Comparadora 1

    RA.1 = AN1 Entrada Comparadora 2

    RA.2 = AN2/Vref Entrada Comparadora 3 - Voltaje de referencia

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 16

    RA.3 = AN3/CMP1 Entrada Comparadora 4 - Salida Comparador 1

    RA.4 = TOCKI/CMP2 Entrada de Clock para TMR0 ______

    RA.5 =MCLR/Vpp Master Clear (reset) y Voltaje de programacin

    RA.6 = OSC/CLKOUT Oscilador Externo Clock Output

    RA.7 = OSC/CLKIN Oscilador Externo Clock Input

    PUERTO B

    RB.0 = INT Interrupcin Externa

    RB.1 = RX/DT Recepcion USART

    RB.2 = TX/CK Transmisin USART

    RB.3 = CCP1 Captura Comparador

    RB.4 = PGM Pin Habilitacin del Programacin del micro

    RB.5 = Propsito general

    RB.6 = T1OSI/PGD Timmer 1 Oscilador Input Prog. DATA

    RB.7 = T1OSO/T1CKI/PGC Timmer 1 Oscilador Output Prog. CLOCK

    Lenguajes de Programacin

    Bien, avanzaremos en lo que nos interesa, la programacin del micro. Si bien nos podemos encontrar con varios lenguajes de programacin (C++, Assembler, BASIC, PIC Basic) el lenguaje que usaremos para esta materia es el BASIC.

    Veamos algunos ejemplos

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 17

    Basic: AllDigital inicio: If PORTA.0 = 1 Then GOTO inicio

    Significara, Si la puerta 0 es igual a 1 entonces ir a Inicio

    Assembler:

    ; Begin

    R0L EQU 0x20

    R0H EQU 0x21 R1L EQU 0x22

    R1H EQU 0x23

    R2L EQU 0x24 R2H EQU 0x25

    R3L EQU 0x26

    R3H EQU 0x27 R4L EQU 0x28

    R4H EQU 0x29

    R5L EQU 0x2A

    R5H EQU 0x2B

    ORG 0x0000

    BCF PCLATH,3

    BCF PCLATH,4 GOTO L0002

    ORG 0x0004

    RETFIE

    L0002: ; 1: AllDigital

    MOVLW 0x07

    MOVWF 0x1F ; 2: inicio:

    L0001:

    ; 3: If PORTA.0 = 1 Then GOTO inicio BTFSS 0x05,0

    GOTO L0003

    GOTO L0001

    L0003: MOVLW 0x1F ANDWF STATUS,F

    ; End of program

    L0004: GOTO L0004 ; End of listing

    END

    Esta claro que en Basic es mucho mas fcil no!, pero para que nos sirve Assembler entonces?, Como vimos cualquier de los lenguajes nombrados deben terminar en un lenguaje que el micro entienda (Binario), obviamente que no podramos estar a un nivel de lenguaje de mquina, es decir, programando o escribiendo en ceros y unos, pero si acercarnos

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 18

    Lenguaje de Alto y Bajo Nivel

    El BASIC es un lenguaje de Alto Nivel, mientras otros como el Assembler son de Bajo Nivel Qu significa Alto y Bajo Nivel? Se define como alto nivel aquel lenguaje que est ms cerca de ser comprendido por el usuario, (Basic, C++, etc.) Al fin y al cabo los dos llegaran al mismo propsito, con significativas diferencias en cuanto a la eficiencia dada por las instrucciones y ocupacin de memoria, es un lenguaje intuitivo y consta de palabras o instrucciones fciles de entender. Por el otro lado un lenguaje de Bajo Nivel es aquel que esta mas cerca del lenguaje de Maquina (Binario). Pero sigue la incgnita, para que me sirve Assembler? Este lenguaje es muy utilizado en cuestiones donde la velocidad de respuesta, tiempos y dems cuestiones muy significativas entran en juego, es decir, donde la mnima variacin de un bit cuenta, no nos referimos a un bit en cuanto a entradas, sino a bit en cada instruccin o contador del programa (CP) que puede variar en un salto de ciclo a otro en cuestin de micro segundos.

    Pero para el uso que le vamos a dar en nuestro Curso nos es suficiente entender BASIC, queda a criterio del estudiante ahondar mas sobre el tema y por qu no, programar en Assembler

    Sigamos.

    Vimos que un compilador es aquel que traduce nuestro programa a un cdigo el cual es entendido por nuestro dispositivo (Pc, Micro Controlador,) la eficiencia del compilador estar dada por el menor recurso utilizado (Ocupacin de Memoria) y el mejor rendimiento o desempeo para nuestra tarea

    Un compilador entonces es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, en nuestros caso ser un traductor de un lenguaje de alto nivel, a su cdigo mquina absoluto o reubicable equivalente.

    Adems sabemos tambin que un integrado cualquier trabaja con 0 y 1, entonces cualquier de estos lenguajes indefectiblemente deber terminar en un cdigo BINARIO.

    Otro Punto Importante es el QUEMADOR, este Dispositivo sirve para grabar en el Micro la programacin de la que hablamos anteriormente. Es necesario tanto el Software como el Hardware para realizar este propsito, en nuestro caso usaremos tanto WINPIC como el IC-Prog que son los que soportan el circuito JDM Programmer el cual es sencillo de fabricar Este Dispositivo utiliza el Puerto RS-232 y no requiere alimentacin externa por lo cual lo hace mas practico. El circuito puede ser consultado desde Internet en la siguiente direccin http://www.jdm.homepage.dk/newpic.htm

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 19

    Pic simulator IDE

    Existe una herramienta que nos ayudara a la hora de realizar nuestros proyectos, este Software es un Simulador que contiene varias herramientas internas como Matriz de Led, Motores PaP, LCD, Internas RS232, teclado ademas de contar con un programador en BASIC y un COMPLIADOR que transformara nuestro Proyecto a lenguaje maquina Este programa ser donde el estudiante har sus simulaciones, la misma cuenta con varios accesorios para que el estudiante hagas sus pruebas, simulaciones y programas en BASIC. Con el aprender varias de las instrucciones que usa este excelente programa y podr realizar proyectos con muy buenos resultados. Este puede ser descargado desde su Web en la siguiente Direccin

    http://www.oshonsoft.com/pic.html Veamos la presentacin de Software

    En la pgina podrn encontrar las instrucciones con las que trabaja este Prctico programa el cual ser utilizado en nuestros proyectos ya que cuenta con la posibilidad de Simular antes de quemar nuestro PIC

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 20

    IC-Prog

    Ya veremos la programacin y como trabajar sobre el PIC, pero debemos saber que una herramienta fundamental a la hora de ingresarle la programacin al PIC es el Quemador.Este quemador no es mas ni menos que una herramienta la cual esta conectada a una PC y es la encargada de enviarle nuestra programacin en lenguaje maquina (0 y 1) por medio de Impulsos Elctricos. Esto se logra con otro Software llamado IC-Prog que puede ser descargado desde su web http://www.ic-prog.com/

    JDM Programmer RS-232

    Pero bien, nos falta algo, con que lo vamos a Quemar a nuestro PIC, nos hace falta el HARDWARE para realizarlo. Existe una variedad interesante de programadores PIC, por medio de RS232, USB, Puerto Paralelo, pero todos hacen exactamente lo mismo, ms rpido o ms lento pero todos llegan al mismo fin, grabar nuestro PIC El JDM Programmer es un programador que podemos realizar en forma casera con resultados ptimos El GTP USB Lite es un poco mas avanzado pero con resultados en cuanto a velocidad y compatibilidad, ya que las PC de ultima generacin no poseen puerto Serial pero si USB. Queda a criterio del Alumno hacer uno u otro programador, aqu les presentamos el JDM, pero no quita que el alumno realice el GTP USB Lite

    Circuito del JDM Programmer:

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 21

    El BASIC en PIC Simulator

    Como mencionamos anteriormente el lenguaje que vamos a utilizar es el BASIC, ya sea porque es bastante fcil de entender y adems para nuestros proyectos como se dijo antes, nos alcanza y sobra.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 22

    Comportamiento Digital

    Vamos a ver tambin el comportamiento digital, la idea es que sepan trabajar primero sabiendo este tipo de comportamiento en los Micro y luego ir avanzando en la parte analgica. De esta forma las salidas sern 0 o 1 es decir, Vcc o Vdd, encender o apagar, pulsado o no pulsado, entonces trabajaremos entre estos dos valores discretos.

    Empecemos

    Instrucciones y Variables

    Instruccin: Es un conjunto de datos insertados en una secuencia estructurada o especfica que el procesador interpreta y ejecuta., es como si alguien no dara una orden y la cumpliramos tal cual al pie de la letra, de esta forma trabaja un micro, obedeciendo nuestras instrucciones. Generalmente una instruccin viene acompaada de una variable, pues bien, que es una variable. En programacin, las variables son estructuras de datos que, como su nombre indica, pueden cambiar de contenido a lo largo de la ejecucin de un programa Ejemplo: Instruccin Variable For A 1 to 100 Setp 1 Donde For es la instruccin y A es la variable Declarada anteriormente

    Variable: Imaginemos a una Variable como una Caja Grande, es esta caja grande puedo meter hasta 255 cajitas de Fsforos, entonces la caja grande ser la variable y las cajitas sern el valor o la cantidad de cajitas de Fsforos que tengo, pero que pasara si necesito meter 300 Fsforos, Me sirve esta variable?.NO, como lo soluciono, pues fcil, consigo una caja mas grande, por lo cual esta variable se llamara igual a la primera, pero la diferencia radicara en el tamao de la caja. Pues bien, pero por el contrario, que pasara si tengo una caja del tamao de un Galpn para guardar solo 1 cajita de Fsforos, me serviraSI, pero seria lo Indicado?..Seguramente ya se darn cuenta por que no, es claro, seria muy costoso y poco practico tener un Galpn para Guardar una caja de fsforos!!!!! En el Micro pasara lo Mismo, se desperdiciara Memoria y Recursos para algo que no tendra sentido. SIEMPRE SE DEBE SELECCIONAR UN TAMAO DE VARIABLE ACORDE A EL VALOR QUE TENGA O LLEGUE A TENER LA VARIABLE EN TODO EL PROGRAMA

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 23

    En la programacin (PIC Simulator) las variables pueden ser del orden de un Bit, un Byte, un Word o un Long que equivalen a: Bit: valores de 0 a 1 Byte: valores de 0 a 255 Word: valores de 0 a 65535 Long: valores de 0 a 4294967295 En PIC Simulator se le asigna el valor con la Instruccin DIM

    Ejemplo: Dim A as Byte Dim var as Long Dim Valor as Bit A = 200 correcto Var = 1024 correcto pero poco eficiente Valor = 20 Incorrecto, solo puede ser 0 o 1

    LECTURA DE LA PROGRAMACION

    Se deber tener en cuenta que la programacin es leda, salvo casos que nombraremos mas adelante, de forma secuencial, que quiero decir con esto, que es leda de arriba hacia abajo y se deber respetar ciertas reglas, un ejemplo seria que no puedo declarar las variables al final de la programacin o decirle que el micro trabajara de forma Digital en todos sus pines al final del programa.

    ALLDIGITAL

    Esta instruccin dejara a nuestro Microcontrolador funcionando con valores discretos, es decir, si posee entradas comparadoras, pwm, conversores A/D y dems los anulara para poder utilizarlo como entrada o salidas con valores discretos de 0 y 1 (Vcc y Vdd). Es importante establecer esto ya que de otra forma podremos obtener resultados inesperados.-

    TRISx

    Define el comportamiento de los puertos del Micro, si adopta un valor igual a cero (0) este Pin ser utilizado como Salida, si por el contrario adopta un valor igual a uno (1) este se comportara como Entrada. Tener siempre en cuenta que cuando se define un Puerto este puede ser escrito en Decimal, binario o Hexadecimal, Siendo el Binario el mas fcil de interpretar Ejemplo: TRISA = 200 TRISA = %11001000

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 24

    TRISA = 0xC8 En realidad estos tres valores son exactamente igual, pero en binario antecedido por el smbolo % vemos pin por pin el Puertoveamos

    RA.7 RA.6 RA.5 RA.4 RA.3 RA.2 RA.1 RA.0 TRISA = % 1 1 0 0 1 0 0 0 Ent Ent Sal Sal Ent Sal Sal Sal

    PORTx

    Asigna un valor a la salida del Portx, este puede ser Bit a Bit o puerto Completo Ejemplo: PORTA=%01000000 PORTA.6=1

    En cualquiera de los dos casos si conectamos un led a la salida RA6 este se encender. Es importante antes de seguir con las prximas instrucciones que se entienda estas dos instrucciones y la forma de proceder para energizar una salida o leer una entrada x de cualquier Port. Se lo puede hacer de las dos maneras mencionadas, por Puerto General por as decirlo (PORTA= %XXXXXXXX) o por puerto Individual (PORTA.6=1) obteniendo el mismo resultado.

    WAITMS WaitUs

    Esta instruccin hace que el micro espere un tiempo antes de seguir con la prxima instruccin, este tiempo estar determinado por Mili Segundos en caso de ser WAITMS o bien Micro Segundos si es WaitUs. Ejemplo: Alldigital Declaro todos los pines como digital TRISA = &00000000 Todos los puertos A como Salida PORTA.0=1 Enciendo un Led en el puerto RA1 WAITMS 1000 Espero 1 Seg PORTA.0=0 Apago el Led en RA1

    GOTO

    Esta Instruccin realiza un salto o bucle como bien dice la palabra GO TO o Ir a, se usa par apuntar a un destino ya definido siempre finalizndolo a este destino con dos puntos:.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 25

    Es decir, siempre que uso la palabra GOTO va precedido del destino, el cual debera esta indicado en el programa y finalizndolo con : Ejemplo: Inicio: PORTA.0=1 Enciendo un Led en el puerto RA1 WAITMS 1000 Espero 1 Seg PORTA.0=0 Apago el Led en RA1 WAITMS 1000 Espero 1 Seg GOTO Inicio Vuelvo a Inicio y repito el bucle Indefinidamente

    DIM

    Define las variables, en esta instruccin debemos asignarle el tamao que ira a tener nuestra variable, ya sea un bit, un byte, un Word o un long, a tener en cuenta, una variable es un nombre, por lo cual algunos caracteres no puede ser usados al igual que nmeros y adems el valor que tomara esta variable no deber ser nunca mayor que el tamao asignado. Ejemplo: DIM var AS Byte DIM tiempo AS Word Var = 16 Tiempo = 1024

    SYMBOL

    Se utiliza para reemplazar una parmetro con un smbolo o nombre, esto nos ayuda en un programa entender mejor un la lectura Ejemplo: SYMBOL led1 = PORTB.0

    SYMBOL led2 = PORTB.1

    led1 = 0

    led2 = 1

    Que seria lo mismo que

    PORTB.0 = 0

    PORTB.1 = 1

    IF THEN ELSE Esta instruccin es un condicionante, es decir, es quien se encargara de devolver cierto resultado si se cumple tal o cual condicin, podramos traducirlo como: SI esto es asi ENTONCES realizar esto SINO realizar esto otro

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 26

    Ejemplo: IF PORTA.6=1 THEN GOTO inicio Si puerto RA6 leo un 1 entonces voy a inicio GOTO stop Sino voy a Stop

    Fjense que ELSE no esta en el programa, esto es porque este o no en el programa sabe que si la condicin no se cumple salta a la prxima instruccin

    Ejercicios

    1) Realice segn el siguiente diagrama de flujo el programa correspondiente

    2) Realice segn el siguiente diagrama de flujo el programa correspondiente

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 27

    3) Resuelva las siguientes condiciones, si la entrada de A2 es igual a 1 encienda las salidas B7 y B6, si la entrada es igual a 0 encienda solo B7 , si la entrada A3 es igual a 1 encienda B1, si es igual a 0 apague B1y si la entrada A4 es igual a 1 encienda B3 y B4, si es igual a cero no ejecute ningn comando y deje el puerto B con todas sus salidas igual a cero. Deber hacer el diagrama de flujo correspondiente

    FOR TO STEP NEXT

    Esta instruccin es utilizada como contador donde podemos predefinir Inicio- Fin y los saltos de paso en paso Siempre debemos definir con anterioridad una variable para esta funcin, ya que esta variable ira modificando su valor a lo largo del programa., cabe destacar que esta variable deber ser por lo menos de un BYTE o mas, de otra forma seria imposible. En cada iteracin del bucle, la variable va cambiando su valor. Cuando el valor de la variable alcanza o supera el valor prefijado, el bucle termina y prosigue con la prxima instruccin. Ejemplo: DIM a AS BYTE 'Declaro la variable "A" como BYTE DIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD TOTAL = 0 'Asigno "0" a la variable "TOTAL". FOR a = 1 TO 100 STEP 1 '"A" va de 1 a 100 de 1 en 1 TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 28

    NEXT a 'fin del bucle

    LOOKUP La funcin LOOKUP puede ser utilizada para seleccionar un Byte desde una lista de constantes del mismo tipo, de acuerdo al valor de un ndice (tambin de tipo Byte). El resultado de la seleccin se almacena (como no!) tambin en una variable tipo byte. Ejemplo: DIM cuenta AS BYTE DIM Var AS BYTE Cuenta = 3 Var = LOOKUP (25, 35, 55, 70, 85, 100), indice

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

    SHIFTLEFT SHIFTRIGHT Estas dos son funciones que operan a nivel bit que pueden ser utilizadas para "correr" el contenido de variable a la izquierda o a la derecha. Cada uno de los bits que componen la variable se desplazan una posicin (a la izquierda o a la derecha, de acuerdo a que funcin utilicemos). 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 extremo se completa con un "0".

    AllDigital

    TRISC = %00000000 Todos los pines como salidas PORTC = %00000001 goleft: WAITMS 500 PORTC = ShiftLeft(PORTC, 1)

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 29

    If PORTC = %10000000 Then GOTO goright GOTO goleft goright: WAITMS 500 PORTC = ShiftRight(PORTC, 1) If PORTC = %00000001 Then GOTO goleft GOTO goright Lo que hace el programa es muy sencillo: enciende el primer bit del PORTC y espera durante medio segundo. Luego, desplaza hacia la izquierda el contenido del byte que representa al PORTC en la memoria del Microcontrolador, y verifica si esos bits llegaron al extremo. Si es as, se invierte el sentido del desplazamiento.

    WHILE WEND La segunda estructura de control que proporciona PIC BASIC es WHILE - WEND. Su propsito tambin es la construccin de bucles que se ejecutan un nmero de veces, y se puede decir que esta a mitad de camino entre la construccin de un bucle mediante etiquetas y GOTOs y la utilizacin de un FORNEXT. Su estructura es la siguiente:

    WHILE condicin instruccion1 instruccion2 ...

    instruccion n 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 vimos antes para la instruccin IF-THEN-ELSE-ENDIF.

    Por supuesto, si no somos cuidadosos al momento de elegir la condicin, puede darse el caso de que el nmero de repeticiones del bucle sea infinito, y nunca salgamos de l. De hecho, esta circunstancia se aprovecha en algunos programas para repetir indefinidamente un grupo de instrucciones. Tambin hay que tener presente que si la condicin no es cierta al momento de ejecutar la primera vez el WHILE, el flujo del programa pasara directamente a la instruccin posterior al WEND y las instrucciones dentro del bucle no se ejecutaran ninguna vez.

    No hay mucho ms para decir de WHILE-WEND , solo analizar algunos ejemplos: Ejemplo 1:

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 30

    El siguiente es un bucle infinito. Como dentro del cuerpo del WHILE-WEND no se cambia el 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 anterior del tutorial. DIM A AS BYTE A = 0 ...

    WHILE A = 0 instruccion1 instruccion2 ...

    instruccion n WEND ...

    Ejemplo 2: Las instrucciones dentro del siguiente WHILE-WEND no se ejecutan nunca, dado que la condicin siempre es falsa: DIM A AS BYTE A = 0 ...

    WHILE A > 0 instruccion1 instruccion2 ...

    instruccin n 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 BYTE DIM A AS BYTE A = 0 B = 0

    WHILE A < 20 A = A + 1 'Incremento la variable A B = B + A 'Sumo a B el valor de la variable A WEND

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 31

    Cuando A = 20, se suma su valor a A, y al llegar al WEND el control del programa se transfiere al WHILE, donde se evala la condicin A < 20, se determina que es falsa, y el programa 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.

    GOSUB Esta instruccin es muy parecida a un GOTO con la diferencia que esta al ejecutarse realiza un salto (GOTO) a la instruccin que le digamos y cuando termine de ejecutarla esta retornara a la siguiente instruccin que le sigua a GOSUB. Es decir, veamos el siguiente ejemplo:

    GOSUB alto Bajo: PORTA.7=0 Alto: PORTA.7=1

    La instruccin GOSUB realizara un salto a la bandera ALTO poniendo el puerto A.7 en 1, cuando termine de ejecutar esta instruccin retornara a la instruccin siguiente a GOSUB el cual es la bandera BAJO poniendo un 0 en el puerto A.7 y luego seguir con las instrucciones normalmente

    HSEROUT / HSERIN

    Esta funcin nos permite establecer una comunicacin SERIAL por ejemplo entre el Micro y una PC mediante el puerto RS232 (Puerto Serial de la PC)

    Ejemplo:

    AllDigital TRISA = 255 Dim i As Byte 'declare a variable

    inicial: Hseropen 9600 Hserin i If i = "c" Then GOTO inicio

    inicio: If PORTA.3 = 1 Then GOTO PORTA31 If PORTA.3 = 0 Then GOTO PORTA30

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 32

    PORTA31: Hserout "Puerto A3=1", Cr, Lf GOTO inicial PORTA30: Hserout "Puerto A3=0",Cr, Lf GOTO inicial

    Con este programa al encender el Micro y estar conectado a un Serial de la PC con un Software de Comunicacin serial como ser el Hyper Terminal de Windows o Secure CRT esperara a que se teclee la letra c y luego leer los estados del Puerto A3 y lo mostrara en Pantalla

    Freqout Esta instruccin hace de nuestro PIC un generador de tono, con solo colocar el Puerto, Frecuencia y Duracin para que este nos genere un tono,

    TRISB.0 = 0 FreqOut PORTB.0, 600, 1000

    Ejercicios

    1) Enve mediante RS232 a una PC el mensaje Hola Mundo cuando ingrese desde pantalla la letra C

    2) Realice un contador ascendente en binario con salida por puerto B y cuando este llegue a 255 realizar conteo de forma descendente

    Manejo de LCD en PIC El manejo de los LCD se hace mediante el uso de sentencias DEFINE, que le dicen al compilador a que pines del Microcontrolador hemos conectado cada uno de los pines del LCD. La forma de la instruccin DEFINE es la siguiente:

    DEFINE parmetro = valor

    Donde parmetro 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 de

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 33

    4 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 al LCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y 3) 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. Los valores 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. Por defecto se asume 3.

    LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Los valores 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 defecto se asume 2.

    LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Los valores 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. Por defecto se asume 0, que significa no usamos el pin RW.

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

    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 e instrucciones al display:

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

    LCDINIT n

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 34

    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 cursor subrayado, y 3 un cursor subrayado y parpadeando.

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

    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. X puede tener cualquier valor entre 1 y 40 LcdLine2Pos(x): Coloca el cursor en la posicin x del segundo rengln del LCD. X puede tener cualquier valor entre 1 y 40

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

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 35

    Un LCD en accin.

    A continuacin, un par de ejemplos de cmo se utilizan todas estas instrucciones. El primero 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 = 8 DEFINE LCD_DREG = PORTB DEFINE LCD_DBIT = 0 DEFINE LCD_RSREG = PORTD DEFINE LCD_RSBIT = 1 DEFINE LCD_EREG = PORTD DEFINE LCD_EBIT = 3 DEFINE LCD_RWREG = PORTD DEFINE LCD_RWBIT = 2

    LCDINIT 0 inicializo el LCD sin cursor.

    loop: LCDOUT "www.NeoTeo.com" Muestra el texto WAITMS 1000 Espero un segundo LCDCMDOUT LcdClear Borro el display WAITMS 1000 Espero un segundo GOTO loop Vuelvo a loop: para repetir indefinidamente.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 36

    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 se cuentan los nmeros del 65535 al 0 en el segundo. DEFINE LCD_BITS = 8 DEFINE LCD_DREG = PORTB DEFINE LCD_DBIT = 0 DEFINE LCD_RSREG = PORTD DEFINE LCD_RSBIT = 1 DEFINE LCD_EREG = PORTD DEFINE LCD_EBIT = 3 DEFINE LCD_RWREG = PORTD DEFINE LCD_RWBIT = 2

    DIM A AS WORD A = 65535

    LCDINIT 3 Cursor parpadeando WAITMS 1000

    loop: LCDOUT "Estoy contando! Texto del primer rengln LCDCMDOUT LcdLine2Home Paso al Segundo rengln LCDOUT #A Muestro el valor de A A = A - 1 WAITMS 250 LCDCMDOUT LcdClear Limpio del display GOTO loop Esto es todo por hoy. La semana prxima veremos cmo implementar estos ejemplos en una placa de expansin para nuestro PIC TRAINER, y tambin como definir nuestros propios caracteres especiales. Hasta la prxima!

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 37

    Veremos como definir nuestros propios caracteres.

    Estos LCD son ideales para modding.

    El HD44780 En muchos casos, la sealizacin de estados de nuestros proyectos mediante diodos LED resulta insuficiente. Una alternativa muy profesional y econmica (y de fcil implementacin) es la utilizacin de displays LCD alfanumricos. 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 precio accesible, con caractersticas comunes en cuanto a la interfaz y programacin, gracias que la 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 desde un 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 (tipo gota) 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 para poder fijar el conjunto a un chasis o gabinete sin grandes complicaciones. Desde el punto de vista elctrico, hay un conector (a veces solo agujeros metalizados donde soldar los cables) que tiene 14 pines en los que no poseen iluminacin propia (backlite) o 16 en los que si la tienen.

    Vista trasera de un LCD 2x16 tpico. Hermoso: un LCD de 4 lneas de 40 caracteres,

    color azul.

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 38

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

    PinOut del LCD HD44780 Descripcin de los pines Como mencionamos, la gran mayora de los display existentes en el mercado respetan la misma distribucin de pines. Igualmente, antes de conectar nada, debemos asegurarnos de que as sea, para no daar de forma permanente el LCD. Siempre es necesario tener a mano la DataSheet (hoja de datos) del componente electrnico que queremos usar. Veamos qu 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 la alimentacin, y el pin 2 (Vdd/Vcc) es el que va unido al positivo (5 voltios). El pin 3 permite el ajuste del contraste del panel. Se puede unir al pin 1 mediante una resistencia de 220 ohm para obtener un contraste adecuado (pero fijo) o bien utilizar un potencimetro o preset 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 al controlador 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 o conocer su estado (R/W=1). Por ltimo, 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 de la pantalla. Llamados DB0-DB7 son los encargados de recibir (o enviar) los comandos o datos desde o hacia el display. DB0 es el bit de menor peso y DB7 es el ms significativo. Por ltimo, los pines 15 y 16 son los que se utilizan para alimentar el (o los) LEDs de fondo de la pantalla, que brindan la iluminacin (backlight). El pin 15 debe ser conectado a 5 voltios y el 16 al negativo o masa de la fuente. En estas condiciones, la luz de fondo est encendida a 100% de su brillo. Nuevamente, se

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 39

    puede utilizar un potencimetro o preset para ajustar el brillo. Como una nota curiosa, muy frecuentemente estos dos pines estn ubicados ANTES del pin 1 (ver esquema). Debemos asegurarnos de cul es su posicin consultando la hoja de datos del fabricante o la serigrafa que existe sobre la placa del LCD. Estos display soportan dos modos de trabajo: en uno de ellos reciben en DB0-DB7 los 8 bits 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 complicar ligeramente 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 microcontroladores con pocos pines de I/O es muy til.

    Los pines de un display LCD genrico. De esa forma podemos controlar el contraste

    del LCD.

    A grandes rasgos, y a pesar de la simplicidad que brinda el disponer de un mismo integrado especializado en casi todos los modelos de display, la escritura en estos es relativamente compleja, dado que se deben respetar protocolos de inicializacin, tiempos entre envo de datos, etc., lo que hace bastante tediosa su programacin en assembler. Pero PIC BASIC dispone de un juego de instrucciones especiales para manejar display en modo 8 bits y en modo 4 bits que nos evitan toda esa complejidad. Veremos cules son y

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 40

    algunos ejemplos de uso. La prxima semana realizaremos un mdulo para el PIC TRAINER y escribiremos varios programas de ejemplo.

    Ejemplos en BASIC

    Ejemplo 1

    Este es el clsico ejemplo Hola Mundo

    AllDigital

    TRISA = %11111111 TRISB = %00000000

    loop: PORTB.3 = 1 WAITMS 500 PORTB.3 = 0 WAITMS 500 GOTO loop

    Ejemplo 2

    Con este ejemplo hacemos que lea el estado de un pulsador y lo indique sobre un led a la salida

    AllDigital

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

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

    loop: led = pulsador GOTO loop

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 41

    Ejemplo 3

    Este ejemplo usa la funcin lookup para representa un contador de 7 segmentos de 0 a 9, observe que en una lnea se resume los dgitos a representar

    Dim digito As Byte Dim mascara As Byte Inicio: digito = 0 'Comienzo el bucle principal loop: if digito = 9 then GOTO inicio TRISB = %00000000 mascara = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digito PORTB = mascara WAITMS 1000 'Espero un segundo digito=digito + 1 GOTO loop End

    Ejemplo 4

    Este realiza un contador a la salida del puerto C de 0 a 100

    AllDigital TRISC = 0 Dim a As Byte

    For a = 0 To 100 WAITMS 250 PORTC = a Next a

    Ejemplo 5

    Estos son ejemplos de contadores, observe cual es la diferencia entre uno y otro

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

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 42

    DIM 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 en 1 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 BYTE DIM 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 1 TOTAL = 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 las variables INICIO y FINAL. Hay casos en que es necesario que el valor de la variable de control del bucle se decremente en lugar de ir aumentando. Un cronometro descendente seria una aplicacin prctica de este caso. Para lograr esto, se puede usar un valor negativo para STEP. El siguiente ejemplo cuenta 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 5 instruccion1 instruccion2 ...

    instruccin n NEXT A 'fin del bucle.

    Ejemplo 6

    Este programa genera un tono en RB.0 si RA.0 es igual a 1,la frecuencia ser de 6000 hz y durara 100 Ms

    AllDigital

  • E.E.T N 460 Guillermo Lehmann Departamento de Electrnica

    Micro Controladores PIC Curso; 5 B Ao 2010 43

    TRISA = 1 loop: If PORTA.0 = 1 Then Goto inicio Goto loop inicio: TRISB.0 = 0 FreqOut PORTB.0, 6000, 100 Goto loop

    Bibliografa:

    Revista U Control, Autor Ariel Palazzesi - http://www.ucontrol.com.ar/

    Oshon Software, Web - http://www.oshonsoft.com/

    MicroPic, Web - http://www.micropic.es/

    NeoTeo, Web - http://www.neoteo.com/

    Todo PiC, Web - http://www.todopic.com.ar/