Sei sulla pagina 1di 3

COMUNICACIN I2C

Luis Miguel Nuela Yanchapanta


e-mail: luis_050393@hotmail.com
Ing. en Mecatronica, Septimo Nivel, Universidad de las Fuerzas Armadas ESPE- Extensin Latacunga,
Mrquez de Maenza S/N Latacunga, Ecuador.
Fecha de presentacin: Agosto15, 2016

resistencias que pueden ser de 4,7K a la tensin de


alimentacin del microcontrolador PIC; los pines de los
dems dispositivos conectados al bus I2C tambin estn
nombrados como SDA y SCL, cuando no se estn
comunicando estos pines estarn normalmente en alto o
a 1. [1]

RESUMEN: En el presente documento se


investig sobre comunicacin I2C teora,
declaraciones, configuraciones etc.
PALABRAS CLAVE: PIC, COMUNICACIN I2C

1 INTRODUCCIN
Este documento representa la teora sobre la
utilizacin de comunicacin I2C

2 TIMER 1
I2C PIC es uno de los modos de trabajo del mdulo SSP
puerto serial sncrono del microcontrolador PIC, en
la comunicacin I2C se utilizan 2 hilos a lo que se
conoce como bus I2C, a estos hilos se conectan los
dispositivos que se puedan comunicar mediante el
protocolo I2C, por uno de los hilos se enviar una seal
de reloj para la sincronizacin y por el otro hilo se
enviarn o recibirn datos, se pueden conectar varios
dispositivos de los que uno de ellos ser el maestro, es
el que generar la seal de reloj adems de decidir
cundo se inicia o finaliza la comunicacin y si la
comunicacin ser de recepcin o transmisin de datos,
los dems dispositivos conectados al bus I2C se
conocen como esclavos. [1]

La velocidad de comunicacin puede ser de hasta


100Kbps en el modo estandar o normal, aunque puede
llegar en el modo rpido hasta los 400Kbps y en el alta
hasta ms de 3Mbps, esto depender de los dispositivos
utilizados, para ello es recomendable revisar sus hojas
de datos. [1]

3 LA COMUNICACIN I2C FUNCIONA


DE LA SIGUIENTE MANERA

Cada uno de los dispositivos tiene una direccin, cuando


el maestro necesita comunicarse con alguno de los
esclavos lo har enviando la direccin del esclavo a
travs del bus I2C, cuando el esclavo reciba su direccin
podr comunicarse con el maestro, el maestro ademas
tiene que enviar un bit mediante el cual le indica al
esclavo si quiere enviarle un dato o quiere recibir un
dato del esclavo. [1]

La transmisin de datos se inicia con un bit de inicio


(START) y termina con un bit de finalizacin (STOP). El
bit de START se reconoce porque la lnea SDA pasa de
un estado lgico alto para un estado lgico de
bajo cuando la lnea SCL est en nivel alto. El STOP se
establece cuando hay una transicin de bajo a alto en la
lnea SDA, cuando SCL est en un nivel alto. [3]

El microcontrolador PIC cuenta con el mdulo SSP el


que se utilizar en su modo de trabajo para la
comunicacin serial I2C PIC, el microcontrolador PIC
puede ser utilizado como maestro o como esclavo en la
comunicacin serial I2C PIC. Los pines que se utilizan
en el modo I2C PIC son los nombrados como SDA serial
data y SCL serial clock, el pin SDA es para enviar o
recibir los datos, y el pin SCL es para la seal de reloj,
estos pines deben ser declarados como entradas
digitales, ademas se les debe conectar mediante unas

Cuando comienza la transmisin de datos, el MAESTRO


enva la direccin del ESCLAVO con el cual se
quiere comunicar, esta direccin puede ser de 7 o 10
bits con formato de byte (uno o dos bits
respectivamente) Despus de la direccin se adiciona 1
bit, que indica si se desea ESCRIBIR o LEER (R/W). [3]
Cuando el Maestro enva estos DATOS para el esclavo.
El ESCLAVO debe responderle al maestro con un bit de
confirmacin para informarle que escucho la solicitud del
maestro y que est a disposicin de lo que l necesite.
Este bit de confirmacin se conoce como (ACK). Si el
maestro NO recibe este bit, la comunicacin se
interrumpe. Por otro lado, se puede dar el caso que un
ESCLAVO est mandando alguna informacin al
maestro, entonces el maestro tambin generar este bit
de confirmacin hacia el esclavo. [3]

