Comunicacion i2c Con Pbp

4
------------------------ Microcontroladores PIC Programación en BASIC ------------------------ 152 5.9.11. COMUNICACIÓN SERIAL SICRÓNICA I²C. Muchos de los dispositivos electrónicos que se encuentran comúnmente en una tarjeta electrónica, incluyen circuitos integrados con el bus I²C desarrollado por PHILIPS, como por ejemplo las memorias 24CXX, los procesadores de señal, codificadores de video, sensores de temperatura, RTC (reloj en tiempo real), sensores ultrasónicos, etc. El bus I²C (Inter Integrated Circuit) o interconexión de circuitos integrados necesita sólo 2 líneas para transmitir y recibir datos, estos son: para datos (SDA) y para la señal de reloj (SCL), esta forma de comunicación utiliza una sincronía con un tren de pulsos que viaja en la línea SCL, de tal manera que en los flancos negativos se revisan los datos RX o TX. Ver figura 5.9.12.2., su velocidad de transmisión pueden ser de 100Kbits/seg. en el modo standard, 400Kbits/seg. en el modo rápido y 3,4Mbits/seg. en alta velocidad. Cada dispositivo conectado al bus tiene un código de dirección seleccionable mediante software, por lo que existe una relación permanente Master/Slave. El Master es el dispositivo que inicia la transferencia en el bus y genera la señal de reloj (SCL), y el Slave es el dispositivo direccionado, sin embargo cada dispositivo reconocido por su código (dirección), puede operar como transmisor o receptor de datos, ya que la línea (SDA) es bidireccional. 5.9.12. COMUNICACIÓN I²C CON UNA MEMORIA SERIAL 24LC04B. Esta es una práctica muy básica para aprender sobre la interfaz I²C, consiste en guardar datos en las cuatro primeras direcciones de la memoria serial, estas son utilizadas para el almacenamiento de datos que pueden ser necesitados más adelante. Para el caso de la memoria 24LC04B tiene un espacio de memoria de 4Kbytes, luego de almacenarlos los volveremos a leer y mostrar en la pantalla de un LCD. Referencia Capacidad Ciclos de E/W Bloques internos Dirección Cantidad de disposit. en el bus Voltaje de operación A0 A1 A2 24LC01B 1K bits 1,000.000 1 1-0 1-0 1-0 8 2,5-5,5V. 24LC02B 2K bits 1,000.000 1 1-0 1-0 1-0 8 2,5-5,5V. 24LC04B 4K bits 1,000.000 2 X 1-0 1-0 4 2,5-5,5V. 24LC08B 8K bits 1,000.000 4 X X 1-0 2 2,5-5,5V. 24LC016B 16K bits 1,000.000 8 X X X 1 2,5-5,5V. Figura 5.9.12.1. Tabla de las capacidades de las memorias EEPROM y su direccionamiento, en nuestro caso sólo podemos poner hasta 4 memorias seriales en una red I²C. El principio de funcionamiento es el siguiente: primero se envía el start bit (bit de arranque) cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra transferida debe contener la dirección del esclavo seleccionado, en este caso se envía el código de la memoria 1010 (este dato lo suministra el fabricante), luego la dirección del dispositivo (A2, A1, A0), y un bit 0 indicando que se desea escribir en la memoria (1=lectura), luego de todo esto la memoria debe enviar un reconocimiento para informarle al microcontrolador que recibió la información, este acuse de recibo se denomina ACK (acknowledge). Luego el Master lee el ACK, si vale 0 (enviado por el esclavo), el proceso de transferencia continúa. Si vale 1, esto indica que el circuito direccionado no valida la

Transcript of Comunicacion i2c Con Pbp

Page 1: Comunicacion i2c Con Pbp

------------------------ Microcontroladores PIC Programación en BASIC ------------------------ 152

