I2c
I2c
I2c
• Para simplificar la interconexión de dispositivos al microprocesador, Philips desarrolló un sencillo bus bidireccional
basado en dos hilos por el que se trasmiten los datos vía serie y lo llamó El Bus I2C.
• EL Bus I2C (Inter- Integrated Circuits) fue desarrollado al principio de los 80’s. Su propósito original fue el de
proporcionar una manera fácil de conectar un CPU a los chips periféricos en un equipo de TV.
EL PROBLEMA A RESOLVER:
• Los dispositivos periféricos en sistemas embebidos se conectan al mControlador como dispositivos de E/S mapeados
en memoria usando las líneas paralelas del bus de dirección y de datos. Esto produce una gran cantidad de pistas en
el PCB para enrutar las líneas de direcciones y de datos, sin mencionar un número de decodificadores de direcciones
y lógica adicional para conectar todo.
• Muchas líneas de control implican que el sistema sea más susceptible a perturbaciones por Interferencia
Electromagnética (EMI) y Descarga Electrostática (ESD).
Las características más importantes del bus I2C son:
Comunicación serial, utilizando un conductor para manejar el timming (SCL) (pulsos de reloj) y otro para intercambiar datos (SDA), que transportan
información entre los dispositivos conectados al bus.
Las líneas SDA (Serial Data) y SCL (Serial Clock) están conectadas a la fuente de alimentación a través de las resistencias de pull-up. Cuando el
bus está libre, ambas líneas están en nivel alto.
Los dispositivos puede ser considerados como Maestro (Master) o esclavo (Slave).
SDA
Maestro
SCL
Cada dispositivo es reconocido por una única dirección (si es un microcontrolador, LCD, memoria o
teclado) y cualquiera puede operar como transmisor o receptor de datos, dependiendo de la función
del dispositivo.
Un display es solo un receptor de datos mientras que una memoria recibe y transmite datos.
Modulo serial I²C
Algunos microcontroladores poseen este módulo y de la misma forma el compilador
MikroC PRO cuenta con una librería especializada para el uso fácil de este protocolo. La
librería se reconoce como I2C. Está librería cuenta con siete funciones que lideran el
funcionamiento del módulo. El protocolo I²C, se caracteriza por tener una línea de
datos bidireccional y una línea de reloj con drenador abierto. Por este motivo en estos
dos pines se debe usar una resistencia de pull-up, generalmente de 10KΩ. Este usa una
condición de inicio, un bloque de dirección para los dispositivos en la red, un bloque de
datos y una condición de fin. De igual manera usa las condiciones de repetición de
inicio y un bit de reconocimiento o acknowledge denotado como ACK. El protocolo I²C
se puede usar para conectar diferentes dispositivos con direcciones diferentes en una
topología en forma de bus. Por último este protocolo debe tener una velocidad de
comunicación que está dada en bits por segundo.
La librería de MikroC PRO, cuenta con las siguientes funciones que hacen posible el dominio del protocolo I²C:
La función: I2C1_Init(const unsigned long clock);, inicializa los pines de comunicación en el PIC, y ajusta la
velocidad de comunicación a la rata que denote el parámetro clock.
La función: unsigned short I2C1_Start(void);, está función genera la condición de inicio y retorna 0 si no hay
ningún error en la transmisión, de otro forma retorna un valor diferente de 0.
La función: unsigned short I2C1_Is_Idle(void);, está función se usa para identificar si el bus de datos está
ocupado, y retorna 1, si el bus está disponible o retorna 0, si está ocupado.
La función: unsigned short I2C1_Rd(unsigned short ack);, Está función lee un dato del bus de datos y envía la
confirmación ack por el bus. Si ack vale 1 la confirmación es positiva y si es 0 la confirmación es negativa o NO
ACK.
La función: unsigned short I2C1_Wr(unsigned short data );, está función envía el dato data por el bus y retorna
0 si la transmisión fue exitosa, o algo diferente de 0 si suceden errores.
En las siguientes gráficas se puede apreciar el protocolo de comunicación con la memoria 24LC00 para ser
leída y escrita: