Sie sind auf Seite 1von 124

1. MICROCONTROLADOR 16F873A 1.2 Estructura del Microcontrolador Generales.

Si tomamos como punto de partida el 16F84A, vemos que es adecuado para sistemas pequeos, pero es insuficiente para aplicaciones ms demandantes, ya que es un micro puramente digital. Para aplicaciones mas profesionales que requieran comunicacin y conexin con el mundo analgico exterior vamos a necesitar microcontroladores ms poderosos. La potencia de un microcontrolador esta determinada por los tres elementos bsicos constitutivos del mismo que son: Ncleo o core de Microcontrolador + Memoria + Perifricos Podemos agregar mas potencia a un microcontrolador mejorando cualquiera de estas reas. El ncleo contiene la CPU, que puede ser hecha mas poderosa hacindola ms rpida o mejorando su arquitectura interna o su conjunto de instrucciones. La memoria puede ser hecha ms poderosa actualizando su tecnologa, incrementando su capacidad y velocidad. Por ltimo la adicin de los perifricos apropiados, pueden simplificar considerablemente el diseo de un sistema embebido. El 16F873A comparte el mismo core (mismo set de instrucciones) que el 16F84, pero a diferencia de este ltimo tiene una significativa mejora en lo que a memoria se refiere as como en la cantidad y diversidad de perifricos que forman parte del chip. Su distribucin de pines es la siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Y su constitucin interna es:

Descripcin general CPU y core. Recordemos que la estructura de la CPU esta conformada esencialmente por el ALU, el registro de trabajo W y el registro Status Como se puede apreciar del esquema la estructura en si de la CPU es exactamente igual a la existente en el 16F84A y a todos los micros del tipo 16F. La principal diferencia es que en el 16F873A los ltimos 2 bits del registro Status, ahora son usados para poder seleccionar algunos de los 4 bancos de memoria. 262 6 P POLITECNI GI CO N NA 2

1.2.3 Memoria de Programa. Observando el esquema notamos que la estructura de memoria del 16F873A es muy similar a la del 16F84A, siendo su principal diferencia en que ha sido agrandado su tamao. Siendo que el contador de programa (PC) es una palabra de 13 bits de ancho (213 = 8192) debera poder direccionar los 4KBytes (4096 Bytes) de memoria Flash que lo componen en forma directa, sin el uso de ningn registro auxiliar, sin embargo, no es as. La CPU ve la memoria fragmentada en pginas. Este es el mapa de memoria vista por la CPU del 16F873A:

La razn por la cual la memoria de programa tuvo que ser paginada en esta forma, es debido a las diferentes formas en que es generada la direccin de programa contenida en el registro PC, lo cual tiene su origen en los 14bit de la palabra de instruccin que no puede contener, a la ves, OPCODE + Direccin(13-Bits). El PC tiene 13 bits de ancho, sus 8 bits inferiores provienen del registro PCL, uno de los registros especiales que puede ser accedido y manipulado como cualquier otra posicin de la memoria Ram. Los 5 bits superiores del PC no pueden ledos, pero s escritos a travs de los 5 bits

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

inferiores del registro PCLATH, otro registro contenido en el SFR. El contenido del PCLATH es transferido a los 5 bits superiores del PC cada vez que es escrito el registro PCL.
Instrucciones operando en el PCL,ej. goto computado estos bits transferidos del PCLATH estos bits escritos al PCL

estos bits incrustados en la instruccin estos bits transferidos del PCLATH en una instruccin Call y Goto

Todos los bits desde/hacia el stack

En la ejecucin normal de un programa el Contador de Programa es incrementado despus de cada instruccin. Sin embargo hay 3 formas diferentes para cambiar su valor, a continuacin se describe cada uno de ellos. Por Transferencia desde Stack: El stack tiene un ancho de 13 bits. Por lo tanto toda instruccin, como return, que use el stack, causa un transferencia completa (de sus 13 bits) entre el stack y el PC, por lo tanto no hay que preocuparse en hacer algn tipo de correccin. Por las instrucciones call y goto: Debido a formato que tienen las instrucciones:

262 6 P GI N NA 2

POLITECNI CO

Estas instrucciones de por s, aportan solo los 11 bits inferiores del PC, pudiendo direccionar solamente 2K de memoria (211 = 2048) que es precisamente el tamao de las pginas vista por la CPU. Los 2 bits superiores que faltan del PC son tomados de los bits 4 y 3 del registro PCLATH. El programador es el responsable de reconocer si se va a producir un salto de pgina y modificar los bits 3 y 4 del registro PCLATH antes de ejecutar las instrucciones goto o call. Por escribir el registro PCL: El PCL es escrito directamente en situaciones como cuando se implementa tablas o goto computado. En esta situacin solo los 8 bits inferiores del PC, reflejado en el registro PCL, son escritos en forma directa, esto es como si el programador estuviera trabajando con pginas de 256 palabras. Los 5 bits superiores del PC son tomados de los valores contenidos en los 5 bits inferiores del PCLATH. 1.2.4 Memoria de datos y registros de funciones especiales Estructuralmente la memoria esta dividida en 4 bancos, los cuales son seleccionados por los valores contenidos en los bits 5 y 6 del registro Status.

Sumados a estos 2 bits faltan 7 bits para poder direccionar las 128 posiciones posibles de cada banco. Estos bits estn directamente encastrados en el cdigo de operacin de las instrucciones.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Para el caso del direccionamiento indirecto para formar la direccin de 9 bits se usan los 8 bits del registro FSR ms el 7 bit del registro Status.

Se puede observar que los 2 primeros bancos son usados en su totalidad, en cambio los 2 ltimos son poco usados y son espejos de los 2 primeros. 262 6 P POLITECNI GI CO N NA 2

1.2.5 Palabra de Configuracin La palabra de configuracin determina algunas de las caractersticas programables de los microcontroladores, la cuales solo pueden ser cambiadas cuando el dispositivo es programado.

Si lo comparamos con la correspondiente al 16F84A vemos que comparten los 4 primeros bits y el bits numero 13.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Los 2 nuevos modos de operacin ( in-circuit programming y in-circuit debugging ) son habilitados a travs de los bits 7 y 11 de la palabra de configuracin, adems incluye una mayor flexibilidad en la proteccin de cdigo y deteccin de una perdida parcial de la alimentacin a travs de los circuitos de brown-out

1.2.6 Operaciones especiales de Memoria Eeprom y Flash Los microcontroladores convencionales lean las instrucciones desde la memoria no-voltil y usaban la memoria voltil (RAM) para el almacenamiento temporario de datos. Desde la introduccin de la memoria Flash, para el almacenamiento no-voltil, la situacin ha cambiado ya que esta memoria puede ser grabada o leda en el medio de la ejecucin del programa, esto permite, por ejemplo, que la memoria de programa pueda ser grabada serial (por ejemplo usando la UART) mientras esta puesto en el sistema que controla, o almacenar datos directamente en Flash para ser ledos durante la ejecucin del programa. Tambin como pasa con otros microcontroladores, ste posee una porcin de memoria eeprom de 128 bytes que puede ser leda o escrita durante la ejecucin del programa. La interaccin con la memoria de programa se hace a travs de los mismos registros de datos y direccin que son usados para la eeprom (EEDATA y EEADR), pero debido a que la palabra contenida en la memoria de programa es de 14 bits y que se necesitan 13 bits de direccionamiento es necesario agregar un par de registro mas que puedan contener esos bits extras en caso de tratarse de la memoria Flash. Estos registros son EEDATH y EEADRH. En el siguiente esquema se muestra el uso de estos registros en funcin de cual de las memorias se est accediendo. En el caso de querer escribir la Flash primero deber ser habilitada por los bits de configuracin WRT0 y WRT1 la regin de memoria en cuestin, adems hay que tener en cuenta que por ser memoria Flash solo puede ser escrita en bloques, en este caso, de 4 palabras al mismo tiempo.

262 6 P GI N NA 2

POLITECNI CO

Todas las transferencias de datos son controladas por el registro EECON1 que como se aprecia usa el bit 7 para discernir a cual de las dos memorias se va a acceder, el resto de los bits se usan en forma similar tanto para la memoria eeprom como para la flash.

En este curso vamos a guardar en Flash las cadenas que van a aparecer en la pantalla del LCD, la rutina que lee la memoria flash es la siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

La directiva de compilacin BANKSEL inserta las instrucciones necesarias y selecciona el banco de memoria donde se encuentra el registro que acompaa a esta directiva, de esta forma no tenemos que andar buscando en que banco se encuentra cada registro ya que el ensamblador, a travs de esta directiva, lo hace por nosotros. 1.2.7 Estructura Interrupciones Como miembro de la familia de la serie 16 de microcontroladores, se espera del 16F873A que tenga la misma estructura de interrupciones que la que posee el 16F84A En el siguiente esquema se puede apreciar que el lugar que ocupaba en la estructura los bits EEIE y EEIF en el 16F84A, es reemplazado por el bit PEIE que acta como subsidiaria del bit GIE permitiendo habilitar o deshabilitar todas las nuevas fuentes de interrupciones generadas por los perifricos anexados.

262 6 P GI N NA 2

POLITECNI CO

En consecuencia el registro INTCON queda definido:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Al pasar de 4 a 15 fuentes de interrupciones, ya no es posible contenerlas en un solo registro, por lo que fue necesario agregar 4 registros mas para poder manejarlas, estos registros son: PIE1, PIE2, PIR1 y PIR2:

Debido a que solo se tiene un solo vector de interrupcin, es necesario contar dentro de la rutina de servicio de interrupcin con una porcin cdigo que identifique cual es la fuente de interrupcin actual. Adems a igual que pasaba en el 16F84A, cuando se produce la interrupcin la CPU solo guarda el PC y queda a cargo del programador guardar los otros registros del contexto como el registro W y el STATUS, lo cual se haca en variables auxiliares definidas en RAM para este cometido. Sin embargo en esta tarea se suma una dificultad ms, debido a que en el momento de producirse la interrupcin el registro STATUS podra estar apuntado a un banco diferente al banco 262 cero (donde estn las variables temporales de estos registros) y estaramos salvando el contexto en 6 P POLITECNI GI CO N NA 2

un banco diferente a donde estn definidas sus variables temporales fallando el proceso de guardar el contexto. Para evitar este inconveniente se debe definir otra variable temporal para W, en los otros bancos distintos del cero que no sean espejo de este y con el mismo offset respecto al comienzo del banco. Adems se debe realizar el siguiente procedimiento: 1) Almacenar el registro W sin importar en que banco nos encontremos 2) Almacenar el registro STATUS en el banco cero 3) Almacenar registro auxiliares en el banco cero 4) Ejecutar la rutina de interrupcin 5) Recuperar los registros auxiliares 6) Recuperar el registro STATUS 7) Recuperar el registro W Ejemplo:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

1.2.8 Reset y Alimentacin La estructura de reset de este microcontrolador es muy similar a la del 16F84A, con la excepcin de una nueva fuente que ha sido agregada: el Brown-out reset. El brown-out es una pequea depresin en la alimentacin. Esta forma de perder temporalmente la alimentacin puede llegar a ser particularmente peligrosa debido a que puede pasar totalmente inadvertida. Parte del sistema podra seguir trabajando mientras otra parte podra fallar o perder datos. Este tipo de reset asegura que el micro se resetea por completo cuando se produce este fenmeno. Este es habilitado por el bit BOREN en la palabra de configuracin. Si este bit est habilitado y un brown-out ocurre el microcontrolador es forzado a un reset. De acuerdo a la hoja de datos el valor tpico de brown-out es de 4V. En cuanto a la alimentacin tiene los mismos requerimientos que el 16F84A, solo que si el bit de brown-out est habilitado, ste impone la mnima tensin permisible de trabajo para el microcontrolador. 1.3 PUERTOS El 16F873A contiene 3 puertos A, B y C. El puerto A y B son similares a los respectivos puertos del 16F84A, excepto que ahora el puerto A contiene un bit mas y varios perifricos conectados a este. El puerto C es el que realmente hace la diferencia ya que la mayora de los nuevos perifricos estn conectados a los pines de este puerto. 1.3.1 Puerto A En este puerto se encuentran las funciones analgicas como ser los comparadores analgicos y el conversor A/D que comparten sus pines de conexin con las salidas/entradas digitales del puerto. Es muy importante notar que en el momento de reset estos pines estn definidos como entradas analgicas. 262 6 P GI N NA 2

POLITECNI CO

Su estructura genrica es:

donde vemos que el camino de la entrada digital al puerto puede ser deshabilitado a travs de la lnea Analog Input Mode A diferencia de lo que suceda con el 16F84A, en este y en los dems puertos sus pines ya no son controlados simplemente por el registro TRIS, otros registros (asociados a los perifricos conectados al pin) pueden tener efecto sobre el desempeo del mismo. 1.3.2 Puerto B Este puerto no ha sido modificado respecto a del 16F84A, por lo que sigue siendo un puerto puramente digital con las nicas funciones agregadas: INT en RB0 y weak-pullup en RB4-RB7. Debido a estas caractersticas este es el puerto que vamos a elegir para expandir las entradassalidas del microcontrolador ya que al usarlos como pines digitales no vamos a estar perdiendo ninguna funcin extras de algn perifrico.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

1.3.3 Puerto C Su esquema es:

RC<2:0>

RC<7:5>

RC<4:3>

Este es el puerto ms complejo del 16F873A. Sus pines a igual que con los dems puertos pueden ser simplemente usados como entradas-salidas digitales, sin embargo todos los pines estn compartidos con algunos de los nuevos perifricos que le dan su potencia a este microcontrolador. Observando el diagrama del puerto vemos que el corazn del mismo an se encuentra los circuitos estndar de entrada-salida. Estos, ahora, tienen multiplexores que los separan del pin de salida y lo comparten con los perifricos integrados. Adems se puede observar que ahora los perifricos pueden tomar el control de la funcin TRIS a travs de la lnea Peripheral OE. La mayor parte de los perifricos que estn conectados a estos pines cumplen funciones de comunicacin serial, que algunas sern vista a lo largo del curso.

262 6 P GI N NA 2

POLITECNI CO

