You are on page 1of 147

El Microcontrolador

ATMega328P

TEMA 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 concluir con la ISR, la CPU continúa con la ejecució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
5
14 0x001A TIMER1_OVF Desbordamiento del timer 1
Vect. Dir. Fuente Descripción
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 Desbordamiento del timer 0
18 0x0022 SPI_STC Transferencia completa por SPI
19 0x0024 USART_RX Recepción completa por la USART
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 Conversión del ADC completa
23 0x002C EE_READY Concluyo una escritura en EEPROM
24 0x002E ANALOG_COMP Comparador analógico
25 0x0030 TWI Interfaz serial a dos hilos (2-wire)
26 0x0032 SPM_READY Almacenamiento en memoria de
programa listo

 La ubicación de los vectores de interrupción puede modificarse


para que el MCU inicie ejecutando instrucciones desde la sección 6
de arranque.
Manejo de Interrupciones

#include <avr/io.h> // Entradas y salidas


#include <avr/interrupt.h> // 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 7
por la palabra vect.
RECURSOS INTERNOS
 Los A V R ti en en u n a g a m a a m p l i a d e r e c u r s o s
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 también debe
activarse.

8
3.1 INTERRUPCIONES EXTERNAS

Microcontroladores

9
M. C. Felipe Santiago Espinosa

Octubre 2018
INTERRUPCIONES EXTERNAS

 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 Para INT0

ISCx1 ISCx0 Activación de la Interrupción


0 0 Por nivel bajo
0 1 Cualquier cambio lógico
1 0 Por flanco de bajada
1 1 Por flanco de subida

ISC - Interrupt Sense Control


11
EICRA es un Registro I/O extendidio (se ubica en la dirección 0x69).
HABILITACIÓ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

PORTB
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
CAMBIOS EN LOS PINES

Microcontroladores

16
M. C. Felipe Santiago Espinosa

Octubre de 2018
INTERRUPCIONES POR CAMBIOS
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
HABILITACIONES INDIVIDUALES

 Un pin puede provocar una interrupción si é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
HABILITACIÓ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.

• Si la cajuela está abierta,


además de la luz interior debe
encenderse la luz de la cajuela.

• Si el cofre está abierto, además


de la luz interior 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 PD4 PD3-PD0 PC2 PC1 PC0


1 1 X 1 1 1
0 1 X 0 1 1
1 0 X 1 0 1
0 0 != 0 0 0 1
21
0 0 0 0 0 0
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 Tamaño Registros


Timer 0 8 bits TCNT0
Timer 1 16 bits TCNT1H, TCNT1L
Timer 2 8 bits TCNT2

24
Eventos en los temporizadores
Desbordamiento: CARGA

TCNTn TOVn

Tamaño (TCNTn)
MAXVAL = 2 -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 a los eventos.
Sondeo (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
 Ante eventos de coincidencia por comparación, algunas
terminales relacionadas pueden ponerse en alto, en bajo o
conmutarse de manera automática.
 Fundamental para generar señales a una frecuencia deseada o 27
para realizar una modulación por ancho de pulso (PWM).
ORGANIZACIÓN Y REGISTROS DEL
TEMPORIZADOR/CONTADOR 0
TCNT0 (Time r /Counte r 0), es el r egistr o de 8 bits d e l
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 temporizador para
generar eventos de coincidencias por comparación.

Los registros OCR0A y OCR0B 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)
CTC (clear timer on compare match) –
2 0 1 0
El máximo está en OCR0A
3 0 1 1 PWM rápido (MAX = 0xFF)
4 1 0 0 Reservado
PWM con fase correcta
5 1 0 1
(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ática 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
32

(x puede ser A o B)
PWM RÁPIDO

El registro OCRx se actualiza cuando el temporizador pasa de su


valor máximo a cero.
33
PWM CON FASE 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 de
comparación, si se configuró una respuesta automática, ésta
tambien va a realizarse. FOC0A se relaciona con el registro
OCR0A y FOC0B con el registro OCR0B.

 Bits CS0[2:0] (Clock Select): Bits de selección de la fuente de reloj.

CS02 CS01 CS00 Descripció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
EVENTOS DEL TEMPORIZADOR/CONTADOR 0
Los eventos se ven reflejados en el registro 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 Flag 0x): Indica una


coincidencia en la comparación.
 Se tienen dos banderas por que el temporizador es comparado
con dos registros diferentes: OCR0A y 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


Register 0) se deben activar las interrupciones. 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 Interrupt


