INTRODUCCIÓN A LOS MICROCONTROLADORES Parte II
Diciembre 2007 Cesar Contreras
Cesar Contreras-UNET
Contenido 1. Interrupciones. 2. Comunicación Serial. 3. Temporizadores y Contadores. 4. Conexión básica de un teclado y un display 7-segmento. 5. Módulo de visualización LCD 6. Interfase serial Two-Wire 7. Conexión a Memoria serial I2C 8. Conexión a Reloj de Tiempo Real (RTC) I2C 9. Programación del ATMEGA 16/32
Cesar Contreras-UNET
Contenido 1. Interrupciones. 2. Comunicación Serial. 3. Temporizadores y Contadores. 4. Conexión básica de un teclado y un display 7-segmento. 5. Módulo de visualización LCD 6. Interfase serial Two-Wire 7. Conexión a Memoria serial I2C 8. Conexión a Reloj de Tiempo Real (RTC) I2C 9. Programación del ATMEGA 16/32
Cesar Contreras-UNET
1. Interrupciones. El ATmega 16/32 posee múltiples fuentes de interrupciones como se muestra en la Tabla Nº 1, cada una se debe configurar a través de un bit individual de habilitación, además se debe habilitar el bit de interrupción global, para que el microcontrolador responda a cualquier interrupción. Tabla N° 1: Vectores de interrupción y RESET
El bit de interrupción global es el bit 7 o I-bit del registro de estatus o Status Register – SREG, el cual debe estar en uno lógico para habilitar las interrupciones. The AVR Status Register – SREG
Cesar Contreras-UNET
Además el ATmega16/32 tiene dos registros de control de interrupciones de 8 bits el GICR - General Interrupt Control register el cual habilita las interrupciones y el TIMSK - Timer/Counter Interrupt Mask Register el cual habilita las interrupciones de los Timer/Counter (Este registro se usara mas adelante). The General Interrupt Control Register - GICR Bit
7
6
5
INT1 INT0 INT2 Read Read/W /Wri rite te R/W R/W Initial
0
Value
4
3
2
-
-
-
1
0
IVSE IVSEL L IVCE IVCE GICR GICR
R/W
R
R
R
R
R
R
0
x
0
0
0
0
0
Bit 7 - INT1: External Interrupt Request 1 Enable Bit 6 - INT0: External Interrupt Request 0 Enable Bit 5 - INT2: External Interrupt Request 2 Enable Bits 4..0 - Res: Estos bits son reservados. Cuando una interrupción interrupción ocurre el I-bit debe ser puesto puesto a cero y para que que todas las interrupciones sean deshabilitadas. deshabilitadas. Cuando se retorna de la rutina de servicio servicio de la interrupción el
I-bit debe volverse a uno, uno, para volver a habilitar todas todas las
interrupciones. El hardware limpia o hace cero la bandera a la que corresponde la interrupción generada cuando se atienden las interrupciones, sin embargo algunas de las banderas de la interrupción pueden limpiarse escribiendo un 1 lógico en la posición de la bandera. El
General Interrupt Interrupt Flag Register - GIFR, contiene contiene las banderas de las
interrupciones externas. The General Interrupt Flag Register - GIFR Bit
7
6
5
INTF1INTF0 INTF1 INTF0INTF2 INTF2 Read Read/W /Wri rite te R/W R/W Initial Value
0
4
3
2
1
0
-
-
-
-
-
R/W
R
R
R
R
R
R
0
0
0
0
0
0
0
GIFR
Bit 7 - INTF1: External Interrupt Flag 1 Bit 6 - INTF0: External Interrupt Flag 0 Cesar Contreras-UNET
Bit 5 - INTF2: External Interrupt Flag 2 Bits 4..0 - Res: Estos bits son reservados. Si una o mas interrupciones ocurren mientras el
I-bit está en cero, la
correspondiente bandera de la interrupción se memoriza y estas son puestas a uno cuando se habilite I-bit y serán ejecutadas por orden de prioridad. En el programa Com_Serial_Ejemplo1 que se anexa, el cual corresponde al circuito de la Figura Nº2 la interrupción externa INT0 se habilita por medio de los registros GICR y MCUCR. Esto permite que cuando una señal en el Terminal PD2 pin 16 del
microcontrolador, cambie su valor de 5 V a 0 V o viceversa, se produzca una
señal de interrupción que atiende una rutina de interrupción la cual ejecuta una función, que en este caso consiste en inicializar el contador TIMER1 de 16 bits. El Registro MCUCR contiene los bits de control del sentido de la deteccion de las interrupciones y funciones generales del Microcontrolador. MCU Control Register
La interrupción externa solo se atenderá si esta está presente y esta se configura con el registro MCUCR. De acuerdo a la Tabla Nº 2. Tabla Nº 2: Bits de control del sentido de las interrupciones externas
Bit 3 Bit 2 Description (ISC11) (ISC10) Interrupción 0 0 The low level of INT1 generates an interrupt request. Any logical change on INT1 generates an interrupt 0 1 1 request. 1 0 The falling edge of INT1 generates an interrupt request. 1 1 The rising edge of INT1 generates an interrupt request. Bit 1 Bit 0 Description (ISC01) (ISC00) Interrupción 0 0 The low level of INT0 generates an interrupt request. Any logical change on INT0 generates an interrupt 0 1 0 request. 1 0 The falling edge of INT0 generates an interrupt request. 1 1 The rising edge of INT0 generates an interrupt request. Cesar Contreras-UNET
En la Tabla Nº 3, se muestran los nombres de algunas de las interrupciones con las cuales se designan las funciones. Tabla Nº 3: Nombre de las señales generada por algunas interrupciones.
Ejemplo de una función de atención de interrupción
Interrupción externa 0. SIGNAL(SIG_INTERRUPT0)
// Interrupción externa 0
{ timer1();
// Inicializa el timer 1
cbi(PORTD,7);
// Limpio el bit 7 del puerto D
}.
Cesar Contreras-UNET
Interrupción de recepción de comunicación serial. SIGNAL(SIG_UART_RECV) { cli(); gradolo=UDR; TransmitirByte(255); loop_until_bit_is_clear(UCSRA,RXC); gradohi=UDR; sei(); }
2. Comunicación Serial. El concepto de comunicación serial es simple. Consiste en transmitir o recibir un byte bit a bit a través de puerto serial. Aunque es más lento que la comunicación paralela, la cual permite la transmisión entera de bytes de una sola vez, es más sencillo y puede utilizarse en distancias grandes. Por ejemplo, las especificaciones IEEE 488 para comunicación paralela definen que el cableado entre equipos no debe ser mayor de 20 m en total, con no más de 2 m entre dos dispositivos cualquiera; en comunicación serial pueden extenderse hasta 1200 m. Típicamente, los ingenieros utilizan comunicación serial para transmitir datos ASCII. Completan la comunicación utilizando tres líneas: referencia, transmisión, y recepción. La comunicación serial puede ser asíncrona o síncrona, cuando es asíncrona el puerto puede transmitir datos en una línea mientras recibe datos en otra. Las otras líneas están disponibles para el intercambio de pulsos de sincronización pero no son requeridas. Las características seriales importantes son: tasa de baudios, bits de datos,
Cesar Contreras-UNET
bits de parada, y paridad. Para que dos puertos se comuniquen, estos parámetros deben igualarse. La tasa de baudios es una unidad de medición para comunicación que indica el número de bits transferidos por segundo. Por ejemplo, 300 baudios son 300 bits por segundo. Cuando los ingenieros se refieren a un ciclo de reloj, se refieren a la tasa en baudios, así que si el protocolo indica una razón en baudios de 4800, el reloj está ejecutándose a 4800 Hz. Esto quiere decir que el puerto serial está muestreando la línea de datos a 4800 Hz. Las tasas de baudios para líneas telefónicas son 14400, 28800, y 33600. Tasas de baudios mayores a estas son posibles, pero reducen la distancia disponible para la separación de dispositivos. Cuando una computadora envía un paquete de información, la cantidad de datos actuales puede ser que no complete 8 bits. Los valores estándar para los paquetes de datos son de 5, 7, y 8 bits. El marco que se elija dependerá de la información que está transfiriendo. Por ejemplo, el ASCII estándar tiene valores de 0 a 127 (7 bits). El ASCII extendido utiliza de 0 a 255 (8 bits). Si los datos que se están transfiriendo se encuentran en texto simple (ASCII estándar), enviar 7 bits de datos por paquete, es suficiente para la comunicación. Un paquete se refiere a la transferencia de un sólo byte, incluyendo los bits de inicio/parada, bits de datos, y paridad. Debido a que el número de bits actuales depende del protocolo seleccionado, puede utilizarse el término “paquete” para cubrir todas las instancias. Los bits de parada son utilizados para señalar el término de una transmisión de un paquete sencillo. Los valores típicos son 1, 1.5 y 2 bits. Debido a que los datos se encuentran sincronizados a través de las líneas y cada dispositivo tiene su propio reloj, es posible que los dos dispositivos pierdan sincronización. Por lo tanto, los bits de parada no solamente indican el final de una transmisión, también le da un margen de error a las velocidades de reloj de la computadora. A medida que se utilizan más bits para bits de parada, mayor oportunidad para sincronizar los diferentes relojes, pero más lenta la razón de transferencia de datos. La paridad es una forma de revisión de error simple utilizada en la comunicación serial. Existen cuatro tipos de paridad: par, impar, marcada y espaciada. También puede utilizar los que excluyen de paridad. Para paridad impar y par, el puerto serial fija el bit
Cesar Contreras-UNET
de paridad (el último bit después de los bits de datos) a un valor que asegura que la transmisión tenga un número par o impar de bits lógicos. Por ejemplo, si el dato es 011, para paridad par, el bit de paridad es 0 para mantener el número par de bits altamente lógicos. Si la paridad es impar, el bit de paridad es 1, resultando en 3 bits altamente lógicos. La paridad marcada y espaciada no revisa específicamente los bits de datos, simplemente fija la paridad de los bits como alta para la paridad marcada o baja para la paridad espaciada. Esto permite que el dispositivo receptor conozca el estado de un bit para así determinar si el ruido esta corrompiendo los datos o si los relojes del dispositivo de transmisión y recepción se encuentran fuera de sincronización.
Estándar ANSI/EIA-232. Comúnmente conocido como RS-232. Es el conector serial que se encuentra en los computadores compatibles con IBM. Es utilizado con diversos propósitos, como el conectar periféricos, impresoras, o módems, así como para instrumentación industrial. El RS-232 está limitado a conexiones punto a punto entre puertos seriales y dispositivos de computador. Se puede utilizar el hardware RS-232 para comunicaciones seriales en distancias de hasta 50 pies por medio de un conector estándar de 9 pines denominado DB9 ilustrado en la Figura N° 1. En la Tabla N° 1, se detallan los pines del conector indicando la función de cada uno de los pines.
Figura N° 1. Conector DB9.
Cesar Contreras-UNET
Tabla N° 4 Pines y Señales del Estándar ANSI/EIA-232
PIN
Señal
1
CD RXD TXD DTR GND DSR RTS CTS RI
2 3 4 5 6 7 8 9
Implementación con ATMEGA 16/32 A continuación se muestra en el circuito de la figura Nº 2 un circuito ejemplo para la implementación de la comunicación serial con el microcontrolador ATMEGA32. RXD TXD RTS +5V CTS +5v
L1
C11
10uH
100nF
RV1 1k
+5v
C14 C17
C15 1uF
1uF
1uF 5
4
32 AREF 30 AVCC
C10 C26 2
3
U2
U1 100nF
C2+
VSVS+
PD7
8 R2IN 7 T2OUT 13 R1IN 14 T1OUT
R2OUT T2IN R1OUT T1IN
9 10 12 11
2
+5v C1-
C1+
3
1
5
DB9
MAX232
LED2
C13 LED1 1uF
R13
R14 220
1k
R16 R15
220
21 20 19 18 17 16 15 14
PD7/OC2 PD6/ICP PD5/OC1A PD4/OC1B PD3/INT1 PD2/INT0 PD1/TXD PD0/RXD
29 28 27 26 25 24 23 22
PC7/TOSC2 PC6/TOSC1 PC5/TDI PC4/TDO PC3/TMS PC2/TCK PC1/SDA PC0/SCL
PB7/SCK PB6/MISO PB5/MOSI PB4/SS PB3/OC0/AIN1 PB2/INT2/AIN0 PB1/T1 PB0/XCK/T0 PA7/ADC7 PA6/ADC6 PA5/ADC5 PA4/ADC4 PA3/ADC3 PA2/ADC2 PA1/ADC1 PA0/ADC0 XTAL2 XTAL1 RESET
8 7 6 5 4 3 2 1 33 34 35 36 37 38 39 40
+5V
RV2 1k
12pF
C8
12 13 9
XTAL
ATMEGA32
1k
C9 Q1
Q2
2N3904
2N3906
12pF
+5v
Figura N° 2. Circuito de implementación.
Cesar Contreras-UNET
Todos los valores de los Capacitores C8, C9, C10, C11, C13, C14, C15, C16 y C17,
además del valor de L1, son propuestos por las hojas de datos del circuito
integrado MAX232 y del microcontrolador ATmega32 . Los transistores Q1 y Q2 encienden los leds LED1 y LED2 respectivamente cuando ocurre transmisión desde la etapa de control hacia la interfaz de visualización y viceversa. La comunicación con la interfaz de visualización, se realizó por medio del puerto serial del computador usándose solamente los terminales 2 y 3 para transmisión – recepción y 5 como Terminal común (tierra) del conector DB9. Cabe destacar que la inversión de los terminales 2 – 3 y 3 – 2 es llevada a cabo internamente por el MAX232. Su ciclo de reloj es generado por un cristal de cuarzo de 12 Mhz, frecuencia que se considera óptima para llevar a cabo todas las funciones de control, comunicación y digitalización que se le tienen programadas. Con el Programmers NotePad de WinAVR se genera el archivo .hex que se pasa al microcontrolador partiendo de un entorno de programación bajo Lenguaje C . Luego se programa el microcontrolador con el programa PonyProg2000 si es el modulo de desarrollo LICA o el programa AVRStudio si es el KIT AVR500; es decir, el archivo .hex generado previamente por el WinAVR
se transfiere al microcontrolador.
El archivo anexo “ Com_Serial_Ejemplo1” es un programa en codigo C para ATMEGA que usaremos como ejemplo para probar las Interrupciones y la comunicación serial. Para establecer la comunicación se emplea la USART del ATmega32. En primer lugar, se inicializa mediante los registros de estado y control UCSRA, UCSRB y UCSRC habilitando el transmisor y receptor de la USART , el selector de registro UCSRC o UBRRH ,
la dimensión del dato a transmitir que en este caso es 8 bits = 1 byte,
comunicación asíncrona en modo normal, velocidad de transmisión en baudios, y finalmente se habilita la interrupción de recepción RXCIE .
Cesar Contreras-UNET
Bit 7 – RXC: Dato recibido en el USART. Bit 6 – TXC: Buffer de transmisión del USART Bit 5 – UDRE: Registro de dato vacío. Bit 4 – FE: Error del dato Bit 3 – DOR: Data sobre escrita. Bit 2 – PE: Error de paridad. Bit 1 – U2X: Solo para operación asincrona. Dobla la velocidad de transmisión. Bit 0 – MPCM: Modo de comunicación Multi-processor
Bit 7 – RXCIE: Habilita la interrupción de recepción. Bit 6 – TXCIE: Habilita la interrupción de transmisión. Bit 5 – UDRIE: Habilita interrupción de registros de datos vacio. Bit 4 – RXEN: Habilita recepción. Bit 3 – TXEN: Habilita transmisión. Bit 2 – UCSZ2: Tamaño del caracter. Bit 1 – RXB8: Bit 8 de recepción. Bit 0 – TXB8: Bit 8 de transmisión.
Cesar Contreras-UNET
Bit 7 – URSEL: Seleciona registro. Bit 6 – UMSEL: Seleciona el modo del USART Bit 5:4 – UPM1:0: Tipo de paridad Bit 3 – USBS: Selecciona el bit de STOP. Bit 2:1 – UCSZ1:0: Tamaño del carácter. Bit 0 – UCPOL: Polaridad del reloj, solo para transmisión síncrona. Para establecer los baudios de la comunicación, se emplea la Ec. 1. Donde la f OSC viene dada por la frecuencia del cristal que en este ejemplo es 12 UBRR =
f OSC
16 * Baud
MHz.
−1
Ec. 1.
El registro UBRR de la USART está compuesto por UBRRH y UBRRL, ambos determinan la velocidad de comunicación en bits por segundo o baudios.
USART Baud Rate Registers
El valor de UBRR para determinar la velocidad de transmisión, usando la Ec.1 es de 12, para 57600 baudios. Éste valor, es necesario para la inicialización de la USART. Por ejemplo si la rata de baudios es 57.6 Kbps y como un byte de información contiene además de los 8 bits de datos, bits de inicio y parada sin incluir bits de paridad en total serán 10 bits por lo tanto hace que la comunicación sea de aproximadamente 5760 bytes por segundo; o que es lo mismo 5760 datos por segundo.
Cesar Contreras-UNET
Una vez inicializada la USART , el microcontrolador se encontrará listo para comenzar la comunicación serial. Para la transmisión se debe hacer una función que coloque en el registro de datos TXB
de UDR un byte para transmitir. Una vez transmitido el dato, el registro debe ser
limpiado para poder enviarse otro byte.
USART I/O Data Register –UDR
La recepción es llevada a cabo habilitando la interrupción RXCIE de recepción de datos. Una vez que se produce la interrupción de recepción del dato, se deben deshabilitar las demás interrupciones, el byte presente en RXB es el dato, este valor se toma y se guarda en una variable y luego se habilitan de nuevo las interrupciones.
3. Temporizadores y Contadores. El microcontrolador ATMEGA32 posee 3 reloj/contadores 2 de 8 bits y 1 de 16 bits. Para entender estos periféricos basta con revisar los contadores secuénciales. En la Figura Nº 3, aparece un contador de décadas con carga de datos y reset. Además este genera un uno lógico en la señal RCO cuando llega a la máxima cuenta de 10 (1001) y vuelve a iniciar la cuenta. El diagrama de tiempo del contador operando libremente hasta 10 con Overflow los podemos observar en la Figura Nº 4, en esta grafica la señal RCO u Overflow aparece como carry. Recuerde que como el contador posee una señal de RESET también podemos usar un circuito combinacional para generar una señal auxiliar que conectada a la entrada MR del contador reinicie la cuenta. En la Figura Nº 5 se puede observar como la compuerta 7401 genera una señal que reinicia el contador.
Cesar Contreras-UNET
U3:A 3 1 2 7401
U1 3 4 5 6
D0 D1 D2 D3
7 ENP 10 ENT 2U1(LOAD) CLK U1(MR) 9 LOAD 1 MR
Q0 Q1 Q2 Q3 RCO
14 13 12 11 15
U1(Q0) U1(Q1) U1(Q2) U1(Q3) U1(RCO)
74160
U1(CLK)
Figura Nº 3: Contador de Décadas
Figura Nº 4: Diagrama de tiempo del contador mostrando el Overflow
Cesar Contreras-UNET
Señal del circuito combinacional
Figura Nº 5: Diagrama de tiempo del contador el cual se reinicia en 5
De igual forma opera el timer/contador del ATMEGA, como se observa en la Figura Nº 6, básicamente consiste en seleccionar el preescalamiento adecuado y la forma de operación de este.
Figura Nº 6: Preescalamiento del Timer A continuación se muestran los diferentes registros necesarios para una configuración y selección adecuada del Timer/Contador.
El Registro TIMSK permite la habilitación de las interrupciones para configurar las diferentes formas de operación de los Timers/Contadores.
Cesar Contreras-UNET
The Timer/Counter Interrupt Mask Register - TIMSK Bit
7
6
5
4
3
2
1
0
OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1OCIE0 OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1 OCIE0TOIE0 TOIE0TIMSK TIMSK Read/Wr /Write ite Initial Value
R/W
R/W
R/W
R/W
R/W
R/W
R
R/W
0
0
0
0
0
0
x
0
Bit 7 - OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable Bit 5 - TICIE1: Timer/Counter1 Input Capture Interrupt Enable Bit 4 - OCIE1A: Timer/Counter1 Output CompareA Match Interrupt Enable Bit 3 - OCIE1B: Timer/Counter1 Output CompareB Match Interrupt Enable Bit 2 - TOIE1: Timer/Counter1 Overflow Interrupt Enable Bit 1 - OCIE0: Bit 0 - TOIE0: Timer/Counter0 Overflow Interrupt Enable
En registro TIFR se guardan el estado de las banderas de los Timers/Contadores. Que se usaran para reconocer el estado de operación de los Timers/Contadores. The Timer/Counter Interrupt Flag Register - TIFR Bit
7
6
5
4
3
2
1
0
OCF2TOV2ICF1OCF1AOCF1BTOV1OCF0 OCF2TOV2ICF1OCF1AOCF1BTOV1 OCF0TOV0 TOV0TIFR TIFR Read Read/W /Wri rite te R/W Initial Value
0
R/W
R/W
R/W
R/W
R/W
R
R/W
0
0
0
0
0
x
0
Bit 7 - OCF2: Output Compare Flag 2 Bit 6 - TOV2: Timer/Counter2 Overflow Flag Bit 5 - ICF1: Input Capture Flag 1 Bit 4 - OCF1A: Output Compare Flag 1A Bit 3 - OCF1B: Output Compare Flag 1B Bit 2 - TOV1: Timer/Counter1 Overflow Flag Bit 1 - OCF0: Bit 0 - TOV0: Timer/Counter0 Overflow Flag
Cesar Contreras-UNET
En la Figura Nº 7, se muestran en general los diferentes registros y partes que constituyen un Timer/Contador.
Figura Nº 7: Partes y registros en general de los Timers/Contadores Para configurarlo en una aplicación especifica se debe determinar el numero de pulsos necesarios que sean equivalentes al tiempo deseado usamos la ecuación Ec. 2, que aparece a continuación y seleccionando según el resultado el escalamiento en el registro TCCR0 que se muestra abajo. N =
delay _ deseado
⎛ ⎞ fosc ⎜⎜ ⎟⎟ ⎝ preescalad or ⎠
−1
Ec. 2
Cesar Contreras-UNET
Luego en el registro TCNT0 en el caso del Timer 0 se podrá leer el valor de la cuenta actual. A continuación aparece un ejemplo que consiste en realizar una rutina de retardo de 4 ms. con un reloj de 12MHz. Tabla Nº 5: Calculo del numero de pulsos Frecuencia de oscilación Retardo deseado
Clock Clock/8 Clock/64 Clock/256 Clock/1024
12 MHz 4 ms
Numero de pulsos 12000 48000 1500 6000 187.5 750 46.875 187.5 11.718 46.875
Contador=0; While(contador<3) { TCNT0=6;
// precarga con 6 para que cuente 250
TCCR0==0x03;
// selecciona el preeescalador CLK/64
While( (TIFR & 0x01===0); // espera por la bandera // otra forma seria // while((TIFR & TOV0) == 0) TCCR0=0;
// para el reloj
TIFR=TIFR | 0x01;
// limpia la bandera
Contador++;
// incrementa el contador
}
Cesar Contreras-UNET
Timer de 16 bits
La inicialización del TIMER1 se realiza seleccionando el modo de operación, mediante los registros TCCR1A y TCCR1B. También se selecciona el preescalor de frecuencia mediante el registro TCCR1B, y en el registro TIMSK que se muestra anteriormente, se activa la interrupción del registro del comparador de salida OCIE1A.
TCCR1A
Bit 7:6 – COM1A1:0: Modo de salida del comparador del canal A Bit 5:4 – COM1B1:0: Modo de salida del comparador del canal B Bit 1:0 – WGM11:0: Waveform Generation Mode con WGM13:2
TCCR1B
Bit 4:3 – WGM13:2: Waveform Generation Mode Bit 2:0 – CS12:0: Clock Select
A continuación el programa que se anexa con el nombre de Com_Serial_Ejemplo1 se
ha realizado un ejemplo de configuración y operación de un
timer de 16 bits, usándolo como comparador. En este ejemplo el TIMER1 se usa para realizar un conteo ascendente desde 0 hasta el valor almacenado en el registro OCR1A.
Cesar Contreras-UNET
Output Compare Register 1 A
A continuación se presenta un ejemplo con el cual se intenta explicar la funcionalidad del preescalador y forma de cálculo de este, El ejemplo consiste en el desarrollo de una rutina para generar la señal de disparo de un TRIAC el cual es el elemento de accionamiento (Actuador) de una etapa de potencia. Esta rutina de accionamiento consta básicamente de tres elementos: la interrupción de cruce por cero de la señal de voltaje, y dos contadores TIMER1 y TIMER0 que
determinan el ángulo de disparo del TRIAC y la duración del pulso de la
señal de disparo respectivamente. Para controlar el valor rms de la corriente de una carga, se utiliza típicamente el circuito de la Figura N° 8, como se observa es necesario manipular el tiempo de conducción en ambos ciclos de la señal alterna. Si se empleara un SCR, sólo se tendría control de un semiciclo (positivo o negativo según sea el caso) mientras que para el semiciclo contrario, el dispositivo se encontrará conmutado (apagado) y por lo tanto se perdería la potencia que dicho semiciclo entregaría a la carga.
Figura N° 8. Etapa de Potencia.
Cesar Contreras-UNET
El uso de un TRIAC permite controlar el ángulo de disparo α durante todo el ciclo, por lo tanto, se tiene mayor control de la potencia que le es entregada a la carga. En la Figura N° 9 se muestran las señales de voltaje en la carga y en los terminales del TRIAC para ángulos de disparo
α
de 30° y 120°
Figura N° 8. Formas de Onda en el TRIAC y en la carga para
= 30° y
= 120°.
El valor del preescalador se estableció en 8 para una fosc = 12 MHz, ya que con este valor, un ángulo de disparo de 180°, equivalente a 8.33 ms, viene representado por el tiempo que tarda una señal de fosc/8 = 1.5 MHz en realizar 12495 pulsos como se muestra en la Ec. 3. N = 8.33ms * 1.5 MHz = 12495 pulsos
Ec. 3
Cuando los valores almacenados en los registros TCNT1 y OCR1A concuerdan, se produce una señal de interrupción que apaga el TIMER1, inicializa el TIMER0 y la interrupción de registro del comparador de salida OCIE0. El TIMER0 cuenta desde 0 hasta el valor almacenado en el registro OCR0 y simultáneamente envía un 1 lógico (5 V) a la etapa de potencia por medio del Terminal PD7 del ATmega32 el pulso de activación del dispositivo electrónico de potencia. De igual manera como acontece con el TIMER1, la comparación de los registros OCR0 y TCNT0 se hace constantemente y
Cesar Contreras-UNET
una vez sean iguales, se genera una señal de interrupción que llama a una función de apagado del TIMER0, enviando un 0 lógico (0 V) a la etapa de Potencia por medio del Terminal PD7 . Se utilizó un divisor de frecuencia para el TIMER0 de 256 para una fosc = 12 MHz. Con este valor, un tiempo aproximado de 100 μs, viene representado por el tiempo que tarda una señal de fosc/256 = 46.86 KHz en realizar 5 pulsos como se muestra en la Ec. 4. 106,70μ s =
5 46,86 KHz
Ec. 4
Tiempo que se considera suficiente para asegurar que el valor de corriente del TRIAC haya alcanzado su valor de I L.
4. Conexión básica de un teclado y un display 7segmento. Un teclado es un conjunto de interruptores o switches que están conectados en filas y columnas, como se muestra en la Figura Nº 9.
R3
R4
R5
R6
10k
10k
10k
10k
RB7 RB6 RB5 RB4
RB0
R7
F1
1
2
3
F
4
5
6
E
7
8
9
D
A
0
B
C
330R
RB1
R8
F2
330R
RB2
R9
F3
330R
RB3
R10
F4
330R
Figura Nº 9: Teclado constituido de un arreglo de interruptores dispuestos en filas y columnas.
Cesar Contreras-UNET
En la figura Nº 10 se presenta un teclado conectado a un ATMEGA a través del puerto B. Las columnas encabezadas por los números 1, 2 y 3 estan conectadas al los bits 2, 1 y 0 respectivamente. Mientras que las filas a los bits 4,5,6, y 7. Entonces la técnica consiste en haciendo cero logico (0 volts.) las filas una a una y leer las columnas. De esta forma si se oprime la tecla “2” entonces cuando el bit 4 del puerto B tenga un cero lógico, se leerá un cero lógico en el bit 1. U1 9 13 12 3
2
1
3
2
1
A
6
5
4
B
9
8
7
C
#
0
D
40 39 38 37 36 35 34 33 1 2 3 4 5 6 7 8
RESET XTAL1 XTAL2 PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7 PB0/XCK/T0 PB1/T1 PB2/INT2/AIN0 PB3/OC0/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
PC0/SCL PC1/SDA PC2/TCK PC3/TMS PC4/TDO PC5/TDI PC6/TOSC1 PC7/TOSC2 PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/OC1B PD5/OC1A PD6/ICP PD7/OC2
AVCC AREF
22 23 24 25 26 27 28 29 14 15 16 17 18 19 20 21
30 32
ATMEGA32
Figura Nº 10: Teclado conectado a ATEGA 32 A continuación se presenta una rutina básica para el circuito de la Figura Nº 10 que lee el teclado y muestra el número seleccionado en el display 7-segmento. while (1)
//se chequea la fila y se envia al portD el numero correspondiente
{ PORTB =0b11101111;
//cuarta columna
delay_ms(2); if (bit_is_clear(PINB, 0)) PORTD=0x03; if (bit_is_clear(PINB, 1)) PORTD=0x02; if (bit_is_clear(PINB, 2)) PORTD=0x01; PORTB =0b11011111;
//tercera columna
delay_ms(2); if (bit_is_clear(PINB, 0)) PORTD=0x06; if (bit_is_clear(PINB, 1)) PORTD=0x05; if (bit_is_clear(PINB, 2)) PORTD=0x04; Cesar Contreras-UNET
PORTB =0b10111111;
//segunda columna
delay_ms(2); if (bit_is_clear(PINB, 0)) PORTD=0x09; if (bit_is_clear(PINB, 1)) PORTD=0x08; if (bit_is_clear(PINB, 2)) PORTD=0x07; PORTB =0b01111111;
//Primera columna
delay_ms(2); if (bit_is_clear(PINB, 0)) PORTD=0x2B; if (bit_is_clear(PINB, 1)) PORTD=0x00; if (bit_is_clear(PINB, 2)) PORTD=0x2A; }
5. Módulo de visualización LCD La pantalla LCD (Liquid Crystal Display) es un medio gráfico a través del cual el usuario interactúa con el programa del microcontrolador. En la Figura Nº11 aparecen algunas variedades y presentaciones de LCD y en la tabla Nº 6 se muestra el nombre y la función de los pines de la mayoría de LCD y en la Figura Nº 12, la ubicación y distribución típica de los pines.
Figura Nº 11: Módulos LCD
Cesar Contreras-UNET
Tabla Nº 6 Terminal 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pines de conexión de la pantalla LCD. Símbolo Nombre y Función Vss Tierra, 0 voltios Vdd Alimentación + 5 voltios Vo Ajuste de voltaje / contraste RS Selección de control / dato R/W Lectura / escritura en LCD E Habilitación D0 Bit Dato 20 D1 Bit Dato 21 D2 Bit Dato 22 D3 Bit Dato 23 D4 Bit Dato 24 D5 Bit Dato 25 D6 Bit Dato 26 D7 Bit Dato 27 A Ánodo de Back Light K Cátodo de Back Light
Figura Nº 12: Distribución y ubicación de los pines de conexión de los LCD En la Figura 13 se muestra un ejemplo de conexiones del módulo de visualización LCD con el ATMEGA32. U1 9 13 12
LCD
S D E 0 1 2 3 4 5 6 7 S D E S W V V V R R E D D D D D D D D 1 2 3
4 5 6
7 8 9 0 1 2 3 4 1 1 1 1 1
40 39 38 37 36 35 34 33 1 2 3 4 5 6 7 8
RESET XTAL1 XTAL2 PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7 PB0/XCK/T0 PB1/T1 PB2/INT2/AIN0 PB3/OC0/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
PC0/SCL PC1/SDA PC2/TCK PC3/TMS PC4/TDO PC5/TDI PC6/TOSC1 PC7/TOSC2 PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/OC1B PD5/OC1A PD6/ICP PD7/OC2
AVCC AREF
22 23 24 25 26 27 28 29 14 15 16 17 18 19 20 21
30 32
ATMEGA32
R1 100
R2 RV1
100
POT 20K
Figura 13 Esquema de conexiones del módulo de visualización Cesar Contreras-UNET
En la tabla Nº 7 se hace una descripción de las funciones de cada uno de los pines de la pantalla LCD del esquema de conexiones anterior. Tabla N° 7 Función de los pines de la LCD.
Pines LCD 1 2
Pines ATMEGA16
3 4 5 6 7 8 9 10 11 12 13 14
4 3
5 6 7 8
Función Tierra 5V Ajustar el contraste de la pantalla Coloca en el bus de datos una instrucción o un símbolo. Tierra Habilitación Sin conexión Sin conexión Sin conexión Sin conexión Bus de datos
Las resistencias: R1 = 100Ω R 2 = 100Ω
Son para evitar algún corto debido a la manipulación de la resistencia variable, y de esta manera evitar el daño de la pantalla LCD. El potenciómetro: RV 1 = 20k Ω
Permite el ajuste del voltaje para el contraste de la pantalla LCD.
6. Interfase serial Two-Wire La interfase serial TWI es ideal para aplicaciones con microcontroladores ya que permite la interconexión de hasta 128 diferentes dispositivos, como se muestra en la
Cesar Contreras-UNET
Figura Nº 14, usando un bus bidireccional de solo 2 líneas una para el reloj (SCL) y otra para la data (SDA). El único hardware externo para implementar el bus son dos resistencias pull-up una a cada línea. Todos los dispositivos conectados al bus tienen direcciones individuales.
Figura Nº 14: Conexión de varios dispositivos conectados al mismo bus. Una transmisión básica consiste de una señal de START, la dirección + R/W, uno o mas paquetes de datos y una señal de STOP. En la Figura Nº 15 se muestra una transmisión típica, observe que varios datos pueden ser transmitidos entre SLA+R/W y el la señal de STOP, esto depende del protocolo que se implemente .
Figura 15: Diagrama de tiempo de una transmisión típica. El ATMEGA cuenta con un modulo TWI el cual está constituido por conjunto de registros que son accesibles por el bus del AVR. En la Figura Nº 16 se muestran estos registros dentro de un recuadro de línea gruesa.
Cesar Contreras-UNET
Figura Nº 16: Registros del modulo TWI El significado de cada uno de los registros se muestran a continuación.
TWI Bit Rate Register – TWBR
Bits 7..0 – TWI Bit Rate Register
TWI Control Register – TWCR
Bit 7 – TWINT: TWI Interrupt Flag Bit 6 – TWEA: TWI Enable Acknowledge Bit
Cesar Contreras-UNET
Bit 5 – TWSTA: TWI START Condition Bit Bit 4 – TWSTO: TWI STOP Condition Bit Bit 3 – TWWC: TWI Write Collision Flag Bit 2 – TWEN: TWI Enable Bit Bit 1 – Res: Reserved Bit Bit 0 – TWIE: TWI Interrupt Enable
TWI Status Register – TWSR
TWI Data Register – TWDR
TWI (Slave) Address Register– TWAR
Cesar Contreras-UNET
Tabla N° 8 Secuencia típica para transmisión con el modulo TWI.
El modulo TWI puede operar en cuatro modo: Transmitir como Maestro (MT),n Recibir como Maestro (MR), Recibir como Esclavo (SR) y Transmitir como Esclavo (ST). Varios de estos modos pueden ser usados en la misma aplicación. Por ejemplo se puede usar el TWI para escribir data en una memoria EEPROM y luego leer data de la
Cesar Contreras-UNET
misma memoria. También si se esta en presencia de otro maestro en el bus, entonces se debe usar en modo esclavo tanto para la transmisión como para la recepción. En la tabla Nº 8, se muestran como ejemplo las instrucciones de código, mas típicamente usadas para implementar la transmisión como maestro.
7. Conexión a Memoria serial I2C Las memorias disponibles se pueden clasificar según se muestra en la tabla 8. Tabla Nº 8 Tipos comunes de memoria MEMORIA RAM HÌBRIDA ROM DRAM SRAM NVRAM FLASH EEPROM EPROM PROM MASKED
Por ejemplo la memoria 24LC512 (Microchip technology Inc.) puede clasificarse como una memoria de tipo híbrido pues puede ser leída y escrita a voluntad, tal como una RAM (Random Access Memory o Memoria de Acceso Aleatorio), y mantener su contenido en ausencia de suministro eléctrico como una ROM (Read Only Memory – Memoria de sólo lectura). Es una PROM eléctricamente borrable (EEPROM), serial de 64Kx8 (512Kbit), con capacidad de operar en rangos de voltaje desde los 1.8V a 5.5V, diseñada especialmente para aplicaciones de baja potencia como comunicaciones personales y adquisición de datos. Este tipo de memoria se usa por lo general para el almacenamiento de datos pues cada byte puede ser borrado y sobrescrito eléctricamente, y la data permanecerá idealmente invariable a cambio de un incremento en la duración de los ciclos de escritura. Este dispositivo soporta además lecturas aleatorias y secuenciales pudiendo conectarse hasta ocho dispositivos en cascada para una capacidad total de almacenamiento de 4Mbit, compatible con interfases seriales como el modulo TWI del Atmega16/32, además, permite la escritura por pagina de 64 bytes. A continuación se muestra la disposición de pines en la Figura Nº 14 y su respectiva descripción en la Tabla Nº 9.
Cesar Contreras-UNET
Figura 17: Distribución de pines del 24LC512
Tabla 9 Descripción de los pines del 24LC512 Nombre PIN Función A0 1 Selección de Chip 81 2 Selección de Chip A2 3 Selección de Chip Vss 4 Tierra SDA 5 Datos Seriales SCL 6 Señal de Reloj WP 7 Protección de escritura 8 +2.5V a 5.5V Vcc
La principal ventaja del uso de este tipo de memorias y por esto lo tratamos en este curso es la sencillez de su implementación en el circuito impreso, ya que con dos pines se establece la transmisión bidireccional de datos y la temporizacion por una señal de reloj, SDA y SCL respectivamente. Si se requiere, también se puede configurar la dirección de la memoria con tres pines (A0, A1, A2) y proteger la escritura de datos mediante el pin WP (Write Protect) sin afectar su lectura. En la figura 15, se presenta el diagrama circuital típico para la implementación de la memoria. El mismo consta de una memoria serial 24LC512 y dos resistencias pull-up de 4.7K Ω. Las entradas de selección A0, A1, y A2 están a tierra indicando que el número de dispositivo es el 000b. . En general cuando solo se emplea una memoria los pines de dirección A0, A1 y A2 se conectan a tierra, y si no existe la posibilidad de conflicto de escritura, el control de escritura WP también se conecta a tierra. Según las especificaciones del fabricante, como las líneas SDA y SCL son de colector abierto, es pertinente conectarles resistencias de pull-up a Vcc, típicamente de 10 Kohm. Entonces representa una gran ventaja para el microcontrolador ATMega16/32 ya que este soporta protocolos de comunicación 1-wire, TWI y SPI, que son soportados como se vio anteriormente por esta memoria, además de su considerable capacidad de almacenamiento.
Cesar Contreras-UNET
VCC
U3
R2
6 5
4.7K
7
R3
SCK
A0
SDA
A1
WP
A2
1 2 3
24LC512
4.7K
PC1 PC0
Figura 18: Circuito de conexión de la memoria 24LC512.
8. Conexión a Reloj de Tiempo Real (RTC) I2C Algunos sistemas requieren de un elemento que le permita mantener los datos correspondientes en hora y fecha, aún cuando la energía de alimentación esté ausente. El dispositivo adecuado para estos fines se denomina reloj de tiempo real (RTC) y el mismo permite al sistema sincronizar o fijar eventos a referencias de tiempo que puedan ser comprendidos fácilmente por el usuario. Los RTCs (Real Time Clock) están disponibles en variedad de interfaces, desde seriales incluyendo I2C (interfaz de 2 hilos), 3-wire (3 hilos) y SPI (Serial Peripheral Interface), a interfaces paralelas tales como mux-bus (bus de datos y dirección multiplexado) y diseños con entradas separadas para datos y direcciones. La selección de la interfaz adecuada viene dada principalmente por el microcontrolador utilizado. El DS1307 de Dallas Semiconductor es un reloj de tiempo real/calendario de 56 bytes de memoria RAM no volátil, posee bajo consumo de energía. En la figura 19 se muestra el DS1307.
Figura 19: Distribución de pines del DS1307
Cesar Contreras-UNET
Característica del DS1307 • El RTC cuenta segundos, minutos, horas, fecha del mes, mes, día de la
semana y año con compensación de años bisiestos valida hasta el 2100. • Memoria RAM no volátil de 56 bytes, con respaldo de batería para
almacenamiento. • Interfaz serial I2C. • Señal de salida de onda cuadrada programable. • El reloj opera ya sea con formato de 24 horas o formato de 12 horas con
indicador AM/PM. • Circuitería de detección de fallas de alimentación con conmutación
automática. • Consume menos de 500 nA en modo de funcionamiento con batería.
El DS1307 opera como dispositivo esclavo en el bus I2C y el circuito de conexión con el microcontrolador se muestra en la Figura Nº 20. El acceso se obtiene implementando una condición de arranque (INICIO) y proveyendo un código de identificación de dispositivo seguido de una dirección de registro. Los registros subsecuentes pueden ser accesados secuencialmente hasta que se ejecute una condición de parada (PARADA). Cuando el VCC cae por debajo de 1.25 x VBAT, el dispositivo termina un acceso en progreso y resetea el contador de direcciones. Las entradas al dispositivo no serán reconocidas en este momento para prevenir que datos erróneos sean escritos en el dispositivo de un sistema fuera de tolerancia. Cuando el VCC cae por debajo del VBAT, el dispositivo cambia a un modo de bajo consumo de energía respaldado por batería. El DS1307 utiliza un cristal de 32.768 Khz. externo. El circuito oscilador no requiere ninguna resistencia o capacitor externo para su funcionamiento. Si se usa un cristal con las características especificadas, el tiempo de arranque es menor a un segundo.
Cesar Contreras-UNET