El Microcontrolador ATMega328P TEMA 3 3 RECURSOS INTERNOS M. C. Felipe Santiago Espinosa Octubre / 2018
Interrupciones
Una interrupción es la ocurrencia de un evento, generado por un recurso del MCU , que ocasiona la suspensión temporal del programa principal.
•
•
El evento es atendido con una rutina de servicio a la interrupción (ISR).
•
La ISR debe colocarse en una dirección pre-establecida por Hardware.
•
Al conc co nclu luir ir con la ISR, IS R, la CPU CP U conti con tinú núaa con co n la ejec ej ecuc ució ión n del programa principal.
•
Ventajas: • •
El programa principal se simplifica. Se realizan dos o más tareas en forma simultánea.
2
Interrupciones
Una interrupción es la ocurrencia de un evento, generado por un recurso del MCU , que ocasiona la suspensión temporal del programa principal.
•
•
El evento es atendido con una rutina de servicio a la interrupción (ISR).
•
La ISR debe colocarse en una dirección pre-establecida por Hardware.
•
Al conc co nclu luir ir con la ISR, IS R, la CPU CP U conti con tinú núaa con co n la ejec ej ecuc ució ión n del programa principal.
•
Ventajas: • •
El programa principal se simplifica. Se realizan dos o más tareas en forma simultánea.
2
Interrupciones en los AVRs
Se tienen diferentes fuentes de Interrupción: Por inicialización o Reset. Interrupciones externas. Ante cambios en las terminales. Interrupciones por los temporizadores, pueden ser por comparación, captura o desbordamiento. Al completar una transferencia serial (puerto SPI). Ocasionadas por el puerto serie (USART), por transmisión, recepción o buffer vacío. Por el convertidor analógico digital. Al finalizar una escritura en EEPROM. Por el comparador analógico. Por la interfaz serial a dos hilos (TWI). Al escribir en memoria de programa.
3
El número real de interrupciones depende del dispositivo.
Interrupciones en los AVRs
Las interrupciones no están activas después de un reset. Su activación requiere la puesta en alto del bit I (bit 7 de SREG), además de las habilitaciones individuales. El ATMega328 tiene 26 fuentes de interrupción, cada una con su propia dirección. Al generarse una interrupción: • • • •
Termina la instrucción bajo ejecución. El PC es almacenado en la pila. El PC toma un valor del vector de interrupciones Desactiva al bit I, para no aceptar más interrupciones.
La ISR debe terminar con la instrucción RETI, la cual recupera el valor del PC de la pila y ajusta al bit I. 4
Vector de interrupciones en el ATMega328 Vect.
Dir.
Fuente
Descripción
1
0x0000
RESET
Reset del sistema (diferentes condiciones)
2
0x0002
INT0
Interrupción Externa 0
3
0x0004
INT1
Interrupción Externa 1
4
0x0006
PCINT0
Int. por cambio de pines 0
5
0x0008
PCINT1
Int. por cambio de pines 1
6
0x000A
PCINT2
Int. por cambio de pines 2
7
0x000C
WDT
Reset por Watchdog Timer
8
0x000E
TIMER2_COMPA
El timer 2 coincide con su comparador A
9
0x0010
TIMER2_COMPB
El timer 2 coincide con su comparador B
10
0x0012
TIMER2_OVF
Desbordamiento del timer 2
11
0x0014
TIMER1_CAPT
Captura de entrada con el timer 1
12
0x0016
TIMER1_COMPA
El timer 1 coincide con su comparador A
13
0x0018
TIMER1_COMPB
El timer 1 coincide con su comparador B
14
0x001A
TIMER1_OVF
Desbordamiento del timer 1
5
Vect.
Dir.
Fuente
15
0x001C
TIMER0_COMPA
El timer 0 coincide con su comparador A
16
0x001E
TIMER0_COMPB
El timer 0 coincide con su comparador B
17
0x0020
TIMER0_OVF
18
0x0022
SPI_STC
19
0x0024
USART_RX
20
0x0026
USART_UDRE
Registro de Datos de la USART vacío
21
0x0028
USART_TX
Transmisión completa por la USART
22
0x002A
ADC
23
0x002C
EE_READY
24
0x002E
ANALOG_COMP
25
0x0030
TWI
Interfaz serial a dos hilos (2-wire)
26
0x0032
SPM_READY
Almacenamiento en memoria de programa listo
Descripción
Desbordamiento del timer 0 Transferencia completa por SPI Recepción completa por la USART
Conversión del ADC completa Concluyo una escritura en EEPROM Comparador analógico
La ubicación de los vectores de interrupción puede modificarse para que el MCU inicie ejecutando instrucciones desde la sección de arranque.
6
Manejo de Interrupciones #include
#include
// Entradas y salidas // Interrupciones
// Las ISRs se ubican antes del programa principal ISR (INT0_vect) { . . . . }
// Servicio a la interrupción externa 0
ISR (INT1_vect) { . . . . }
// Servicio a la interrupción externa 1
int main(void) { . . . . . }
// Programa Principal // Debe activar las interrupciones
Todas las funciones de atención a interrupción se llaman ISR, difieren en el argumento que corresponde a la etiqueta de la fuente de interrupción, seguida por la palabra vect .
7
RECURSOS INTERNOS
Los AVR tienen un a gama ampli a de recursos internos. Todos los recursos son manejados por medio de los Registros I/O o Registros I/O Extendidos. Los recursos generan eventos que interrumpen a la CPU. Para ello:
El recurso debe ser configurado. Debe realizarse la habilitación del recurso. El habilitador global de interrupciones t ambién debe activarse. 8
3.1 INTERRUPCIONES E XTERNAS Microcontroladores 9
M. C. Felipe Santiago Espinosa Octubre 2018
INTERRUPCIONES E XTERNAS
Sirven para detectar un estado lógico o un cambio de estado en algunas terminales de entrada del microcontrolador. Útiles para monitorear Interruptores, Botones o Sensores con salida a relevador. El ATMega328 tiene dos Interrupciones Externas:
INT0 (PortD.2, terminal 4) INT1 (PortD.3, terminal 5)
Se pueden activar por un nivel bajo de voltaje o por flancos de subida o bajada. 10
CONFIGURACIÓN Las interrupciones externas se configuran con los 4 bits menos significativos del registro EICRA – (External Interrupt Control Register A):
Para INT1
ISCx1 ISCx0 0 0 0 1 1 0 1 1
Para INT0
Activación de la Interrupción Por nivel bajo Cualquier cambio lógico Por flanco de bajada Por flanco de subida
ISC - Interrupt Sense Control 11
EICRA es un Registro I/O extendidio (se ubica en la dirección 0x69).
H ABILITACIÓN El habilitador global de interrupciones es el bit I del registro de Estado (SREG), ubicado en la posición número 7.
Los habilitadores individuales están en el registro EIMSK ( External Interrupt Mask Register ).
12
El estado de las interrupciones se refleja en el registro EIFR (External Interrupt Flag Register ):
Las banderas se limpian automáticamente por hardware, cuando la ISR es ejecutada. Aunque el registro puede ser consultado por software, no tiene ningún sentido práctico.
13
Ejemplo 1: Conmutar el bit menos significativo de Port B, cada que se presiona un botón
ATMega328
INT0 PortB.0
14
EJEMPLO 2: CONTADOR DE EVENTOS UP/DOWN INT0 B T R O P
INT1
El puerto B se incrementará cada vez que se presiona el botón 1 y tendrá un decremento al presionar al botón 2. Deberá contar de 0 a 9, pasando de 9 a 0 (UP) ó de 0 a 9 (DOWN).
15
3.2 INTERRUPCIONES POR C AMBIOS EN LOS PINES Microcontroladores 16
M. C. Felipe Santiago Espinosa Octubre de 2018
INTERRUPCIONES POR C AMBIOS Las interrupciones PCIE0, PCIE1 y PCIE2 son provocadas por cualquier cambio en las terminales de los puertos.
Interrupción
Pines que monitorea
PCINT0
PB0 .. PB7
PCINT1
PC0 .. PC6
PCINT2
PD0 .. PD7
17
H ABILITACIONES INDIVIDUALES
Un pin puede provocar una i nterrupción s i ésta es habilitada en forma individual. Se habilita en los registros PCMSKx (Pin Change Mask):
En la ISR debe emplearse una máscara para determinar qué pin provocó el cambio. 18
H ABILITACIÓN Y ESTADO
En el registro PCICR (Pin Change Interrupt Control Register) se habilitan estas interrupciones.
El estado de las mismas puede verse en el registro de banderas PCIFR (Pin Change Interrupt Control Register).
19
EJEMPLO 3: PUERTAS DE UN AUTOMÓVIL. En las 4 puertas, cajuela y cofre de un automóvil se han puesto botones para detectar si están abiertas o cerradas. El botón está presionado con las puertas cerradas. • Si alguna de las 4 puertas está abierta deberá encenderse la luz interior. • S i l a c a j u e l a es t á a b i er t a, además de la luz interior debe encenderse la luz de la cajuela. • Si el cofre está abierto, además de la luz int erio r debe encenderse la luz del motor.
20
Suponga que todas las puertas están cerradas cuando el sistema se energiza.
EJEMPLO 3: PUERTAS DE UN AUTOMÓVIL.
PD5 1 0 1 0 0
PD4 1 1 0 0 0
PD3-PD0 X X X != 0 0
PC2 1 0 1 0 0
PC1 1 1 0 0 0
PC0 1 1 1 1 0
21
3.3 TEMPORIZADORES Microcontroladores 22
M. C. Felipe Santiago Espinosa Octubre de 2018
TEMPORIZADORES/CONTADORES
Un Timer/Counter es un registro de n bits que se incrementa automáticamente en cada ciclo de reloj o por eventos externos.
Sus desbordamientos indican que ha transcurrido un intervalo de tiempo o un número predefinido de eventos. 23
Temporizadores/Contadores El ATMega328 tiene tres temporizadores:
Temporizador Timer 0 Timer 1 Timer 2
Tamaño 8 bits 16 bits 8 bits
Registros TCNT0 TCNT1H, TCNT1L TCNT2
24
Eventos en los temporizadores Desbordamiento:
CARGA
TCNTn MAXVAL = 2
TOVn
Tamaño (TCNTn)
- 1
Coincidencia por comparación (Compare match): OCRn
=
OCFn
TCNTn
Captura de entrada (Input Capture) TCNT1
25
ICR1 ICP1
ICF1
Eventos en los temporizadores Temporizador Eventos Timer 0 Desbordamiento y coincidencia por comparación (2) Timer 1 Desbordamiento, coincidencia por comparación (2) y captura de entrada. Timer 2 Desbordamiento y coincidencia por comparación (2)
Los eventos de los Timers quedan registrados en su respectivo registro TIFR ( Timer Interupt Flag Register).
26
Atención y respuesta respuesta a los eventos. eventos. Sondeo ( polling ). polling ). El programa principal evalúa de manera frecuente el estado de las banderas. Uso de Interrupciones Las interrupciones se habilitan en el registro TIMSK ( Timer Interrupt Mask Register ) de cada temporizador. También se debe activar el habilitador global de interrupciones (bit I en SREG). Respuesta automática Ant An t e e v e ntos nt os d e c o inc in c i d enc en c i a p or com co m par pa r ació ac ión, n, alg al g unas un as terminales relacionadas pueden ponerse en alto, en bajo o conmutarse de manera automática.
Fundamental para generar señales a una frecuencia deseada o para realizar una modulación por ancho de pulso (PWM).
27
RGANIZACIÓN Y Y R ORGANIZACIÓN REGISTROS DEL TEMPORIZADOR/CONTADOR 0 TCNT0 ( T i m e r / C o u n t e r 0 ), ) , es el reg istro de 8 bits del temporizador/ contador 0. OCR0A (Output Compare Register A), es uno de los registros con el que continuamente se comparará el temporizador para generar eventos de coincidencias por comparación. OCR0B (Output Compare Register B ), es el otro registro con el que continuamente se comparará el tempo rizador para generar eventos de coincidencias por comparación. Los registros OCR0A OCR0A y y OCR0B OCR0B también también son usados para PWM. 28
TEMPORIZADOR/ CONTADOR 0
Se tienen dos registros para el control del temporizador/contador 0: TCCR0A y TCCR0B (Timer/Counter Control Register): TCCR0A: 7
6
5
4
3
2
1
0
COM0A1
COM0A0
COM0B1
COM0B0
-
-
WGM01
WGM00
TCCR0B: 7
6
5
4
3
2
1
0
FOC0A
FOC0B
-
-
WGM02
CS02
CS01
CS00
30
Bits WGM0[2:0] (Waveform Generation Mode): Para definir el modo de operación, de 8 modos posibles, 4 no son PWM y de ellos sólo 2 son válidos: Modo
WGM02
WGM01
WGM00
Descripción
0
0
0
0
Normal
1
0
0
1
PWM con fase correcta (MAX = 0xFF)
2
0
1
0
CTC (clear timer on compare match) – El máximo está en OCR0A
3
0
1
1
PWM rápido (MAX = 0xFF)
4
1
0
0
Reservado
5
1
0
1
PWM con fase correcta (MAX = OCR0A)
6
1
1
0
Reservado
7
1
1
1
PWM rápido (MAX = OCR0A)
31
Bits COM0A[1:0] y COM0B[1:0] (Compare Output Mode): Con estos bits se configura una respuesta automátic a en OC0x, ante eventos de comparación. Para los modos que no son PWM se tiene: COM0x1
COM0x0
Descripción
0
0
Operación normal – OC0x desconectado
0
1
Conmuta OC0x, sobre una coincidencia por comparación.
1
0
Limpia OC0x, sobre una coincidencia por comparación.
1
1
Ajusta OC0x, sobre una coincidencia por comparación.
Para los modos PWM: COM0x1
COM0x0
Descripción
0
0
Operación normal - OC0x desconectado, no hay salida PWM.
0
1
Reservado (sin uso)
1
0
Modo No Invertido
1
1
Modo Invertido
(x puede ser A o B)
32
PWM R ÁPIDO
El registro OCRx se actualiza cuando el temporizador pasa de su valor máximo a cero.
33
PWM CON F ASE CORRECTA
Las escrituras en el registro OCRx se realizan cuando TCNTx alcanza su valor máximo.
34
34
Bits FOC0A y FOC0B: forzan u obligan un evento d e comparación, si se configuró una respuesta automática, ésta tambien va a realizarse. FOC0A se relaciona con el reg istro OCR0A y OCR0A y FOC0B con el registro OCR0B registro OCR0B.. Bits CS0[2:0] (Clock Select): Bits de selección de la fuente de reloj. CS0 S02 2
CS0 S01 1
CS0 S00 0 De Desc scri ripc pció ión n
0
0
0
Sin fuente de reloj (temporizador detenido)
0
0
1
CLK I/O (Sin pre-escalador)
0
1
0
CLK I/O/8 (Desde el pre-escalador)
0
1
1
CLK I/O/64 (Desde el pre-escalador)
1
0
0
CLK I/O/256 (Desde el pre-escalador)
1
0
1
CLK I/O/1024 (Desde el pre-escalador)
1
1
0
Fuente externa (en T0), con flanco de bajada
1
1
1
Fuente externa (en T0), con flanco de subida 35
E VENTOS DEL TEMPORIZADOR/CONTADOR 0 Los eventos se ven reflejados en el regis tro TIFR0 (Timer/Counter Interrupt Flag Register), se tienen tres eventos:
7
6
5
4
3
2
1
0
-
-
-
-
-
OCF0B
OCF0A
TOV0
TOV0 ( Timer/Counter Overflow 0 ): ) : Desbordamiento del Temporizador/Contador 0. OCF0x ( Output Compare Match coincidencia en la comparación.
Flag 0x ): ):
Indica una
Se tienen dos banderas por que el temporizador es comparado con dos registros diferentes: OCR0A OCR0A y y OCR0B OCR0B..
Nota: Las banderas se limpian automáticamente si se emplean interrupciones o escribiendo un 1 si se usa sondeo.
36
INTERRUPCIONES DEL TEMPORIZADOR/CONTADOR 0 En el registro TIMSK0 ( Timer/Counter Interrupt Mask R e g i s t e r 0 ) se deben ac tivar las inte rrupciones. Los habilitadores individuales son:
7
6
5
4
3
2
1
0
-
-
-
-
-
OCIE0B
OCIE0A
TOIE0
TOIE0 (Timer/Counter 0 Overflow Interrupt Enable ): Habilita la interrupción por desbordamiento del Temporizador/Contador 0. OCIE0x ( Timer/Counter 0 Output Compare Match x Interru pt Enable ): Hailita la interrupción por una coincide ncia en la comparación.
Se tienen dos habilitaciones por que el temporizador es comparado con dos registros diferentes: OCR0A y OCR0B. 37
VECTORES DE INTERRUPCIÓN
Los vectores de interrupción para los even tos del temporizador/ contador 0 son:
Dirección
Evento
Descripción
0x001C
TIMER0_COMPA
El Timer 0 coincide con el comparador A
0x001E
TIMER0_COMPB
El Timer 0 coincide con el comparador B
0x0020
TIMER0_OVF
Desbordamiento del Timer 0
38
TEMPORIZADOR/ CONTADOR 1
REGISTROS DE CONTROL
Se tienen tres registros para el control del temporizador/contador 1: TCCR1A, TCCR1B y TCCR1C (Timer/Counter Control Register):
TCCR1A
:
7
6
5
4
3
2
1
0
COM1A1
COM1A0
COM1B1
COM1B0
-
-
WGM11
WGM10
TCCR1B: 7
6
5
4
3
2
1
0
ICNC1
ICES1
-
WGM13
WGM12
CS12
CS11
CS10
TCCR1C: 7
6
5
4
3
2
1
0
FOC1A
FOC1B
-
-
-
-
-
-
40
Bits WGM1[3:0] (Waveform Generation Mode): Modo
WGM13
WGM12
WGM11 WGM10 Descripción
MAX
0
0
0
0
0
Normal
0xFFFF
1
0
0
0
1
PWM con Fase Correcta, 8 bits
0x00FF
2
0
0
1
0
PWM con Fase Correcta, 9 bits
0x01FF
3
0
0
1
1
PWM con Fase Correcta, 10 bits
0x03FF
4
0
1
0
0
CTC
OCR1A
5
0
1
0
1
PWM Rápido, 8 bits
0x00FF
6
0
1
1
0
PWM Rápido, 9 bits
0x01FF
7
0
1
1
1
0x03FF
8
1
0
0
0
9
1
0
0
1
PWM Rápido, 10 bits PWM con Frecuencia y Fase Correcta PWM con Frecuencia y Fase Correcta
10
1
0
1
0
PWM con Fase Correcta
ICR1
11
1
0
1
1
PWM con Fase Correcta
OCR1A
12
1
1
0
0
CTC
13
1
1
0
1
Reservado
14
1
1
1
0
PWM Rápido
ICR1
15
1
1
1
1
PWM Rápido
OCR1A
ICR1 OCR1A
ICR1 -
C APTURA DE ENTRADA Un evento en la terminal ICR1 hace que el temporizador se copie en ICR1 y que la bandera ICF1 sea puesta en alto. Bits involucrados:
Bit ICNC1 (Input Capture Noise Canceler): Activa un eliminador de ruido. La entrada se filtra por cuatro muestras sucesivas.
Bit ICES1 ( Input Capture Edge Select ): Selecciona el flanco de activación de la captura. 0
Flanco de bajada
1
Flanco de subida
En los modos 8, 10, 12 y 14, el registro ICR1 tiene otras funciones por lo que y la función de captura no puede utilizarse. 42
VECTORES DE INTERRUPCIÓN
Los vectores de interrupción para los eventos del temporizador/ contador 1 son:
Dirección
Evento
Descripción
0x0014
TIMER1_CAPT
Captura de entrada con el Timer 1
0x0016
TIMER1_COMPA
El Timer 1 coincide con el comparador A
0x0018
TIMER1_COMPB
El Timer 1 coincide con el comparador B
0x001A
TIMER1_OVF
Desbordamiento del Timer 1
43
TEMPORIZADOR/ CONTADOR 2
44
REGISTROS DE CONTROL
Se tienen dos registros para el control del temporizador/contador 2: TCCR2A y TCCR2B (Timer/Counter Control Register):
TCCR2A: 7
6
5
4
3
2
1
0
COM2A1
COM2A0
COM2B1
COM2B0
-
-
WGM21
WGM20
TCCR2B: 7
6
5
4
3
2
1
0
FOC2A
FOC2B
-
-
WGM22
CS22
CS21
CS20
45
Bits CS2[2:0] (Clock Select): Bits de selección de la fuente de reloj. CS22
CS21
CS20
Descripción
0
0
0
Sin fuente de reloj (temporizador detenido)
0
0
1
CLK T2S (Sin pre-escalador)
0
1
0
CLK T2S/8
0
1
1
CLK T2S/32
1
0
0
CLK T2S/64
1
0
1
CLK T2S/128
1
1
0
CLK T2S/256
1
1
1
CLK T2S/1024
46
El temporizador 2 puede operar con un cristal externo de 32.768 kHz. Con el pre-escalador se consiguen periodos de desbordamiento que son fracciones o múltiplos de segundos reales.
Factor de preescala
Frecuencia del temporizador 2
Periodo de desbordamiento
1
32. 768 kHz
1/128 s
8
4. 096 kHz
1/16 s
32
1. 024 kHz
1/4 s
64
512 Hz
1/2 s
128
256 Hz
1s
256
128 Hz
2s
1024
32 Hz
8s
El desbordamiento se realiza cada 256 ciclos.
47
Registro para controlar la operación asíncrona del temporizador 2.
7
6
5
4
3
2
1
0
-
EXCLK
AS2
TCN2UB
OCR2AUB
OCR2BUB
TCR2AUB
TCR2BUB
Bit EXCLK: Determina si la operación asíncrona será con un cristal de 32.768 KHz o a una frecuencia diferente. Bit AS2 ( Asynchronous Timer/Counter) Habilita la operación asíncrona. Puede ser un cristal de 32.768 kHz (EXCLK = 0) o una señal de reloj diferente (EXCLK = 1). Bits TCN2UB, OCR2AUB, OCR2BUB, TCR2AUB, TCR2BUB (UB: Update Busy) - significa que el registro correspondiente está ocupado por actualización.
48
EJEMPLO 4: Escriba una secuencia de instrucciones para generar una señal de 5 KHz (Suponer que se está usando el os cilador interno a 1 MHz). Utilizando:
1.
a. b.
Desbordamientos atendidos por interrupción (salida en PD0). Respuesta automática ante coincidencias por comparación y modo CTC (salida en OC0A, PD6).
F = 5 KHz => T = 0.2 ms = 200 uS T H = T L = 100 uS 49
EJEMPLO 5:
Configure al ATMega328P para que genere un tono de 400 Hz (aproximadamente), mientras se mantenga presionado un botón.
F = 400 Hz => T = 2.5 ms = 2500 uS T H = T L = 1250 uS
Recursos a emplear: Botón – Cambio en pin en PC0. Tono – Respuesta automática con el timer 1, salida en OC1A (PB1). 50
EJEMPLO 6:
Genere una señal PWM rápida con salida en modo No Invertido, donde el ancho del pulso esté determinado por el valor del puerto B.
51
3.4 CONVERTIDOR A NALÓGICODIGITAL Microcontroladores 52
M. C. Felipe Santiago Espinosa Octubre de 2018
CONVERSIÓN ANALÓGICO A DIGITAL
1. Señal Original
3. Cuatificación
2. Muestreo
4. Señal digital
53
CONVERTIDOR ANALÓGICO A DIGITAL
ADC
0000 0001 0001 0100 0111 1100 1101 1110 1111 1111 …… 0011 0011 ……
54
ADC DE APROXIMACIONES SUCESIVAS
Un modo de carrera libre se consigue cuando el FIN se conecta con el INICIO.
55
ADC EN LOS AVRS
El ATMega328 contiene un ADC de aproximaciones sucesivas de 10 bits, el resultado de la conversión queda en los Registros I/O: ADCH y ADCL (juntos pueden referirse como ADCW ). El ADC está conectado a un multiplexor analógico que permite seleccionar 1 de 6 canales externos (ADCo, ADC1, ADC2, ….). El ADC debe trabajar con una frecuencia entre 50 y 200 kHz. La primera conversión requiere inicializar la circuitería analógica, por lo que emplea 25 ciclos de reloj. Las siguientes conversiones sólo utilizan 13 ciclos de reloj.
56
ADC en el ATMega328P
•
•
•
ADSC ( ADC Start Conversion): Inicia la conversión. ADIF ( ADC Interrupt Flag ): Fin de conversión. ADIE (ADC Interrupt Enable): Habilita interrupción.
Todos estos bits en el registro ADCSRA (ADC Control and Status Register A).
57
REGISTROS PARA EL MANEJO DEL ADC Registro ADMUX. Registro de selección del multiplexor del ADC REFS1 REFS0 ADLAR
-
MUX3
MUX2
MUX1
MUX0
Bits 7 y 6 – REFS[1:0]: Reference Selection bits. Selección del voltaje de referencia. El ADC puede convertir voltajes de 0 hasta V REF – 1 LSB. REFS1 0 0
REFS0 0 1
1 1
0 1
Voltaje de referencia Voltaje Externo en AREF AVCC, con un Capacitor externo de AREF a tierra Reservado Interno (1.1 V), con un Capacitor externo de AREF a tierra 58
Bit 5 – ADLAR: ADC Left Adjust Result. Ajusta
ADC a la izquierda.
Si ADLAR = 0 :
D7
D6
D5
D4
D3
D2
el resultado del
Si ADLAR = 1 D9
D8
D1
D0
ADCH ADCL
D9
D8
D1
D0
D7
D6
D5
D4
D3
D2
Bits 3 al 0 – MUX[3:0]. Seleccionan el canal o entrada analógica. SEL GND Voltaje interno ADC7 ADC6 ADC1 ADC0
Entrada analógica
Mux [ 3 : 0 ] 0000 0001 .... 0110 0111 1000 .... 1110 1111
Entrada ADC0 ADC1 .... ADC6 ADC7 Sensor de Temperatura Sin uso Voltaje interno (1.1 V) 0V
59
REGISTRO ADCSRA. REGISTRO A DE CONTROL Y ESTADO DEL ADC. ADEN
ADSC ADATE ADIF
ADIE ADPS2 ADPS1 ADPS0
Bit 7 – ADEN: ADC Enable. Habilita al ADC. Bit 6 – ADSC: ADC Start Conversion. Marca el inicio de la conversión. Bi t 5 – ADATE : ADC Au to Trigger Enable . Habilitan
el modo de carrera libre o un auto-disparo del ADC por otro recurso del MCU, el autodisparo se configura con los bits ADTS del registro ADCSRB.
Bit 4 – ADIF: ADC Interrupt Flag . Indica el fin de una conversión.
Bit 3 – ADIE: ADC Interrupt Enable. Habilita la interrupción por fin de conversión analógica-digital. 60
Prescaler Select Bits . Establecen una proporción entre el reloj del sistema y el reloj para el ADC.
Bits 2, 1 y 0 - ADPS[2-0]: ADC
El ADC requiere de una señal de reloj entre 50 kHz y 200 kHz para obtener una máxima resolución.
ADPS [ 2 : 0 ] ADEN START
T E S E R
PREESCALADOR DE 7 BITS
CLK 2 / K C P
4 / K C P
8 / K C P
6 1 / K C P
2 3 / K C P
ADPS[2:0]
CLK del ADC
4 6 / K C P
8 2 1 / K C P
000 001 010 011 100 101 110 111
Factor de División 2 2 4 8 16 32 64 128 61
REGISTRO ADCSRB. REGISTRO B DE CONTROL Y ESTADO DEL ADC. ACME
ADTS2 ADTS1 ADTS0
Bits 7 al 3: No están relacionados con el ADC. Bits 2, 1 y 0 – ADTS[2:0] ADC Auto Trigger Source. Definen el modo de
carrera libre o el evento que disparará el inicio de conversión: ADTS [ 2 : 0 ] 000 001 010 011 100 101 110 111
Fuente de disparo Modo de Carrera Libre Comparador Analógico Interrupción Externa 0 Coincidencia por comparación, timer/counter 1 A Sobreflujo del timer/counter 0 Coincidencia por comparación, timer/counter 1 B Sobreflujo del timer/counter 1 Evento de Captura, timer/counter 1
62
REGISTRO DIDR0. REGISTRO 0 PARA DESHABILITAR LA ENTRADA DIGITAL.
ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D
Bits 7 y 6: No están implementados. Bits 5 al 0 – ADCxD. Deshabilitan la entrada digital. Las terminales digitales incluyen un buffer de entrada, con un 1 en estos bits el
buffer queda inhabilitado y por lo tanto, una entrada digital siempre se leería con un 0.
Se sugiere escribir un 1 en los bits que correspondan con las entradas analógicas a usar para reducir el consumo de potencia. 63
EJEMPLO 7
Conecte un potenciómetro en el canal 0 del ADC y “mueva” un LED encendido en el puerto B, dependiendo de la posició n del potenciómetro. Rango
Salida (Binario)
0 – 127
0000 0001
128 – 255
0000 0010
256 – 383
0000 0100
384 – 511
0000 1000
512 – 639
0001 0000
640 – 767
0010 0000
768 – 895
0100 0000
896 - 1023
1000 0000 64
EJEMPLO 8 •
Con el timer 0, genere una señal PWM de 8 bits en modo no invertido. El ciclo de trabajo debe ser proporcional al voltaje producido por un potenciómetro conectado al canal 0 del ADC, como se muestra en la figura: + 5V
100 K
ADC0
OC0A
65
EJEMPLO 9 Manipule un servomotor controlando su posición con la ayuda de un potenciómetro conectado a una entrada analógica, como se muestra la figura:
Para el movimiento del servomotor se requiere una señal PWM con un periodo de 20 mS, el servomotor se mantiene en 0o (extremo izquierdo) con un ancho de pulso de 0.9 mS y en 180o (extremo derecho) si el ancho es de 2.1 mS.
66
3.5 COMUNICACIÓN SERIAL Microcontroladores 67
M. C. Felipe Santiago Espinosa Octubre de 2018
COMUNICACIÓN SERIAL A TRAVÉS DE LA USART
USART: Transmisor/Receptor Universal Síncrono/Asíncrono (Universal Synchronous/Asynchronous Receiver/Transceiver ). Permite una operación full-duplex . TXD
RXD
RXD
TXD
La comunicación puede ser síncrona o asíncrona. TXD
RXD
TXD
RXD
CLK 68
Comunicación síncrona
Comunicación asíncrona
COMUNICACIÓN SERIAL
Comunicación síncrona: El reloj determina la velocidad de transmisión. En comunicación asíncrona: Se deben definir los parámetros siguientes:
Velocidad (Baudrate – bps, bits/segundo) Número de bits de datos (5, 6, 7, 8, 9) Bit de paridad (par, impar) Número de bits de paro
69
TRAMA SERIAL 70
Una trama serial se compone de:
1 bit de inicio (siempre es un 0 lógico). 5, 6, 7, 8 ó 9 bits de datos, iniciando con el menos significativo. Bit de paridad, par o impar, si se configuró su uso. 1 ó 2 bits de paro (siempre son un 1 lógico).
Se tiene un nivel lógico alto mientras no haya transmisión de datos. Bit de paridad
Bit de inicio Espera
I
D0 D1 D2 D3 D4 D5 D6 D7 P
Bit de paro S 70
ORGANIZACIÓN DE LA USART En el ATMega328 se le denomina USART0 y se compone de 3 bloques principales:
UCSR0A, UCSR0B y UCSR0C son los registros de control, configuración y estado de la USART. (UCSR – USART Configuration and State Register).
71
GENERADOR DE RELOJ
Reloj para transmisión/recepción asíncrona o para transmisión síncrona. CLK1.
CLK2 . Reloj para recepción síncrona.
Registro UBRR0 (Registro de 12 bits) – USART0 Baud Rate Register: Es la base de la generación de la razón de transmisión ( baud rate). Es un contador descendente.
72
OPERACIÓN DE LA USART La USART soporta cuatro modos de operación: 1. 2. 3. 4.
Normal asíncrono (frecuencia base/16) Asíncrono de doble velocidad (frecuencia base/8) Síncrono como maestro (frecuencia base/2) Síncrono como esclavo
Los bits UMSEL0[1:0] (Bits 7 y 6 del registro UCSR0C) determinan si será una operación síncrona y asíncrona. 0 - Asíncrona 1 - Síncrona El bit U2X0 (bit 1 del registro UCSR0A) sirve para seleccionar entre Asíncrona Normal o Asíncrona a Doble Velocidad. 73
C ÁLCULO DEL B AUD R ATE MODO Normal asíncrono Asíncrono a doble velocidad
Síncrono maestro
BAUD-RATE BAUD
f OSC
UBRR0 1
16
BAUD
BAUD
f OSC 8UBRR 0 1
f OSC 2UBRR 0 1
UBRR UBRR0
f OSC 16 BAUD
UBRR0
UBRR0
f OSC 8 BAUD f OSC 2 BAUD
1
1
1
BAUDRATE Re al 1 BAUDRATE
Error [%] 100%
74
R AZONES DE TRANSMISIÓN TÍPICAS fosc = 1.0 MHz
fosc = 1.8432 MHz
fosc = 8.0 MHz
Baud Rate (bps)
UBRR0
Error
UBRR0
Error
UBRR0
Error
UBRR0
Error
UBRR0
Error
UBRR0
Error
2 400
25
0.2 %
51
0.2 %
47
0.0 %
95
0.0 %
207
0.2 %
416
-0.1 %
4 800
12
0.2 %
25
0.2 %
23
0.0 %
47
0.0 %
103
0.2 %
207
0.2 %
9 600
6
-7.0 %
12
0.2 %
11
0.0 %
23
0.0 %
51
0.2 %
103
0.2 %
14 400
3
8.5 %
8
-3.5 %
7
0.0 %
15
0.0 %
34
-0.8 %
68
0.6 %
19 200
2
8.5 %
6
- 7.0 %
5
0.0 %
11
0.0 %
25
0.2 %
51
0.2 %
28 800
1
8.5 %
3
8.5 %
3
0.0 %
7
0.0 %
16
2.1 %
34
-0.8 %
38 400
1
-18.6 %
2
8.5 %
2
0.0 %
5
0.0 %
12
0.2 %
25
0.2 %
57 600
0
8.5 %
1
8.5 %
1
0.0 %
3
0.0 %
8
-3.5 %
16
2.1 %
76 800
-
-
1
-18.6 %
1
-25 %
2
0.0 %
6
-7.0 %
12
0.2 %
115 200
-
-
0
8.5 %
0
0.0 %
1
0.0 %
3
8.5 %
8
MAX
Normal
Doble Vel.
62 500 bps
125 000 bps
Normal
115 200 bps
Doble Vel.
230 400 bps
Normal
500 000 bps
Doble Vel.
75 -3.5
%
1 000 000 bps
TEMPORIZACIÓN EXTERNA Para recepción síncrona la señal de reloj se toma de la terminal XCK. La frecuencia externa está limitada por: f XCK
f OSC
4
El bit UCPOL0 (bit 0 del registro UCSR0C) determina el flanco en que los datos son ajustados (para transmisión) o muestreados (para recepción). UCPOL0
Ajuste TXD
Muestreo RXD
0
Flanco de subida
Flanco de bajada
1
Flanco de bajada
Flanco de subida
76
BLOQUE DE TRANSMISIÓN
Registro UDR0 (USART0 I/O Data Register). Físicamente se compone de dos registros con la misma dirección, uno para transmisión y otro para recepción.
La transmisión inicia cuando se escribe en el registro UDR0, al finalizar se pone en alto al bit TXC0 (Bit 6 del registro UCSR0A). TXC0 bit puede sondearse o generar una interrupción.
77
BLOQUE DE RECEPCIÓN
El recurso debe habilitarse para que reciba un dato en cualquier momento, el dato es alojado en el registro UDR0. Cuando esto ocurre, es puesto en alto al bit RXC0 (Bit 7 del registro UCSR0A). RXC0 también puede sondearse por software o generar una interrupción. 78
REGISTROS DE CONTROL ESTADO ONTROL Y Y E REGISTRO UCSR0A BANDERAS
RXC0
TXC0
UDRE0
FE0
DOR0
PE0
U2X0 MPCM0
Bit 7 – RXC0 : USART0 U SART0 Receive R eceive Complete C omplete.. Indica
que hay un dato por recepción. Puede generar una interrupción. Se limpia al leer al buffer de entrada (UDR0).
Bi B i t 6 – T X C 0 : U S A R T 0 T r a n s m i t e C o m p l e t e . Indica
que se ha concluido con la transmisión de un dato y por lo tanto el búfer está vacío. Puede generar interrupción con lo que se limpia automáticamente o escribiéndole 1.
Bit 5 – UDRE0: UDRE0 : USART0 USAR T0 Data Da ta Regis R egister ter Empty. Empt y. Indica
UDR0 está vacío. También puede generar interrupción.
que el registro 79
REGISTRO UCSR0A 80
Bit 4 – FE0: Frame Error. Indica
un error de marco, es decir, que el primer bit de paro es cero. Es válido hasta que UDR0 es leído.
Bit 3 – DOR0: Data Over Run.
Bit 2 – PE0: Parity Error. Error de paridad en el dato recibido.
Bit 1 - U2X0: Double the USART Transmission Speed. En
Bit 0 – MPCM0: Multiprocessor Communication Mode. Habilita
Indica un exceso de datos. El buffer receptor (UDR0) está lleno, el registro de desplazamiento contiene otro carácter y hay un nuevo bit de inicio.
asíncronas duplica la velocidad de transmisión.
operaciones
un modo de comunicación entre multiprocesadores, bajo un esquema maestroesclavos.
80
REGISTRO UCSR0B RXCIE0
TXCIE0 UDRIE0 RXEN0
TXEN0
UCSZ02
RXB80
TXB80
Los 3 bits mas significativos son habilitadores de interrupciones: Bit 7 – RXCIE0 : Por recepción completa. Bit 6 – TXCIE0 : Por transmisión completa. Bit 5 – UDRIE0 : Por buffer vacío. Los 2 bits siguientes habilitan los recursos: Bit 4 – RXEN0: Habilita al receptor. Bit 3 – TXEN0: Habilita al transmisor.
Una vez que se ha configurado al hardware, las terminales relacionadas no pueden ser I/O generales. 81
REGISTRO UCSR0B 82
Bit 2 – UCSZ02: Character size. Junto
Bit 1 - RXB80:
con otros dos bits de UCSRC determinan el tamaño de los datos. En transferencias de datos de nueve bits, en RXB80 se recibe el noveno bit, los ocho bits menos significativos se reciben en UDR0. 8
7,6,...,1,0
RXB8
UDR
También para datos de nueve bits, para ubicar al bit mas significativo al transmitir. Su valor debe definirse antes de escribir en UDR0.
Bit 0 - TXB80:
82
REGISTRO UCSR0C UMSEL01 UMSEL00 UPM01 UPM00
USBS0
UCSZ01 UCSZ00 UCPOL0
Bit 7 y 6 – UMSEL0[1:0] (M328): USART Mode Select. Seleccionan el
modo de operación de la USART0.
UMSEL01 UMSEL00 Modo 0 0 Operación Asíncrona 0 1 Operación Síncrona 1 0 Reservado 1 1 Modo Maestro SPI (MSPIM)
83
REGISTRO UCSR0C 84
Bits 5 y 4 – UPM0[1:0]: Parity Mode. Configuran
paridad.
UPM01 0 0 1 1
Bit 3 – USBS0: Stop Bit Select.
paro.
UPM00 0 1 0 1
al bit de
Configuración Sin bit de paridad Reservado Paridad Par Paridad Impar
Selecciona el número de bits de
0
Un bit de paro
1
Dos bits de paro
Bits 2 y 1 – UCSZ[1:0]: Character size. Junto con el bit UCSZ2
del registro UCSRB determinan el tamaño de los datos.
84
REGISTRO UCSR0C 85
UCSZ02 UCSZ01 UCSZ00 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Tamaño de los datos 5 bits 6 bits 7 bits 8 bits Reservado Reservado Reservado 9 bits
Bit 0 – UCPOL0: Clock Polarity. Determina la polaridad del reloj
para comunicaciones síncronas. UCPOL0
Ajuste TXD
Muestreo RXD
0
Flanco de subida
Flanco de bajada
1
Flanco de bajada
Flanco de subida
85
EJEMPLO 9: 86
1.
Escriba un programa ECO que transmita cualquier carácter recibido. Configurando a la USART0 para una comunicación asíncrona a 4800 baudios, datos de 8 bits, 1 bit de paro y sin paridad. Utilice una interrupción por recepción.
86
EJEMPLO 10: TxD RxD PORTD.2 B T R O P
Escriba un programa que envíe un carácter ASCII imprimible por el puerto serie cada vez que se presione un botón. Los caracteres ASCII imprimibles están en el rango de 0x20 a 0x7E. Además, en cualquier momento podrá arribar serialmente un dato, por lo que éste deberá mostrarse en el puerto B. Realice la comunicación a 9600 bps.
87
3.6 INTERFAZ SPI Microcontroladores 88
M. C. Felipe Santiago Espinosa Octubre de 2018
INTERFAZ SPI
SPI (Serial Peripheral Interface): estándar de comunicaciones usado para transferir paquetes de 8 bits entre circuitos integrados. La transferencia es síncrona, un dispositivo es Maestro y otro es Esclavo. Es posible el manejo de un sistema con múltiples Esclavos. El Maestro es la parte activa del sistema, provee la señal de reloj para la transmisión. El Maestro tiene que enviar datos para poder leer de el Esclavo. el Esclavo no puede ser activo por sí mismo. La interfaz se puede encontrar en memorias, sensores, ADCs, DACs, etc., usualmente funcionando como Esclavos.
89
INTERFAZ SPI Módulo SPI Maestro
Módulo SPI Esclavo SCK
Generador de reloj
Memoria, CPU, etc.
Unidad de control SPI
Registro de 7
...
3
2 1
0
MOSI
desplazamiento
Registro de 7
...
3
2 1
0
desplazamiento
Unidad de control SPI
Memoria, CPU, etc.
MISO SS
MOSI: Master Output, Slave Input. MISO: Master Input, Slave Output. SCK: Shift Clock. SS: Slave Select. 90
INTERFAZ SPI EN LOS AVR S M
REGISTRO DE DATOS ( SPDR) MSB
LSB
REGISTRO DE DESPLAZAMIENTO (8 BITS)
M S
BUFFER PARA LECTURA DEL DATO
Reloj
CLK I/O DIVISOR /2 /4 /8 /16 /32 /64 /128 S O T A D E D S U B
MISO
LOGICA DEL RELOJ
S
O C I S E G N Ó I L P L S O O R L T E N D O C
MOSI
SCK
M SS
SELECTOR
(gen. Int.) CONTROL
REGISTRO DE ESTADO ( SPSR)
REGISTRO DE CONTROL ( SPCR)
91
INTERFAZ SPI EN LOS AVR
SPDR (SPI Data Register) es el registro de datos, incluye un buffer para la transmisión y un buffer doble para la recepción.
La transmisión inicia al escribir en el registro SPDR. No se debe escribir un dato nuevo mientras un ciclo de envíorecepción esta en progreso. Se puede enviar primero al bit más significativo o al menos significativo, se elige con el bit DORD (data order) del registro SPCR. Los bits recibidos se colocan en el buffer de recepción después de que la transmisión se ha completado. El buffer debe leerse antes de iniciar con la siguiente transmisión. 92
INTERFAZ SPI EN LOS AVR
El fin de una transferencia se indica con la bandera SPIF del registro SPSR. Con el bit SPIE del registro SPCR se hab ilitan las interrupciones por el fin de una transferencia SPI. Una colisión de escritura ocurre si se escribe en SPDR mientras hay una transferencia en progreso. Se indica con la bandera WCOL del registro SPSR. Las banderas WCOL y SPIF se limpian con la lectura del registro SPSR y el acceso al registro SPDR. 93
MODOS DE TRANSFERENCIA SPI
Las transferencias son sincronizadas con la señal de r eloj (SCK), un bit es transferido en cada ciclo. La sincronización de los datos con el reloj es flexible. El usuario puede definir la polaridad de la señal de reloj y la fase del muestreo de datos. La polaridad se refiere al estado lógico de la señal de reloj mientras espera a que haya transferencias. La fase define si el primer bit será muestreado en el primer flanco de reloj (en fase) o en el flanco siguiente.
94
MODOS DE TRANSFERENCIA SPI
En el registro SPCR se tienen 2 bits para definir estos parámetros: CPOL es para configurar la polaridad de la señal de reloj. CPHA es para configurar la fase o instante de muestro.
Modo SPI 0 1 2 3
CPOL 0 0 1 1
CPHA 0 1 0 1
Descripción Espera en bajo, muestrea en el primer flanco Espera en bajo, muestrea en el segundo flanco Espera en alto, muestrea en el primer flanco Espera en alto, muestrea en el segundo flanco
95
...
SCK
...
...
Datos
...
...
Muestreos
...
...
SS
...
a) Modo 0: CPOL = 0, CPHA = 0
b) Modo 1: CPOL = 0, CPHA = 1
...
SCK
...
...
Datos
...
...
Muestreos
...
...
SS
...
c) Modo 2: CPOL = 1, CPHA = 0
d) Modo 3: CPOL = 1, CPHA = 1
96
SEÑAL DE HABILITACIÓN SS
La señal de la terminal SS no se genera automáticamente, debe ser generada por software porque sólo de esta forma es posible un esquema Maestro-Esclavos.
ATMega328 (PB5) SCK (PB4) MISO (PB3)MOSI (PB2) SS PB1 PB0
Maestro
ATMega328
ATMega328
ATMega328
SCK (PB5)
SCK (PB5)
SCK (PB5)
MISO (PB4)
MISO (PB4)
MISO (PB4)
MOSI (PB3)
MOSI (PB3)
MOSI (PB3)
SS (PB2)
SS (PB2)
SS (PB2)
Esclavo 0
Esclavo 1
Esclavo 2
97
REGISTRO DE CONTROL (SPCR) 0x0D
7
6
5
4
3
2
1
0
SPIE
SPE
DORD
MSTR
CPOL
CPHA
SPR1
SPR0
SPCR
Bit 7 – SPIE: Habilitador de interrupción por SPI
Debe estar en alto, junto con el habilitador global, para que se genere una interrupción por transferencia serial completa vía SPI. Bit 6 – SPE: Habilitador de la interfaz SPI
En alto hace posibles las transferencias por esta interfaz. Bit 5 – DORD: Orden de los datos
Con un 0 en DORD, se transfiere primero al bit más significativo (MSB). Con un 1, se transfiere primero al bit menos significativo (LSB). Bit 4 – MSTR: Habilitador como Maestro
Un 1 en MSTR habilita a la interfaz como Maestro. Un 0 la deja como Esclavo.
98
Bit 3 – CPOL: Polaridad del reloj Determina la polaridad del reloj (SCK) cuando la interfaz SPI está inactiva. Bit 2 – CPAH: Fase del reloj Determina si los datos serán muestreados en fase o si se insertará un retraso inicial de medio ciclo de reloj. Bit 1:0 – SPR[1:0] Determinan la frecuencia de la señal SCK (junto con el bit SPI2X ). No tienen efecto si el MCU está configurado como Esclavo. SPI2X 0 0 0 0 1 1 1 1
SPR1 0 0 1 1 0 0 1 1
SPR0 0 1 0 1 0 1 0 1
Frecuencia de SCK fosc/4 fosc/16 fosc/64 fosc/128 fosc/2 fosc/8 fosc/32 fosc/64
99
Registro de estado (SPSR) 0x0E
7
6
5
4
3
2
1
0
SPIF
WCOL
-
-
-
-
-
SPI2X
SPSR
Bit 7 – SPIF: Bandera de fin de transferencia SPI Puede sondearse por software o producir una interrupción. Bit 6 – WCOL: Bandera de colisión de escritura Se pone en alto si se escribe en el registro SPDR mientras hay una transferencia en progreso. Las banderas WCOL y SPIF se limpian con la lectura del registro SPSR y el acceso al registro SPDR. Bit 0 – SPI2X Duplica la frecuencia de transmisión. 100
EJEMPLO 11: EXPANSIÓN DE PUERTOS
Desarrolle los programas para los MCUs de la figura, el maestro envía un dato al esclavo seleccionado. Con 3, el dato se mandará a todos los Esclavos (difusión). ATMega3 28 SCK (PB5) MISO ( PB4) MOSI ( PB3) SS (PB2)
ATMega3 28
O T A D
D T R O P
D T R O P
Esclavo 1
ATMega3 28
(PB5) SCK
SCK (PB5)
(PB4) MISO
MISO ( PB4)
(PB3) MOSI
MOSI ( PB3) SS (PB2)
(PB2) SS
D T R O P
PB1 PB0 . L E S
PC0 PC1
PC2
Esclavo 2 ATMega3 28 SCK (PB5) MISO ( PB4)
Maestro
MOSI ( PB3) SS (PB2)
D T R O P
101
EJEMPLO 12: M ANEJO DE UN DAC.
Realice un programa que maneje un dispositivo MCP4821, que es un DAC de 12 bits. Utilice dos puertos de entrada en el ATMega328 para enviar el dato digital al dispositivo.
102
3.7 INTERFAZ TWI Microcontroladores 103
M. C. Felipe Santiago Espinosa Octubre de 2018
INTERFAZ TWI (TWO WIRE INTERFACE)
Interfaz compatible con el bus I2C, estándar desarrollado por Philips Semiconductor (ahora NXP Semiconductor). Aplicable para el manejo de LCDs y LEDs, puertos I/O remotos, RAMs, EEPROMs, RTC, ADCs, DACs, cámaras CCD, etc. Los dispositivos deben contar con los mecanismos de hardware necesarios para cubrir los requerimientos inherentes al protocolo. El protocolo TWI maneja un esquema Maestro-Esclavo, sin embargo, cualquier dispositivo puede transmitir en el bus. 104
INTERFAZ TWI (TWO WIRE INTERFACE)
Los dispositivos se comuniquen a través de un bus bidireccional de 2 líneas: Una para reloj (SCL) y otra para datos (SDA). Pueden ser hasta 128 dispositivos. Se requiere de 2 resistores de Pull-Up externos, se impone una AND alambrada. Vcc
Dispositivo 1
Dispositivo 2
Dispositivo 3
.....
Dispositivo n
R1
R2
SDA SCL
105
INTERFAZ TWI (TWO WIRE INTERFACE)
Términos para los diferentes dispositivos:
Maestro: Dispositivo que inicia y termina una t ransmisión, también genera la señal de reloj (SCL).
Esclavo: Dispositivo direccionado por un Maestro.
Transmisor: Dispositivo que coloca los datos en el bus.
Receptor: Dispositivo que lee los datos del bus.
106
CONDICIONES DE INICIO Y PARO Y D ATOS
El Maestro genera las condiciones de INICIO y PARO:
SDA
SCL INICIO
PARO
INICIO
INICIO REPETIDO
PARO
También la señal de reloj con la que se sincronizan los datos:
SDA
SCL Dato Estable
Dato Estable
107
P AQUETES DE DIRECCIÓN
Un paquete de dirección tiene una longitud de 9 bits:
7 bits para la dirección del esclavo (inicia con el MSB) 1 bit de control (R/W) 1 bit de reconocimiento Dirección MSB
LSB
R/W
7
8
ACK
SDA
SCL INICIO
1
2
9
R/W = 1 para lectura y R/W = 0 para escritura. Con el bit de reconocimiento el Esclavo da respuesta al Maestro. Un 0 es una indicación de reconocimiento (ACK). 108
P AQUETES DE DIRECCIÓN
SLA + R : Petición de lectura. SLA + W : Petición de escritura. La dirección 000 0000 está reservada para llamadas generales (GCA, General Call Address). En una llamada general, el Maestro transmite el mismo mensaje a todos los Esclavos, los Esclavos deben responder con ACK. Las llamadas generales son sólo para peticiones de escritura (R/W = 0). Una petición de lectura en una llamada general provocaría una colisión en el bus. 109
P AQUETES DE DATOS
Los paquetes de datos también son de 9 bits, 8 bits para el dato (iniciando con el MSB) y un bit de reconocimiento. El receptor debe generar la señal de reconocimiento, poniendo en bajo la señal SDA durante el 9º bit de SCL (ACK). Dato SDA desde el transmisor
MSB
LSB
ACK
SDA desde el receptor SCL desde el maestro
1
2
7
8
9 110
P AQUETES COMPLETOS: DIRECCIÓN Y DATOS Dirección MSB
Dato LSB
R/W
7
8
ACK
MSB
LSB
ACK
SDA
SCL INICIO
1
2
9
1
2
7
8
9
PARO
La AND con las resistencias de pull-up permite coordinar la comunicación entre el Maestro y el Esclavo.
111
SISTEMAS MULTI-M AESTROS
Si dos o más Maestros intentan iniciar una transmisión al mismo tiempo las señales de reloj pueden tener ligeros desfasamientos. Las transmisiones se sincronizan con el reloj resultante en SCL debido a la AND alambrada. SCL del maestro A
SCL del maestro B
SCL en el BUS 112
SISTEMAS MULTI-M AESTROS
Sólo un Maestro podrá concluir con la transmisión, éste se determina por un proceso de arbitración. Los Maestros monitorean la línea SDA después de colocar un dato. Si el valor leído no coincide con el valor colocado, se ha perdido la arbitración. SDA =/ SDA, el maestro A A
pierde la arbitración SDA del maestro A
SDA del maestro B
SDA en el BUS
Linea SCL (sincronizada)
113
ARBITRACIÓN
La arbitración se mantiene hasta que sólo quede un Maestro transmisor. Puede continuar en el paquete de datos. No debe haber arbitración entre:
Una condición de INICIO REPETIDO y el bit de un dato. Una condición de PARO y el bit de un dato. Una condición de INICIO REPETIDO y una condición de PARO.
El programador evitar las condiciones ilegales. En un sistema multi-Maestros todas las transacciones deben contener el mismo número de bytes por paquete de datos. 114
SCL Control de Slew-rate
ORGANIZACIÓN DE LA INTERFAZ TWI
SDA Control de Slew-rate
Filtro
Filtro
Unidad de Interfaz con el Bus Control de INICIO/PARO
Supresión de ruido
Detector para arbitración
Registro de desp. dir/dato (TWDR)
Unidad de Comparación de Dirección Registro de Dirección (TWAR)
Comparador de dirección
Generador de Bit Rate Pre-escalador
Registro de Bit Rate (TWBR)
Ack
Unidad de Control Registro de Estado (TWSR)
Registro de Control (TWCR)
Máquina de estados y control
115
GENERADOR DE BIT R ATE
Define la frecuencia de la señal SCL (para un Maestro). La frecuencia depende del Registro de Bit Rate ( TWBR) y de los bits de pre-escala ( TWPS[1:0]) ubicados en el registro de estado (TWSR). La frecuencia de SCL se genera de acuerdo con la ecuación:
TWPS1 0 0 1 1
TWPS0 0 1 0 1
Valor de pre-escala 1 4 16 64
116
Unidad de Interfaz con el Bus
Incluye al Registro de Desplazamiento para Datos y Direcciones ( TWDR), registro principal para las transferencias TWI. El bit Ack es para el manejo del reconocimiento, se genera en forma automática (no se accesa por Software). El módulo para el Control de INICIO/PARO genera y detecta las condiciones de INICIO, INICIO REPETIDO y PARO. El detector para arbitración monitorea la actividad en el bus y determina si una arbitración está en proceso. Con los bits del registro TWSR se conoce e l estado de la interfaz TWI después de cualquier operación en el bus. 117
Unidad de Comparación de Dirección
Evalúa si la dirección recibida coincide con la dirección del dispositivo, ubicada en el registro TWAR. 7 TWA6
6
5
TWA5 TWA4
4 TWA3
3
2
1
0
TWA2 TWA1 TWA0 TWGCE
TWAR
El bit TWGCE del registro TWAR habilita las llamadas generales, si está en alto, la dirección recibida también se compara con 0x00. Ante una coincidencia se informa a la Unidad de Control para que realice las acciones correspondientes. 118
Unidad de Control
Monitorea los eventos del bus y genera res puestas de acuerdo a la configuración definida en el registro TWCR. Si un evento requiere atención, la bandera TWINT se pone en alto y del registro de estado ( TWSR) se puede obtener el código que identifica al evento. El registro TWSR tiene información relevante sólo si la bandera TWINT se puso en alto y puede deberse a que:
Se transmitió una condición de INICIO o INICIO REPETIDO. Se direccionó un esclavo con una SLA+R o SLA+W. Se perdió una arbitración. La interfaz TWI fue direccionada, con su dirección de Esclavo o por una GCA. Se recibió un dato. Ocurrió una condición de PARO o INICIO REPETIDO, mientras estaba direccionada como Esclavo.
119
Registros para el manejo de la Interfaz TWI Registro para el manejo de datos (TWDR)
El registro TWDR es el buffer para transmisión y recepción de datos. En modo transmisor, TWDR contiene el próximo dato a ser transmitido. En modo receptor, TWDR contiene el último dato recibido. El registro TWDR puede ser leído o escrito sólo después de que la bandera TWINT se puso en alto.
120
Registro de Bit Rate (TWBR)
Registro base para definir la razón de transmisión de datos (TWBR). Con el valor de TWBR y los bits de selección de pre-escala se define la frecuencia a la que se generará la señal SCL, cuando el MCU trabaja como Maestro.
121
Registro de dirección de esclavo (TWAR) 7
6
TWA6
TWA5 TWA4
4 TWA3
3
2
1
0
TWA2 TWA1 TWA0 TWGCE
TWAR
Bit 7:1 – TWA[6:0] Bits de dirección (como Esclavo).
5
Definen la dirección de la interfaz TWI como Esclavo.
Bit 0 – TWGCE: Habilitador para llamadas generales.
Habilita a la interfaz TWI para que reconozca y pueda dar respuesta a una GCA.
122
Registro de Control (TWCR) 7
6
5
4
3
TWINT TWEA TWSTA TWSTO TWWC
1
0
TWEN
-
TWIE
TWCR
Bit 7 – TWINT: Bandera de interrupción.
2
Indica que un evento requiere atención, debe ser limpiado por software aún cuando se manejen interrupciones, para ello se le escribe un 1. El acceso a los registros TWAR , TWSR y TWDR se debe hacer antes de limpiar la bandera.
Bit 6 – TWEA: Habilitador de reconocimiento (Ack).
El bit debe activarse para generar reconocimiento automático, cuando:
El dispositovo ha sido direccionado como Esclavo. Recibió una llamada general. Recibió un dato (siendo Maestro o Esclavo).
123
Bit 5 – TWSTA: TWI Start.
Bit 4 – TWSTO: TWI Stop.
Se activa si se intenta escribir en el registro TWDR y el bit TWINT está en bajo.
Bit 2 – TWEN: Habilitador de la interfaz TWI.
Un MCU Maestro genera una condición de PARO. Un MCU Esclavo recupera la interfaz de una condición de error. El bit se limpia automáticamente por hardware.
Bit 3 – TWWC: Bandera de colisión de escritura.
El MCU genera una condición de INICIO y se vuelve Maestro (si el bus está libre). El bit debe limpiarse por software.
La interfaz toma el control de las terminales SCL y SDA.
Bit 1 – No está implementado. Bit 0 – TWIE: Habilitador de interrupción por TWI.
La interfaz genera una interrupción cuando la bandera TWINT está en alto (y el bit I de SREG también está en alto). 124
Registro de estado (TWSR)
7
6
5
4
3
2
TWS7
TWS6
TWS5
TWS4
TWS3
-
0
TWPS1 TWPS0
TWSR
Bits 7:3 – TWS[7:3] Bits de estado de la interfaz TWI.
1
Reflejan el estado de la interfaz y del bus, sus posibles valores dependen del modo de operación de la interfaz TWI. Para su lectura debe usarse una máscara que anule los bits TWPS[1:0].
Bit 2 – No está implementado. Bit 1:0 – TWPS[1:0]: Selección del valor de pre-escala.
El valor de pre-escala define la frecuencia de la señal SCL cuando el MCU trabaja como Maestro. TWPS1 0 0 1 1
TWPS0 0 1 0 1
Valor de pre-escala 1 4 16 64
125
Modos de operación
La interfaz puede operar en 4 modos :
Maestro Transmisor (MT) Esclavo Transmisor (ST) Maestro Receptor (MR) Esclavo Receptor (SR)
Una aplicación puede requerir más de un modo. Por ejemplo, si un MCU va a manejar una memoria EEPROM vía TWI, con el modo MT podrá escribir en la memoria y con el modo MR podrá leer de ella. 126
Modo Maestro Transmisor Un MCU entra al modo Maestro al establecer una condición de inicio, posteriormente, la dirección con el bit de control determina si será MT o MR. Para el modo MT se debe enviar una SLA+W (W = 0). Establecido el modo MT, el maestro puede enviar datos. El fin de las transmisiones se marca con una condición de paro.
Vcc
D s i po si tio v 1 Mae st r o rans T mis or
Dis p ositiv o 2 E scla vo Rep c e to r
D s i po si o tv i 3D .. .
s i po si o tv i n
R1R 2
DA S CL S
127
Para una condición de inicio, en TWCR se debe escribir:
TWCR
TWINT
TWEA
TWSTA
TWSTO
TWWC
TWEN
-
TWIE
valor
1
X
1
0
X
1
0
X
La condición de inicio se transmite si el bus está disponible. La bandera TWINT se pone en alto y en los bits de estado (TWSR) se coloca el código 0x08. Para entrar al modo MT, el Maestro debe escribir una SLA+W en el registro TWDR . La transmisión de la SLA+W inicia cuando se limpia la bandera TWINT, para ello, en el registro TWCR debe escribirse:
TWCR
TWINT
TWEA
TWSTA
TWSTO
TWWC
TWEN
-
TWIE
Valor
1
X
0
0
X
1
0
X 128
Después de transmitir la SLA+W y recibir reconocimiento, la bandera TWINT se pondrá en alto y en el registro TWSR se tendrá el estado 0x18. El MCU Maestro está listo para enviar uno o varios datos. Cada dato a enviar debe colocarse en TWDR. El envío inicia al limpiar la bandera TWINT, colocando en TWCR el valor mostrado anteriormente. El fin de envío se marca con la puesta en alto de TWINT y si hubo reconocimiento el código de estado es 0x28. Esta secuencua se repetirá con cada uno de los datos. Concluido el envío de datos, el Maestro debe enviar una condición de PARO o una de INICIO REPETIDO. El valor del registro TWCR para una condición de PARO es: TWCR valor
TWINT TWEA TWSTA TWSTO TWWC 1
X
0
1
X
TWEN
-
TWIE
1
0
X
129
Un INICIO REPETIDO se solicita de manera similar a una condición de INICIO. Después de un INICIO REPETIDO (estado 0x10) la interfaz puede tener acceso al mismo Esclavo o a otro Esclavo, sin transmitir una condición de PARO. El INICIO REPETIDO habilita a un Maestro a conmutar entre Esclavos o cambiar de Maestro Transmisor a Maestro Receptor, sin perder el control del bus.
130
Estados posibles en el modo Maestro Transmisor Código de Estado 0x08
0x10
0x18 0x20 0x28 0x30
Posibles acciones a realizar en la interfaz, en respuesta al estado
Estado del bus y de la interfaz serial Una condición de INICIO ha sido transmitida Una condición de INICIO REPETIDO ha sido transmitida
1.
Transmitir SLA+W, recibir ACK o nACK
1.
Transmitir SLA+W, recibir ACK o nACK
2.
Transmitir SLA+R, conmutar la interfaz a MR
Se ha transmitido una SLA+W y recibido un ACK
1.
Se ha transmitido una SLA+W y recibido
o nACK
un nACK
2.
Transmitir un INICIO REPETIDO
Se ha transmitido un byte de datos y
3.
Transmitir una condición de PARO
recibido un ACK
4.
Transmitir una condición de PARO
Se ha transmitido un byte de datos y
seguida de una condición de INICIO
recibido un nACK 1.
0x38
Transmitir un byte de datos, recibir ACK
Se ha perdido una arbitración al enviar una SLA o un byte de datos
Liberar al bus, únicamente limpiando a la bandera TWINT
2.
Transmitir una condición de INICIO,131 cuando el bus esté libre
Modo Maestro Receptor
Un dispositivo MR recibe una cantidad de bytes de un dispositivo ST. Un MCU entra al modo Maestro al e stablecer una condición de inicio. Para el modo MR se debe enviar una SLA+R (R = 1). Establecido el modo MR, el maestro puede recibir datos. El MR no responde con reconocimiento cuando ya no va a recibir datos. Vcc
SDA SCL
Dispositivo 1
Dispositivo 2
Maestro Receptor
Esclavo Transmisor
Dispositivo 3
.....
Dispositivo n
R1
R2
132
El modo MR generalmente es la continuación de un modo MT, porque el maestro debe notificar el esclavo que recibirá información. El cambio de MT a MR se realiza mediante un inicio repetido. Una respuesta con reconocimiento (ACK) indica al esclavo que el maestro está en condiciones de recibir más datos. TWCR valor
1
1
0
0
X
TWEN
-
TWIE
1
0
X
Una respuesta sin reconocimiento (nACK) indica al esclavo que será el último dato recibido. TWCR valor
TWINT TWEA TWSTA TWSTO TWWC
TWINT TWEA TWSTA TWSTO TWWC 1
0
0
0
X
TWEN
-
TWIE
1
0
X
Después de ello, el maestro debe establecer una condición de paro o inicio repetido.
133
Estados posibles en el modo Maestro Receptor Código de Estado 0x08
0x10
Posibles acciones a realizar en la interfaz, en respuesta al estado
Estado del bus y de la interfaz serial Una condición de INICIO ha sido transmitida Una condición de INICIO REPETIDO ha sido transmitida
1.
Transmitir SLA+R, recibir ACK o nACK
1.
Transmitir SLA+R, recibir ACK o nACK
2.
Transmitir SLA+W, conmutar la interfaz a MR
1. 0x38
Se perdió una arbitración al enviar una SLA+R o se envió un nACK
Liberar al bus, únicamente limpiando a la bandera TWINT
2.
Transmitir una condición de INICIO, cuando el bus esté libre
0x40 0x50 0x48 0x58
Se ha transmitido una SLA+R y recibido
1.
un ACK Se ha recibido un byte de datos y
Recibir un byte de datos y dar respuesta con un ACK ( TWEA = 1)
2.
respondido con un ACK
Recibir un byte de datos y dar respuesta con un nACK ( TWEA = 0)
Se ha transmitido una SLA+R y recibido
1.
Transmitir un INICIO REPETIDO
un nACK
2.
Transmitir una condición de PARO
Se ha recibido un byte de datos y
3.
Transmitir una condición de PARO 134 seguida de una condición de INICIO
respondido con un nACK
Modo Esclavo Receptor Vcc
Dispositivo 1
Dispositivo 2
Esclavo Receptor
Maestro Transmisor
Dispositivo 3
.....
Dispositivo n
R1
R2
SDA SCL
El MCU debe contar con una dirección a la que responderá como esclavo, esta dirección se define en los bits TWA[6:0] (de TWAR). En el bit TWGCE (LSB de TWAR) se habilita al MCU para que también responda a llamadas generales (GCA). 135
En el registro TWCR debe habilitarse la interfaz TWI ( TWEN = 1) y preparar una respuesta de reconocimiento ( TWEA = 1). Se debe escribir el valor: TWCR
TWINT
Valor
0
TWEA TWSTA 1
0
TWSTO
TWWC
TWEN
-
TWIE
0
0
1
0
X
Inicializados los registros TWAR y TWCR, la interfaz queda en espera de ser direccionada. La interfaz operará en el modo SR si el bit de control es 0 (Write), en caso contrario, entrará al modo ST. Después de recibir su dirección, la bandera TWINT es puesta en alto y en los bits de estado TWSR se refleja el código que determina las acciones a seguir por software. La interfaz también podrá ser llevada al modo SR, si perdió una arbitración mientras estaba en modo Maestro. 136
Establecido el modo SR, la interfaz estará recibiendo datos, a los que dará reconocimiento. Si el bit TWEA es limpiado después de una transferencia, la interfaz colocará un nACK en SDA al recibir el próximo dato. Sirve para que el Esclavo le indique al Maestro que no le es posible recibir más datos. Con el bit TWEA en cero el m aestro no recibirá reconocimientos.
137
Estados posibles en el modo Esclavo Receptor Código de Estado 0x60
Estado del bus y de la interfaz serial
Posibles acciones a realizar en la interfaz, en respuesta al estado
Se ha direccionado como Esclavo con una SLA+W y enviado un ACK Se perdió una arbitración en una SLA+R/W
0x68
como Maestro, se ha direccionado como esclavo con una SLA+W y enviado un ACK
0x70
Se ha direccionado como Esclavo con una GCA y enviado un ACK
1.
un ACK (TWEA = 1)
Se perdió una arbitración en una SLA+R/W 0x78
como Maestro, se ha direccionado como esclavo con una GCA y enviado un ACK
Recibir un byte de datos y regresar
2.
Recibir un byte de datos y regresar un nACK (TWEA = 0)
Se ha recibido un byte de datos y respondido 0x80
con un ACK, previamente se había direccionado con una SLA+W Se ha recibido un byte de datos y respondido
0x90
con un ACK, previamente se había direccionado con GCA
138
Código de Estado
Se ha recibido un byte de datos y 0x88
Posibles acciones a realizar en la interfaz, en respuesta al estado
Estado del bus y de la interfaz serial
respondido con un nACK, previamente se
1.
direccionado, desactivando la interfaz
había direccionado con una SLA+W
para no reconocer su propia SLA o la
Se ha recibido un byte de datos y 0x98
Conmutar a un modo de Esclavo no
GCA (TWEA = 0)
respondido con un nACK, previamente se 2. Conmutar a un modo de Esclavo no había direccionado con una GCA direccionado, capaz de reconocer su propia SLA o la GCA (TWEA = 1) 3.
Conmutar a un modo de Esclavo no direccionado, desactivando la interfaz para no reconocer su propia SLA o la
0xA0
Se ha recibido una condición de PARO o
GCA y enviar un bit de inicio, cuando el
de INICIO REPETIDO, mientras aún
bus esté disponible
estaba direccionado como Esclavo
4.
Conmutar a un modo de Esclavo no direccionado, capaz de reconocer su propia SLA o la GCA y enviar un bit de 139 inicio, cuando el bus esté disponible
Modo Esclavo Transmisor Vcc
Dispositivo 1
Dispositivo 2
Esclavo Transmisor
Maestro Receptor
Dispositivo 3
.....
Dispositivo n
R1
R2
SDA SCL
La interfaz operará en el modo ST si fue direccionada con el bit de control en 1 (Read), en caso contrario, entrará al modo SR. Después de recibir su dirección, la bandera TWINT es puesta en alto y en los bits de estado del registro TWSR se refleja el código de estado que determina las acciones a seguir por software. 140
La interfaz también podrá ser llevada al modo ST, si perdió una arbitración mientras estaba en modo Maestro. Después de transmitir un dato, en los bits de estado se tendrá un 0xB8 o un 0xC0, dependiendo de si el Maestro Receptor recibió con ACK o con nACK. Un nACK le indica al esclavo que el maestro no puede recibir más datos. Si el esclavo transmisor ya no tiene datos por enviar debe limpiar al bit TWEA al momento de enviar el último dato, con ello, si el maestro sigue demandando datos leerá 1’s.
141
Estados posibles en el modo Esclavo Transmisor Código de Estado 0xA8
Se ha direccionado como Esclavo con una SLA+R y enviado un ACK Se perdió una arbitración en una
0xB0
1.
SLA+R/W como Maestro, se ha direccionado como esclavo con una Se transmitió un byte de datos en
Transmitir un byte de datos y recibir ACK
SLA+R y enviado un ACK 0xB8
Posibles acciones a realizar en la interfaz, en respuesta al estado
Estado del bus y de la interfaz serial
2.
Transmitir un byte de datos y recibir nACK
TWDR
y se recibió un ACK
142
Código de Estado
0xC0
0xC8
Posibles acciones a realizar en la interfaz, en respuesta al estado
Estado del bus y de la interfaz serial
Se transmitió un byte de datos en
TWDR
y se recibió un nACK
Se transmitió el último byte de datos en TWDR (TWEA = 0) y
1.
Limpiar la bandera TWINT
2.
Desactivar la interfaz para no reconocer su propia SLA o la GCA
se recibió un ACK
143
Estados Misceláneos Códigos de estado que no corresponden con alguno de los 4 modos de operación: Código de Estado 0xF8
Estado del bus y de la interfaz serial No hay información relevante disponible, TWINT = 0 Error en el bus, debido a una
0x00
condición ilegal de INICIO o PARO
Posibles acciones a realizar en la interfaz, en respuesta al estado 1.
Esperar o proceder con la siguiente transferencia
1.
Sólo el hardware interno es afectado. El bit TWSTO debe ser
puesto en alto, pero no se envía
una condición de PARO en el bus. El bus es liberado y el bit TWSTO es limpiado.
Un error puede deberse a una posición ilegal d e un byte de dirección, un byte de datos o un bit de reconocimiento. La bandera TWINT es puesta en alto. Para recuperar al bus de un error se debe poner a la bandera TWSTO en alto.
144
Ejemplo 13: Expansión de Puertos por TWI
Los esclavos obtienen su dirección de 2 interruptores externos. La direcció 0 será para difusión.
145
Ejemplo 14: Manejo de una Memoria I2C
El circuito PCF8570 es una memoria RAM de 256 x 8 bits, con interfaz I2C y dirección configurable entre 0x50 y 0x57 (con 3 terminales). La memoria trabaja en los modos Esclavo Receptor (para escritura de datos) y Esclavo Transmisor (para lectura de datos). Reconocimiento de Esclavo
S
Dir. de Esclavo
0 A
Reconocimiento de Esclavo
Dir. de Acceso
Maestro Transmisor
A
Reconocimiento de Esclavo
Dato a escribir
A
P
n bytes Auto-i ncrementa la direcci ón de acceso
Escritura en la RAM 146