Enable): Hailita la interrupción por una coincidencia 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 eventos 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 PWM Rápido, 10 bits 0x03FF
PWM con Frecuencia y Fase
8 1 0 0 0 ICR1
Correcta
PWM con Frecuencia y Fase
9 1 0 0 1 OCR1A
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 ICR1
13 1 1 0 1 Reservado -
14 1 1 1 0 PWM Rápido ICR1
15 1 1 1 1 PWM Rápido OCR1A
CAPTURA 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 pre- Frecuencia del
Periodo de desbordamiento
escala temporizador 2
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
47
 El desbordamiento se realiza cada 256 ciclos.
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:

1. Escriba una secuencia de instrucciones para


generar una señal de 5 KHz (Suponer que se
está usando el oscilador interno a 1 MHz).
Utilizando:

a. Desbordamientos atendidos por interrupción (salida


en PD0).
b. Respuesta automática ante coincidencias por
comparación y modo CTC (salida en OC0A, PD6).

F = 5 KHz => T = 0.2 ms = 200 uS


TH = TL = 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


TH = TL = 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 ANALÓGICO-
DIGITAL

Microcontroladores

52
M. C. Felipe Santiago Espinosa

Octubre de 2018
CONVERSIÓN ANALÓGICO A DIGITAL

1. Señal Original 2. Muestreo

53
3. Cuatificación 4. Señal digital
CONVERTIDOR ANALÓGICO A DIGITAL

0000
0001
0001
0100
0111
1100
ADC 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 55


INICIO.
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


57
Register A).
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 VREF – 1 LSB.

REFS1 REFS0 Voltaje de referencia


0 0 Voltaje Externo en AREF
0 1 AVCC, con un Capacitor externo
de AREF a tierra
1 0 Reservado
1 1 Interno (1.1 V), con un Capacitor
externo de AREF a tierra

58
Bit 5 – ADLAR: ADC Left Adjust Result. Ajusta el resultado del
ADC a la izquierda.

Si ADLAR = 0 : Si ADLAR = 1

D9 D8 ADCH D9 D8 D7 D6 D5 D4 D3 D2

D7 D6 D5 D4 D3 D2 D1 D0 ADCL D1 D0

Bits 3 al 0 – MUX[3:0]. Seleccionan el canal o entrada analógica.

Mux [ 3 : 0 ] Entrada
SEL
0000 ADC0
GND 0001 ADC1
Voltaje .... ....
interno
0110 ADC6
ADC7 Entrada
ADC6 analógica 0111 ADC7
1000 Sensor de Temperatura
ADC1
.... Sin uso
ADC0
1110 Voltaje interno (1.1 V)
59
1111 0V
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.

Bit 5 – ADATE : ADC Auto Trigger Enable. Habilitan el modo de


carrera libre o un auto-disparo del ADC por otro recurso del MCU, el auto-
disparo 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
Bits 2, 1 y 0 - ADPS[2-0]: ADC Prescaler Select Bits. Establecen
una proporción entre el reloj del sistema y el reloj para el 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 ] Factor de
División
RE SE T

ADEN 000 2
PREESCALADOR
START
DE 7 BITS 001 2
CLK PCK/128 010 4
PCK/16

PCK/32

PCK/64
PCK/2

PCK/4

PCK/8

011 8
100 16

ADPS[2:0] 101 32
110 64
111 128
CLK del ADC

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 ] Fuente de disparo


000 Modo de Carrera Libre
001 Comparador Analógico
010 Interrupción Externa 0
011 Coincidencia por comparación, timer/counter 1 A
100 Sobreflujo del timer/counter 0
101 Coincidencia por comparación, timer/counter 1 B
110 Sobreflujo del timer/counter 1
62
111 Evento de Captura, timer/counter 1
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 Bit de Bit de


inicio paridad paro

Espera I D0 D1 D2 D3 D4 D5 D6 D7 P 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

CLK1. Reloj para transmisión/recepción asíncrona o para transmisión


síncrona.

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. Normal asíncrono (frecuencia base/16)
2. Asíncrono de doble velocidad (frecuencia base/8)
3. Síncrono como maestro (frecuencia base/2)
4. 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 BAUD RATE
MODO BAUD-RATE UBRR
f OSC f OSC
Normal asíncrono BAUD  UBRR0  1
16UBRR0  1 16BAUD
f OSC f OSC
Asíncrono a doble velocidad BAUD  UBRR0  1
8UBRR 0  1 8BAUD

f OSC f OSC
Síncrono maestro BAUD  UBRR0  1
2UBRR 0  1 2 BAUD

 BAUDRATE Re al 
Error [%]  100%    1
 BAUDRATE 

