You are on page 1of 7

Microprocesadores II Docente: Ing.

Roger Guachalla Narváez


xoroger@yahoo.es

PRACTICA 09: Interface Serial I2C – PIC18F4550


1. Objetivos
 Comprender el protocolo de comunicación de I2C
 Conectar una memoria EEPROM Serial Externa al PIC18F4550 a través del protocolo I2C
2. Interface I2C (Inter Integrated Circuits)

Introducción
El protocolo I2C Inter-Integrated Circuit es un protocolo que permite la comunicación de múltiples dispositivos "Esclavos”
a uno o más dispositivos "Maestros".

Al igual que el protocolo SPI, sólo se diseñó para comunicaciones a corta distancia entre dispositivos. Y tal como las
Interface Serial Asíncrona RS-232 sólo requiere dos cables de señal para intercambiar información.

Breve historia del I2C


I2C fue desarrollado originalmente en 1982 por Philips. La especificación original, permitía sólo comunicaciones de hasta
100kHz y proporcionaba únicamente direcciones de 7 bits, lo que limitaba el número de dispositivos en el bus a 112
debido a que existen varias direcciones reservadas.
En 1992, se publicó la primera especificación pública, añadiendo un modo rápido de 400kHz, así como una ampliación del
espacio de direcciones a 10 bits.
En la actualidad existen tres modos adicionales: Modo Rápido Plus a 1 MHz; Modo de alta velocidad a 3.4MHz; y el Modo
ultra-rápido, a 5 MHz. Sin embargo estos modos no son soportados por las librerías de MikroC y Arduino.

¿Por qué utilizar I2C?


Para entender la utilidad del protocolo I2C, primero hay que compararlo con las otras opciones disponibles para ver en
qué se diferencia.

¿Qué está mal con el puerto Serial RS-232?

Debido a que los puertos seriales son asíncronos (sin línea de reloj transmitida), los dispositivos que utilizan este
protocolo deben estar de acuerdo previamente en la velocidad de intercambio de datos. Ambos dispositivos también
deben tener relojes cercanos a esa velocidad. Si existieran diferencias mayores al 4% en las frecuencias de reloj en cada
extremo, esto hará que los datos sean ilegibles.
El puerto serial asíncrono requiere de un hardware dedicado USART en cada extremo, el cual es relativamente complejo
y difícil de implementar con exactitud en software si es necesario. Por lo menos un bit de Inicio y bit de Parada forman
parte de cada trama de datos, lo que significa que se requieren un mínimo de10 bits de tiempo de transmisión para cada
8 bits de datos.
Otra falencia básica de los puertos serie asíncronos es que están pensados para una comunicación entre dos, y sólo dos,
dispositivos. Si bien es posible conectar múltiples dispositivos a un solo puerto serie, la Contención de bus (en el que dos
dispositivos intentan usar la misma línea al mismo tiempo) es siempre un problema y debe ser tratado con cuidado para
evitar daños en los dispositivos, generalmente a través de hardware adicional externo.
Por último, la velocidad de datos es un problema. Si bien no hay límite teórico a las comunicaciones serie asíncronas, la
mayoría de los dispositivos UART sólo admiten un cierto conjunto de velocidades de transmisión estándar fijas, y la más
alta de ellas está alrededor de 230400 Bauds (bits por segundo).

¿Qué está mal con SPI?

La desventaja más evidente del protocolo SPI es el número de pines requeridos. Conectar un solo Maestro a un solo
Esclavo con un bus SPI requiere cuatro líneas y cada esclavo adicional requiere un pin de Selección de Esclavo adicional
en el Maestro.
La rápida proliferación de las conexiones de pines hace que no sea óptimo en situaciones en las que una gran cantidad de
Esclavos deben estar conectados a un Maestro. Además, el gran número de conexiones para cada dispositivo puede
hacer más difícil el enrutamiento en el diseño de placas de circuito impreso PCB.
SPI sólo permite un maestro en el bus, pero es compatible con un número arbitrario de esclavos (sujeto solamente a la
capacidad de entrega de corriente de los dispositivos conectados al bus y al número de pines de Selección de Esclavo
disponibles).
SPI es bueno para conexiones full-duplex de alta velocidad de datos pues permite velocidades de reloj de hasta 10 MHz
(10 millones de bits por segundo). El hardware en cada extremo es muy simple ya que solo requiere un registro de
desplazamiento, lo que permite una fácil implementación en software.

I2C – Lo mejor de ambos mundos

