Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TCHIRA
VICERRECTORADO ACADMICO
DECANATO DE POSTGRADO
Diciembre 2007
Cesar Contreras
Cesar Contreras-UNET
Contenido
1. Interrupciones.
2. Comunicacin Serial.
3. Temporizadores y Contadores.
4. Conexin bsica de un teclado y un display 7-segmento.
5. Mdulo de visualizacin LCD
6. Interfase serial Two-Wire
7. Conexin a Memoria serial I2C
8. Conexin a Reloj de Tiempo Real (RTC) I2C
9. Programacin del ATMEGA 16/32
Cesar Contreras-UNET
1. Interrupciones.
El ATmega 16/32 posee mltiples fuentes de interrupciones como se muestra en
la Tabla N 1, cada una se debe configurar a travs de un bit individual de
habilitacin, adems se debe habilitar el bit de interrupcin global, para que el
microcontrolador responda a cualquier interrupcin.
Tabla N 1: Vectores de interrupcin y RESET
Cesar Contreras-UNET
R/W
interrupciones.
El hardware limpia o hace cero la bandera a la que corresponde la interrupcin
generada cuando se atienden las interrupciones, sin embargo algunas de las banderas de
la interrupcin pueden limpiarse escribiendo un 1 lgico en la posicin de la bandera.
El
interrupciones externas.
The General Interrupt Flag Register - GIFR
Bit
R/W
GIFR
Interrupcin externa 0.
SIGNAL(SIG_INTERRUPT0)
// Interrupcin externa 0
{
timer1();
// Inicializa el timer 1
cbi(PORTD,7);
}.
Cesar Contreras-UNET
2. Comunicacin Serial.
El concepto de comunicacin serial es simple. Consiste en transmitir o recibir un
byte bit a bit a travs de puerto serial. Aunque es ms lento que la comunicacin
paralela, la cual permite la transmisin entera de bytes de una sola vez, es ms sencillo y
puede utilizarse en distancias grandes. Por ejemplo, las especificaciones IEEE 488 para
comunicacin paralela definen que el cableado entre equipos no debe ser mayor de 20 m
en total, con no ms de 2 m entre dos dispositivos cualquiera; en comunicacin serial
pueden extenderse hasta 1200 m.
Tpicamente, los ingenieros utilizan comunicacin serial para transmitir datos
ASCII. Completan la comunicacin utilizando tres lneas: referencia, transmisin, y
recepcin. La comunicacin serial puede ser asncrona o sncrona, cuando es asncrona
el puerto puede transmitir datos en una lnea mientras recibe datos en otra. Las otras
lneas estn disponibles para el intercambio de pulsos de sincronizacin pero no son
requeridas. Las caractersticas seriales importantes son: tasa de baudios, bits de datos,
Cesar Contreras-UNET
bits de parada, y paridad. Para que dos puertos se comuniquen, estos parmetros deben
igualarse.
La tasa de baudios es una unidad de medicin para comunicacin que indica el
nmero 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 razn en baudios de 4800, el reloj est
ejecutndose a 4800 Hz. Esto quiere decir que el puerto serial est muestreando la lnea
de datos a 4800 Hz. Las tasas de baudios para lneas telefnicas son 14400, 28800, y
33600. Tasas de baudios mayores a estas son posibles, pero reducen la distancia
disponible para la separacin de dispositivos.
Cuando una computadora enva un paquete de informacin, la cantidad de datos
actuales puede ser que no complete 8 bits. Los valores estndar para los paquetes de
datos son de 5, 7, y 8 bits. El marco que se elija depender de la informacin que est
transfiriendo. Por ejemplo, el ASCII estndar tiene valores de 0 a 127 (7 bits). El ASCII
extendido utiliza de 0 a 255 (8 bits). Si los datos que se estn transfiriendo se
encuentran en texto simple (ASCII estndar), enviar 7 bits de datos por paquete, es
suficiente para la comunicacin. Un paquete se refiere a la transferencia de un slo byte,
incluyendo los bits de inicio/parada, bits de datos, y paridad. Debido a que el nmero de
bits actuales depende del protocolo seleccionado, puede utilizarse el trmino paquete
para cubrir todas las instancias.
Los bits de parada son utilizados para sealar el trmino de una transmisin de
un paquete sencillo. Los valores tpicos son 1, 1.5 y 2 bits. Debido a que los datos se
encuentran sincronizados a travs de las lneas y cada dispositivo tiene su propio reloj,
es posible que los dos dispositivos pierdan sincronizacin. Por lo tanto, los bits de
parada no solamente indican el final de una transmisin, tambin le da un margen de
error a las velocidades de reloj de la computadora. A medida que se utilizan ms bits
para bits de parada, mayor oportunidad para sincronizar los diferentes relojes, pero ms
lenta la razn de transferencia de datos.
La paridad es una forma de revisin de error simple utilizada en la comunicacin
serial. Existen cuatro tipos de paridad: par, impar, marcada y espaciada. Tambin 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 despus de los bits de datos) a un valor que asegura que la
transmisin tenga un nmero par o impar de bits lgicos. Por ejemplo, si el dato es 011,
para paridad par, el bit de paridad es 0 para mantener el nmero par de bits altamente
lgicos. Si la paridad es impar, el bit de paridad es 1, resultando en 3 bits altamente
lgicos. La paridad marcada y espaciada no revisa especficamente 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 transmisin y recepcin se encuentran fuera de sincronizacin.
Estndar ANSI/EIA-232.
Comnmente conocido como RS-232. Es el conector serial que se encuentra en
los computadores compatibles con IBM. Es utilizado con diversos propsitos, como el
conectar perifricos, impresoras, o mdems, as como para instrumentacin 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 estndar de 9 pines denominado
DB9 ilustrado en la Figura N 1.
En la Tabla N 1, se detallan los pines del conector indicando la funcin de cada
uno de los pines.
Cesar Contreras-UNET
PIN
Seal
1
2
3
4
CD
RXD
TXD
DTR
GND
DSR
RTS
CTS
RI
5
6
7
8
9
RXD
TXD
RTS
+5V
CTS
+5v
L1
C11
10uH
100nF
RV1
1k
+5v
C14
C17
C15
1uF
1uF
1uF
5
32
30
C10
C26
2
U2
U1
8
7
13
14
VSVS+
21
20
19
18
17
16
15
14
PD7
R2IN
T2OUT
R1IN
T1OUT
R2OUT
T2IN
R1OUT
T1IN
C1-
C1+
9
10
12
11
+5v
DB9
AREF
AVCC
100nF
C2+
MAX232
LED2
C13
LED1
1uF
R13
R14
220
1k
R16
R15
220
29
28
27
26
25
24
23
22
PD7/OC2
PD6/ICP
PD5/OC1A
PD4/OC1B
PD3/INT1
PD2/INT0
PD1/TXD
PD0/RXD
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
Cesar Contreras-UNET
Todos los valores de los Capacitores C8, C9, C10, C11, C13, C14, C15, C16 y
C17, adems 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 transmisin desde la etapa de control hacia la interfaz de visualizacin y
viceversa.
La comunicacin con la interfaz de visualizacin, se realiz por medio del
puerto serial del computador usndose solamente los terminales 2 y 3 para transmisin
recepcin y 5 como Terminal comn (tierra) del conector DB9. Cabe destacar que la
inversin 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, comunicacin y
digitalizacin 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 programacin 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
comunicacin serial.
Para establecer la comunicacin 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 dimensin del dato a transmitir que en este caso es 8 bits = 1 byte,
comunicacin asncrona en modo normal, velocidad de transmisin en baudios, y
finalmente se habilita la interrupcin de recepcin RXCIE.
Cesar Contreras-UNET
Cesar Contreras-UNET
UBRR =
f OSC
1
16 * Baud
Ec. 1.
Cesar Contreras-UNET
3. Temporizadores y Contadores.
El microcontrolador ATMEGA32 posee 3 reloj/contadores 2 de 8 bits y 1 de 16 bits.
Para entender estos perifricos basta con revisar los contadores secunciales. En la
Figura N 3, aparece un contador de dcadas con carga de datos y reset. Adems este
genera un uno lgico en la seal RCO cuando llega a la mxima 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 seal
RCO u Overflow aparece como carry. Recuerde que como el contador posee una seal
de RESET tambin podemos usar un circuito combinacional para generar una seal
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 seal 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)
Cesar Contreras-UNET
Cesar Contreras-UNET
OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1OCIE0TOIE0TIMSK
Read/Write R/W
Initial
0
Value
R/W
R/W
R/W
R/W
R/W
R/W
OCF2TOV2ICF1OCF1AOCF1BTOV1OCF0TOV0TIFR
Read/Write R/W
Initial
0
Value
R/W R/W
0
R/W
R/W
R/W
R/W
Cesar Contreras-UNET
delay _ deseado
fosc
preescalador
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 continuacin 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 oscilacin
Retardo deseado
Clock
Clock/8
12 MHz
4 ms
Numero de pulsos
12000 48000
1500
6000
Clock/64
Clock/256
Clock/1024
187.5
750
46.875 187.5
11.718 46.875
Contador=0;
While(contador<3)
{
TCNT0=6;
TCCR0==0x03;
TCCR0=0;
// para el reloj
TIFR=TIFR | 0x01;
// limpia la bandera
Contador++;
// incrementa el contador
Cesar Contreras-UNET
Timer de 16 bits
La inicializacin del TIMER1 se realiza seleccionando el modo de operacin,
mediante los registros TCCR1A y TCCR1B. Tambin se selecciona el preescalor de
frecuencia mediante el registro TCCR1B, y en el registro TIMSK que se muestra
anteriormente, se activa la interrupcin del registro del comparador de salida OCIE1A.
TCCR1A
TCCR1B
continuacin
el
programa
que
se
anexa
con
el
nombre
de
Cesar Contreras-UNET
Cesar Contreras-UNET
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 seal de fosc/8 = 1.5 MHz en realizar 12495 pulsos como se
muestra en la Ec. 3.
N = 8.33ms * 1.5MHz = 12495 pulsos
Ec. 3
Cesar Contreras-UNET
una vez sean iguales, se genera una seal de interrupcin que llama a una funcin de
apagado del TIMER0, enviando un 0 lgico (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 seal de fosc/256 = 46.86 KHz en realizar 5 pulsos como se
muestra en la Ec. 4.
106,70s =
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 IL.
R3
R4
R5
R6
10k
10k
10k
10k
RB7
RB6
RB5
RB4
RB0
R7
F1
F2
F3
F4
330R
RB1
R8
330R
RB2
R9
330R
RB3
R10
330R
Cesar Contreras-UNET
U1
9
13
12
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
{
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;
}
Cesar Contreras-UNET
Tabla N 6
Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
VSS
VDD
VEE
LCD
40
39
38
37
36
35
34
33
1
2
3
4
5
6
7
8
RESET
PC0/SCL
PC1/SDA
PC2/TCK
PC3/TMS
PC4/TDO
PC5/TDI
PC6/TOSC1
PC7/TOSC2
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
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
Pines
LCD
1
2
Pines
ATMEGA16
3
4
5
6
7
8
9
10
11
12
13
14
4
3
5
6
7
8
Funcin
Tierra
5V
Ajustar el contraste de la
pantalla
Coloca en el bus de datos una
instruccin o un smbolo.
Tierra
Habilitacin
Sin conexin
Sin conexin
Sin conexin
Sin conexin
Bus de datos
Las resistencias:
R1 = 100
R 2 = 100
Son para evitar algn corto debido a la manipulacin de la resistencia variable, y
de esta manera evitar el dao de la pantalla LCD.
El potencimetro:
RV1 = 20k
Permite el ajuste del voltaje para el contraste de la pantalla LCD.
Cesar Contreras-UNET
Figura N 14, usando un bus bidireccional de solo 2 lneas 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 lnea. Todos los dispositivos conectados al bus tienen
direcciones individuales.
Cesar Contreras-UNET
Cesar Contreras-UNET
Cesar Contreras-UNET
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 aplicacin. Por ejemplo se
puede usar el TWI para escribir data en una memoria EEPROM y luego leer data de la
Cesar Contreras-UNET
MEMORIA
HBRIDA
NVRAM FLASH EEPROM
EPROM
ROM
PROM MASKED
Cesar Contreras-UNET
PIN
1
2
3
4
5
6
7
8
Funcin
Seleccin de Chip
Seleccin de Chip
Seleccin de Chip
Tierra
Datos Seriales
Seal de Reloj
Proteccin de escritura
+2.5V a 5.5V
La principal ventaja del uso de este tipo de memorias y por esto lo tratamos en
este curso es la sencillez de su implementacin en el circuito impreso, ya que con dos
pines se establece la transmisin bidireccional de datos y la temporizacion por una seal
de reloj, SDA y SCL respectivamente. Si se requiere, tambin se puede configurar la
direccin 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 tpico para la implementacin de la memoria. El mismo consta de una
memoria serial 24LC512 y dos resistencias pull-up de 4.7K. Las entradas de seleccin
A0, A1, y A2 estn a tierra indicando que el nmero de dispositivo es el 000b.
. En general cuando solo se emplea una memoria los pines de direccin A0, A1 y A2 se
conectan a tierra, y si no existe la posibilidad de conflicto de escritura, el control de
escritura WP tambin se conecta a tierra. Segn las especificaciones del fabricante,
como las lneas SDA y SCL son de colector abierto, es pertinente conectarles
resistencias de pull-up a Vcc, tpicamente de 10 Kohm. Entonces representa una gran
ventaja para el microcontrolador ATMega16/32 ya que este soporta protocolos de
comunicacin 1-wire, TWI y SPI, que son soportados como se vio anteriormente por
esta memoria, adems de su considerable capacidad de almacenamiento.
Cesar Contreras-UNET
VCC
U3
R2
6
5
7
4.7K
R3
SCK
SDA
WP
A0
A1
A2
1
2
3
24LC512
4.7K
PC1
PC0
Cesar Contreras-UNET
Cesar Contreras-UNET
U2
3
7
BAT1
3V
5
6
VBAT X2
SOUT
X2
CRYSTAL
SDA
SCL
X1
DS1307
PC0
PC1
PD3
WinAVR
Compilador de C para microcontroladores ATMEL, el cual contiene, entre otras
cosas, el editor Programmers Notepad 2.
Ponyprog2000
Es un software para la grabacin de los programas en el microcontrolador En
este software se puede leer, escribir y borrar los programas realizados con el
Programmers Notepad 2.
Proteus 6.3
Cesar Contreras-UNET