74
RAZONES DE TRANSMISIÓN TÍPICAS
fosc = 1.0 MHz fosc = 1.8432 MHz fosc = 8.0 MHz
Baud
Rate Normal Doble Vel. Normal Doble Vel. Normal Doble Vel.
(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 75


-3.5 %

MAX 62 500 bps 125 000 bps 115 200 bps 230 400 bps 500 000 bps 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:

fOSC
f XCK 
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 Y ESTADO

REGISTRO UCSR0A

BANDERAS

RXC0 TXC0 UDRE0 FE0 DOR0 PE0 U2X0 MPCM0

Bit 7 – RXC0 : USART0 Receive Complete. Indica que hay un dato por
recepción. Puede generar una interrupción. Se limpia al leer al buffer de
entrada (UDR0).

Bit 6 – TXC0: USART0 Transmite Complete. 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: USART0 Data Register Empty. Indica que el registro


UDR0 está vacío. También puede generar interrupción.
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. 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.

 Bit 2 – PE0: Parity Error. Error de paridad en el dato recibido.

 Bit 1 - U2X0: Double the USART Transmission Speed. En operaciones


asíncronas duplica la velocidad de transmisión.

 Bit 0 – MPCM0: Multiprocessor Communication Mode. Habilita un


modo de comunicación entre multiprocesadores, bajo un esquema maestro-
esclavos.

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 con otros
dos bits de UCSRC determinan el tamaño de los datos.

 Bit 1 - RXB80: 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

 Bit 0 - TXB80: También para datos de nueve bits,


para ubicar al bit mas significativo al transmitir. Su
valor debe definirse antes de escribir en UDR0.

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 al bit de
paridad.
UPM01 UPM00 Configuración
0 0 Sin bit de paridad
0 1 Reservado
1 0 Paridad Par
1 1 Paridad Impar

 Bit 3 – USBS0: Stop Bit Select. Selecciona el número de bits de


paro.
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 Tamaño de los datos
0 0 0 5 bits
0 0 1 6 bits
0 1 0 7 bits
0 1 1 8 bits
1 0 0 Reservado
1 0 1 Reservado
1 1 0 Reservado
1 1 1 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
85
1 Flanco de bajada Flanco de subida
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

PORTB
 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

Generador SCK
de reloj
Unidad
Memoria,
Memoria, Unidad Registro de
MOSI
Registro de de
7 ... 3 2 1 0 7 ... 3 2 1 0 control CPU,
CPU, de control etc.
etc. SPI desplazamiento desplazamiento SPI
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 MISO

REGISTRO DE DATOS ( SPDR) M

MSB LSB M

CONTROL LÓGICO
DE LOS PINES
MOSI
REGISTRO DE DESPLAZAMIENTO (8 BITS) S

BUFFER PARA LECTURA DEL DATO

Reloj S
CLK I/O SCK

LOGICA M
DIVISOR DEL RELOJ
/2 /4 /8 /16 /32 /64 /128 SS
BUS DE DATOS

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ío-
recepció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 habilitan 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 reloj
(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 CPOL CPHA Descripción


0 0 0 Espera en bajo, muestrea en el primer flanco
1 0 1 Espera en bajo, muestrea en el segundo flanco
2 1 0 Espera en alto, muestrea en el primer flanco
3 1 1 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 ...

96
c) Modo 2: CPOL = 1, CPHA = 0 d) Modo 3: CPOL = 1, CPHA = 1
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
ATMega328 ATMega328 ATMega328

SCK (PB5) SCK (PB5) SCK (PB5)


Maestro
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)
7 6 5 4 3 2 1 0
0x0D 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 98
como Esclavo.
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 SPR1 SPR0 Frecuencia de SCK


0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
99
1 1 0 fosc/32
1 1 1 fosc/64
Registro de estado (SPSR)
7 6 5 4 3 2 1 0
0x0E 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). ATMega328

SCK (PB5)
MISO (PB4)

PORTD
MOSI (PB3)

SS (PB2)

ATMega328 Esclavo 1
ATMega328

(PB5) SCK SCK (PB5)

(PB4) MISO MISO (PB4)


PORTD
DATO

PORTD
(PB3) MOSI MOSI (PB3)

(PB2) SS SS (PB2)

PB1
PB0
PC0
Esclavo 2
SEL.

PC1 ATMega328

SCK (PB5)
PC2
MISO (PB4)
PORTD

Maestro MOSI (PB3)

SS (PB2) 101

Esclavo 0
EJEMPLO 12: MANEJO 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 transmisió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 DATOS

 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
PAQUETES 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 ACK
SDA