La directiva (#use i2c) tiene efecto en las funciones:


I2C_START, I2C_STOP, I2C_READ. I2C_WRITE y
I2C_POLL. Se utilizan funciones de Software a menos
que se especifique FORCE_HW.
Como, por ejemplo:

Puede darse el caso tambin de que una vez el


MAESTRO se comunica con el ESCLAVO, el MAESTRO
no abandone el BUS y contine comunicndose con el
ESCLAVO, para eso el MAESTRO debe generar una
nueva condicin de START que se conoce en la
literatura como START REPETIDA (Sr), idntica al
START anterior solo que con un pulso de
reconocimiento. [3]

Las funciones asociadas al i2c son:

i2c_start ();

Para el modo maestro, esta funcin inicia la trasmisin.


Despus de la condicin de arranque o START, el reloj
es colocado en nivel lgico bajo hasta el momento en
que se escriba con la funcin I2C_WRITE (); Si se llama
otra funcin I2C_START antes que un I2C_STOP quiere
decir que se est utilizando un START Repetido (Sr).
Esta funcin depende de la respuesta del esclavo. [4]

Para trabajar con el mdulo de comunicacin I2C, se


deben configurar los siguientes registros: SSPCON,
SSPCON2, SSPADD, SSPBUF, SSPSTAT y SSPSR. [3]

4 COMUNICACIN I2C EN CCS

i2c_stop ();

Finaliza la transmisin.

En CCS C PIC C, existen funciones que nos facilitan la


implementacin de este tipo de comunicacin.
Comencemos primero viendo el tipo de configuraciones
que podemos llevar a cabo: [4]

i2c_write(DATO);

En esta funcin DATO es un entero de 8 bits que se


enva por el bus. Cuando un dispositivo que es
MAESTRO aplica esta instruccin, se genera una seal
de reloj que marca la velocidad de transmisin del dato;
Cuando un ESCLAVO aplica esta instruccin se queda
esperando la seal de reloj que genere el MAESTRO.
Esta funcin devuelve el bit de reconocimiento ACK que
le enva el receptor cuando la transmisin ha terminado:
0 indica ACK; 1 indica NOACK y 2 indica una colisin en
el modo MULTIMASTER. [4]
Para saber la direccin de la transmisin, se observa el
bit de menor peso (LSB) del primer dato transmitido tras
un START (Si el bit es 0 quiere decir que la informacin
se est transmitiendo de MAESTRO a ESCLAVO)

Para las configuraciones genricas del i2c declaramos lo


siguiente en el encabezado de nuestro programa:

#USE I2C(master, sda=PIN_B0, scl=PIN_B1)


#USEI2C(slave, sda=PIN_C4, scl=PIN_C3,
address=0XA0, force_hw)
#USE I2C(master, sda=PIN_B0, scl=PIN_B1,
fast=450000)

#use i2c (opciones)

Estas opciones pueden ir separadas por comas y


pueden ser cualquiera de las siguientes opciones

Dato=i2c_read ();

Dato2=i2c_read([ack]);

Dato es un entero de 8 bits ledo del BUS. Cuando un


dispositivo que es MAESTRO aplica esta instruccin, se
genera una seal de reloj que marca la velocidad de
transmisin del dato; Cuando un ESCLAVO aplica esta
instruccin se queda esperando la seal de reloj que
genere el MAESTRO. No hay timeout por lo que esta
instruccin se utiliza junto con i2c_poll() para prevenir
bloqueos. [4]
Opcionalmente se puede incluir un ACK donde 1 indica
ACK; 0 indica NOAC

valor=i2c_poll();

Se utiliza solo si el PIC tiene mdulo SSP. Devuelve un


TRUE (1) si se ha recibido el dato en el buffer y un
FALSE (0) si no se ha recibido. Cuando devuelve el
TRUE (1) la funcin i2c_read () guarda el dato recibido.
estado=i2c_isr_state ();
Se utiliza solo si el PIC tiene mdulo SSP. Devuelve el
estado del bus en modo ESCLAVO despus de una
interrupcin. [4]
Estado es un entero de 8 bits.

7 CONCLUSIONES Y
RECOMENDACIONES

i2c_slaveaddr(int8 adr);

Se especifica la direccin del dispositivo en modo


esclavo.

5 PROGRAMA DESARROLLADO EN PIC C

6 SIMULACION EN PROTEUS

Se realiz la aplicacin de
utilizacin de comunicacin serial
RS 232
Se
estudi los
fundamentos
conceptos sobre comunicacin
serial para su aplicacin
Realizar
correctamente
las
conexiones necesarias para que la
aplicacin funcione de la mejor
manera
Desarrollar
el
programa
de
acuerdo a lo planteado en el
problema para que cumple los
requerimientos necesarios.

8 REFERENCIAS

[1]

E. GARCIA BERIJO, "CCS COMPILER (PIC


COMPILER) USO DEL TIMER 1 ," ed.
marcombo MEXICO

[2

M. Narvez "Comunicacin Serial RS232


PIC16F877A," ed. CATALUA: S.L., 2008,

Potrebbero piacerti anche