2. INTERFACE HUMANA 2.1 GENERALIDADES La gran mayora de los sistemas realizados con microcontroladores requieren de alguna forma de comunicarse con el operador (interfase humana), ya sea para entregar informacin respecto al estado del sistema o para poder modificarlo de acuerdo a los requerimiento del usuario. El los sistemas embebidos es comn usar como dispositivo de salida a: leds, 7 segmentos y LCD, el uso de uno u otro dispositivo depende de: costo, consumo, tamao, esttica, etc. Y como dispositivo de entrada: teclado, touch-screem. En el presente curso vamos a estudiar en detalle los requerimientos necesarios, de software y hardware, para incorporar algunos de estos dispositivos a nuestro diseo, pero con una dificultad ms, el control de los mismos lo haremos a travs expansores de entradas/salidas que veremos a continuacin. 2.2 EL REGISTRO DE DESPLAZAMIENTO 74HC595 En ciertos sistemas las cantidades de entradas o salidas provistas por el microcontrolador pude llegar a ser insuficientes, la solucin obvia a este problema sera elegir un microcontrolador con mayor cantidad de puertos que nos permitan agrandar la cantidad de entradas o salidas. Pero sta no es siempre la mejor solucin, ya sea por razones de espacio disponible, costo, distribucin de entradas/salidas, etc. Una solucin posible sera usar componentes que tengan una buena cantidad de entradas y/o salidas, que se puedan ubicar lejos del microcontrolador y se comuniquen con el mismo con unas pocas lneas (para que realmente sean expansores). Los dispositivos que cumplen con los requerimientos antes mencionados son los registros de desplazamiento. El registro de desplazamiento es un dispositivo lgico que permite realizar la tarea de convertir datos de serie a paralelo o de paralelo a serie. O sea recibe una ristra de datos en forma serial y los saca por su puerto en paralelo o toma las entradas en su puerto paralelo y lo transmite en forma serial dependiendo de si el puerto paralelo est actuando como entrada o como salida. El registro de desplazamiento que usamos es el 74HC595 cuyo puerto paralelo acta como salida. Internamente esta conformado por una cadena de Flip-Flop que le permite almacenar los

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

datos recibidos en forma serial y presentarlos en paralelo. El siguiente esquema muestra su constitucin interna.

Observemos que la primera columna de Flip-Flop es la encargada de almacenar el dato serial recibido y transformarlo en paralelo, ya que el primero de la columna esta conectado a la entrada serial (SER), y en los Flip-Flop siguientes su salida esta conectado a la entrada del que le sigue inmediatamente debajo. Para almacenar un dato, simplemente se genera una transicin de bajo a alto (de 0 a 1) en la entrada SCK, y el dato presente a la entrada de cada Filp-Flop se almacena y se manifiesta a su salida. La transicin de SCK de alto a bajo ( de 1 a 0) no produce ningn efecto. 262 6 P POLITECNI GI CO N NA 2

De esta forma, si quisiramos que a la salida (de la primera columna de Flip-Flop) apareciera el dato 10000000 donde el 1 corresponde al Flip-Flop de la salida QH, deberamos transmitir el dato 00000001, as de esta forma el primer bit transmitido ( el 1) despus de 8 ciclos de reloj llegara hasta el ltimo Flip-Flop (el asociado a QH), o sea simplemente tomar los bits a transmitir empezando por el bit7 hacia el bit0. Ahora para poder entender la necesidad de la segunda columna de Flip-Flop imaginemos que no est y que las salidas de la primera columna estn conectadas a los pines del integrado, adems supongamos que a cada una de estas salidas conectamos un rel que controla una lmpara. Si quisiramos encender la ltima lmpara, la que est conectada a QH, como ya fue dicho, tendramos que transmitir por el pin serial (SER) la palabra en binario 00000001, a medida que el 1 se vaya desplazando hacia el ltimo Flip-Flop ira pasando por todos los anteriores y encendera momentneamente (lo que dure un perodo de reloj) la lmpara que esa salida tenga asociada. De esta forma vemos que no podramos cambiar el estado de una salida sin afectar momentneamente (lo que dura el desplazamiento de los ocho datos) a todas las dems. Es para resolver este problema es que existe esta segunda columna de Flip-Flop, ya que su reloj (RCK) se debera activar (transicin de 0 a 1) una vez que la transicin ha finalizado, de esta forma sta, ya no se manifiesta ms a la salida. Un esquema simplificado del integrado es el siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Ahora denominando a los pines de la siguiente manera: Ouput Enable = OE Serial Data Input (A) = SER Latch Clock = RCLK Shift Clock = SRCLK Reset = SRCLR SQH = QH Y la funcin de cada pin esta descrito en la siguiente tabla de verdad:

SER X X X L H X X X

SRCLK SRCLR X X X X X X X L H H H X X

RCLK X X X X X X

OE H L X X X X X X

Funcin Salida QA a QH deshabilitadas Salida QA a QH habilitadas Se limpia el registro de desplazamiento (S.R.) La primera etapa del S.R. pasa a 0 y las otras toman el valor de la etapa previa La primera etapa del S.R. pasa a 1 y las otras toman el valor de la etapa previa El estado del S.R. no cambia Los datos S.R. son almacenados en el registro del almacenamiento El estado del registro de almacenamiento no cambia

X = No importa H = 1 lgico L = 0 lgico = Transicin de bajo a alto ( 0 --> 1) = Transicin de alto a bajo ( 1 --> 0) Un pin muy til del integrado es el QH que nos permite colocar estos integrados en serie dando una expansin del registro de desplazamiento con el solo hecho de conectar esta salida a la entrada serial (SER) de la siguiente etapa. 262 6 P GI N NA 2

POLITECNI CO

En el siguiente esquema hemos conectado 3 de estos integrados en serie, anulando los pines SRCLR y OE ponindolos a Vcc y GND respectivamente, los otros pines de control fueron conectados entre s. De esta forma los 3 integrados se comportan como si fuera uno solo de un registro de desplazamiento de 24 etapas, un registro de almacenamiento de 24 etapas y 24 pines de salida.

2.3 EL REGISTRO DE DESPLAZAMIENTO 74HC165 Este registro de desplazamiento es el dual del 74HC595, ya realiza la funcin inversa a este, es decir, lee los datos de su puerto paralelo (ahora es una entrada y no una salida), y comunica esos datos en forma serial. Un esquema simplificado del dispositivo es el siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

De esta forma es ideal para expandir la cantidad de entradas de un microcontrolador, en nuestro caso esta expansin las vamos a usar para agregar al sistema un teclado, con la nica necesidad de disponer de un pin mas del microcontrolador (RB0) para leer los datos transmitido por el dispositivo. Nuestro teclado va estar conformado por 4 switch y 4 jumpers. Observar que tomamos la salida negada, esto es porque queremos que el estado de las teclas se manifiesten como 0 en reposo y como 1 cuando se apreta el switch o cortocircuita el jumper

262 6 P GI N NA 2

POLITECNI CO

2.4 DISPLAY DE 7 SEGMENTOS El display de 7 segmentos no es ms que una agrupacin de led, donde cada led enciende un segmento del mismo. Teniendo una ms para el encendido del punto decimal. Todos los leds estn unidos por el ctodo o por el nodo denominndose ctodo comn o nodo comn respectivamente. A cada segmento se los denomina con una letra como muestra la figura siguiente:

De esta forma para encender un segmento determinado por ejemplo el a se debe poner un 1 lgico en el led del pin 7 a travs de una resistencia limitadora de corriente. En el circuito propuesta existen cuatro 7 segmentos conectados en paralelo entre s, y todos conectados a un integrados 74HC595 de la siguiente forma.

Ahora tenemos que deducir cual es la palabra que deberamos transmitir para poder encender algn segmento en particular. De las conexiones se ve para encender solo el segmento b debera

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

aparecer a la salida del 74HC595; QH = 1 y QA=QB=QC=QD=QE=QF=QG = 0, o sea el valor binario 10000000. De igual forma si quisiramos encender solo el segmento c la salida del 74HC595 sera: QC = 1 y QA=QB=QD=QE=QF=QG=QH = 0, o sea el valor binario 00000100. Conjugando lo antes deducido para que en el display apareciera el numero 1 (b y c) encendidos se debe transmitir el valor 10000100 La siguiente tabla resume el valor binario a transmitir y lo que se muestra en el display de 7Segmentos. Tabla N 1 VALOR BINARO 11010111 10000100 11100011 11100110 10110100 01110110 01110111 11000100 11110111 11110110 Observemos que: La relacin que hay entre el valor binario a transmitir y lo que se muestra en el display depende exclusivamente de la conexiones elctricas que hay entre los pines de salida del 74HC595 y los pines del display de 7-Segmentos (7Seg). Si cambiamos estas conexiones cambia el valor binario a transmitir. Una forma posible de manejar cuatro 7Seg sera usar un registro de desplazamiento por cada uno de estos, pero sera una forma muy ineficiente ya que podramos aprovechar la caracterstica que posee el ojo humano de retener las imgenes por unos cuantos milisegundos, para mantener encendido solo un 7Seg a la vez y encenderlos en forma consecutiva. Un circuito como el siguiente cumplira con este requisito. 262 6 P GI N NA 2

DISPLAY 0 1 2 3 4 5 6 7 8 9

POLITECNI CO

El software tendra que trabajar de la siguiente forma: 1) 2) 3) 4) El registro de desplazamiento saca los datos correspondientes a DS1, activa el El registro de desplazamiento saca los datos correspondientes a DS2, activa el El registro de desplazamiento saca los datos correspondientes a DS3, activa el El registro de desplazamiento saca los datos correspondientes a DS4, activa el transistor Q1 y desactiva los otros. Se hace un tiempo de espera (en nuestro caso de 2 miliseg.). transistor Q2 y desactiva los otros. Se hace un tiempo de espera (en nuestro caso de 2 miliseg.). transistor Q3 y desactiva los otros. Se hace un tiempo de espera (en nuestro caso de 2 miliseg.). transistor Q4 y desactiva los otros. Se hace un tiempo de espera (en nuestro caso de 2 miliseg.). 5) Se vuelve reinicia nuevamente el ciclo a partir del punto 1) En nuestro sistema, la base de los transistores estn controlados por 4 salidas de otro registro de desplazamiento que esta conectado en serie con el que saco los datos para los 7Seg.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Si observamos el esquema general de circuito propuesto como interface humana, vemos que todas las salidas estn conformadas por 3 integrados 74HC595. El primero de ellos, sus salidas manejan los datos transmitidos al LCD, el segundo contiene una seal de control del LCD, 4 salidas que manejan los transistores de los 7Seg. y 3 mas que manejan Leds y por ltimo el tercero es el provee los datos que van a aparecer en los 7 Seg. En el programa se definen 3 variables que contienen los datos asociados a cada 74HC595 y estos son: DatLCD : Contiene el valor que se va a escribir en el 595 que transmite los datos al LCD DatCont : Contiene el valor que se va a escribir en el que controla los transistores y los leds Dat7Seg : Contiene el valor que se va a escribir en el 595 de los 7-Seg

Start Cuenta = 3 1 BTx = 8


2

Si Cuenta = 3 ? No
RB4 = 7 bit de dato Correr dato 1 bit a la izq.

dato = DatLCD

Si Cuenta = 2 ?
Cuenta = 3? Si

No
No

dato = DatCont = 0 bit Teclado


RB0 Correr Teclado 1 bit a la izq.

dato = Dat7Seg

Generar Clock

BTx = Btx-1

BTx = 0 ? No Si Cuenta = Cuenta-1

262 6 P GI N NA 2

POLITECNI CO

Cuenta = 0 ? Si Generar Lacth en los 595 Fin

No

Un detalle importante a notar en estas ltimas lneas de software es que la seal que realiza la carga paralela (Rclk) de los registros de desplazamiento permanece el tiempo entre transmisiones en un valor alto y solo va a un valor bajo por un par de ciclo de instruccin.
2 mseg.

Latch de datos en los 74HC595

Latch de datos en los 74HC595

Lacht de datos en el 74HC165

Lacht de datos en el 74HC165

La razn para manejar de esta forma esta seal radica en que los registros de desplazamientos trabajan diferente a la hora de guardar sus datos paralelos, para el caso del 74HC595 se realiza en el flanco ascendente de la seal, mientras que para el caso del 74HC165 es por nivel y los datos presente en la entrada de los pines pasan al registro paralelo mientras halla un cero en Rclk, para

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

que los datos almacenados puede ser ledos en forma serial esta seal debe estar a un valor alto, de ah la forma en que se maneja la misma. Una vez que hemos generado el software para la carga y lectura de los registros de desplazamiento vamos a ver el cdigo que nos permite ir alternando cual de los 7Seg es mostrado. Para lograrlo vamos a usar 4 variables: _7SegDat0 _7SegDat1 _7SegDat2 _7SegDat3 _7SegMos ; Contiene lo que se muestra en el 7-Seg N1 ; Contiene lo que se muestra en el 7-Seg N2 ; Contiene lo que se muestra en el 7-Seg N3 ; Contiene lo que se muestra en el 7-Seg N4 ; Contiene cual de los 4 7-Seg es el que se tiene que mostrar
Inicio

Lleva a cero los bits de los transistores

_7SegMos = 0? No

Si

Dat7Seg = _7SegDat0

1 _7SegMos = 1? No _7SegMos = 3? No

Si

Si Dat7Seg = _7SegDat1

_7SegMos = 2? No

Dat7Seg = _7SegDat3 Si

Dat7Seg = _7SegDat2 Call EnvSegDig1

_7SegMos = _7SegMos +1 1

262 6 P GI N NA 2

_7SegMos = 4?

Si

POLITECNI CO

No _7SegMos = 0

FIN

2.4.1 Conversin de Binario a BCD Sin bien la mayora de las operaciones realizadas en un microcontrolador ( sumas, restas, operaciones lgicas ), naturalmente, son realizadas en numeracin en base dos (binaria), los resultados de las mismas cuando son mostradas al operador deben ser, de alguna forma, traducidas al formato decimal que es con lo que las personas estamos habituados. Un paso intermedio en esta transformacin de binario a decimal es usar el formato conocido como Decimal Codificado en Binario o BCD. En este formato se usan 4 bit para representar cada uno de dgitos decimales ya que con 3 bit no nos alcanzara porque solo es posible representar 8 smbolos diferentes (23 = 8) y no 10 como necesitamos. La asociacin que realizamos entre un dgito decimal y su equivalente en BCD viene dado por la siguiente tabla:

Debido a que con 4 bit podemos representar 16 cantidades diferentes, en la codificacin BCD los nmeros binarios 1010 (0xA), 1011 (0xB), 1100 (0xC), 1101 (0xD), 1110 (0xE) y 1111 (0xF),

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

no son usados. En la tabla tambin se muestra el equivalente en codificacin ASCII que ser usada con el LCD. Pongamos algunos ejemplos:

Decimal 69 317 6834

Binario/Hex 1000101 0x45 100111101 0x13D 1101010110010 0x1AB2

BCD 0110 1001 (6) (9) 0011 0001 0111 (3) (1) (7) 0110 1000 0011 0100 (6) (8) (3) (4)

De tabla deducimos que la conversin no es ms que extraer del nmero binario los dgitos que lo componen y representar cada dgito en un nibble (4-bits). De esta forma el nmero binario 1000101 representa 6 decenas y 9 unidades, cada uno de Comienzo estos dgitos en BCD se presenta en un nibble por separado. Supongamos que sabemos = 0 nuestro nmero binario (BBB) a convertir es menor a 100: Decena que Un algoritmo que permitira esta conversin es el siguiente:
Comienzo

Unidad = 0

Centena = 0

BBB = BBB - 1100100

BBB >= 0 No

Si

Unidad = 0 Decena = 0