SCL
INICIO 1 2 7 8 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
PAQUETES 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
PAQUETES 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
MSB LSB ACK
SDA desde el
transmisor

SDA desde el
receptor

SCL desde el
maestro
1 2 7 8 9

110
PAQUETES COMPLETOS:
DIRECCIÓN Y DATOS

Dirección Dato
MSB LSB R/W ACK MSB LSB ACK
SDA

SCL
INICIO 1 2 7 8 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-MAESTROS
 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-MAESTROS
 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 A =/ SDA, el maestro A
pierde la arbitración
SDA del
maestro A

SDA del
maestro B

SDA en el
BUS

Linea SCL 113


(sincronizada)
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 SDA
ORGANIZACIÓN DE LA
Control de
Filtro
Control de
Filtro
INTERFAZ TWI
Slew-rate Slew-rate

Unidad de Interfaz con el Bus Generador de Bit Rate

Control de Supresión
Pre-escalador
INICIO/PARO de ruido

Detector para Registro de desp. Registro de


Ack
arbitración dir/dato (TWDR) Bit Rate (TWBR)

Unidad de Comparación de Dirección Unidad de Control


Registro de Dirección Registro de Estado Registro de Control
(TWAR) (TWSR) (TWCR)

Comparador de Máquina de estados


dirección y control

115
GENERADOR DE BIT RATE
 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 TWPS0 Valor de pre-escala


0 0 1
0 1 4
1 0 16
1 1 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 el 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 6 5 4 3 2 1 0
TWA6 TWA5 TWA4 TWA3 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 respuestas 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.
119
 Ocurrió una condición de PARO o INICIO REPETIDO,
mientras estaba direccionada como Esclavo.
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 5 4 3 2 1 0
TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE TWAR

 Bit 7:1 – TWA[6:0] Bits de dirección (como Esclavo).


 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 2 1 0
TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE TWCR

 Bit 7 – TWINT: Bandera de interrupción.


 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.
 El MCU genera una condición de INICIO y se vuelve Maestro (si
el bus está libre). El bit debe limpiarse por software.
 Bit 4 – TWSTO: TWI Stop.
 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.
 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.
 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 1 0
TWS7 TWS6 TWS5 TWS4 TWS3 - TWPS1 TWPS0 TWSR

 Bits 7:3 – TWS[7:3] Bits de estado de la interfaz TWI.


 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 TWPS0 Valor de pre-escala


0 0 1
0 1 4
125
1 0 16
1 1 64
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

Dispositivo 1 Dispositivo 2
Dispositivo 3 ..... Dispositivo n
Maestro Esclavo R1 R2
Transmisor Receptor

SDA

SCL

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 TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE


valor 1 X 0 1 X 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 Posibles acciones a realizar en la


Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado
Una condición de INICIO ha sido
0x08 1. Transmitir SLA+W, recibir ACK o nACK
transmitida
1. Transmitir SLA+W, recibir ACK o nACK
Una condición de INICIO REPETIDO ha
0x10 2. Transmitir SLA+R, conmutar la interfaz a
sido transmitida
MR
Se ha transmitido una SLA+W y recibido
0x18
un ACK 1. Transmitir un byte de datos, recibir ACK
Se ha transmitido una SLA+W y recibido o nACK
0x20
un nACK 2. Transmitir un INICIO REPETIDO
Se ha transmitido un byte de datos y 3. Transmitir una condición de PARO
0x28
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
0x30
recibido un nACK
1. Liberar al bus, únicamente limpiando a
Se ha perdido una arbitración al enviar la bandera TWINT
0x38
una SLA o un byte de datos 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 establec er 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

Dispositivo 1 Dispositivo 2
Dispositivo 3 ..... Dispositivo n
Maestro Esclavo R1 R2
Receptor Transmisor

SDA 132

SCL
 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 TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE
valor 1 1 0 0 X 1 0 X

 Una respuesta sin reconocimiento (nACK) indica al esclavo


que será el último dato recibido.
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE
valor 1 0 0 0 X 1 0 X

133
 Después de ello, el maestro debe establecer una condición de
paro o inicio repetido.
Estados posibles en el modo Maestro Receptor