5.9.11. COMUNICACIÓN SERIAL SICRÓNICA I²C. Muchos de los dispositivos electrónicos que se encuentran comúnmente en una tarjeta electrónica, incluyen circuitos integrados con el bus I²C desarrollado por PHILIPS, como por ejemplo las memorias 24CXX, los procesadores de señal, codificadores de video, sensores de temperatura, RTC (reloj en tiempo real), sensores ultrasónicos, etc. El bus I²C (Inter Integrated Circuit) o interconexión de circuitos integrados necesita sólo 2 líneas para transmitir y recibir datos, estos son: para datos (SDA) y para la señal de reloj (SCL), esta forma de comunicación utiliza una sincronía con un tren de pulsos que viaja en la línea SCL, de tal manera que en los flancos negativos se revisan los datos RX o TX. Ver figura 5.9.12.2., su velocidad de transmisión pueden ser de 100Kbits/seg. en el modo standard, 400Kbits/seg. en el modo rápido y 3,4Mbits/seg. en alta velocidad. Cada dispositivo conectado al bus tiene un código de dirección seleccionable mediante software, por lo que existe una relación permanente Master/Slave. El Master es el dispositivo que inicia la transferencia en el bus y genera la señal de reloj (SCL), y el Slave es el dispositivo direccionado, sin embargo cada dispositivo reconocido por su código (dirección), puede operar como transmisor o receptor de datos, ya que la línea (SDA) es bidireccional. 5.9.12. COMUNICACIÓN I²C CON UNA MEMORIA SERIAL 24LC04B. Esta es una práctica muy básica para aprender sobre la interfaz I²C, consiste en guardar datos en las cuatro primeras direcciones de la memoria serial, estas son utilizadas para el almacenamiento de datos que pueden ser necesitados más adelante. Para el caso de la memoria 24LC04B tiene un espacio de memoria de 4Kbytes, luego de almacenarlos los volveremos a leer y mostrar en la pantalla de un LCD.

Referencia

Capacidad

Ciclos de

E/W

Bloques internos

Dirección Cantidad de disposit.

en el bus

Voltaje de

operación A0 A1 A2

24LC01B 1K bits 1,000.000 1 1-0 1-0 1-0 8 2,5-5,5V.

24LC02B 2K bits 1,000.000 1 1-0 1-0 1-0 8 2,5-5,5V.

24LC04B 4K bits 1,000.000 2 X 1-0 1-0 4 2,5-5,5V.

24LC08B 8K bits 1,000.000 4 X X 1-0 2 2,5-5,5V.

24LC016B 16K bits 1,000.000 8 X X X 1 2,5-5,5V.

Figura 5.9.12.1. Tabla de las capacidades de las memorias EEPROM y su direccionamiento, en

nuestro caso sólo podemos poner hasta 4 memorias seriales en una red I²C.

El principio de funcionamiento es el siguiente: primero se envía el start bit (bit de arranque) cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra transferida debe contener la dirección del esclavo seleccionado, en este caso se envía el código de la memoria 1010 (este dato lo suministra el fabricante), luego la dirección del dispositivo (A2, A1, A0), y un bit 0 indicando que se desea escribir en la memoria (1=lectura), luego de todo esto la memoria debe enviar un reconocimiento para informarle al microcontrolador que recibió la información, este acuse de recibo se denomina ACK (acknowledge).

Luego el Master lee el ACK, si vale 0 (enviado por el esclavo), el proceso de transferencia continúa. Si vale 1, esto indica que el circuito direccionado no valida la

Page 2: Comunicacion i2c Con Pbp

------------------------ Microcontroladores PIC Programación en BASIC ------------------------ 153

comunicación, entonces el Maestro genera un bit de stop para liberar el bus I²C, en la cual las líneas SDA y SCL pasan a un estado alto, vamos a suponer que el ACK es 0, entonces el microcontrolador envía los 8 bits correspondientes a la posición de memoria que se desea escribir o leer, nuevamente la memoria envía un reconocimiento, finalmente se envía el dato a ser almacenado y se espera la respuesta de la memoria indicando que el dato llegó correctamente, finalmente se debe enviar el bit de parada.

Como en nuestra práctica vamos a almacenar la palabra HOLA, vamos a suponer que ya guardamos las 3 primeras letras, la H en la dirección 0, la O en la dirección 1 y la L en la dirección 2, nos falta guardar la A en la dirección 3, esto se realizaría enviando pulsos de la siguiente manera:

Figura 5.9.12.2. Esquema de una transmisión completa con la interfaz I²C para guardar el

número 65 en la dirección 3 de una memoria serial 24LC04B. Noten que la dirección del CI. A2, A1, A0 es 000, lo que quiere decir que estos tres pines van conectados a tierra, según la tabla 5,9,12,1, se pueden instalar 4 dispositivos de memoria en un bus, estos son empezando por A2, A1 y A0 los siguientes: 00x, 01x, 10x y 11x, por ejemplo: 01x esta memoria debe tener conectado a 5 voltios el pin A1 y su control sería 10100100. LA DECLARACIÓN I2CWRITE Y I2CREAD. Estas declaraciones sirven para escribir y leer datos en un chip EEPROM serial usando una interfaz I²C de 2 hilos, funcionan en modo I²C Master y también puede ser utilizado para comunicarse con otros dispositivos de interfaz I²C como sensores de temperatura, reloj calendarios, conversores A/D, etc.

