![]() |
microC®
Líder
en la programación de microcontroladores PIC
©2009-2012 |
|
Síguenos en
|
| Inicio | La empresa.
Contáctanos | Cómo
comprar nuestros productos | Ofertas | Recursos | Mapa del
sitio | |
Transmisión de datos con PIC a través
del bus I2C
|
|
Extracto del
Capítulo XI del libro Cómo programar en lenguaje C los
microcontroladores PIC16F88, 16F628A y 16F877A. 2da
edición. 2010
Regístrate aquí para descargar una muestra gratis de este libro Introducción El bus I2C
(Inter-Integrated Circuit) o Interconexión de
Circuitos Integrados es un interfaz serie de dos
conductores. La especificación original, o
modo Estándar, es para velocidades de
transmisión de hasta 100kbps. También
se ha desarrollado una especificación
mejorada, o modo Rápido (400 kbps). Los
dispositivos con modo Estándar o
Rápido pueden operar en el mismo bus, si el
bus opera a la velocidad del dispositivo más
lento. El interfaz I2C emplea un protocolo para
asegurar la transferencia confiable de los datos.
Cuando se transmiten datos, uno de los dispositivos
es el maestro, el cual inicia la transferencia en el
bus y genera las señales de reloj para
permitir esa transferencia, mientras que los otros
dispositivos se comportan como esclavos. La tabla
11.1 define algunos de los términos I2C. En
el protocolo I2C cada dispositivo tiene una
dirección. Cuando el maestro desea iniciar la
transferencia de datos, primero transmite la
dirección del dispositivo con el cual desea
comunicarse. Todos los dispositivos están
atentos para determinar si es su dirección.
Dentro de la dirección, un bit especifica si
el maestro desea leer o escribir al esclavo. El
maestro y el esclavo siempre están operando
en modos complementarios (transmisor/receptor)
durante una transferencia de datos. Es decir, pueden
operar en cualquiera de los siguientes modos:
![]() Tabla 11.1 Terminología Características del bus I2CSe ha definido el siguiente protocolo de bus:
1. Bus desocupado (A) Las líneas de reloj y datos permanecen en ALTO. 2. Inicio de transferencia de datos. Condición de START (B) Una transición ALTO-BAJO en la línea SDA mientras la línea de reloj (SCL) está en ALTO determina la condición de START. Todos los comandos deben estar precedidos por una condición de START. 3. Fin de transferencia de datos. Condición de STOP (C) Una transición BAJO-ALTO en la línea SDA mientras la línea de reloj (SCL) está en ALTO determina la condición de STOP. Todas las operaciones deben finalizar con una condición de STOP. 4. Dato válido (D) El estado de la línea de datos representa datos válidos cuando, después de una condición de START, la línea de datos permanece estable durante el tiempo de nivel ALTO de la señal de reloj. Los datos en la línea tienen que cambiarse durante el tiempo de nivel BAJO de la señal de reloj. Hay un bit de datos por cada pulso del reloj. Cada transferencia de datos comienza con una condición de START y finaliza con una condición de STOP. El número de bytes de datos transferido está determinado por el dispositivo maestro. ![]() Figura 11.1 Secuencia de transferencia de datos 5.
Reconocimiento ACK
Cada dispositivo receptor, cuando es direccionado, está obligado a generar una señal de reconocimiento ACK después de la recepción de cada byte. El dispositivo maestro tiene que generar un pulso de reloj adicional que está asociado con este bit de reconocimiento (figura 11.2). El dispositivo que genera el reconocimiento tiene que colocar en BAJO la línea SDA durante el pulso de reloj correspondiente de tal manera que la línea SDA tenga un nivel BAJO estable durante el tiempo de nivel ALTO del ciclo de reloj. Durante las lecturas, el maestro tiene que informar al esclavo la finalización de los datos recibidos al NO generar un bit ACK en el último byte. En este caso, el esclavo dejará la línea de datos en ALTO para habilitar al maestro para que genere la condición de STOP. ![]() Figura 11.2 Temporización de reconocimiento ACK El
transmisor tiene que liberar la línea
SDA al final del dato transmitido para
permitir que el receptor lleve la
línea a nivel BAJO como
reconocimiento de los ocho bits de datos
previos. El receptor tiene que liberar la
línea al final del pulso de reloj
para que el transmisor continúe
enviando datos.
Funciones de mikroC para el bus I2CLa biblioteca Software_I2C contiene las funciones necesarias para establecer la comunicación con dispositivos I2C. Estas funciones pueden emplearse con cualquier PIC (aunque no disponga de módulos I2C). Las funciones incorporadas permiten que el usuario emplee un PIC como maestro (el modo multi-maestro no está disponible). La tabla 11.2 muestra las funciones que pueden ser utilizadas para la comunicación I2C.
![]() Tabla 11.2 Funciones de mikroC Memoria EEPROM 24LC256 en bus I2CEn 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
serie, manteniendo la simplicidad del
hardware, debido a que un solo chip de 8
pines puede almacenar gran cantidad de
información. Se ha seleccionado la
EEPROM serie 24LC256 (figura 11.3 y tabla
11.3) de Microchip, que es muy popular, con
una capacidad de memoria de 32kbyte.
![]() Figura 11.3 Distribución de terminales de la memoria 24LC256![]() Tabla 11.3 Funciones de los pines de la memoria 24LC256La EEPROM debe considerarse como un ejemplo fundamental, y puede ser tomado como referencia para la comunicación del PIC con otros dispositivos que acepten el protocolo I2C: termómetro (DS1624), reloj calendario (DS1307), conversor AD/DA (PCF8591), etc. Ejemplos de programación del
bus I2C con PIC
Estos ejemplos corresponden al PIC16F88.
El código fuente para los PICs
16F628A y 16F877A se encuentra en las
carpetas correspondientes que
acompañan a este libro. |
|
Si esta información te ha sido útil entonces considera la posibilidad de hacer una contribución para microC. Tu apoyo es muy
importante para seguir adelante.
Muchas gracias. |