Código de Posibles acciones a realizar en la


Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado
Una condición de INICIO ha sido
0x08 1. Transmitir SLA+R, recibir ACK o nACK
transmitida
1. Transmitir SLA+R, recibir ACK o nACK
Una condición de INICIO REPETIDO ha
0x10 2. Transmitir SLA+W, conmutar la interfaz
sido transmitida
a MR
1. Liberar al bus, únicamente limpiando a
Se perdió una arbitración al enviar una la bandera TWINT
0x38
SLA+R o se envió un nACK 2. Transmitir una condición de INICIO,
cuando el bus esté libre
Se ha transmitido una SLA+R y recibido 1. Recibir un byte de datos y dar
0x40
un ACK respuesta con un ACK (TWEA = 1)
Se ha recibido un byte de datos y 2. Recibir un byte de datos y dar
0x50
respondido con un ACK respuesta con un nACK (TWEA = 0)
Se ha transmitido una SLA+R y recibido 1. Transmitir un INICIO REPETIDO
0x48
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
0x58
respondido con un nACK seguida de una condición de INICIO
Modo Esclavo Receptor
Vcc

Dispositivo 1 Dispositivo 2
Dispositivo 3 ..... Dispositivo n
Esclavo Maestro R1 R2
Receptor Transmisor

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 TWEA TWSTA TWSTO TWWC TWEN - TWIE


Valor 0 1 0 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 maestro no recibirá
reconocimientos.

137
Estados posibles en el modo Esclavo Receptor
Código de Posibles acciones a realizar en la
Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado
Se ha direccionado como Esclavo con una
0x60
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
Se ha direccionado como Esclavo con una GCA
0x70
y enviado un ACK 1. Recibir un byte de datos y regresar
Se perdió una arbitración en una SLA+R/W un ACK (TWEA = 1)
0x78 como Maestro, se ha direccionado como 2. Recibir un byte de datos y regresar
esclavo con una GCA y enviado un ACK 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
138
direccionado con GCA
Código de Posibles acciones a realizar en la
Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado
Se ha recibido un byte de datos y
1. Conmutar a un modo de Esclavo no
0x88 respondido con un nACK, previamente se
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 GCA (TWEA = 0)
0x98 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
Se ha recibido una condición de PARO o GCA y enviar un bit de inicio, cuando el
0xA0 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
Dispositivo 3 ..... Dispositivo n
Esclavo Maestro R1 R2
Transmisor Receptor

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 Posibles acciones a realizar en la


Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado
Se ha direccionado como Esclavo con una
0xA8
SLA+R y enviado un ACK
Se perdió una arbitración en una 1. Transmitir un byte de datos y recibir
SLA+R/W como Maestro, se ha ACK
0xB0
direccionado como esclavo con una 2. Transmitir un byte de datos y recibir
SLA+R y enviado un ACK nACK
Se transmitió un byte de datos en TWDR
0xB8
y se recibió un ACK

142
Código de Posibles acciones a realizar en la
Estado del bus y de la interfaz serial
Estado interfaz, en respuesta al estado

Se transmitió un byte de datos en TWDR


0xC0
y se recibió un nACK
1. Limpiar la bandera TWINT
2. Desactivar la interfaz para no
reconocer su propia SLA o la GCA
Se transmitió el último byte de datos en
0xC8
TWDR (TWEA = 0) y 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 del bus y de la Posibles acciones a realizar en la interfaz, en
Estado interfaz serial respuesta al estado
No hay información relevante
0xF8 1. Esperar o proceder con la siguiente transferencia
disponible, TWINT = 0
1. Sólo el hardware interno es afectado. El bit
Error en el bus, debido a una
TWSTO debe ser puesto en alto, pero no se envía
0x00 condición ilegal de INICIO o
una condición de PARO en el bus. El bus es
PARO
liberado y el bit TWSTO es limpiado.

 Un error puede deberse a una posición ilegal de 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. 145

 La direcció 0 será para difusión.


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 Reconocimiento Reconocimiento


de Esclavo de Esclavo de Esclavo

S Dir. de Esclavo 0 A Dir. de Acceso A Dato a escribir A P

n bytes
Maestro Auto-incrementa
Transmisor la dirección de
acceso

Escritura en la RAM
146
Reconocimiento Reconocimiento Reconocimiento
de Esclavo de Esclavo de Esclavo

S Dir. de Esclavo 0 A Dir. de Acceso A S Dir. de Esclavo 1 A

Maestro Maestro
Transmisor Receptor

Reconocimiento Sin reconocimiento


del Maestro del Maestro

Dato leído 0 Dato leído 1 P

Lectura de la RAM n - 1 bytes


Auto-incrementa
último byte
la dirección de
acceso

 Considere una memoria PCF8570 con dirección 0x50, realice


una función que escriba n bytes en la memoria y una función
que lea n bytes de la memoria (sin interrupciones).
 Las funciones regresarán 0x00 si el acceso se realizó con
éxito y el código de error en caso contrario.
147

You might also like