Centena = Centena + 1 BBB = BBB + 1100100


BBB >= 0 Si

BBB = BBB - 1010

BBB = BBB - 1010

No BBB = BBB + 1010 Decena = Decena + 1

BBB >= 0 No

Si
Unidad = BBB

Ahora supongamos que sabemos que nuestro nmero binario (BBB) a convertir es menor a 1000: 262 6 P GI N NA 2
BBB = BBB + 1010 Decena = Decena + 1
Fin

POLITECNI Unidad = BBB CO


Fin

En nuestro caso vamos a mostrar valores de 0 a 9999 en los 4 7-Segmentos, por lo tanto para que el cdigo sea robusto al comienzo de la rutina debemos comprobar que la variable a mostrar sea inferior a 10000, sin embargo si fuera superior, vamos a recortar el nmero al valor 9999 (saturacin). El valor a convertir lo recibiremos en las variables: Y el resultado ser puesto en las variables: bcdH contH:cont bcd bcdH:bcd

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Unidad de Mil

Centena

Decena

Unidad

262 6 P GI N NA 2

POLITECNI CO

Una vez que hemos convertido el valor binario a su formato BCD tenemos que usar la Tabla N 1 (pg. 24) para convertir un nmero BCD a la correspondiente secuencia de bits que hagan que ese nmero se refleje en los 7-Segmentos. El Cdigo de la tabla es el siguiente:

El resultado de esta conversin se guardar en las variables correspondientes a cada uno de los 7-Segmentos.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Unidad Decena Centena Unidad de Mil El cdigo es el siguiente:

Tabla N1 Tabla N1 Tabla N1 Tabla N1

_7SegDat0 _7SegDat1 _7SegDat2 _7SegDat3

2.5 DISPLAY DE CRISTAL LQUIDO (LCD) El cristal lquido es un componente orgnico que permite, a travs de una tensin aplicada al mismo, polarizar la luz que lo atraviesa. Mientras se han diseados distintos tipos de LCD los mas comunes son los alfanumricos y los grficos, en el presente curso se estudiaran los LCD alfanumricos. El manejo directo del LCD no es una tarea sencilla, gracias a la evolucin tecnolgica, tiempo atrs apareci en el mercado un chip que resuelve este inconveniente. Es el HD44780 de la empresa Hitachi cuya electrnica genera todas las seales necesarias para el manejo del LCD y ofrece al mismo tiempo una interfase simple que puede ser conectada a cualquier microprocesador o 262 microcontrolador. 6 P POLITECNI GI CO N NA 2

Si bien con el tiempo aparecieron en el mercado otros controladores, estos han respetado la interfase creada por el HD44780, la cual se ha vuelto una interfase estndar. Hoy en da la mayora de los fabricantes de LCD incorporan como parte de su producto un chip del tipo antes mencionado, resultando en un componente de salida comn a muchos sistemas embebidos ya que casi se puede controlar desde cualquier microcontrolador. Desde el punto de vista del microcontrolador el LCD no es ms que un matriz de memoria, como se muestra en la siguiente figura: Memoria en el LCD Posic Valor 0x00 0x35 0x01 XX 0x02 XX 0x03 XX 0x08 0x40 0x41 0x42 0x43 0x3F 0x50 XX XX XX Pantalla del LCD

5 P

? a

0x47

0x61

en la cual cada una de sus posiciones tiene una relacin biunvoca con uno de los caracteres que aparecen en el display, as por ejemplo, si depositamos el valor hexadecimal 0x35 en una posicin de memoria, el carcter asociado mostrar el nmero 5, ya que se usa la codificacin ASCII. Como se ve de la grfica posiciones de memoria consecutivas corresponden a caracteres consecutivos en el LCD. Un punto importante a notar es que los caracteres del LCD de la segunda fila se corresponden con las posiciones de memoria a partir de la direccin hexadecimal 0x40, por lo tanto, para que aparezcan caracteres en la segunda fila debemos escribir sus correspondiente cdigos ASCII a partir de la direccin de memoria 0x40.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

La tabla ASCII que relaciona lo que esta escrito en memoria con lo que aparece en el LCD es la siguiente:

Aparte de la transmisin de los datos a la memoria del LCD, se deben transferir datos de control o instrucciones que nos permiten entre otras cosa 262 6 P POLITECNI GI CO N NA 2

Modificar el puntero de memoria que determina cual va a ser la prxima posicin de memoria a escribir Establecer si la interfase va a ser de 4 o 8 bits Hacer visible o invisible el cursor Posicionar el cursor en el extremo superior izquierdo Limpiar toda la memoria, etc.

La seleccin si se esta escribiendo un dato o una instruccin se hace a travs de una de sus seales fsicas (RS) como se ver a continuacin. 2.5.1 Interfase fsica Los LCD se conectan con el mundo exterior a travs de las siguientes seales:

Cuyo significa es el siguiente: PIN 1 2 3 4 5 6 7-14 A K Smbolo Vss Vdd Vo RS R/W E DB0-DB7 LED+ LEDFuncin Masa Alimentacin de 5V Ajuste de contraste del LCD. Tensin entre 0v y 5V RS = 0 Registros de Control R/W = 0 Se escribe el LCD E = 0 LCD desconectado RS =1 Registro de Datos R/W = 1 se lee el LCD E = 1 LCD conectado

Bus bidireccional de datos y control Tensin positiva para el backlight Tensin negativa para el backlight

En el circuito propuesto las conexiones son las siguientes:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Del esquema de conexiones notamos: La tensin Vo se obtiene de un potencimetro conectado entre masa y 5V La seal R/W esta a masa, lo que indica que solo se puede escribir el LCD La seales del bus de datos se conectan a las salidas del 74HC595 del U1 La alimentacin del backlight se hace a travs de un jumper y una resistencia de 12 ohm a 5V, el jumper podra ser reemplazado por un transistor actuando como llave. La seal RS se genera en Qg ( = Q6) del segundo 74HC595 U2 La seal E es generada directamente por el pin RB1 ya que es una seal pulsante y no por nivel. 2.5.2 Comandos Los comandos emitidos hacia el controlador del LCD, tienen un tiempo de ejecucin que es bastante mayor a la velocidad con que trabajan la mayora de los microcontroladores. Por lo tanto el manejo de los mismos trae aparejado requerimientos de tiempos. Para aliviar esta situacin es que despus de emitir un comando hacia el LCD, el controlador permite leer el LCD (R/W = 1), en modo comando (RS = 0). El bit 7, que lo llamaremos BF, del valor devuelto en la lectura indica el estado de ejecucin del ltimo comando emitido. Si BF = 1 LCD todava ejecutando el comando. Si BF = 0 LCD listo para recibir otro comando. Notar que en nuestro sistema, con el objetivo de minimizar la interface de hardware con el LCD es que el R/W fue puesto a masa, por lo que no nos he posible realizar lecturas. 262 6 P GI N NA 2

POLITECNI CO

En nuestro caso, simplemente vamos a tomar un intervalo de tiempo suficiente para asegurarnos de que toda ejecucin interna haya terminado antes de enviar el prximo dato o comando. Son muchos y variados los comandos que pueden admitir la interfase HD44780, a continuacin una lista de los mismos:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

A continuacin estudiaremos los comandos ms utilizados: Function Set: Establece el tamao de la interfase con el bus de datos (DL), nmero de lneas de display (N) y tipo de carcter (F)

En nuestro caso ser: DL = 1, Trabajamos con interfase de 8 bits N = 1, La presentacin se hace en 2 lneas F = 0, Caracteres 5x7 dots Por lo tanto el byte que vamos a transmitir es el siguiente: LCD8bitequ B'00111000'

Display On/Off Control: Activa o desactiva poniendo en ON/OFF tanto al display (D) como el cursor (C) y se establece si este ltimo parpadea o no (B).

En nuestro caso ser: D = 1, Pantalla activa (On) C = 0, Cursor desactivado (Off) B = 0, Cursor sin parpadeo Por lo tanto el byte que vamos a transmitir es el siguiente: LCDOn equ B'00001100'

262 6 P GI N NA 2

POLITECNI CO

Clear Display: Borra el modulo LCD y coloca el cursor en la primera posicin (Direccin 0x00)

Por lo tanto el byte que vamos a transmitir es el siguiente: LCDClr Entry Mode Set: Incrementa (I/D = 1) o decrementa (I/D = 0) en 1 el puntero a la RAM del LCD cuando se ejecutan operaciones de lectura o escritura de la DD RAM o CG RAM y especifica si la visualizacin se va desplazando a la siguiente posicin de la pantalla o no (S). equ B'00000001'

En nuestro caso ser: I/D = 1, Incrementa la posicin RAM en cada lectura o escritura S = 0, Normal, sin desplazamiento en la visualizacin. Si scroll Por lo tanto el byte que vamos a transmitir es el siguiente: LCDInc Set DD RAM Adress: Este comando modifica el valor del puntero de memoria interno del LCD. Es la posicin de memoria a partir de la cual se va a escribir o leer el prximo dato. equ B'00000110'

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Para nuestro caso cuando queramos que el puntero seale la primera posicin de la primera fila vamos a tener que transmitir el valor B'10000000' (0x80), en cambio cuando queramos que apunte al comienzo de la segundo fila debemos transmitir el valor B'11000000' (0xC0). Write Data to DDRAM: Mediante este comando se escribe en la memoria DD RAM los datos que se quieren presentar en pantalla y que sern los diferentes cdigos ASCII de los caracteres a visualizar.

Observar que a diferencia de los comandos anteriores este tiene la seal RS a 1. Finalmente vamos a decir que existen comandos que nos permiten crear caracteres personalizados, los cuales se manejan en una memoria aparte dentro del LCD denominada CGRAM, tambin hay comando que nos permiten hacer un scroll o corrimiento de la pantalla, pero estos, no sern estudiados en el presente curso. 2.5.3 Secuencia de Inicializacin Despus de ser aplica la tensin de alimentacin al LCD se produce una secuencia interna de inicializacin, la cual debe finalizar antes de poder enviar comandos. El fabricante recomienda que esta espera sea superior a 15mseg. Inmediatamente tenemos que enviar el comando Function Set que nos permite definir el tipo de interfase a usar (4bits o 8 bits). En nuestro sistema vamos a usar la interfase de 8 bits, que es la asumida por el LCD por defecto, si se quisiera usar la de 4 bits, se usan los 4 bits superiores de la interfase del LCD (DB7-DB4) como muestra la siguiente figura, en este caso cada byte se transmite en 2 paso, transmitindose primero el nibble superior (Bit7-Bit4) y el luego el inferior (Bit3-Bit0).

262 6 P GI N NA 2

POLITECNI CO

De acuerdo a la nota de aplicacin del fabricante el resto de la inicializacin debe seguir las siguientes secuencias:

Por lo visto nuestra secuencia de inicializacin es la siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

262 6 P GI N NA 2

POLITECNI CO

Del cdigo anterior se ve que para hacer la medicin del tiempo llamamos a unas subrutinas como las siguientes:

Donde se ve claramente que estamos usando el Timer0 en la medicin de estos tiempos.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Observemos que la penltima sentencia MacroLCDMsg no es en realidad una instruccin de programa sino una macro (pg. 44). Las macros asignan un nombre simblico a un bloque de sentencias o directivas. Luego se puede usar dicho nombre para reemplazarlo por ese conjunto de sentencias en el cdigo. Opcionalmente se pueden definir parmetros que van a representar argumentos para la macro. La estructura general de una macro es la siguiente: Nombre_Macro macro [arg1, arg2,., argn] .. .. endm Donde Nombre_Macro es el nombre con el cual ser invocada esta macro, argx son los argumento que pueden ser definidos con la macro y sern reemplazadas por lo valores correspondiente al momento de su invocacin. Hay que tener presente que es necesario definir la macro previamente a ser invocada, sino un aviso de error aparecer como resultado. Para nuestro software la macro esta definida de la siguiente forma:

Aunque no es fcil verlo en un primer momento, lo que hace el cdigo de la macro es: tomar una cadena grabada en la Flash en la posicin de memoria MsgPtr y mostrarla en el LCD a partir del carcter Posc. La que realmente hace este trabajo es la rutina _EscCadLCD, la primera parte de la macro prepara las variables necesarias para esta rutina. 262 6 P GI N NA 2

POLITECNI CO

Si bien es variada la forma en que se puede manejar la informacin que va a aparecer en el LCD, nosotros elegimos la siguiente. Se va a definir una porcin de la memoria RAM (buffer), cuyo nombre genrico ser BufferLCD, que tendr un tamao de 16 bytes, donde cada byte tendr una correspondencia biunvoca con cada uno de los caracteres que conforma el LCD como se muestra en la siguiente figura:

Memoria RAM del PIC Posic Valor BufferLCD + 0 0x35 BufferLCD + 1 XX BufferLCD + 2 XX BufferLCD + 3 XX BufferLCD + 4 XX BufferLCD + 5 XX BufferLCD + 6 XX BufferLCD + 7 0x3F BufferLCD + 8 0x50 BufferLCD + 9 XX BufferLCD + 10 XX BufferLCD + 11 XX BufferLCD + 12 XX BufferLCD + 13 XX BufferLCD + 14 XX BufferLCD + 15 0x61

Pantalla LCD

5 P

? a

Por lo tanto si quisiramos que aparezca un determinado carcter en la primera posicin de la segunda fila, solamente tendramos que depositar su cdigo ASCII correspondiente en la posicin de memoria: BufferLCD + 8, por lo tanto, desde el punto de vista del programa, el LCD no es mas que un array continuo de memoria dentro del propio microcontrolador. Por lo tanto para hacer aparecer en el LCD lo mismo que se muestra en los 7-Segmentos solo tenemos que tomar el resultado de la conversin a BCD sumarles el valor 0x30 para convertirlo a cdigo ASCII y ponerlo a partir de la posicin de memoria que queremos que aparezca. Como se muestra a continuacin:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

En los dos ltimos caracteres de la segundo fila del LCD vamos a hacer aparecer el estado del teclado, por lo tanto el cdigo a agregar es el siguiente.

Antes de continuar con el estudio de la macro, veamos el significado de la siguiente sentencia:

262 6 P GI N NA 2

POLITECNI CO

La directiva de compilacin dt nos permite formar los llamados goto computados en una forma mas amigable. Si analizamos el contenido de la memoria de programa, vamos a ver que esta sentencia va a ser reemplazada por la siguiente secuencia de instrucciones:

Donde notamos que cada instruccin RETLW contiene el cdigo ASCII de los caracteres sucesivos que conforman la cadena, empezando por la izquierda a partir de la posicin de memoria indicada (MsgIni). Observando la columna Opcode, notamos que el valor 0x34 (byte alto) corresponde al cdigo de operacin de la instruccin RETLW y el otro valor (byte bajo), corresponde al cdigo ASCII del carcter de la cadena que representa. Entonces, los caracteres que conforman nuestra cadena van a ser grabados en el byte bajo en posiciones sucesivas de la memoria de programa. Para poder extraer la cadena de la memoria, tenemos que leerla y quedarnos con el contenido del byte bajo. Una vez hechas todas estas definiciones, continuemos con el anlisis de la macro. En las primeras instrucciones definimos en el registro FSR la posicin a partir queremos grabar la cadena y luego grabamos en las posiciones de memoria DIRH y DIRL la direccin de la memoria de programa a partir de la cual esta grabada la cadena.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