Page 3: Comunicacion i2c Con Pbp

------------------------ Microcontroladores PIC Programación en BASIC ------------------------ 154

Los 7 bits de control contienen el código de fábrica del chip y la selección del chip A2, A1, A0, el último bit es una bandera interna que indica si es un comando de lectura o escritura y no se debe usar. Por lo tanto el control para nuestro caso en lectura o escritura es %10100000.

Debido a que los pines SDA y SCL de la memoria 24LC04B son de colector abierto, estas deben ir conectadas con resistencias de 4,7 K pull-up, sin embargo existe una línea de comando que hace que no se necesite la resistencia pull-up del SCL, esta se debe agregar al comienzo del programa:

DEFINE I2C_SCLOUT 1 ; no es necesario resistencia pull-up en SCL (reloj)

También cabe indicar que existen algunas memorias que necesitan de un período de tiempo para poder ser grabadas, por lo que se adiciona un PAUSE 10 después de cada grabación.

Su estructura es de la siguiente manera:

I2CWRITE portb.6, portb.7, %10100000, 0, [65] ;almacenar en la dirección 0 el dato 65 PAUSE 10 ;pausa necesaria para completar la grabación

I2CWRITE pin dato, pin reloj, control, posición memoria, variable.

MATERIALES. -1 LCD 2 x 16 -1 resistencia de 4,7 K -1 resistencia de 10 -1 potenciómetro de 10 K -1 memoria serial 24LC04B de microchip o equivalente -1 switch selector de 3 pines.

Figura 5.9.12.3. Esquema de conexionado de una memoria 24LCXX a un PIC, el switch selector

permite proteger a la memoria de escrituras accidentales al colocar en R Read.

Page 4: Comunicacion i2c Con Pbp

------------------------ Microcontroladores PIC Programación en BASIC ------------------------ 155

En nuestro caso vamos a escribir y leer en la memoria, por lo que el pin WP debe estar colocado en estado bajo, una vez que se haya grabado se podrá colocar este pin en estado alto para proteger la memoria de futuras escrituras, los datos almacenados en esta memoria permanecen aún si se le corta la alimentación al CI. (no volátil), el acceso a estos datos se lo realiza las veces deseadas, recuerde que la memoria serial soporta 1,000.000 de ciclos de borrado y escritura, por lo tanto se debe tener cuidado de no ejecutar un programa que almacene una y otra vez el mismo dato.

Figura 5.9.12.4. memoria 24LCXX.pbp Programa para escribir y leer datos en un chip

EEPROM.

DEFINE I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL contro CON %10100000 ;contro contiene valor constante %10100000 PinSCL VAR Portb.7 ;pin señal de reloj I2C PinSDA VAR Portb.6 ;pin de datos I2C dato VAR BYTE ;variable para almacenar dato leído Inicio: LCDOUT $fe,1," Grabando..." ;limpiar y sacar el texto en LCD PAUSE 1000 I2CWRITE PinSDA,PinSCL,contro,0,["H"] ;guarda la H en posición 0 PAUSE 10 ;pause para la grabación I2CWRITE PinSDA,PinSCL,contro,1,["0"] ;guarda la O en posición 1 PAUSE 10 ;pause para la grabación I2CWRITE PinSDA,PinSCL,contro,2,["L"] ;guarda la L en posición 2 PAUSE 10 ;pause para la grabación I2CWRITE PinSDA,PinSCL,contro,3,["A"] ;guarda la A en posición 3 PAUSE 10 ;pause para la grabación LCDOUT $fe,1,"Leer memoria" ;limpiar y sacar el texto en LCD PAUSE 1000 LCDOUT $FE,1 ;limpiar pantalla del LCD leer: ;programa para leer la memoria serial. I2CREAD PinSDA,PinSCL,contro,0,[dato] ;leer la mem. 0 y guardar en dato LCDOUT, dato ;mostrar dato en el LCD PAUSE 1000 ;esperar 1 seg. I2CREAD PinSDA,PinSCL,contro,1,[dato] ;leer la mem. 1 y guardar en dato LCDOUT, dato ;mostrar dato en el LCD PAUSE 1000 ;esperar 1 seg. I2CREAD PinSDA,PinSCL,contro,2,[dato] ;leer la mem. 2 y guardar en dato LCDOUT, dato ;mostrar dato en el LCD PAUSE 1000 ;esperar 1 seg. I2CREAD PinSDA,PinSCL,contro,3,[dato] ;leer la mem. 3 y guardar en dato LCDOUT, dato ;mostrar dato en el LCD

END