You are on page 1of 2

Ejemplo comunicacin serie I2C entre un PIC y la memoria EEPROM 24LC256A

Detalles
ltima actualizacin el Mircoles, 05 Septiembre 2012 18:01 Escrito por Biblioman

En este ejemplo voy a mostrar lo fcil que es leer y grabar datos en una memoria EEPROM Externa desde un PIC utilizando el lenguaje C y el compilador CCS, concretamente la memoria a utilizar ser la 24LC256A fabricada por Microchip. Para empezar vamos a describir algunas caractersticas del nuevo componente que vamos a utilizar y cuyo patillaje tenis en la figura de abajo.

Esta es una memoria que tiene un tamao de 32 Kbytes, su estructura est organizada en palabras de 1 byte (8 bits) de longitud, por lo tanto dispondremos en total de 32x8=256 kbits para almacenar informacin. La caracterstica principal de esta memoria es que implementa el interfaz I2C para su comunicacin serie con otros dispositivos electrnicos. El protocolo I2C fue desarrollado por la empresa Philips, ahora llamada NXP, hace ya bastante tiempo impulsado por la necesidad en el mercado de establecer una interfaz que comunicara entre si varios dispositivos electrnicos y que ahorrara el mximo numero de patillas en los componentes, hay mucha informacin en la red sobre este protocolo por lo que solo voy ha citar a modo de resumen las caractersticas que considero mas relevantes acerca de este protocolo. Al final del artculo pondr los enlaces a varias fuentes para el que quiera profundizar en este protocolo de comunicacin.

Caractersticas bsicas del protocolo I2C


El bus de comunicacin utiliza dos cables. Uno para transmitir los datos (SDA) y otro para la seal de reloj (SCL). Ambas lneas se tienen que conectar a la alimentacin (Vcc) a travs de resistencias Pull-UP (en el esquema del ejemplo se muestra el conexionado). Adems la masa de los componentes que se interconexionan entre si debe de ser comn. El protocolo de comunicacin es del tipo Maestro-Esclavo, aunque el protocolo permite que haya varios maestros, lo normal es que solo haya uno, el dispositivo que hace de maestro es el que gobierna la comunicacin y es el que controla la seal de reloj (SCL). Los dispositivos que hacen de esclavos responden a las peticiones del maestro. Cada dispositivo conectado al bus se identifica por una nica direccin, el protocolo admite utilizar 7 10 bits para el direccionamiento, aunque lo normal es que sean siete.

Los cuatro primeros bits estn asignados al fabricante del dispositivo y los tres ltimos son configurables por hardware. En el caso de la memoria que estamos viendo el cdigo del fabricante es: 1010, como tenemos tres bits configurables podremos conectar entre si hasta ocho memorias 24LC256 juntas.

La trama de un mensaje simple donde el dispositivo que hace de maestro enva datos para ser escritos en la EEPROM sera el siguiente:

Se enva el bit de inicio (S) Se enva la direccin del esclavo, en este caso la memoria EEPROM Se enva un bit ms junto con la direccin del esclavo (R/W) para indicar que lo que se quiere es leer o escribir. Si este bit es cero el proceso ser de escritura. Despus el maestro manda un pulso de la seal de reloj, durante el cual el esclavo debe contestar con un ACK (seal de reconocimiento), si el maestro no recibe esta seal interrumpe la comunicacin. Despus se envan los bytes de direccin necesarios para identificar el registro de la EEPROM donde queremos realizar el proceso de escritura. Mandamos el dato que se almacenar en la EEPROM Y por ltimo se manda el bit de parada para finalizar la comunicacin.

Como se gestiona todo esto en C y con el compilador CCS?


CCS dispone de libreras especficas para gestionar la comunicacin I2C de determinados componentes, entre ellos algunas memorias EEPROM. Basta con incluir la librera correspondiente por medio de la directiva #include y utilizar sin ms las funciones de la librera. Pero si el componente que queremos utilizar no dispone del driver pertinente en CCS, tenemos otra opcin, que es desarrollar nuestro propio driver, para ello disponemos como ayuda de una directiva homologa a #use rs232 (options), se trata de #use i2c (options). Al incluir esta directiva el compilador nos permite utilizar las siguientes funciones para controlar la comunicacin serie I2C entre varios dispositivos: i2c_isr_state() i2c_poll() i2c_read() i2c_slaveaddr() i2c_start() i2c_stop() i2c_write()

Adems los pics que soportan este tipo de comunicacin disponen de modulos y registros especficos para facilitar la comunicacin I2C por hardware, lo mismo que tenamos con la comunicacin serie RS232. Como veis esto da pie a muchos ejemplos, ya que hay bastantes dispositivos (Relojes en tiempo real, convertidores A/D, expansin de puertos de E/S, LCDs, etc) que implementan esta interfaz, tambin tenemos la posibilidad de comunicar varios PICs entre si, uno haciendo de maestro y los otros de esclavos.

You might also like