La ltima instruccin llama a la rutina _EscCadLCD:

la cual lee, a travs de _LeerFlash, la memoria de programa devolviendo el resultado en la variables DatL y DatH, solo DatL se tiene en cuenta, notemos que si la lectura da cero se da por terminado la rutina, de esta forma usamos el valor cero para indicar en fin de la cadena. Luego incrementamos la posicin de memoria Flash a leer y la posicin de la memoria RAM a donde guardar el valor ledo. Hasta aqu realmente no hemos escrito nada en el LCD, sino, sobre una porcin de memoria RAM dentro del microcontrolador. Aparte de tener que realizar la tarea de transferir la informacin desde la memoria RAM del micro a la del LCD, debemos preguntarnos cada cuanto? , transferimos todos los datos o de a uno?, esperamos a que se modifique un valor, para transferir?. Para nuestro sistema vamos a elegir la siguiente metodologa: Memoria RAM del PIC 262 6 P POLITECNI GI CO N NA 2 Cada 2 mseg Memoria Pantalla LCD

Posic BufferLCD + 0 BufferLCD + 1 BufferLCD + 2 BufferLCD + 3 BufferLCD + 4 BufferLCD + 5 BufferLCD + 6

Posic 0x00 0x01 0x02 0x03 0x04 0x05 0x06

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

BufferLCD + 7 BufferLCD + 8 BufferLCD + 9 BufferLCD + 10 BufferLCD + 11 BufferLCD + 12 BufferLCD + 13 BufferLCD + 14 BufferLCD + 15

0x07 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47

Vamos a transmitir un byte cada 2 milisegundos de tal forma que el LCD ser refrescado por completo en 32 milisegundos. Hay que tener la precaucin que, al querer enviar el byte N 8 primero hay que mandar al LCD un comando para cambiar el puntero interno de memoria y pase de apuntar de la posicin n 7 a la N 64 (0x40). La transferencia la haremos en una interrupcin generada por el Timer0 cada 2 mseg. La rutina de interrupcin comienza de la siguiente forma:
Inicio

PuntBuf > 7 ? Si

No

DatLCD = BufferLCD(PuntBuf)

PuntBuf = 8 ? No

Si

DatLCD = ComandoLCD 2 Columna

PuntBuf = 17 ? No

Si

Se salva el estado del sistema y se recarga el timer0 para la prxima transferencia. BufferLCD(PuntBuf-1) Ahora se ejecuta la transferencia en s:
Elegir Dat7Seg

DatLCD =

DatLCD = ComandoLCD 1 Columna

PuntBuf = PuntBuf +1

262 6 P GI N NA 2

PuntBuf = 18 ?

Si

POLITECNI CO

No PuntBuf = 0

Fin

Luego se selecciona los datos de los 7-Seg como ya vimos en la pgina 34, se actualiza el valor de PuntBuf y se sale de la interrupcin recuperando el estado del sistema.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Para probar el funcionamiento del LCD y de los 7-Segmentos vamos a desarrollar un programa que incremente una cuenta de 0 a 9999 y realice un roll-over. La variable que lleva la cuenta se incrementara cada vez que se desborde el Timer1, al cual le tomara aproximadamente 210 milisegundos.

La cuenta se va a llevar sobre las variables NPul : Byte Bajo de la cuenta NPulH: Byte Alto de la cuenta

El programa en s es:

262 6 P GI N NA 2

POLITECNI CO

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

3. ADQUISICIN DE DATOS-CONVERSOR A/D 3.1 SISTEMA DE ADQUISICION DE DATOS Hasta ahora nos hemos limitado a realizar aplicaciones en el mundo puramente digital, todo lo hecho hasta aqu podra ser implementado sin inconveniente en un 16F84A, por lo que hasta ahora no hemos usado las ventajas cualitativas que posee el 16F873A. En el mundo que nos rodea, la mayora de las variables son naturalmente analgicas. Son variables continuas que pueden tomar infinitos valores, como ejemplo pensemos en la temperatura, intensidad sonora, frecuencia, etc. Por lo tanto es necesario para un microcontrolador poder leer valores de naturaleza analgica y tambin generarlos, a pesar de ser un dispositivo intrnsicamente digital. Adquisicin de datos, se denomina al proceso de convertir la seal analgica a digital junto a las manipulaciones de la seal necesarias para conseguirlo Una vez que el dato del mundo exterior ha sido adquirido, necesita ser procesado para poder ser utilizado. Este procesamiento podra incluir: promediado, escalado, linealizado, almacenamiento, etc. Sabiendo que la mayora de los traductores transforman una variable fsica analgica en una variables elctrica analgica, nos podramos preguntar acerca de las razones de porque no hacer las manipulaciones necesarias en el mundo analgico, es decir, Por qu convertirlo al formato digital? .Para responder a esta pregunta tenemos que hacer un anlisis comparativo respecto a las ventajas y desventajas de uno y otro.

262 6 P GI N NA 2

POLITECNI CO

Propiedad
Medio de Representacin

Analgico
Una variable continua en tensin o corriente

Digital

Variable representada en formato binario Solamente un nmero fijo de Puede tomar infinitos valores. combinaciones de dgitos Una absoluta precisin es estn disponibles para la tericamente posible, siempre medicin. Ej, un nmero de 8 Presicin de la representacin que la seal no sea corrompida bits solo puede tomar 256 de ninguna forma. Enorme combinaciones diferentes. ancho de banda Ancho de banda representado limitado La representacin digital es intrnsicamente tolerante a la Casi inevitablemente se sufre mayora de las formas de de derivas, distorsin, Resistencia a la degradacin de la degradacin de la seal. interferencia. Una vez que la seal Puede ser introducido un seal est corrompida no puede chequeo de errores para poder ser completamente recuperada recuperar una seal digital corrompida Fantsticos algoritmos puede realizar tareas imposibles El procesamiento analgico de desde el mundo analgico. seales usando A.Op. a Por ejemplo en el filtrado alcanzado un nivel sofisticado, digital se consigue regiones de Procesamiento pero est limitado en transicin totalmente flexibilidad y siempre sufre de abruptas. Al ser un algoritmo algn tipo de degradacin de se lo puede cambiar por uno seal. mas avanzado, o sea, flexibilidad Siendo que la tecnologa actual aumenta da a da la capacidad de almacenamiento Es difcil conseguir de los componentes digitales Almacenamiento almacenamiento analgico por sumado a los avances en los tiempo prolongados algoritmos de compresin, hacen al mundo digital en medio ms conveniente para el almacenamiento.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

3.1.1 Generalidades Antes de que efectivamente la seal analgica llegue a la entrada del conversor A/D, generalmente sufre de un procesamiento como el mostrado en la figura:

Traductor Genera Seales

Filtro Remueve componentes de seales no deseadas. Evita aliasing

Multiplexor Selecciona cual canal de entrada es conectado a su salida

Muestreo y Retencin Muestrea su entrada y mantiene el voltaje en su salida hasta la prxima adquisicin

ADC Convierte su entrada analgica a salida digital

Tensin de Referencia Determina el rango de tensin admisible para el A/D

Salida Digital

Amplificacin y offset Amplifica seales y suma un offset de continua para llevarlo al rango de entrada del A/D Externo al Microcontrolador Interno al Microcontrolador

Control CPU

3.1.2 Acondicionamiento de Seal. Amplificacin y filtrado Para hacer un mejor uso del conversor A/D, la seal de entrada debe extenderse lo ms posible en su rango, sin llegar a excederlo. Ya que, como sabemos existen traductores cuya salida se mide en milivoltio y aun en microvoltios, pensemos en un micrfono o en una termocupla, la amplificacin es una proceso necesario para el aprovechamiento del rango del conversor A/D. A veces, aparte de amplificacin, una seal de entrada requiere de un corrimiento debido a que algunas de ellas son de carcter bipolar, en contraposicin al carcter unipolar del conversor. A esto primeros procedimientos en la amplitud de la seal, le debe seguir una manipulacin en el contenido en frecuencia de la misma. Este procedimiento es el que llamamos filtrado. 262 6 P POLITECNI GI CO N NA 2

El filtrado tiene dos objetivos principales: 1. 2. Eliminar el ruido electrnico sumado a la seal, ya sea proveniente del ambiente exterior o del propio transductor. Eliminar el contenido de frecuencia de la seal que es superior a la mitad de la frecuencia de muestreo, para evitar el fenmeno de aliasing. Para entender el fenmeno de aliasing, primero debemos saber que es el teorema de muestreo (Shannon o Nyquist), este teorema, que es una de las piedras angulares del procesamiento de seales digitales, nos dice que una seal continua muestreada, puede ser recuperada solo si su mximo componente en frecuencia es inferior al doble de la frecuencia de muestreo o sea supongamos que la frecuencia de muestreo sea de 2Khz, requiere que la seal analgica sea compuesta por frecuencias inferiores al 1KHz. Si existieran frecuencias superiores a este lmite, estas se veran reflejadas en el entorno de frecuencia entre 0 y 1KHz, combinndose con la informacin legtima contenida en este entorno. La siguiente figura nos ayudara a comprender lo dicho.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Observemos como el fenmeno de aliasing se manifiesta en la figura d) donde una seal de frecuencia 0.95 de la de muestreo, se manifiesta como si tuviera una frecuencia de solo 0.05 de la de muestreo. Por lo antes comentados, concluimos que en la gran mayora en estos sistemas el filtrado va a estar a cargo de filtros pasa-bajo, cuya frecuencia de corte va estar determinado ya sea por, la mitad de la frecuencia de muestreo o la frecuencia del ruido que queremos eliminar, el menor de los dos. Para profundizar mas en el procesamiento de seales digitales (DSP), recomiendo leer el libro: The Scientist and Engineers Guide to Digital Signal Processing de Steven W. Smith, que se puede bajar gratuitamente. Un link a este libro se encuentra en la pgina del autor de este curso http://www.microdiseos.com.ar 3.1.3 Multiplexor Analgico Cuando es necesario muestrear mas de una entrada analgica, se podra recurrir a poner en el sistema mltiples A/D, tantos como entradas sean necesarias muestrear. Sin embargo esta solucin incrementa el costo, el tamao de la placa, la complejidad del ruteo del pcb y la complejidad de software. Por esto se suele recurrir a multiplexores que actan como selectores, eligiendo cual de las entradas esta conectada a la entrada del A/D en un instante determinado. Debido a que el multiplexor esta construido con llaves hechas de semiconductores, no debemos olvidar las imperfecciones que esta tecnologa trae aparejada. En particular cuando la llave est cerrada tiene una resistencia interna que puede rondar desde las decenas hasta las centenas de ohms, lo cual impacta directamente en el proceso de adquisicin de datos. Gracias a los niveles de integracin hoy alcanzables, los multiplexores forman parte de chip, pudiendo el mismo tener un considerable nmero de entradas. Una importante desventaja de usar multiplexores, es que la mxima frecuencia posible de muestreo del microcontrolador se tiene que dividir entre todas las entradas muestreadas.

262 3.1.4 Muestreo y Retencin y Tiempo de Adquisicin 6 P POLITECNI GI CO N NA 2

Debido a que el proceso de conversin de analgico a digital se realiza en un tiempo finito, o sea no es instantneo, se recurre a una tcnica que consiste sacar una instantnea de la tensin (muestreo) y conservar este valor mientras dure la conversin (retencin). Un circuito sencillo que realiza esta tarea es el siguiente:

El corazn del circuito esta formado por una llave, que hace el muestreo, y un capacitor, que realiza la retencin. Cuando la llave es cerrada, despus de un cierto tiempo, el capacitor se llena hasta el valor de la seal presente en la entrada, a partir de aqu podemos abrir la llave y el capacitor retendr su valor. Uno de los problemas con este circuito, es que el capacitor no se puede llenar instantneamente ya sea por la resistencia de la llave selectora o la de la propia fuente de tensin a medir. Esto va a traer aparejado una evolucin exponencial de la tensin:
t ) RC

VC = VS (1 e

Es nuestro inters que la tensin haya llegado suficientemente cerca de su valor final con la llave cerrada, antes que esta sea abierta y comience el proceso de conversin en s. Precisamente, este intervalo de tiempo en que dejamos evolucionar la tensin del capacitor es lo que llamamos tiempo de adquisicin.

Veamos grficamente la ecuacin de llenado del capacitor:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Los valores representados fueron sacados con la ecuacin anterior, por ejemplo, supongamos que queramos calcular que tiempo llevara llegar al 90% del valor final. Entonces: 0,9 VS = VS (1 e e RC = 1 0,9 t = R C ln(0,1) t = 2,3 R C Para conseguir una buena precisin en la conversin, el error introducido por este proceso debe ser menor a la mitad de un LSB. Si nuestro conversor es de 10bit tenemos: VM = 0,0009765 VM 1024 V 1 LSB = M = 0,0004883 VM 2 2048 1 VM LSB = 0,9995 VM 2
( t ) ( t ) RC

1LSB =

De la grfica vemos que corresponde a: 262 6 P POLITECNI GI CO N NA 2

t = 7,6 R C 3.1.5 Conversor Analgico Digital La tarea que realiza este dispositivo es la de generar una palabra digital a partir de una tensin analgica, debido a que solo puede generar un numero finito de palabras digitales trae como consecuencia que, en realidad se reconozcan intervalos de tensin, como muestra su funcin de transferencia:

Este proceso se llama cuantizacin, ya que asocia un intervalo de tensin a un valor determinado (el valor en que se produce la transicin de la palabra digital). Por lo tanto vemos que mientras el proceso de muestreo y retencin discretiza la seal, la conversin la digitaliza o cuantifica, introduciendo un error denominado de cuantificacin.

La figura ejemplifica lo antes dicho:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

262 6 P GI N NA 2

POLITECNI CO

Adems de este error existen otros errores asociados con la precisin con que se reconoce el tensin de transicin de la palabra digital algunos de ellos son: error de ganancia, error de offset, error de linealidad, no-linealidad diferencial, etc. Respecto a los mtodos de conversin, existen diferentes formas de conseguir esta conversin, algunos de ellos estn apuntados a la velocidad (y menor precisin) como los conversores Flash, mientras que otro a la precisin (y menor velocidad) como los conversores Doble rampa. Lo microcontroladores tiene implementado un tipo de conversor denominado de Aproximaciones sucesivas que lo ubica en un rango medio de velocidad y precisin. Esquemticamente este mtodo implementa lo siguiente:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El circuito posee un conversor digital analgico que va transformando los valores de la salida digital a su equivalente analgico y los compara con la tensin de entrada, en base a el resultado de esta comparacin se decide si un bit en particular debe estar a 0 o 1. Inicialmente todos los bits estn a cero, luego empezando por el bit MSB hacia el LSB, se van activando de a uno y en funcin de la comparacin se decide si ese bit en particular tiene que estar a 1 o 0. Con n bits un conversor puede discriminar 2n valores diferentes y el valor mximo que puede alcanzar es (2n-1). As para el conversor de 8 bits tenemos: 2n = 28 = 256 2n = 210 = 1024 y el valor mximo es (2n-1) = (256-1) = 255 = 0xFF = 0b11111111 y el valor mximo es (2n-1) = (1024-1) = 1023 = 0x3FF = 0b1111111111 Para el de 10 bits Por ltimo notemos que si aumentamos el numero de bits, es mayor nuestra capacidad para discriminar tensiones cercana entre s, a esto se le llama resolucin, de esta forma un conversor de n bits tiene una resolucin de Vr/2n, donde Vr es el rango de tensin del conversor A/D. 3.2 MODULO A/D DEL 16F873A Hasta ahora hemos hablado en forma genrica acerca de los conversores, pero ahora nos enfocaremos especficamente en el que est incluido en el 16F873A. El modulo consiste en un conversor de 10 bits, que implementa aproximaciones sucesivas, posee internamente el multiplexor que para el microcontrolador que nos compete posee 5 canales, los cuales estn compartidos con todas los pines que conforman el Puerto A, con excepcin de RA4. Adems el mdulo provee la posibilidad de tener referencias de tensiones diferentes de Vcc y GND, lo que lo dota de una mayor flexibilidad. Por lo tanto la ventana de conversin del mdulo A/D no tiene porque tener la misma extensin que la de alimentacin del microcontrolador, puede se mas chica y comenzar con un offset respecto a masa. Incluido en el mdulo est el circuito de muestreo y retensin. El siguiente diagrama de bloque lo muestra en forma esquemtica: 262 6 P GI N NA 2

POLITECNI CO

3.2.1 Generalidades El microcontrolador realiza la conversin siguiendo una determinada secuencia, que consiste en un tiempo de adquisicin donde se toma una muestra de la tensin, seguida de un tiempo de conversin donde se hace la transformacin a digital como se muestra en la figura:

La conversin se completo, el resultado es cargado en el registro ADRES el capacitor de retencin comienza a transitar al voltaje del canal seleccionado. El bit ADIF es puesto a 1 Comienza la conversin. Se activo el bit GO el capacitor de retensin se desconecta del multiplexor El capacitor de retencin comienza a cargarse Despus de una conversin A/D, o cuando se selecciona un nuevo canal

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El tiempo de conversin en s, esta gobernado por el reloj del A/D, el cual tiene un perodo denominado TAD, cuyo valor depende de cual haya sido la fuente de reloj elegida para el conversor. Para un conversor de 10 bits, la conversin insume 12 ciclos TAD, como se muestra en la figura:

Comienza la conversin El capacitor de retencin se desconecta de la entrada analgica (tpico 100ns) Se pone a 1 el bit GO Prox Q4: ADRES es cargado bit GO es limpiado bit ADIF es puesto el capacitor de retencin es conectado a la entrada analgica

Por lo tanto podemos aumentar la velocidad de conversin si disminuimos el perodo TAD, sin embargo tenemos un lmite inferior, para una correcta operacin del conversor que es de 1,6 useg (TADMin = 1,6 Seg). El mnimo tiempo de conversin conseguible es: Tconv = 12 TAD = 12 1,6seg = 19,2 seg 3.2.2 Calculo del tiempo de Adquisicin Como vimos en el punto anterior el proceso de conversin no solo esta compuestos por el tiempo empleado por el A/D, sino tambin por un tiempo previo que implica la adquisicin del valor de tensin a convertir. Para poder hacer una estimacin de este tiempo, necesitamos un modelo elctrico que nos permita realizar los clculos pertinentes. Microchip ofrece el siguiente modelo para sus conversores:

262 6 P GI N NA 2

POLITECNI CO

De acuerdo a las hojas de datos el tiempo de adquisicin esta compuesto por tres fuentes: Tac = Tiempo de establecimiento del Amplificador + Carga del capacitor de retencin + Co eficiente de temperatura El tiempo del establecimiento del amplificador es un tiempo fijo de 2 Seg. El coeficiente de temperatura se aplica solo para temperatura por encima de los 25C especficamente: Coeficiente de Temperatura = (Temperatura 25 C)*(0,05 Seg/C). De la ecuacin se deduce que se crea un tiempo de retardo de solo 0,5 Seg cada 10C por encima de los 25C, por lo tanto su influencia es despreciable. Por los clculos previos vemos que el tiempo de adquisicin esta totalmente determinado por el tiempo de carga del capacitor de retensin. Al principio del captulo habamos calculado que para conseguir un error menor a LSB el tiempo de adquisicin tena que ser: t = 7,6 R C Del modelo elctrico de las entradas y despreciando la capacidad del pin tenemos: C = 120 pF La resistencia estara integrada por 3 componentes: R = RS + RIC + RSS Siendo RSS la resistencia del multiplexor, que de acuerdo a las hojas de datos se modifica con la tensin en la siguiente forma:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Rss

Para una alimentacin de 5V asume un valor de 7K RIC es la denominada resistencia de interconexin y asume un valor de 1K RS es el valor de la fuente de tensin a convertir que en un buen diseo puede ser unas pocas decenas de ohm, por lo tanto despreciando esta ltima, como tambin la corriente de prdida resulta: Tac = 2 Seg + 7,6 * 120pf * (1K+7K) = 2 Seg + 7,3 Seg = 9,3 Seg Este es el tiempo mnimo que se requiere para tener un error menor a LSB Sumando a este tiempo el tiempo mnimo empleado por el conversor nos da que, una entrada se puede llegar a convertir cada: Tac + Tconv = 9,3 Seg + 19,2 seg = 28,5seg O sea a una frecuencia mxima de: 1 = 35 KHz 28,5seg Sin embargo el manual nos dice que despus de cada conversin el sistema se toma un tiempo de 2xTAD antes de comenzar un nuevo perodo de adquisicin por lo que recalculando: Tac + Tconv + 2 x TAD = 9,3 Seg + 19,2 seg + 3,2 Seg = 31,7 seg O sea a una frecuencia mxima de: 1 = 30 KHz 31,7 seg 3.2.3 Controlando el A/D 262 6 P GI N NA 2

POLITECNI CO

El A/D est controlado por dos registros: ADCON0 y ADCON1. El resultado de la conversin es puesto en otros dos: ADRESH y ADRESL Otros registros que tambin estn relacionados con el mdulo A/D son TRISA ya que cualquier entrada del puerto A, que sea elegida para trabajar como entrada analgica debe tener su correspondiente bit TRIS a 1, y los registros PIR1 y PIE1, que contienen la bandera de interrupcin y habilitacin de interrupcin del mdulo A/D. Registro ADCON0

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El mdulo A/D es encendido o apagado por el bit ADON. Apagndolo, cuando no es usado, trae aparejado un pequeo ahorro de consumo. Como ya se mencion anteriormente el proceso de conversin est regido por un reloj cuyo perodo se denomina TAD, la hoja de datos especifica que este valor no debe ser inferior 1,6 useg., aunque tampoco es adecuado que sea mucho mayor, ya que habra una prdida de cargas por parte del capacitor de retencin que hara imprecisa la medicin. Por lo tanto la mejor prctica consiste en acercarse al valor lmite establecido. La seleccin de la fuente del reloj se hace a travs de los bits ADCS2, ADCS1, ADCS0. Adems posee un oscilador RC interno con un perodo tpico de 4 s y rango de 2 a 6 s. La tabla siguiente muestra el menor valor permitido para cumplir con el requisito de los 1,6s, en funcin del reloj del sistema:

El canal de entrada es seleccionado por los bits CHS0, CHS1 y CHS2. Elegir el canal apropiado es el primer paso en el proceso de adquisicin. Una conversin es inicializado llevando a 1 el bit GO/DONE, cuando la conversin finaliza este bit es limpiado por el hardware, adems se activa la bandera, bit ADIF. Por lo tanto se puede usar cualquiera de los 2 bits para testear la finalizacin de la conversin. Registro ADCON1 Despus del reset, todas las entradas que son compartidas con los canales de entrada al conversor A/D son definidas por defecto como entradas analgicas, por lo tanto uno de los primeros trabajos que se debe realizar en el proceso de inicializacin es decidir sobre cual de estos pines va a funcionar realmente como entrada analgica, si alguno, de acuerdo a las conexiones del 262 6 P POLITECNI GI CO N NA 2

hardware. Esta eleccin es independiente de que el mdulo est activado o no, por lo tanto, si ningunos de los pines va a ser usado como entrada analgica, como parte de la inicializacin se debe modificar este registro para definir los pines del Puerto A como entradas/salidas digitales. No todas las combinaciones de seleccin de entradas es posible, y esta, se realiza a travs de los bits PCFG0 a PCFG3, observar que tambin permite la seleccin de algunas de las entradas como fuente de tensin de referencia.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Si bien es una prctica comn, elegir como tensin de referencia la alimentacin del microcontrolador, a veces, puede ser ms conveniente elegirla en funcin de la variacin de la entrada analgica. As por ejemplo, supongamos que un sensor de presin da 4mV por cada BAR de presin, en este caso convendra alimentar el mdulo A/D con una tensin de referencia de 4,096V de tal forma que cada 4mV se produzca un incremento (4,096/1024 = 4) en la palabra digital convertida. Hay que tener en cuenta de que no todos los valores de Vref son posibles, el siguiente cuadro, sacado del manual, lo pone de manifiesto.

Por ltimo al ser el conversor de 10 bits, el resultado de la conversin se debe guardar en 2 byte, pero como no puede cubrir los 16 bits de los 2 bytes, el resultado se podra alinear hacia la derecha o hacia la izquierda, la eleccin del lado hacia el que se alinea se elige con el bit ADFM.

262 6 P GI N NA 2

POLITECNI CO

En nuestro circuito las conexiones fsicas de los traductores analgicos con el microcontrolador se muestran en la siguiente figura.

En funcin del hardware, esta es la rutina de inicializacin

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Aprovechando el hardware previamente implementado, vamos a modificar el software para que cuando el jumper del bit 7 del teclado est activado muestre en las salidas (LCD y 7Segmentos) la medicin del sensor de temperatura o del potencimetro en funcin de si el switch del bit 0 del teclado est a 1 o 0.

262 6 P GI N NA 2

POLITECNI CO

La lectura en s de los dos canales se va alternando en cada llamada:

3.3 TCNICAS DE MANIPULACIN DE DATOS Las operaciones binarias de suma, resta, multiplicacin y divisin se resume en los siguientes grficos:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Hasta ahora siempre nos hemos manejados con representaciones binarias de valores positivos. Sin embargo se puede llegar a representar valor negativos con nmeros binarios, si bien hay varias, la forma mas utilizada es la denominado complemento a dos. En complemento a dos un nmero positivo se transforma en negativo, complementando y luego sumndole uno. Supongamos que tenemos 4 bits para representar los valores positivos y negativos. 262El valor 2 es: 6 P POLITECNI GI CO N NA 2

0010; representacin binario de valor 2 decimal El valor -2 ser: 0010; representacin binario de valor 2 decimal 1101; complemento del valor 2
1101 + 0001 1110

; complemento a dos del valor

Por lo tanto el valor negativo -2 se representa en complemento a dos como 1110, para comprobar la veracidad de esta afirmacin sumemos 4 + (-2) = 2 0100 + 1110 0010

lo que nos da el resultado esperado

Otra operacin 2 + (-2) = 0 0010 + 1110 0000

lo que nos da el resultado esperado

Con esto ejemplos se pone de manifiesto una de la grandes ventajas del complemento a dos y es la de poder hace una resta con los circuitos de suma, simplemente complementando a dos el nmero que resta. En el siguiente cuadro se muestra que representa cada nmero binario en funcin de si lo estamos interpretando exclusivamente como nmeros positivos o como nmeros signados en complemento a dos.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Observemos que los nmeros negativos siempre tienen el bit mas significativo (MSB) a 1, adems vemos como se reduce la capacidad de representacin de los nmeros positivos, por dar lugar a los negativos.

Numero Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Decimal No Signado 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Decimal Signado 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1

3.3.1 Representacin en Punto Fijo y Flotante Los nmeros binarios tambin puede representar valores decimales, para ello tenemos que agregar un punto binario y trabajar los dgitos hacia la derecha como potencias negativas de dos

262 6 P GI N NA 2

POLITECNI CO

A este tipo de representacin se la denomina de punto fijo, la aritmtica asociada a estos nmeros solo debe respetar, a igual que pasa en decimal, la alineacin del punto binario y la suma y la resta se hace de igual forma que con los enteros. La presentacin de punto fijo limita el rango de representacin de los nmeros, por ejemplo en el caso anterior, el menor valor que se puede representar distinto de cero es 0,25 y el mayor 15,75. Para poder ampliar el rango representado debemos recurrir a un formato equivalente a la notacin cientfica decimal, denominada de punto flotante. Este formato necesita un bit de signo (v), una mantisa (M)y un exponente (E), el nmero que representa sera: V = (-1)S x M x 2E-127 Cuando usamos 32 bits para contener estos parmetros se denomina de simple precisin. Ejemplos:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Donde M = 1.m22m21m20m19.m2m1m0 La aritmtica asociada a la representacin en punto flotante es ms compleja que la de punto fijo. 3.3.2 Multiplicacin y escalado binario Despus de la suma y la resta, la multiplicacin es la operacin aritmtica ms utilizada en los sistemas embebidos. Algunos microcontroladores disponen internamente de multiplicadores por hardware que facilitan enormemente este proceso, sin embargo la serie 16 no dispone de estos dispositivos por lo que es necesario llevarlos a cabo a travs de rutinas de software. La tarea de desarrollar estas rutinas no es sencilla, por suerte, la empresa Microchip ha desarrollado estas rutina y forman parte de la nota de aplicacin AN617, esta, tambin incluye rutinas de divisin, que son an ms complejas que las de multiplicacin. Existen rutinas diferentes de acuerdo al formato de los operando, si son de 8, 16 o 32 bits, y si son signados o no-signados.

262 6 P GI N NA 2

POLITECNI CO

Por ejemplo la rutina denominada FXM1616U, permite multiplicar 2 operandos de 16 bit cada uno en formato no-signado. FXD1608S, realiza la divisin donde el dividendo es de 16 bit y el divisor de 8 bit, ambos no-signados. Una aplicacin comn para la multiplicacin es el escalado de las entradas analgicas para cambiar su rango. Pongamos como ejemplo la medicin de corriente en un rango de 0-80 Amp, inicialmente a travs de un transductor (por ejemplo un TI) y el circuito de amplificacin y offset se produce un escalado por hardware que transforma este rango inicial a un rango de 0-5V para el trabajo ptimo del conversor A/D. Internamente el conversor lo transforma a un rango digital de 01023, que tendr que ser escalado para poder representar (quizs en un LCD) el rango original. De esta forma, se necesita encontrar la constante que me permita hacer este escalado de rangos. En el ejemplo del sensor de temperatura implementado, habamos tomado que cada 2 cuentas se produca un incremento de 1C de temperatura, pero si hacemos un clculo mas preciso tenemos: 5/1024 = 4.883 mV Adems sabemos que el sensor da 10mV/C, por lo que, en un calculo exacto tendramos que hacer: Temperatura = ADC Ouput x (4.883/10)

Al valor 4.883 lo vamos a representamos con el siguiente valor binario: 100.11100010 (0x4.E2) en decimal es: 4,8828125

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

y lo vamos a representar en 2 byte (0x04E2), la multiplicacin por un nmero con coma binario es igual a como se hace en decimal, es decir, se multiplica como si no existiera la coma y luego en el resultado, a partir del final, se corre la coma tantas veces como la correspondiente a la suma del multiplicando y el multiplicador, es nuestra caso, tendramos que correr la coma 8 lugares a partir del final o lo que es lo mismo decir, despreciar el ltimo byte del resultado. Luego se lo divide por el nmero 10 como se muestra en el software:

3.3.3 Estabilizacin de la Lectura Es frecuente que la lectura de conversor A/D no d el mismo resultado en dos lecturas sucesivas, suponiendo que la variable medida no ha variado, generalmente el origen de este fenmeno esta en el ruido electrnico ya sea del transductor, los cables de conexin, la amplificacin o la misma alimentacin del microcontrolador. Tambin podra darse que la tensin a convertir este en el umbral de una conmutacin de dgitos, y esto es ms cierto mientras mayor sea la resolucin del conversor. 262 6 P GI N NA 2

POLITECNI CO

Una forma de estabilizar estos resultado es promediando las ltimas n lecturas, consiguiendo as una reduccin en la variacin del resultado, ya que el promediado acta como un filtrado pasabajo. El promediado simplemente consiste en suma los ltimos n cantidad de muestras y el resultado dividirlo por n. Sumar n valores consume ms tiempo mientras mayor sea n. Habr algn algoritmo que nos permita hacer esta suma en pocos pasos independiente del valor de n?. Observemos el siguiente ejemplo donde n = 7:
ADRESH/L PotH/L Inicio

SPotH/L = SPotH/L + PotH/L

Observando los dos promedios adyacentes obtenidos, vemos que el clculo repite la mayora de los sumandos, los puntos desde x[48] a x[53] deben ser sumados tanto para y[50] como para
SPotH/L = SPotH/L - sera: y[51]. Si ya tenemos el valor de y[50], la forma ms eficiente de obtener y[51] BufPot(pBufPt 16)

BufPot(pBufPt) = PotH/L

De esta forma notamos que con solo una suma y una resta podemos calcular el promedio adyacente cualquiera sea el valor de n. Ahora dividiendo esta suma por n obtenemos el valor buscado. = SPotH/L / 8 PotH/L Una cuestin a resolver sera saber Cul es valor adecuado de n?. Si es muy chico, sera poco efectivo en el promediado, si es muy grande introducira un retardo en la variable medida que para monitoreo no es un inconveniente, pero si podra serlo si interviene en un lazo de control.
pBufPt = pBufPt + 2

Como sabemos n interviene en la divisin en la obtencin del promedio por lo que un buen criterio sera elegirla como potencia de 2 (2, 4, 8, 16, 32,..) consiguiendo de esta forma que la divisin se transforme en un simple corrimiento binario lo que acelerarapBufPt = 16? la velocidad notablemente Si del clculo. A continuacin la implementacin del algoritmo con n = 8.
No pBufPt = 0

POLITECNIC O
Fin

25

Microcontroladores PIC Nivel Medio

262 6 P GI N NA 2

POLITECNI CO

4. TIMERS Y PWM 4.1 CARACTERSTICAS GENERALES DE LOS TIMERS Una de las funciones infaltables en todo sistema embebido, es la capacidad de contar eventos, que se manifiesta como cambio en el estado de alguna entrada, y la de temporizar, no solo para relacionarse con el mundo que lo rodea, sino tambin para poder integrar en el microcontrolador perifricos que funciones en base a temporizaciones, como por ejemplo UART y PWM. Respecto a 16F84A las funciones de cuenta y temporizacin se han ampliado y mejorado notablemente con la incorporacin 2 nuevos temporizadores con capacidades ampliadas, como se analizar a continuacin. 4.1.1 Timer0 Es exactamente igual a contenido en el 16F84A.

Es un temporizador/contador de 8 bits con preescala compartida con el WDT, siendo el Option_Register su registro de control.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

En el software se lo usa para contar 2mseg y generar una interrupcin que actualiza el LCD y los 7-Segmentos. 4.1.2 Timer1 El timer0 est a limitado a ser de 8 bit, el timer1 que est construido en el mismo concepto que el timer0, es un temporizador de 16 bits, conformado por 2 registros TMR1H y TMR1L, los cuales forman parte del SFR y pueden ser tanto escritos como ledos en cualquier momento. Juntos, estos registros pueden contar desde 0x00 a 0xFFFF ( 65535 ), cuando llega a su mxima cuenta se desborda y vuelve a cero en el prximo ciclo de reloj, y su vez origina que el bit TMR1IF tome el valor 1, originndose una interrupcin si la misma est habilitada.

262 6 P GI N NA 2

POLITECNI CO

El Timer1 es controlado por el registro T1CON:

A diferencia del Timer0, este temporizador se puede apagar o prender a travs del bit TMR1ON, permitiendo un pequeo ahorro de energa cuando no es requerido. Tiene 3 fuentes diferentes de reloj. Para su funcin de contador dispone de la entrada externa T1CKL compartida con el pin 0 del Puerto C. Para su funcin de temporizacin permanece la opcin del reloj interno (FOSC/4) derivado del oscilador del sistema, la eleccin de estas 2 ltimas fuente de reloj, es decir si va a ser interna o externa, se hace a travs del bit TMR1CS. La tercera fuente de reloj, puede ser derivada directamente de un oscilador externo conectado a 2 pines del microcontrolador, que trabaja en forma independiente del oscilador principal. Por lo tanto puede trabajar a una frecuencia completamente diferente a la del reloj principal y seguir funcionando an cuando el sistema est en Sleep. Este oscilador est preparado para trabajar a bajas frecuencia, con un mximo de 200KHz, una aplicacin muy comn que se suele realizar con este temporizador y este oscilador es poner un cristal de 32,768 KHz para la implementacin del reloj de tiempo real o RTC como se describe en la nota de aplicacin AN582.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Cualquiera sea la fuente de reloj usada, existe la posibilidad de usar preescala, gobernada por 2 bits TICKPS1 y TICKPS0, que permiten elegir un valor para la misma de 2, 4 o 8. Es posible la sincronizacin de la entrada externa llevando a cero el bit T1SYNC, pero hay que tener en cuenta que de esta forma el temporizador deja de incrementarse en modo sleep. Por ltimo tengamos en cuenta que el temporizador, con reloj externo, se incrementa en cada flanco ascendente, siempre que haya habido previamente un flanco de descendente.

Observar que en la segunda grfica la cuenta comienza a partir del segundo flanco, este problema se puede solucionar fcilmente precargando el temporizador con el valor 1. Una consideracin ms a tener en cuenta cuando se trabaja con este perifrico, es cuando se lo tiene que leer o escribir. Al estar compuesto por 2 registros, no puede ser ledo o cargado de una vez, por lo tanto al leer o escribir uno de los registro el otro puede haber sido modificado. Por ejemplo supongamos que la cuenta del perifrico es 0xFFFF:0xFFFF y leemos primero el byte LSB con un valor de 0xFFFF, antes de comenzar la lectura del registro MSB se produjo el overflow y nuestra lectura devuelve 0x0000, estas 2 lecturas nos levara a pensar, errneamente, que valor del temporizador es 0x0000:0xFFFF cuando en realidad era 0x0000:0x0000 al terminar la lectura. Por lo tanto en este caso hubiese sido conveniente esperar que el byte bajo conmute y luego releer los 2 byte nuevamente. Si el valor a escribir est cerca del overflow de algunos de los 2 registros convendra llevar primero el LSB a cero y luego hacer el proceso escribiendo primero el MSB y luego el LSB. En nuestro software el Timer1 se usa para marcar el tick del sistema (cuando se desborda) durante el cual se actualiza los valores a mostrar y se procede a la adquisicin del A/D

262 6 P GI N NA 2

POLITECNI CO

4.1.3 Timer2 Este temporizador es un dispositivo de 8-bit, cuya nica fuente de reloj es la proveniente del oscilador interno, por lo tanto, no puede actuar como contador. La cuenta es llevada en el registro TMR2, que est mapeado en la posicin 0x11del SFR.

Este registro puede ser ledo y escrito. Adems cuenta con una preescala, tal como muestra la figura. Su registro de control es el T2CON, cuyos bits tienen los siguientes significados

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Su arquitectura de funcionamiento es diferente a los vistos hasta el momento, lo cuales contaban desde un valor inicial hasta el overflow del mismo, ahora este cuenta con un registro adicional, el registro de Perodo PR2, el cual es continuamente comparado con el contenido del registro del temporizador Timer2. Cuando ambos registros son iguales, en el siguiente ciclo, el Timer2 es reseteado a cero y el ciclo comienza nuevamente. En la figura se muestra lo dicho:

Por lo tanto existe (PR2 + 1) ciclos entre cada reset. Cada reset produce un pulso que funciona como entrada para el postescala, cuya salida puede ser usada como fuente de interrupcin, consiguiendo de esta manera, dilatar la indicacin de interrupcin para el Timer2 La forma de funcionamiento de este temporizador, se vuelve mucho mas natural para el programador que los otros dos, ya que puede poner directamente en el registro PR2, el valor que se desea contar sin tener que andar calculando un complemento respecto al overflow, como se hace en el TMR0 y TMR1. 4.2 CAPTURE COMPARE Y PWM Una de las necesidades ms comunes que se debe satisfacer en los sistemas embebidos es, la posibilidad de indicar la llegada de un determinado tiempo, funcionando como si fuera una alarma, o la de almacenar el momento en que se produce un determinado evento, funcionando como un 262 6 P GI N NA 2

POLITECNI CO

registrador, lo cual fue resuelto por los diseadores del microcontrolador sencillamente agregando un par de registro al TMR1. Otra funcin muy interesante sera la de poder generar una onda cuadrada de frecuencia variable y ciclo de trabajo variables sin intervencin del software, ya que este tipo de onda denominada PWM encuentra una enorme aplicacin en electrnica. Al agregar al Timer2 otro comparador, como se ver ms adelante, se lo puede implementar en el 16F873A. En los pic, el mdulo que implementa estas tres funciones mencionadas se lo denomina CCP. El 16F873A tiene a 2 de estos mdulos, cada uno de estos contienen 2 registros de 8-bits denominados CCPRxL y CCPRxH (x = 1 o 2) que forman un registro del 16-bits que pueden ser usados para la funcin de captura, comparacin o para formar el ciclo de trabajo del Pwm. Los mdulos son controlados por su respectivo registro de control denominado CCPxCON.

Como se ve en el grfico, los ltimos 4-bits determinan el funcionamiento y el modo de trabajo del mdulo.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El uso de los temporizadores de acuerdo a la funcin, se muestra en la siguiente tabla:

4.2.1 Capture El circuito de captura es el siguiente.

Si bien en el esquema se muestra el modulo CCP1 el mdulo CCP2 es exactamente igual solo que est conectado al pin RC1. Como estos pines estn compartidos con el Puerto C, es necesario para el uso del mdulo que los correspondientes bits TRIS sean definidos como entradas. El evento que dispara la captura del registro Timer1, es un flanco en el pin, que puede ser seleccionado para que sea ascendente o descendente, si es ascendente, es ms verstil porque permite, para este caso, la eleccin de una preescala de 4 o 16. El Timer1 podra esta funcionando como contador, pero debe hacerlo en forma sincrnica, es decir, con el bit T1SYNC del registro T1CON a cero. 4.2.2 Compare En el modo de comparacin, un comparador digital diseado en el hardware del microcontrolador, esta continuamente comparando el contenido del Timer1 con el registro de 16bits formado por los registros CCPRxH y CCPRxL. El Timer1 podra esta funcionando como 262 6 P POLITECNI GI CO N NA 2

contador, pero debe hacerlo en forma sincrnica, es decir, con el bit T1SYNC del registro T1CON a cero. En el siguiente diagrama se muestra su funcionamiento.

Dispara de Evento Especial: Resetea Timer1, pero no lleva a 1 el bit TMR1IF (PIR1<0>) y pone a 1 el bit GO/DONE (ADCON0<2>)

Cuando el comparador detecta igualdad en los registros la reaccin depende del valor seteado en el registro de control.

CCPxM3:CCPxM0 1000 1001 1010 1011

CCP1
CCP1F = 1 Pin RC2 = 1 CCP1F = 1 Pin RC2 = 0 CCP1F = 1 Pin RC2 no afectado CCP1F = 1 Pin RC2 no afectado Reset TIMER1

CCP2
CCP2F = 1 Pin RC1 = 1 CCP2F = 1 Pin RC1 = 0 CCP2F = 1 Pin RC1 no afectado CCP2F = 1 Pin RC1 no afectado Reset TIMER1 GO/DONE = 1

Para que el mdulo tenga la capacidad de modificar el estado de los pines en cuestin, sus correspondientes bit TRIS deben estar a cero. 4.2.3 Principios del PWM (Pulse Width Modulation)

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

La tcnica conocida como modulacin por ancho de pulso, permite implementar un control de variables analgicas a partir de una salida puramente digital. La raz de esta capacidad est en los sistemas analgicos en s, en su capacidad de almacenar energa y no poder modificarla en forma instantnea. Como ejemplo veamos el siguiente circuito.

Camino de decaimiento de la corriente cuando el transistor es cortado.

La ecuacin que gobierna la inductancia es: V = L di/dt Si un cambio abrupto de tensin positiva es aplicada a la inductancia, la corriente va a crecer en forma exponencial hasta el mximo valor permitido por el circuito iLMAX = V/R, si ahora mediante otro cambio abrupto llevamos esta tensin cero, va a dar lugar a un decaimiento exponencial de la corriente hasta que alcance el valor cero, como se muestra en la figura.

262 6 P GI N NA 2

POLITECNI CO

La velocidad de crecimiento o decaimiento depende de sus parmetros fsicos, en este caso L y R. Al parmetro que la caracteriza se la llama, constante de tiempo y su valor es L/R. Este grfico nos sugiere que el cambio del estado de energa no puede ser instantneo, sino que va implicar el transcurso de cierto tiempo y que la corriente, en su transicin, va a asumir todos los valores intermedios entre su valor inicial y final. Por lo tanto si conmutamos la tensin entre sus valores extremos con una velocidad mayor a su constante de tiempo, podremos obtener valores intermedios de corrientes, como muestra los grficos:

donde el sistema permanece en un estado continuo de transicin. Este es el principio del control de variables analgicas con PWM. Todo lo mismo se puede usar para cargar un capacitor o controlar la velocidad de un motor. 4.2.4 Generando seales PWM en el hardware del 16F873A Toda seal Pwm tiene dos constantes temporales que la definen, y son el perodo y el ciclo de trabajo de la misma. El perodo de la seal Pwm es determinado por el Timer2 que junto con el registro PR2, determinan la extensin del mismo. En el momento en que el Timer2 es igual a PR2, el comparador limpia el temporizador y activa el flip-flop cuya salida lleva el pin correspondiente a uno. Una vez establecido el perodo, tenemos que considerar la duracin o ancho del pulso. Para lograrlo se introduce un segundo comparador, y se usa el registro CCPR1H y se lo compara continuamente con el valor del Timer2, cuando ambos coinciden resetea el flip-flop cuya salida es llevada al valor cero.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Para poder cambiar el perodo debemos cambiar el valor del registro CCPR1H, que en este modo de trabajo no puede ser hecho directamente, sino a travs del registro CCPR1L, que transfiere su valor a registro anterior, solo en el momento en que el ciclo Pwm ha finalizado. El diagrama simplificado del mdulo CCP configurado para producir seal Pwm se muestra a continuacin:

Este registro acta como buffer. El programador escribe aqu el ancho de pulso requerido

Toma el valor desde el buffer. Determina el ancho del pulso del PWM

Timer2, en corrida libre, conectado a FOSC/4 a travs de su preescala

Pone el perodo del PWM para ambos mdulos CCP1 y CCP2

De acuerdo a la hoja de datos el Pwm tiene una resolucin del 10-bits, aunque hasta ahora los registros involucrados son solo de un byte (8-bits). Para poner el ciclo de trabajo se usan 2 bits adicionales bits 4 y 5 del registro CCPxCON, para lograr la extensin de CCPR1H se usan 2 latch internos y lo mismo sucede con el Timer2 que ahora es conducido directamente desde la frecuencia de oscilacin FOSC y no FOSC/4 como suceda hasta ahora. Notemos sin embargo que al registro PR2 no se lo extiende y sigue siendo de 8-bits, por lo que el perodo sigue teniendo esta resolucin. 262El perodo del PWM es determinado de la siguiente ecuacin: 6 P POLITECNI GI CO N NA 2

T = (PR2 + 1) x (TOSC x 4 x Timer2 Preescala)

Timer2 = PR2. Se resetea Timer2 El pin de salida a uno Se carga el valor CCPR1L

Se cambia en programa el valor de CCPR1L El valor de CCPR1L es transferido al CCPR1H

Timer2 [2Qbits]= CCPR1L:CCP1CON<5:4> El pin de salida va a cero

El ancho del pulso o tON es determinado por la siguiente ecuacin: tON = (CCPR1L:CCP1CON<5:4>) x TOSC x Timer2 Preescala ) Observar que ahora no aparece el factor 4 que acompaa a TOSC en la formula del perodo Si el valor calculado para tON > T, la salida permanece siempre a uno. Si el valor de tON = 0, la salida permanece siempre a cero.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Cada vez que termina un perodo de PWM se activa el TMR2IF de acuerdo al valor de posescala y se puede generar una interrupcin. Por ltimo notemos que, aunque tenemos dos mdulos CCP las distintas configuraciones comparten los mismos recursos, es decir, el Timer1 y el Timer2, por lo que no es posible que ambos mdulos estn activos al mismo tiempo sin que halla algn tipo de interaccin entre ellos, salvo que no compartan los mismos recursos. Las interacciones entre las distintas configuraciones es la siguiente:
CCPx Mode Captura Captura Compare Pwm Pwm Pwm CCPy Mode Captura Compare Compare Pwm Captura Compare Interaccin Comparten el mismo TMR1 como base de tiempo El comparador debera ser configurado para el disparo de eventos especiales ( 1011 ), el cual resetea el TMR1 Los comparadores deberan ser configurados para el disparo de eventos especiales ( 1011 ), el cual resetea el TMR1 Los PWMs tendrn las mismas frecuencias y por lo tanto la interrupcin del TMR2 sera la misma Ninguna Ninguna

El circuito propuesto para comprobar la generacin de la seal PWM es el siguiente:

262 6 P GI N NA 2

POLITECNI CO

El objetivo del programa que vamos a desarrollar es controlar la velocidad de un motor de DVD conectado al Conector P2 con PWM, modificando su ciclo de trabajo en funcin del valor ledo del potencimetro. Rutina de Inicializacin Como parte de la inicializacin se setea el TRISC2 como salida y luego se configura los parmetros del PWM de la siguiente forma:

Calculamos el perodo del Pwm: T = (PR2 + 1) x (TOSC x 4 x Timer2 Preescala) = 256 x 100nseg x 4 x 16 = 1.638,4 useg F = 1/1.638,4 useg = 610,3 Hz Ahora la funcin de modificacin del ciclo de trabajo del PWM, ser activada solo cuando el bit6 el teclado est activo.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Se carga el valor correspondiente en las variables de la rutina de carga

Y se realiza la carga en s:

4.2.5 Uso del PWM como conversor D/A Alrededor del ao 1807 Joseph Fourier, matemtico francs, descubri que cualquier funcin peridica puede ser pensada como la suma de una constante mas funciones senoidales y cosenoidales cuyas frecuencias sean armnicas de la fundamental. Expresado matemticamente es:

262 6 P GI N NA 2

POLITECNI CO

La funcin originada por el mdulo Pwm es una funcin peridica, por lo tanto, puede expresarse en una serie de Fourier como la siguiente:

a0/2 Pwm(t ) =

an

A 2 A 2 n t + sen(n ) cos( ) T T T n =1 n

Con una respuesta en frecuencia:

Por lo tanto si hacemos pasar esta seal por un filtro pasa bajo con frecuencia de corte menor a f = 1/T, se eliminar todas las componentes cosenoidales y solo quedar la componente de continua El circuito pasa bajo puede ser implementado con un simple R-C:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Frecuencia de Corte: 1/R*C La frecuencia del PWM debe estar lo mas alejado posible de la frecuencia de Corte

VC

A , donde vemos que la continua obtenida va a ser proporcional al ciclo de trabajo T

del PWM y por lo tanto variando el ciclo de trabajo modificamos el nivel de continua de salida y de esta forma tenemos implementado un conversor D/A. Ahora supongamos que ahora usamos solo los 8 bits MSB del PWM, llevando los 2 bits LSB a cero y supongamos que A = 5V entonces la ecuacin anterior se transforma en: VC A CCPR1L PR 2 CCPR1L 0xFF 0xC5 0x80 0x32 0x00 VC 5V 3,86V 2,51V 0,98V 0V

En la siguiente tabla se muestra algunos valores:

PR2 = 0xFF

Vamos a generar un onda senoidal a partir del PWM, para lograrlo vamos a ir variando el ciclo de trabajo del PWM en funcin del valor de la senoide, y lo haremos en la interrupcin del TMR0, es decir cada 2 mseg. Los valores de la senoide los extraemos de una ecuacin como la siguiente: P (k ) = 127 + 127 sen( 2 k ) k = 0, 1, 2,.., 19 20

Donde vemos que muestreamos un ciclo completo de la misma en 20 muestras. Una vez obtenidos los valores los colocamos en una tabla y en cada interrupcin vamos reemplazando el ciclo de trabajo del PWM con los valores ledos en la misma, al llegar al final 262 volvemos al comienzo de la tabla y as proseguimos el ciclo. 6 P POLITECNI GI CO N NA 2

Si bien el Pwm puede manejar 10-bits, vamos a usar una palabra de 8-bits para representar los valores de la senoide llevando los 2-bits menos significativos a cero, y de esta forma simplificar el software Para mejorar la operacin de filtrado vamos a aumentar el perodo del PWM llevando la preescala de 16 a 1, de esta forma la frecuencia pasa de 610 Hz a 9.760 Hz. La generacin de la onda senoidal solo lo haremos cuando el bit5 del teclado est activado, a travs de una macro. El software es el siguiente:

En la rutina de interrupcin se agrega el siguiente cdigo:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

262 6 P GI N NA 2

POLITECNI CO

5. COMUNICACIN SERIAL-USART Una actividad esencial dentro de todo sistema embebido es el movimiento de datos entre el microcontrolador y algn dispositivo externo como por ejemplo: memorias, LCD, conversor A/D o D/A externo, PC, etc. Los bit de datos son empaquetados dentro de una palabra (generalmente byte, aunque no siempre) antes de ser transferidos Hablando en forma generalizada, decimos que hay 2 formas de transferencia de datos. La transferencia en paralelo, donde todos los bits que conforman la palabra son transmitidos al mismo tiempo, ya que cada bit tiene su propia conexin y la alternativa que es la de enviar un bit a continuacin del otro sobre una misma conexin hasta completar la palabra. Esta forma de comunicacin es llamada serial. Haciendo un anlisis comparativo notamos que la comunicacin paralela requiere de ms cables, hacindola mas susceptible al ruido, pero es mas veloz, mientras que la comunicacin serial requiere muchos menos cables, siendo ms inmune al ruido, pero es mas lenta. Por estas razones es que, en el pasado, se sola usar principalmente la comunicacin paralela en cortas distancias, mientras que se reservaba la comunicacin serial para largas distancias. Sin embargo hoy en da debido al incremento en la velocidad de transferencia serial, sumada a la necesidad de reducir mas y mas espacio en los sistemas embebidos, hacen de esta forma de comunicacin la dominante. En la comunicacin serial hay importantes desafos que resolver. Por ejemplo: Con un simple cable para transmitir los datos, Cmo sabemos cuando un bit comienza y termina?, Dnde comienza y termina una palabra? Existen dos formas diferentes para la identificacin individual de los bits. La mas sencilla es la de enviar en otra conexin, la informacin de cuando es vlido un bit, a esta seal se la denomina clock o reloj, y a esta forma de transmitir los bits es llamada sincrnica.
El transmisor enva los Bits en el flanco descendente del Clock El receptor lee los Bits en el flanco ascendente del Clock

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Otra forma sera, que en vez de enviar la seal de clock, poner ciertos requerimientos de tiempos en los mismos bits, donde la duracin de la validez de cada bits sea un tiempo fijo y conocido tanto por el transmisor como por el receptor a esta forma de comunicacin se la denomina asincrnica.
El transmisor usa un reloj interno para determinar cuando enviar cada bit El receptor detecta el flanco descendente del Start, entonces usa su reloj interno para leer el siguiente bit cerca de su centro

Como se puede ver, en la comunicacin sincrnica la temporizacin de la transferencia de datos la lleva quien origina la seal de reloj, en cambio, en la asincrnica, tanto el receptor como el transmisor tienen que tener relojes internos que trabajen a la misma frecuencia y en fase, aunque solo sea por el tiempo que dure la transferencia. Ahora necesitamos una forma de identificar el comienzo y el fin de cada grupo de bits o palabra. Para conseguirlo se empaqueta los datos en cierto formato. En la comunicacin asincrnica suele haber un bit que indica el comienzo y otro que indica el final de la palabra como se muestra en el grfico superior. En la sincrnica es el mismo reloj, la cantidad de ciclos que origina, la que determina los lmites de cada palabra. La sincronizacin y el formato de los datos implican la necesidad de ciertos conjuntos de reglas para asegurar una comunicacin coherente. A este conjunto de reglas se lo denomina Protocolo.

262 6 P GI N NA 2

POLITECNI CO

5.1 COMUNICACIN RS-232 La comunicacin RS-232 como toda comunicacin asincrnica tiene que cumplir con dos requerimientos bsicos: La velocidad de transmisin de datos est determinada de antemano, tanto en el transmisor como en el receptor, debe ser preestablecida la misma velocidad de transferencia de datos. Para conseguirlo, cada uno de los nodos de comunicacin debe tener un fuente de reloj precisa y estable, del cual derivar el Baud Rate, sin embargo, tambin debe poder lidiar con pequeas variaciones en los relojes. Cada byte o palabra esta encuadrado con un bit de Comienzo (Star) y un bit de Fin (Stop), lo que permite la sincronizacin previo a que comience el flujo de bits. 5.1.1 Generalidades El formato que usa la comunicacin RS-232 es el siguiente:

Bit de Start Primer Bit de Datos Ultimo Bit de Datos

Bit de Stop Estado de Reposo

Estado de Reposo

Comienzo de la Sincronizacin

El Bit extra de paridad puede ser insertado aqu

Posiblemente nuevo bit de Start

El estado Idle o reposo es el estado predeterminado cuando no hay transferencia de datos en proceso, el comienzo de esta se inicia con el bit de Star, que tiene polaridad opuesta al estado de reposo, siendo su flanco descendente usado para la sincronizacin. Luego son transmitidos los ocho bits que conforman los datos, seguido por un noveno, usado optativamente, que se emplea para el chequeo de paridad. Por ltimo, la lnea regresa al estado de reposo conformando de esta forma el

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

bit de parada o stop. Un nuevo dato puede ser enviado inmediatamente a la finalizacin del bit de stop, o permanecer en reposo hasta que una nueva transferencia es llevada a cabo. Con el objeto de recibir los datos correctamente, cuando no hay una seal de reloj, como pasa en este protocolo, el receptor deber ser capaz de detectar el comienzo de la palabra y el momento en que cada bit es vlido. Habindose de antemano determinado la velocidad de los datos, podra parecer una tarea sencilla, pero en realidad es imposible conseguir que dos sistemas tengan la misma frecuencia, ya que nunca, ni los microcontroladores ni los cristales van a ser exactamente iguales, adems hay que tener en cuenta que es muy posible que los sistemas estn expuestos a condiciones ambientales diferentes (humedad, temperatura, etc.) lo que trae aparejado un motivo ms de dispersin de frecuencias. Como se podra minimizar este problema? La siguiente grfica muestra la solucin generalmente implementada.

Punto Medio Bit de Start Estado de Reposo Bit de Start Primer Bit de Datos

Punto Medio del primer Bit de Datos

Data Arribando

El reloj del receptor resuena al un mltiplo de la velocidad esperada

La frecuencia de trabajo del reloj del receptor es un mltiplo exacto de la frecuencia esperada, usualmente el mltiplo es 16. El receptor esta continuamente monitoreando el estado de la lnea de entrada de datos, cuando el bit de Start es detectado, un contador interno comienza a contar ciclos de reloj hasta que se llega hasta la mitad del tiempo esperado de duracin del bit de Start, en nuestro caso, 8 ciclos. Aqu testea nuevamente el estado de la lnea para confirmar que se trata del bit de Start y no de un ruido 262 6 P POLITECNI GI CO N NA 2

espurio. A partir de aqu cuenta 16 ciclos para poder leer el primer bit del dato en su mitad y prosigue as con los dems, hasta llegar al bit de Stop, que en caso de encontrar un cero en vez de un uno pone un aviso de error denominado framing error o error de encuadre. Por ltimos notemos que el flanco descendente del bit de Start permite la sincronizacin de fases de los relojes de transmisin y recepcin, lo que permite reducir la discrepancia entre los dos relojes siempre que la cantidad de datos transmitidos, en cada encuadre, sea reducido. 5.1.2 Driver 232 El protocolo RS-232 fue diseado para comunicar dos dispositivos con una distancia lmite de alrededor de 24 m a 36 m, dependiendo de la velocidad de transmisin y del tipo de cable. RS-232 usa una conexin no balanceada, lo que significa que cada lnea de la interfase tiene una solo conexin fsica dedicada y su tensin se mide respecto a la conexin comn de masa. Para poder alcanzar distancias importantes en una conexin no balanceada, la inmunidad al ruido se consigue a base de ampliar los rangos de tensin, es as que, los niveles lgicos para este protocolo se definen con valores positivos y negativos de tensin, en vez de, tensiones solamente positivas como pasa con la lgica CMOS o TTL. En el siguiente cuadro se muestra la relacin entre los niveles lgicos y las tensiones correspondientes para el RS-232.

Salida 0 Lgico 1 Lgico Entrada 0 Lgico 1 Lgico

Voltaje +5V a +15V -5V a -15V Voltaje +3V a +15V -3V a -15V

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El 16F873A, como la mayora de los microcontroladores, usa niveles CMOS basado en una fuente de 5V para la salida de su pines, incluida la UART, por lo que es necesario algn tipo de hardware que permita hacer la traduccin de las tensiones necesarias entre, el microcontrolador y la comunicacin RS-232, que no se limita solo a las tensiones, ya que el protocolo tambin impone ciertas restricciones en cuanto a los tiempos de transicin mximo y mnimos para las seales. La empresa Maxim fue la primera en ofrecer un chip que cumpla esta funcin y solo requera de una alimentacin de +5V y no una dual. A continuacin el MAX232:

Como se aprecia este dispositivo cuenta con dos transmisores que convierte una seal de entrada TTL/CMOS a una salida RS-232 y dos receptores que convierten una entrada RS-232 a una salida compatible con TTL/CMOS. Tanto el transmisor como el receptor invierten la seal. El chip cuenta internamente con un doblador de tensin y un inversor que le permite alcanzar los niveles requeridos, para lograrlo necesita tener conectado 4 capacitores de acuerdo a lo recomendado por el fabricante. Si se usan capacitares polarizados, como suele suceder, hay que tener la precaucin de colocarlos correctamente en el circuito, y elegir tensiones de ruptura de los mismos igual o superior a los 16V. 262 6 P POLITECNI GI CO N NA 2

El MAX232 supera con creces los mnimos requerimientos exigidos por el protocolo, como se puede observar en el siguiente grfico.

Las conexiones que debemos hacer entre nuestro microcontrolador y el MAX232 se muestran a continuacin.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Un punto importante a notar es que en los conectores DB9, como el que suelen tener las computadoras, el pin 3 es el de transmisin (TX) y el pin 2 es el de recepcin (RX). Por lo tanto en algn punto la lnea que conecta dos dispositivos deben invertirse, como se muestra en la figura:

En nuestro caso usamos un cable directo, lo que significa que los pines entre los extremos del cable no se invierten (2 con 2, 3con 3), y la inversin la hacemos en la plaqueta entre el conector DB9 y el MAX232, como se ve en el esquema de conexin. Tambin bien se podra haber usado un cable cruzado que se encarga de hacer la inversin mencionada, pero en este caso hubisemos que haber tendido que conectar la salida del MAX232 al pin 3 y la entrada al pin 2 del conector DB9. 5.2 MODULO USART Este mdulo puede ser configurado como maestro sincrnico, esclavo sincrnico o en modo asincrnico, en este ltimo caso es full duplex, lo que significa que puede transmitir y recibir datos al mismo tiempo, pero ambas secciones no son independientes entre s, sino que comparten el generador de Baud Rate y el formato de los datos. 5.2.1 Generalidades El mdulo comparte sus pines con el Puerto C, estando la lnea de recepcin en el pin 7 y la de transmisin en la 6. Los correspondientes bits TRIS deben estar a uno. Las operaciones del USART estn controladas a travs de dos registros TXSTA y RCSTA, el port es habilitado por el bit SPEN del registro RCSTA y la seleccin del modo de funcionamiento, sincrnico o asincrnico, a travs del bit SYNC del registro TXSTA.

5.2.2 Transmisor Asincrnico 262 6 P POLITECNI GI CO N NA 2

Un diagrama en bloques del trasmisor es el siguiente:

Habilita Transmisor

Habilita 9-bit Transmisin Bit N 9

Habilita el Port Serial Estado del Registro de Desplazamiento

Notemos que el componente ms importante del puerto es el registro de desplazamiento (TSR), que transmite los bits con el bit LSB primero. El dato a transmitir es almacenado temporalmente en el registro TXREG, que es el nico que puede ser accedido desde las instrucciones del microcontrolador. La frecuencia de reloj que le marca el ritmo de trabajo al TSR es elegido a travs del valor contenido en el registro SPBRG. La conexin entre la salida del registro de desplazamiento y el pin del Puerto C se hace por medio de un circuito de control que es habilitado con el bit SPEN. Cuando se necesita transmitir un dato, el mismo es cargado en el registro TXREG por el programa, si el registro TSR est vaco, se le transfiere el contenido del TXREG al TSR en forma inmediata y se pone a uno el bit TXIF, indicando este bit que nuevamente el buffer esta vaco, este bit solo puede ser ledo ya es enteramente manejado por el hardware. Si el TSR no esta vaco, es decir hay una transmisin en progreso, el TXREG retiene el dato escrito hasta que el TSR est vaco. El bit TRMT indica el estado del registro de desplazamiento y solo puede ser ledo. A parte de los 8 bits correspondientes al dato el mdulo puede llegar a transmitir un noveno bit de datos, para habilitar esta opcin se tiene que poner a 1 el bit TX9 del registro TXSTA y el valor en s del noveno bit, se los coloca en el bit0 de este ltimo registro. Cuando la transmisin de 9-bits esta activada, hay que tener la precaucin de escribir primero el noveno bit antes de colocar los 8 restantes en el registro TXREG.

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Uno de los usos posible de este noveno bit puede ser, usarlo como bit de paridad, ya que la USART presente en el microcontrolador no implementa el bit de paridad, y por lo tanto en caso de necesitarlo se debe hacer el clculo por cuenta propia (no lo hace el hardware). El bit de paridad ocupa el noveno bit-time en la trama del RS-232 y se usa para detectar errores elementales. Se puede elegir trabajar con paridad par o impar. Con paridad par este bit toma el valor que permita contener un nmero par de unos en la trama: Bit de Datos 11001101 00010001 11110111 Bit de Paridad (Par) 1 0 1

vemos como el noveno bit (el de paridad), completa la cantidad de unos para que su nmero sea par. Con paridad impar este bit toma el valor que permita contener un nmero impar de unos en la trama: Bit de Datos 00111011 00000011 10000101 Bit de Paridad (Par) 0 1 0

vemos como el noveno bit (el de paridad), completa la cantidad de unos para que su nmero sea impar. Para poder implementar un algoritmo para el clculo de paridad, nos podemos basar en el clculo de la funcin Or-Exclusiva (XOR) entre los bits que conforman la palabra, si el nmero de 1 es par el resultado ser cero y si el nmero es impar el resultado ser igual a uno, o sea: 1 = N de unos impares b7 b6 b5 b4 b3 b2 b1 b0 = 262 6 P GI N NA 2 0 = N de unos pares

POLITECNI CO

Un algoritmo que puede conseguir este resultado se extrae del siguiente grfico:
b7 b7 b6 b7,6 b6 b5 b5 b4 b5,4 b3,2 b4 b3 b3 b2 b3,2 b1,0 b3,2,1,0 Se corre dos lugares b2 b1 b1 b0 b1,0 b0 Se corre un lugar

b7,6

b5,4 b7,6,5,4

b7,6,5,4

b3,2,1,0 b7,6,5,4,3,2,1,0 Se corre cuatro lugares

El 7 bit del ltimo resultado contiene el resultado buscado. Como se mencion antes, el registro que controla la transmisin es el TXSTA

Por ltimo, lo pasos a seguir para habilitar la transmisin son:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Inicializar el Baud Rate, cargando el valor correspondiente en SPBRG, y activando el bit BRGH, si corresponde. Habilitar el puerto serial asincrnico limpiando SYNC y activando SPEN Si se usa interrupciones activar TXIE Si se desea transmitir 9-bit, activar el bit TX9 Activar el mdulo de transmisin activando el bit TXEN Si se eligi transmitir 9-bits, cargar el bit TX9D Cargar el registro TXREG Si se usa interrupcin activar los bits GIE y PEIE en el registro INTCON

5.2.2 Generador de Baud Rate Esta construido a partir de un contador de 8 bits controlador por el registro SPBRG, su fuente de reloj proviene directamente del oscilador del microcontrolador. Por lo que la funcin del contador es dividir, determinado por el contenido de SPBRG, la frecuencia del oscilador principal. Esta divisin tambin esta influenciada por el bit de preescala BRGH.

La eleccin de si trabajar con BRGH = 0 o BRGH = 1, se hace en funcin de obtener la velocidad ms prxima a la buscada, como muestra las siguientes grficas:

262 6 P GI N NA 2

POLITECNI CO

As, teniendo en cuenta estar trabajando con una frecuencia del reloj de 10 Mhz y deseando transmitir a velocidad de 9.600 vemos que con BRGH = 1 obtenemos un error del orden del 0,16% contra el 1,73% si usramos BRGH = 0. El valor mximo admitido de error en la velocidad debe ser menor al 3%. En conclusin nuestra eleccin sera BRGH = 1 y SPBRG = 64.

5.2.3 Receptor Asincrnico

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

El diagrama en bloque del receptor es el siguiente:


Recepcin continua Habilitada Error Overrun Error de Encuadre

Habilita recepcin de 9 bits Habilita el Puerto Serial 9 bit de datos recibido

El mdulo est controlado por los bits del registro RCSTA. Su componente principal el un registro de desplazamiento (RSR), que recibe los datos por el 7 bit y lo desplaza hacia el bit 0, comportndose de esta manera en espejo del transmisor. El bloque denominado Data Recovery, es un circuito que se encarga de muestrear tres veces seguida, en el medio del bit, y decidir el valor del bit muestreado en funcin de la mayora obtenida, de esta forma el circuito ayuda a minimizar las interferencias. El registro de desplazamiento tiene un doble almacenamiento temporario de los datos recibidos, lo que permite almacenar los ltimos dos datos mientras se est recibiendo un tercero. Si este dato arriba sin que ninguno de los otros dos hayan sido ledos se activa el bit OERR indicando un error de overrun, llegado a este punto, la recepcin se inhabilita hasta que este bit el limpiado, lo cual se logra limpiando el bit CREN. Siempre que el buffer contenga algn dato no ledo el bit RCIF va a permanecer a uno, solo va a cero cuando todos los datos del buffer han sido ledos. El buffer de recepcin es del tipo FIFO (First In First Out), o sea el primer dato en entrar al buffer es tambin el primero en salir. 262 6 P GI N NA 2

POLITECNI CO

Como vimos en el caso del transmisor el puerto serial se habilita con el bit SPEN y el bit CREN habilita una recepcin nica o continua. El bit FERR detecta un error de encuadre o Framing Error cuando en vez de leer un uno en el bit de Stop lee un cero. Hay que tener en cuenta que, cada vez que se lee el registro RCREG, se actualizan los valores de los bits FERR y RX9D, con los correspondientes a la palabra siguiente recibida (suponiendo que en el buffer haba 2 byte esperando ser ledas), este dato es importante porque nos dice que si usamos una transmisin de 9 bits debemos leer primero el bit RX9D antes del leer el contenido del registro RCREG. El registro RCSTA contiene los siguientes bits:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Por ltimo, lo pasos a seguir para habilitar la recepcin son: Inicializar el Baud Rate, cargando el valor correspondiente en SPBRG, y activando el bit BRGH, si corresponde. Habilitar el puerto serial asincrnico limpiando SYNC y activando SPEN Si se usa interrupciones activar RCIE Si se desea transmitir 9-bit, activar el bit RX9 Activar la recepcin activando el bit CREN El bit RCIF se activara cuando un dato sea recibido y se generar una interrupcin si el bit RCIE = 1 Si se eligi recibir 9-bits, leer el bit RX9D y el FERR Leer los datos recibidos, leyendo el registro RCREG Si se usa interrupcin activar los bits GIE y PEIE en el registro INTCON

5.2.4 UART en Recepcin con Deteccin de Direccin Un uso interesante que se le puede dar a la capacidad de recibir un dato de 9 bits junto al bit ADDEN, es la de poder implementar nodos direccionables, todos conectados al mismo cable serial. Esta habilidad deriva de que cuando el bit ADDEN esta a uno, el mdulo receptor descarta los datos recibidos si estos tienen su noveno bit a cero, es decir, solo transfiere un dato al registro RCREG cuando el bit RX9D del dato recibido est a uno. A esta habilidad se la puede usar para direccionamiento. El sistema funcionara de la siguiente forma:
Tx Transmisor Rx Rx Tx Rx Tx Rx Tx Rx Tx

Receptor Direcc = 1

Receptor Direcc = 2

Receptor Direcc = 3

Receptor Direcc = 4

262 6 P GI N NA 2

POLITECNI CO

Inicialmente todos los receptores tendrn su bit ADDEN a 1 de tal forma que solo escuchan los datos con el bit 9 a uno El transmisor desea conectarse con el Receptor 3, para ello transmite el dato con el valor 3 y el bit 9 a uno El receptor 3 reconoce su direccin y pone a cero el bit ADDEN, los dems receptores al no coincidir el dato con su direccin dejan el bit ADDEN intacto a su valor uno Ahora el transmisor se comunica con el receptor N 3 transfiriendo los datos con el bit 9 a cero, razn por la cual los dems receptores ignoran los datos del bus. Al terminar la transferencia de datos con el transmisor el receptor N 3 vuelve a poner su bit ADDEN a uno. Y el ciclo comienza nuevamente.

Ahora veamos un ejemplo donde el micro se comunica con una PC: Se inicializa el puerto para transmisin y recepcin a 9600 Baudios.

Si el bit 4 del teclado est a uno entonces se envan y se reciben datos:

POLITECNIC O

25

Microcontroladores PIC Nivel Medio

Ahora si adems se apret el primer botn se envan los datos del byte bajo de potencimetro, sino, se enva la lectura del sensor de temperatura. Al byte recibido se lo muestra en los displays.

262 6 P GI N NA 2

POLITECNI CO

Das könnte Ihnen auch gefallen