Está en la página 1de 11

LABORATORIO DE MICROPROCESADORES II PRACTICA N3 Objetivo: Desarrollar una aplicacin que permita comunicar un circuito integrado con el microcontrolador PIC18F4550

mediante el protocolo I2C. 1. Marco terico: Para el laboratorio utilizaremos el protocolo de comunicacin I2C que fue desarrollado por Phillips en el ao 1980. Las caractersticas del protocolo I2C son las siguientes: Modo sncrono: La transferencia de datos es iniciada siempre por el dispositivo maestro. Una seal de reloj (SCL) sincroniza la transferencia de datos. La frecuencia de reloj puede cambiar sin afectar a la calidad de los datos. Modo maestro esclavo: El dispositivo maestro controla la lnea de reloj SCL. Esta lnea determina la temporizacin de la transferencia de datos sobre el bus I2C. Transferencia de datos bidireccional: Los datos pueden ser transmitidos en cualquier direccin sobre el bus I2C. Mtodo de interface serial: El protocolo I2C solo utiliza las lneas SCL y SDA. La seal SCL es la seal de reloj serial, mientras SDA es la lnea de datos serial, siendo que esta lnea tambin puede transportar direcciones.

2.1 Niveles en las seales del protocolo I2C: Solo puede tener dos posibles estados elctricos: flotante en alto y bajo. El dispositivo maestro o esclavo manejan el bus I2C mediante un driver de drenador abierto o colector abierto. Las lneas SDA y SCL son llevadas a Vdd mediante resistores de pull up. Debido a que el driver es de drenador abierto, solo puede llevar el bus I2C a nivel bajo. Cuando la salida de reloj esta en nivel lgico bajo, el transistor NMOS es apagado. En este caso no fluye corriente desde y hacia el transistor NMOS y por lo tanto el bus es llevado a nivel lgico alto por los resistores de pull up. En caso contrario el transistor NMOS es encendido y se lleva las lneas a nivel lgico bajo. El valor del resistor de pull up depende de la capacitancia de la lnea de comunicacin y la velocidad de comunicacin. Se recomiendan valores de 2,2 K y 1 K para los modos de comunicacin estndar y de alta velocidad (no soportado por PIC 18).

Conexin de los dispositivos al bus I2C en modos estndar y alta velocidad 2.2 Seales utilizadas para la transferencia de datos con I2C 1. S (Condicin de inicio): Una condicin de inicio indica que un dispositivo podra transferir datos a travs del bus I2C. Una condicin de inicio es representada por un flanco descendente en la lnea SDA cuando la seal de reloj se encuentra en nivel lgico alto.

2. P (Condicin de parada): Una condicin de parada indica que un dispositivo desea dejar libre el bus I2C. Una vez liberado el bus, otros dispositivos podrn utilizarlo para transmitir datos. Una condicin de parada es representada por un flanco ascendente en la lnea SDA cuando la seal de reloj se encuentra en nivel lgico alto. Una vez que la condicin de parada se completa ambas seales SDA y SCL se mantienen en alto, condicin conocida como bus desocupado.

3. (R) Condicin de inicio repetido: Una seal de inicio repetido es una seal de inicio generada sin haber antecedido una seal de paro (P). Esta seal es utilizada por el dispositivo maestro para comunicarse con

4. otro dispositivo esclavo o con el mismo esclavo en un modo diferente de comunicacin sin dejar de usar el bus.

5. Datos: El bloque de datos representa la transferencia de un paquete de datos de 8 bits de informacin. Los datos son enviados por la lnea SDA, mientras los pulsos de reloj son enviados por la lnea SCL. La seal de reloj puede ser alineada para con los datos para indicar si cada bit es 1 o 0. Los datos son vlidos en la lnea SDA solo cuando la seal de reloj es alta. Cuando SCL no est en alto es posible cambiar los datos.

6. ACK (Condicin de reconocimiento): La transferencia de datos en el bus serial bajo el protocolo I2C necesitan ser reconocidas positivamente (ACK) o negativamente (NACK). Un dispositivo puede reconocer (A) la transferencia de cada byte colocando la lnea SDA en nivel bajo durante el noveno pulso de reloj. Si el dispositivo en cambio mantiene la lnea SDA flotante en alto transmite un reconocimiento negativo (NACK).

1.3 Sincronizacin: Todos los maestros generan sus propias seales de reloj sobre la lnea SCL para transferir datos. Los datos son validos solo durante el periodo en que se encuentra en nivel lgico alto la seal de reloj. Por lo tanto es necesaria una seal de reloj para arbitrar la transferencia de todos los bits. Para la mayora de los microcontroladores incluyendo el PIC 18 la seal de reloj SCL es generada por un contador que cuenta en forma descendente un valor previamente programado. La sincronizacin de la seal de reloj es realizada utilizando la conexin AND cableada del interface I2C a la lnea de reloj SCL. Esto significa que una transicin de nivel alto a bajo en la lnea SCL causar que los dispositivos que deseen iniciar la comunicacin empezaran a contar su periodo en bajo y una vez que un dispositivo ha generado una seal de reloj en bajo mantendr la seal de reloj en ese estado hasta que se alcance un estado alto.

La transicin de bajo a alto de este reloj no cambiar el estado de la lnea SCL si otra seal de reloj (CLK2) se encuentra en nivel lgico bajo. La lnea SCL se mantendr en nivel lgico bajo por causa del dispositivo con mayor periodo en nivel bajo. Los dispositivos con periodo de reloj ms corto se mantendrn en estado de espera durante este tiempo. Cuando todos los dispositivos han realizado el conteo de su periodo en nivel lgico bajo, la seal de reloj ser liberada y se cambiar a nivel alto. La sincronizacin de reloj ocurre cuando varios maestros tratan de manejar el bus I2C y por lo tanto el arbitraje del bus debe seleccionar cual es el maestro ganador.

1.4 Arbitraje: El protocolo I2C permite la existencia de mltiples maestros en el mismo bus. En caso de que ms de un maestro desee comenzar la transferencia de datos al mismo tiempo un esquema de arbitraje es empleado para forzar a un maestro a abandonar el bus. El dispositivo maestro continua transmitiendo hasta que uno intenta un nivel lgico alto mientras el otro transmite un nivel bajo. Como el driver del bus es de tipo drenador abierto el bus ser llevado a nivel bajo. El maestro intentando transferir una seal en nivel alto detectar un nivel bajo en la lnea SDA y abandonar el bus cerrando su puerto de salida de datos. El maestro ganador continuar su transmisin mientras el perdedor se convertir en esclavo. Este esquema de arbitraje es no destructivo, un dispositivo gana y los datos no se pierden.

1.5 Formato de la transferencia de datos: El protocolo I2C permite a un dispositivo utilizar direcciones de 7 o 10 bits para especificar a un dispositivo esclavo para la transferencia de datos. Los siguientes son los posibles formatos para la transferencia de datos en el protocolo I2C. Maestro transmisor esclavo receptor: La direccin de transferencia no cambia.

Maestro lee al esclavo inmediatamente despus del primer byte: En el momento del primer reconocimiento de comunicacin valida (ACKNOWLEDGE) el maestro emisor se convierte en maestro receptor y el esclavo receptor se convierte en esclavo transmisor. El primer ACK es generado por el esclavo. La condicin de STOP es generada por el maestro el cual enva previamente un ACK negativo (A).

Formato combinado: Durante un cambio de direccin dentro una transferencia la condicin de inicio (START) y la direccin del esclavo son repetidas pero con el bit R/W invertido. Si un maestro receptor enva una condicin de inicio repetida previamente enva un ACK negativo.

1.6 Direccionamiento de 7 bits: El procedimiento de direccionamiento para el protocolo I2C es tal que el primer byte despus de la condicin de inicio determina cual esclavo ser seleccionado por el maestro. La excepcin es el direccionamiento general el cual direcciona todos los dispositivos. El primer byte despus del bit de inicio transporta la direccin de 7 bits y la direccin del mensaje. Cuando el bit menos significativo es 1 el dispositivo maestro lee informacin del esclavo seleccionado. En caso de 0 el maestro escribe informacin en el esclavo seleccionado.

Cuando una direccin es enviada cada dispositivo en el sistema compara los primeros 7 bits despus de la condicin de START con su direccin. Si ambas son iguales, el dispositivo se considera direccionado por el maestro y es por lo tanto un esclavo receptor o esclavo transmisor, dependiendo del bit R/W. El comit tcnico encargado de normar el uso del protocolo I2C determina la ubicacin de las direcciones tal como se detalla en la siguiente tabla: DIRECCIN ESCLAVO 0000000 0000000 0000001 0000010 0000011 00001XX 11111XX 11110XX Bit R/W 0 1 X X X X X X DESCRIPCIN Direccin de llamada general Byte de inicio Direccin CBUS Reservado para diferentes formatos de bus Reservado para propsitos futuros Cdigo de modo maestro Reservado para propsitos futuros Direccionamiento en modo esclavo de 10 bits

1.7 Uso del mdulo MSSP con el protocolo I2C: El microcontrolador PIC18 cuenta con el mdulo MSSP que implementa el protocolo I2C en los modos maestro y esclavo. Permite el funcionamiento en el modo de interrupcin de los bits de inicio (START) y parada (STOP) mediante hardware para determinar si el bus esta libre (modo multi maestro). Este mdulo MSSP permite el direccionamiento en los modos de 7 y 10 bits. Se utilizan los pines RC3/SCK/SCL para la seal de reloj serial SCL y RC4/SDI/SDA para la transmisin de datos serial SDA. 1.8 Librera de MikroC para el bus I2C: La biblioteca Software_I2C de mikroC PRO contiene las funciones necesarias para establecer la comunicacin con dispositivos I2C. Estas funciones pueden emplearse con cualquier microcontrolador PIC (aunque no disponga de mdulos I2C). Las funciones incorporadas permiten que el usuario emplee un microcontrolador PIC como maestro (el modo multi-maestro no est disponible). La tabla muestra las funciones que pueden ser utilizadas para la comunicacin I2C:

FUNCIN Soft_I2C_Init() Soft_I2C_Start() Soft_I2C_Read(ack)

Soft_I2C_Write(dato) Soft_I2C_Stop() Soft_I2C_Break()

DESCRIPCIN Configura el mdulo I2C por software Determina si el bus I2C est libre y enva una seal de START Lee un byte del esclavo y responde con una seal NOACK (ack == 0) o ACK (ack == 1) Enva un byte dato por el bus I2C Enva una seal de STOP Todas las funciones de la biblioteca Software_I2C pueden bloquear el flujo de programa. Si se ejecuta esta funcin desde la funcin de interrupcin se producir el desbloqueo del programa.

Cuando se utiliza la biblioteca Software_I2C se debe deshabilitar las interrupciones. Los pines utilizados en la comunicacin deben estar conectados a resistores de pull up. TRABAJO DE LABORATORIO Implementacion en Proteus El circuito

EL CODIGO IMPLEMENTADO EN EL PIC 18F4550 PRIMERA PARTE

SEGUNDA PARTE

TERCERA PARTE

ULTIMA PARTE DEL CODIGO

concluciones El cdigo lo que realiza es grabar datos a la memoria eeprom mas explcitamente 6 datos que los memoriza y luego de cierto tiempo los muestra una a una. En la prctica no tuvimos inconvenientes solo algunos problemas en la codificacin del programa. BIBLIOGRAFIA

http://www.microvirtual.org/images/Congreso/Ponencias_CVM2/Comuinic aciones/COM214_P.pdf http://todoelectrodo.blogspot.com/2013/02/bus-i2c.html http://www.comunidadelectronicos.com/articulos/i2c.htm