I2C requiere tan sólo dos cables, al igual que el puerto serial asíncrono, pero esos dos cables pueden soportar hasta 1008
dispositivos esclavos. Además, a diferencia de SPI, I2C puede soportar un sistema Multi-Maestro, lo que permite más de
un maestro para comunicarse con todos los otros dispositivos del bus (aunque los dispositivos Maestros no pueden
comunicarse entre sí a través del bus y deben esperar su turno para utilizar las líneas del bus).
La Velocidad de datos esta entre la del Serial Asíncrono y SPI; la mayoría de los dispositivos I2C pueden comunicarse de
100 kHz a 400 kHz.
Existe algo de sobrecarga con I2C; por cada 8 bits de datos a enviar, se debe añadir un bit más ("ACK / NACK")
El hardware necesario para implementar I2C es más complejo que SPI pero menos que del Serial Asíncrono y puede ser
implementado fácilmente en software.

I2C a nivel de hardware


Señales

Cada bus I2C consta de dos señales: SCL y SDA. SCL es la señal de reloj, y SDA es la señal de datos. La señal de reloj se
genera siempre por el Maestro que controla el bus; algunos dispositivos Esclavos pueden forzar el reloj al nivel bajo para
retrasar el envío de más datos del Maestro. Esto se conoce como " estiramiento de reloj".
A diferencia de las conexiones UART o SPI, las líneas del bus I2C son colector abierto , lo que significa que pueden poner
la línea a nivel Bajo, pero no a nivel Alto. Por lo tanto, no puede ocurrir contención en el bus, donde un dispositivo trata
de establecer la línea a nivel Alto, mientras que otro trata establecerla a nivel Bajo, eliminando el daño potencial a los
puertos o excesiva disipación de potencia en el sistema. Cada línea de señal tiene una resistencia pull-up , para restaurar
la señal a nivel Alto cuando no exista ningún dispositivo poniéndola a nivel Bajo.
La selección del valor de las resistencias pull-up varía con los dispositivos en el bus, pero una buena regla general es
comenzar con 4.7k. I2C es un protocolo bastante robusto, y se puede utilizar con longitudes de cable de 2m a 3m. Para
distancias más largas, o sistemas con una gran cantidad de dispositivos, valores de resistencias más pequeñas son
mejores.

Protocolo
La comunicación a través de I2C es más compleja que con un USART o con SPI. La señalización debe adherirse a un
protocolo determinado.

Los mensajes se dividen en dos tipos de trama:


 Trama de Dirección, donde el Maestro indica a cual Esclavo se envía el mensaje
 Una o más tramas de Datos, que son mensajes de datos de 8 bits se transmiten de Maestro a Esclavo o viceversa.
Los datos se colocan en la línea SDA después que SCL pasa a nivel bajo, y se muestrean después que SCL pasa a
nivel alto.

Condición de inicio
Para iniciar la trama de dirección, estando SDA y SCL en 1, el Maestro pone SDA en 0 antes que SCL. Esto pone a todos los
dispositivos Esclavos sobre aviso de que una transmisión está a punto de comenzar. Si dos dispositivos Maestros desean
tomar posesión del autobús a la vez, el Maestro que pone SDA a Bajo primero gana el control del Bus.

Trama de Dirección
El Maestro siempre envía primeramente la trama de dirección en cualquier nueva secuencia de comunicación. Para una
dirección de 7 bits, se envía el bit más significativo (MSB) en primer lugar, seguido de un bit R/_W que indica si se trata
de una operación de Lectura (0) o Escritura (1).
El bit noveno de la trama es el bit ACK/NACK tanto para las tramas de datos como para las de dirección. Una vez que se
envían los primeros 8 bits de la trama, el Esclavo toma control de SDA. Si el Esclavo no pone SDA en 0 antes del noveno
pulso de reloj, el Esclavo receptor, o bien no ha recibido los datos o no pudo procesar la instrucción. En ese caso, el
intercambio se detiene, y el Maestro debe decidir cómo proceder.

Tramas de Datos
Después que la trama de Dirección ha sido enviada, los datos pueden comenzar a ser transmitidos. El Maestro
simplemente continuará generando pulsos de reloj a intervalos regulares, y los datos serán colocados en SDA por el
Maestro o el Esclavo, dependiendo de si el bit R/_W indica una lectura o escritura. El número de tramas de datos es
arbitrario, y la mayoría de los dispositivos esclavos auto-incrementan el registro interno, lo que significa que la lectura o
escritura posterior se realizará en el siguiente registro.

