Story Transcript
Ejemplos-Interface I2C: TC74
BUS I2C: IMPLEMENTACIÓN PRÁCTICA CON MICROCONTROLADORES PIC TC74: Termómetro digital
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
1
Ejemplos-Interface I2C: TC74
Ventajas del BUS I2C • Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995 se definió un modo rápido de funcionamiento que permitía transferencias de hasta 400kbit/s (esas frecuencias se han superado hoy en día y algunos dispositivos llegan a 4MHz). • Presenta una transferencia “lenta” en comparación con el modo SPI y mucho más con la lectura/escritura directa de los puertos de un microcontrolador • Es útil y se emplea en muchas aplicaciones en las que la velocidad de transferencia es mucho mayor de lo que el caso requiere (p.e. Medida de temperaturas con constantes de tiempo de segundos) • Su principal ventaja, es que una vez disponible el microcontrolador con sus funciones de interface con bus I2C, la inclusión de un dispositivo I2C adicional sólo necesitaría su conexión a las dos líneas del bus (SDA y SCL que son las mismas para todos) y asignarle una dirección. Los intercambios se realizarían utilizando los mismos subprogramas para todos • La tensión de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de “drivers” de adaptación de tensión externos (integración en los propios dispositivos) Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
2
Ejemplos-Interface I2C: TC74
Algunos C.I. con bus I2C: • Convertidores D/A: MAX518 (DIP8 ó SO-8) de Maxim • Convertidores A/D y D/A: PCF8591 (DIP16 ó SO-16) de Philips • Sensores de Temperatura: TC74 (TO-220 ó SOT-23) de Microchip • EEPROM serie: 24Cxx ó 24LCxx (DIP8 ó SO-8) de Microchip • Reloj/Calendario de tiempo real (RTC): X1288 (SOIC-14) de Xicor, DS1629 • LCD con Driver: TTR6030 (PCB con 4 pines) • Otros Microcontroladores: PCA8516 de Philips para LCDs Al margen de su compatibilidad con el bus I2C, cada dispositivo tiene su propia configuración, con sus registros internos, sus comandos, sus estados, etc. que será preciso conocer en sus hojas de características funcionales particulares Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
3
Ejemplos-Interface I2C: TC74
Sensor de Temperatura (TC74) • Combinación de sensor de Tª, conversor A/D de 8 bits e interface I2C en un solo C.I. • Siempre será dispositivo esclavo y estará recibiendo o emitiendo datos cuando se lo solicite el Maestro del bus • Dirección asignada en I2C como esclavo: 1-0-0-1-1-0-1
(hay otras 7 direcciones distintas que se podrían asignar bajo pedido a Microchip)
Tipos de encapsulados y pines de conexión En TO-220 la cápsula exterior está conectada a masa (GND) Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
4
Ejemplos-Interface I2C: TC74
C.I. Sensor de Temperatura TC74 1. Funcionalidad: ¿Qué puede hacer y para qué puede servir? Medida de temperatura: de -65ºC a 127ºC Precisión de ±2ºC de +25ºC a 85ºC y ±3ºC de 0ºC a 125ºC Resolución de 8 bits: 1ºC Proporciona valor en binario y valores negativos en complemento a 2 Tensión de alimentación: 2,7V a 5,5V Consumo “en operación” de 200 µA y “en standby” de 5 µA 2. Interface: ¿Cómo nos comunicamos con él desde un microcontrolador? Es esclavo de un bus I2C Tiene una dirección asignada en el bus Tramas de lectura y escritura en I2C Comandos admitidos y formatos conocidos especificados a continuación
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
5
Ejemplos-Interface I2C: TC74
TC74: Diagrama de Bloques Funcional
No precisa de componentes externos para funcionar (Sólo la tensión de alimentación)
Microcontroladores PIC
Conversor A/D
©Fernando Nuño-ATE-Universidad de Oviedo
Líneas de datos (SDA) y de reloj (SCL) del bus I2C
6
Ejemplos-Interface I2C: TC74
Funcionamiento: MEDIDA DE LA TEMPERATURA • El integrado realiza la adquisición y conversión de temperaturas mediante un sensor de estado sólido con una resolución de ±1ºC • En modo de operación normal, se toman y convierten 8 muestras por segundo y el resultado de la conversión se almacena en un registro interno al que se puede acceder en cualquier momento vía serie mediante el bus I2C • El C.I. se puede situar en modo de bajo consumo (Stand-by) en el que se suspende la adquisición de temperatura y queda retenido en el registro interno el resultado de la última conversión. • Internamente existe un registro de configuración (CONFIG) donde hay un bit (SHDN) que establece el modo de trabajo: normal (SHDN a 0) o de bajo consumo (SHDN a 1) • El registro de configuración interno se puede escribir y se puede leer, mientras que el registro de temperatura sólo puede ser leído • Las lecturas y escrituras siguen las tramas típicas en un bus I2C Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
7
Ejemplos-Interface I2C: TC74
Interface I2C del TC74 • Esclavo de un bus I2C con una dirección preestablecida: 1001101, no podrían convivir más de un TC74 en el mismo bus salvo que le encarguemos a Microchip sensores con otras direcciones bajo pedido: 1001xxx posibles direcciones • Interface a dos hilos: SCL entrada del reloj generado por el Maestro del bus y SDA entrada o salida de datos en función del sentido establecido por el maestro tras un byte de control inicial • La máxima frecuencia de reloj de entrada admitida por el dispositivo es de 100kHz • Las tramas de comunicación siempre se inician de manera idéntica: Bit de START Byte de Control con la dirección del TC74 seguido de bit 0 (escritura) ó 1 (lectura) Bit de ACK por parte del TC74 … lo que sigue ya depende del comando en particular
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
8
Ejemplos-Interface I2C: TC74
Tramas: Escritura de un byte en registro SDA: S
1
0 0
bit de Start
SDA:
1
1
0
1
0 ACK C7 C6 C5 C4 C3 C2 C1 C0 ACK
Dirección del TC74 como Esclavo en I2C
R/W
Los bits del COMANDO (sólo hay 2 posibles)
D7 D60 D5 0 D41 D31 D20 D11 D00 ACK P D7 bit de Stop
Dato a escribir en el registro indicado por el comando
COMANDOS POSIBLES: RTR=0x00 Leer Registro Temperatura RWCR=0x01 Leer/Escribir Configuración
En “amarillo” lo que tiene que poner el Maestro: el microcontrolador En azul lo que pondrá el Esclavo: TC74 En este caso sólo tendría sentido ESCRIBIR CONFIGURACIÓN (comando RWCR=0x01) Microcontroladores PIC
9
©Fernando Nuño-ATE-Universidad de Oviedo
Ejemplos-Interface I2C: TC74
Tramas: Lectura de un byte de un registro SDA: S
1
0 0
bit de Start
SDA:
Sr
bit de Restart
1
1
0
1
0 ACK C7 C6 C5 C4 C3 C2 C1 C0 ACK
Dirección del TC74 como Esclavo en I2C 1
0 0
1
1
0
Dirección del TC74 como Esclavo en I2C
1
R/W 1
Los bits del COMANDO (sólo hay 2 posibles)
ACK b7 b6 b5 b4 b3 b2 b1 b0 R/W
ACK P
Dato presente en el registro especificado por el comando
En “amarillo” lo que tiene que poner el Maestro: el microcontrolador En azul lo que pondrá el Esclavo: TC74
Stop
bit de NOACK
Con la primera parte de la trama (línea superior) se indica a qué registro se desea acceder (dependerá del comando: RTR ó RWCR) y con la segunda parte de la trama (segunda línea) se realiza la lectura del byte Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
10
Ejemplos-Interface I2C: TC74
Tramas: Otra posible Lectura de un registro Existe una manera “más corta” de leer un determinado registro, siempre y cuando el registro a leer sea al que se hizo referencia en el último comando que se escribió en el TC74: SDA:
S
1
0 0
1
1
0
Dirección del TC74 como Esclavo en I2C
bit de Start
1
1
ACK b7 b6 b5 b4 b3 b2 b1 b0 R/W
ACK P
Dato presente en el registro Stop especificado en el último comando que se bit de utilizó NOACK
Si se desean recoger sucesivos valores de temperatura, sería suficiente con haber “escrito” al principio un comando de lectura de temperatura (RTR = 0x00) y luego se podría proceder a leer los valores almacenados en el registro enviando sucesivas tramas como la mostrada arriba Microcontroladores PIC
11
©Fernando Nuño-ATE-Universidad de Oviedo
Ejemplos-Interface I2C: TC74
Registros internos: Registro de Configuración b7
b6
b5
b4
b3
b2
b1
Bit de Standby
Data Ready
Reservados (se leen como 0)
Lect./Escrit.
Sólo lectura
N/A
b0
Bit de Standby:
si está a 1 sitúa al C.I. en bajo consumo, sin realizar conversiones, si a 0 en modo normal
Data Ready:
valor de temperatura disponible en el registro si está a 1 el bit estará a cero al alimentar el C.I. antes de que se haga la primera conversión y también cuando está en modo standby
Tras un “Power On Reset”, el registro arranca con el valor 0x00, por tanto en modo normal
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
12
Ejemplos-Interface I2C: TC74
Registros internos: Registro de temperatura b7
b6
b5
b4
b3
b2
b1
b0
Nos proporciona el valor en binario resultante de la última conversión A/D, cada unidad representa un grado centígrado Tras un POR, se carga con 0x00 hasta que finalice la primera conversión, se sabe porque el bit DataReady del registro CONFIG pasa a 1 El formato de representación es el de complemento a 2 00011001 bit más significativo a 0: nº positivo valor: 00011001 -> 25
11100111 bit más significativo a 1: nº negativo módulo: complemento a 2 del nº 00011001 -> 25 Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
13
Ejemplos-Interface I2C: TC74
Posición del Sensor de Temperatura TC74 en PICDEM2 plus
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
14
Ejemplos-Interface I2C: TC74
Propuesta de EJERCICIO: Realizar un programa que reciba la temperatura medida por el TC74 y la muestre en la primera línea del LCD conectado a la placa de prácticas PICDEM2 plus 4MHz
LCD con driver HD44780 T = 23 º C
PORTD
PIC16F877
RC3
RC4
SCL
E RW RS
RA3 RA2 RA1
Se necesitarán: • Subprogramas de interface con el LCD S2_LCD4B_P2P.ASM
SDA
• Subprogramas de interface I2C MSSP_I2C.ASM
TC74
• Subpr. de conversión de binario a BCD Microcontroladores PIC
15
©Fernando Nuño-ATE-Universidad de Oviedo
Ejemplos-Interface I2C: TC74
Trama para Lectura de la Temperatura SDA: S
1
0 0
bit de Start
SDA:
Sr
bit de Restart
1
1
0
1
0 ACK
Dirección del TC74 como Esclavo en I2C 1
0 0
1
1
0
Dirección del TC74 como Esclavo en I2C
1
R/W 1
0
0
0
0
0
0
0
0
Los bits del COMANDO
ACK b7 b6 b5 b4 b3 b2 b1 b0 R/W
ACK
ACK P
Dato en el registro de temperatura
Stop bit de NOACK
En “amarillo” lo que tiene que poner el Maestro: el microcontrolador PIC En azul lo que pondrá el Esclavo: TC74
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
16
Ejemplos-Interface I2C: TC74
Trama de Lectura de Temperatura : Lectura de Temperatura con secuencia de subprogramas a llamar para I2C
• Generación de bit de start
B_START
• Envío de dirección de esclavo con bit R/W=0
TX
• Envío del comando RTR = 0x00
TX
• Envío de bit de restart
B_RESTART
• Envío de dirección de esclavo y bit R/W=1 • Recoger byte del bus
RX
• Generar bit de NOACK
B_NOACK
• Generar bit de STOP
Microcontroladores PIC
TX
B_STOP
©Fernando Nuño-ATE-Universidad de Oviedo
17
Ejemplos-Interface I2C: TC74
Trama: Otra posible Lectura de Temperatura
SDA: bit de Start
S
1
0 0
1
1
0
Dirección del TC74 como Esclavo en I2C
1
1
ACK b7 b6 b5 b4 b3 b2 b1 b0 R/W
ACK P
Dato presente en el registro Stop de temperatura (si fue el último bit de al que se accedió) NOACK
Si se desean recoger sucesivos valores de temperatura, sería suficiente con haber “escrito” al principio un comando de lectura de temperatura (RTR = 0x00) y luego se podrían leer los valores de temperatura enviando sucesivas tramas como la mostrada arriba Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
18
Ejemplos-Interface I2C: TC74
Ejemplo de Trama: Lectura “corta” de Temperatura con secuencia de subprogramas a llamar para I2C
• Generación de bit de start
B_START
• Envío de dirección de esclavo y bit R/W=1 • Recoger byte del bus • Generar bit de NOACK • Generar bit de STOP
Microcontroladores PIC
©Fernando Nuño-ATE-Universidad de Oviedo
TX
RX B_NOACK B_STOP
19