Condición de Parada
Una vez que se han enviado todas las tramas de datos, el Maestro generará una condición de Parada. La condiciones de
Parada se define por una transición de 0 a 1 en SDA después de una transición 0 a 1 en SCL, manteniéndose SCL en 1.

Direcciones de 10 bits

En un sistema de direccionamiento de 10 bits, se requieren dos tramas para transmitir la dirección del Esclavo. La
primera trama estará formada por el código b11110xyz, donde "x" es el bit MSB (bit 9) de la dirección del Esclavo, “y” es
el bit 8, y “z” es el bit de Lectura/Escritura como se describió anteriormente.
El bit ACK de la primera trama será respondida por todos los esclavos que poseen estos dos primeros bits de Dirección.
Al igual que con una transferencia normal de 7 bits, otra transferencia se inicia inmediatamente, y esta contiene los
restante bits 7:0 de la Dirección. En este punto, el esclavo direccionado debe responder con un bit de ACK. Si no lo hace,
el modo de fallo es el mismo que un sistema de 7 bits.
Tenga en cuenta que los dispositivos de dirección de 10 bits pueden coexistir con los dispositivos de dirección de 7 bits,
ya que la codificación '11110' no forma parte de ninguna de Dirección de 7 bits válida.

Condición de Inicio Repetido


A veces, es importante que se permita a un Maestro intercambiar varios mensajes de una sola vez, sin permitir que otros
Maestro interfieran. Por esta razón se ha definido la condición de Inicio Repetido.
Para realizar un Inicio Repetido, se permite que SDA vaya a 1 mientras que SCL está en 0. Se permite que SCL vaya a 1,
y luego se pone SDA en 0 nuevamente mientras SCL está en 1. Debido a que no hubo una condición de Parada en el bus,
la comunicación previa no fue terminada y el Maestro mantiene el control del bus.
En este punto, el siguiente mensaje puede comenzar la transmisión. La sintaxis de este nuevo mensaje es el mismo que
cualquier otra transferencia -una trama de dirección seguida de tramas de datos. Se permite cualquier número de Inicios
Repetidos, y el Maestro mantendrá el control del bus hasta que este emita una condición de Parada.

3. MEMORIAS SERIALES 24Cxx


En algunos proyectos es necesario almacenar gran cantidad de datos en memoria EEPROM, sin embargo, la memoria
disponible para los microcontroladores es muy limitada. Este problema se puede solucionar fácilmente con las memorias
EEPROM seriales, manteniendo la simplicidad del hardware, debido a que un solo chip de 8 pines puede almacenar gran
cantidad de información.

Los dígitos que aparecen después de 24C indican el tamaño en kilobits de la memoria.

Por ejemplo, el modelo 24LC256 de Microchip tiene una capacidad de memoria de 32kbyte.

Distribución de terminales de la memoria 24LC256

Funciones de los pines de la memoria 24LC256


Direccionamiento del dispositivo
Escritura de Datos

Lectura de Datos

4. Ejemplo-Conexión a EEPROM Externa I2C


Este sencillo ejemplo procederá a grabar un dato en la memoria EEPROM serial, para luego leer este mismo dato y
mostrar su valor en los leds conectados al puerto RD.

Diagrama Esquemático
Código MikroC

5. Procedimiento Experimental en Laboratorio


Primera Firma: Probar el funcionamiento en protoboard del Ejemplo
Segunda Firma:
 Añadir una segunda memoria EEPROM serial al circuito del Ejemplo. Asignándole una dirección de
memoria distinta de la primera.
 En un primer ciclo grabar 256 datos (de 0 hasta 255) en la primera memoria. En los leds se
observará cada el valor de cada dato a medida que se graban.
 Posteriormente, leer los datos de la primera memoria, invertirlos (complemento a 1) y grabarlos
en la segunda memoria
 Finalmente leer los datos de la segunda memoria mostrando cada dato en los leds.

6. Informe impreso de laboratorio


I. Firmas en la Carátula (0, 1 o 2) que avalen los procedimientos realizados en la práctica
II. Código fuente MikroC del programa de la Segunda Fima
III. Trabajo de Investigación: Memorias Seriales 24Cxx
 Teoría de funcionamiento
 Características técnicas
 Conexión de varias memorias al microcontrolador
 Secuencias de Lectura, Escritura
 Aplicaciones
Cada trabajo de investigación debe incluir:
 Resumen escrito a mano (de un mínimo de 4 páginas)
 Fuentes de Información (direcciones web, bibliografía)
 Copias impresas de la información adquirida a través de las fuentes
IV. Conclusiones

You might also like