Anda di halaman 1dari 8

CAPTULO 9

COMUNICACIN SERIAL SINCRNICA I2C Introduccin. I2C es un bus de comunicacin serial, sobre el cual, se implementa un protocolo de comunicaciones desarrollado por Phillips Semiconductors a principios de los aos 80s. Este bus se cre con la finalidad de reducir la complejidad del cableado interno encontrado en las tarjetas electrnicas de equipos digitales de radio y TV. Actualmente, su uso se ha extendido a innumerables aplicaciones en el rea digital, hecho que lo convierte, en uno de los ms populares estndares de comunicacin serial sincrnica. Una de las principales razones para que el estudio del bus I2C sea un punto obligatorio en la capacitacin de un estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran variedad de productos y fabricantes que producen circuitos integrados con sta tecnologa, entre los que se pueden citar: Phillips, National, Xicor, Siemens y DallasMaxim Semiconductors. El trmico I2C es una simplificacin comercial y prctica, su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexin de circuitos integrados. La Figura 9.1., muestra la conexin entre un dispositivo maestro y varios esclavos utilizando el bus I2C. En general los dispositivos esclavos pueden ser entre otros: manejadores de puertos E/S, convertidores A/D, medidores de temperatura, memorias Eeprom, relojes en tiempo real, sincronizadores, convertidores de protocolos, etc. 9.1. Caractersticas del BUS I2C Utiliza dos lneas para la comunicacin, una para datos llamada (SDA) y otra para el reloj (SCL). Cada dispositivo conectado al bus es identificado por una nica direccin (dentro del bus), la cual, queda establecida a travs de una combinacin de Hardware/Software. Bus I2C es multi-master y an cuando sta caracterstica es poco utilizada, se define un mecanismo para la deteccin de las colisiones y arbitraje que busca prevenir la prdida de informacin si dos o ms maestros inicializan comunicaciones en forma simultnea. Las transferencias de informacin se realizan en paquetes de 8 bits, en forma bi-direccional y pueden ser efectuadas a tres velocidades: Normal (Standard ) a unos 100 kbit/s (definicin original), a 400 kbit/s (implementado a partir de la versin 1.1 del ao 1992) en el modo rpido (Fast) a 3.4 Mbit/s en el modo de alta velocidad (High- speed) disponible desde la versin 2.0 del ao 1998).

La generacin de los pulsos de reloj es siempre responsabilidad del maestro que controla el bus. El maestro comienza y termina todas las transferencias de datos y para ello hace uso de dos condiciones especiales denominadas INICIO y PARADA (START y STOP) que pueden ser nicamente generadas por l. Una transicin de 1 a 0 (un flanco de bajada) en la lnea SDA mientras la lnea SCL se mantiene en alto determina la condicin de INICIO; una vez que ocurre esta condicin, el bus se considera ocupado (BUSY). Una transicin de 0 a 1 (un flanco de subida) en la lnea SDA mientras la lnea SCL se mantiene en alto, determina la condicin de PARADA, transcurrido un tiempo luego de ocurrir esta condicin, el bus se considera libre (FREE).

Figura 9.1. Conexin entre dispositivos bajo el bus I2C. Fuente: Tomado de la web: www.Mikroe.com

Figura 9.2. Condiciones de arranque y parada en un Bus I2C. Fuente: Tomado de la web: www.Philip.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 59

9.2. Detalle de la comunicacin I2C 9.3. Direccionamiento y formato de transferencia de informacin En un bus I2C, los dispositivos se identifican por medio de una direccin nica que forma parte de un byte de control enviado por el dispositivo maestro al iniciar la comunicacin. La definicin inicial del I2C prevea la existencia de 7 bits para direccionar al esclavo, de esta forma, se pueden conectar hasta 128 dispositivos en el bus.

Figura 9.3. Detalle de la comunicacin entre dispositivos I2C. Fuente: Tomado de la web: www.Mikroe.com

Una vez inicializada la comunicacin I2C condicin de Start, comienza el proceso de transmisin/recepcin de la informacin Bytes entre el dispositivo maestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3. Todos los bytes de informacin colocados sobre la lnea SDA deben tener 8 bits. El nmero mximo de bytes que pueden ser enviados en una transmisin no est restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus caractersticas. El envo de los bits se efecta siempre desde el bit ms significativo MSB hacia el menos significativo LSB. An cuando el maestro es quien siempre controla el estado de la lnea del reloj; un esclavo de baja velocidad o que deba detener la transferencia de datos mientras efecta otra funcin, puede forzar la lnea SCL a nivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual, no transmite informacin esperando a que el esclavo est listo para continuar la transferencia en el punto donde haba sido detenida.

Figura 9.4. Formato de la transferencia de bytes en un Bus I2C. Fuente: Tomado de la web: www.Philip.com

A partir de la versin 1.0 del ao 1992, existe un formato de direccionamiento de 10 bits y se ha incrementado significativamente el nmero de dispositivos que pueden conectarse simultneamente al bus. El compilador Basic no da soporte para dispositivos con direcciones de 10 bits por lo cual, no se har un estudio exhaustivo del direccionamiento del bus en estos casos. 9.4. Inicializacin en modo maestro La forma comn de comunicacin I2C, es utilizar al PIC como nico maestro y los perifricos como esclavos, bajo est configuracin, la habilitacin de las comunicaciones se logra a travs de la configuracin de los siguientes registros:

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 60

Ajustar la velocidad de Transmisin/Recepcin a travs del registro SSPADD. Eliminar el control del slew rate colocando a uno el bit SMP del registro SSPSTAT. Seleccionar el modo de comunicacin tipo Maestro a travs del registro SSPCON. Habilitar el mdulo de comunicaciones bit SSPEN del registro SSPCON Esperar que el Flag bit SSPIF del registro PIR1 est en uno indicando que todo est listo para iniciar la comunicacin.

SSPCON2 se colocar en cero (0), y se podrn enviar los prximos bytes que representan los datos de igual forma. La transmisin de los datos termina cuando se coloca el bit SEN = 0 del registro SSPCON2, de esta forma ocurrir una condicin de parada STOP habilitndose al pin SDA de nuevo a recibir una nueva trama de comunicacin: Arranque Direccin Reconocimiento Datos Reconocimiento {Datos Reconocimiento} . Parada

Figura 9.5. Inicializacin en modo maestro I2C para un PIC16F876. Fuente: Tomado de la web: www.Mikroe.com

9.5. Transmisin en modo maestro Una vez inicializado el mdulo I C (bit SSPIF = 1 del registro PIR1) se comienza la transmisin de los datos una vez que son cargados en el registro SSPBUF. El primer dato a cargar en el registro SSPBUF deber ser la direccin del dispositivo esclavo, al cual, se pretende comunicar. El microcontrolador tendr que esperar la seal de reconocimiento (ACK) por parte del dispositivo esclavo, cuando esto ocurre el bit ASKSTAT del registro
2

Figura 9.6. Transmisin en modo maestro I2C para un PIC16F876. Fuente: Tomado de la web: www.Mikroe.com

9.6. Recepcin en modo maestro La preparacin para la recepcin de datos es similar a la transmisin con la excepcin de que el ltimo bit del primer byte enviado (direccin) contiene un uno (1). Esto le indica al maestro que recibir datos desde el dispositivo esclavo.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 61

El dispositivo esclavo comienza a enviar los bytes de datos uno a la vez, estos bytes son almacenados en el registro SSPSR. Una vez ledo ste registro por parte del maestro, automticamente el maestro genera el bit de reconocimiento (ACK) al esclavo, lo cual, indica que el maestro est listo para recibir otro byte con informacin. La recepcin de los datos termina cuando se coloca el bit SEN = 0 del registro SSPCON2, de esta forma ocurrir una condicin de parada STOP habilitndose al pin SDA de nuevo a recibir una nueva trama de comunicacin: Arranque Direccin Reconocimiento Datos Reconocimiento {Datos Reconocimiento} . Parada

completo reloj cronmetro en tiempo real, el cual, utilizaremos en general, como fuente de informacin referida a la hora y fecha en nuestras aplicaciones. El segundo dispositivo es la memoria Eeprom modelo 24LC16B de capacidad 2KByte x 8bits.
DS1307 24LC16B

Pines de conexin al BUS I2C

Figura 9.7. Recepcin en modo maestro I2C para un PIC16F876. Fuente: Tomado de la web: www.Mikroe.com

9.7. Dispositivos I2C en el sistema de desarrollo iBOARD III La figura 9.8., muestra una fotografa del sistema de desarrollo iBOARD III, en la cual, los circuitos integrados con tecnologa I2C se han encerrado en un recuadro de color rojo. El primero dispositivo incluido es un reloj de tiempo real fabricado por la empresa Dallas Semiconductor modelo DS1307. Este dispositivo es un

Figura 9.8. Dispositivos con capacidad de comunicacin I2C incluidos en el sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 62

9.8. Comandos en alto nivel para el manejo del protocolo I2C BUSIN Comando para recibir datos desde un dispositivo con protocolo I2C. Sintaxis: BUSIN Control, {Direccin}, [DatosEntrada {, DatosEntrada}] BUSOUT Comando para transmitir datos desde un dispositivo con protocolo I2C. Sintaxis: BUSOUT Control, {Direccin}, [DatosSalida]

9.9. Memoria Eeprom 24LC16B

Control. :Es una variable o constante (byte) que contiene los bits de identificacin direccin del dispositivo I C.
2

Direccin : Es una variable o constante adicional (tipo byte o word) que especifica la

direccin de comienzo de lectura del dispositivo I2C, si no se especifica se tomar por defecto la direccin cero.

DatosEntrada : Es una lista de variables con modificadores de formato que se reciben como datos de entrada. DatosSalida : Es una lista de variables con modificadores de formato que se
transmiten como datos de salida. La declaracin de pines para la comunicacin I2C, se realiza a travs de las directivas: Seleccin del Pin SDA DECLARE SDA_PIN PORT . PIN Puerto.pin por defecto PORTA.0 Seleccin del Pin SCL DECLARE SCL_PIN PORT . PIN Puerto.pin por defecto PORTA.1 Seleccin de la velocidad del Bus I2C DECLARE SLOW_BUS ON - OFF or 1 - 0 Seleccin de la resistencia de Pullup pin SCL DECLARE BUS_SCL ON - OFF, 1 - 0 or TRUE - FALSE Elimina la necesidad de colocar una resistencia de Pullup en la lnea SCL Por defecto la resistencia es requerida. Seleccin de la velocidad del BUS I2C cuando se utiliza el hardware DECLARE HBUS_BITRATE Constant 100, 400, 1000 etc. La velocidad por defecto es 100 KHz

El sistema de desarrollo iBOARD III, incluye una memoria Eeprom modelo 24LC16B de 16 Kbits, dispuestos en arreglos de 2K x 8 bits para ser utilizada con un bus de comunicacin I2C a un voltaje de operacin entre 2.5 y 5.5 Vdc. En la figura anexa, se muestra la distribucin de los pines de conexin. Los Pines 1, 2, y 3 se utilizan para determinar parte de la palabra de identificacin del dispositivo (direccin por hardware). Los pines 4 y 8 se utilizan para la alimentacin de tensin, los pines 5 y 6 son utilizados para la conexin al bus I2C, mientras que el pin 7 es la habilitacin de la proteccin a la escritura de la memoria Eeprom. La identificacin del dispositivo queda definida tanto por el fabricante como por los bits de direccin por hardware. Para realizar una lectura y/o escritura en los registros de la memoria 24LC16B se debe enviar un byte de control y otro de direccin como se muestra indicado en la Figura 9.9.

Figura 9.9. Byte de control y direccin requeridos para iniciar la comunicacin con la memoria Eeprom del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 63

9.10. Ejemplo de utilizacin de una memoria Eeprom 24LC16B Utilizando el sistema de desarrollo iBOARD III, haga un programa que permita escribir y leer las primeras 256 localidades de la memoria Eeprom. Deber al conectar el Bus I2C microcontrolador de la siguiente forma: PORTB<0> con SDA y PORTB<1> con SCL. Tambin se deber mostrar el resultado a travs de IDE Serial comunicator a una velocidad de conexin de 2400 Baud.

' ' ' ' '

CAP_09_Ejemplo_01.bas Leer y escribir el contenido de una memoria Eeprom modelo 24LC16B. Escribe las primeras 256 localizaciones de la memoria eeprom y muestra su contenido por el terminal .... ----------------------------------------------------------------Device = 16F876 XTAL 20 Declare SDA_PIN PORTB.0 Declare SCL_PIN PORTB.1 Dim Index Dim DatoLeido As Byte As Byte ' Asignacin SDA pin ' Asignacin SCL pin ' Variable uso general ' Variable uso general

Figura 9.10. Fotografa de las conexiones entre el PIC16F876 y el Bus I2C del sistema de desarrollo iBOARD III.

Main: For Index = 0 To 255 BusOut $A0,Index,[Index] ' $A0 = direccin memoria eeprom DelayMS 5 ' Retardo escritura por fabricante Next For Index = 0 To 255 BusIn $A1,Index,[DatoLeido] HRSOut "Eeprom[",Dec Index,"]",_ " Valor Ledo = ", Dec DatoLeido, 13 DelayMS 500 Next GoTo Main Figura 9.11. Resultado de la ejecucin del programa CAP_09_Ejemplo_01.bas Sistema de desarrollo para microcontroladores PIC, iBOARD III. 64

9.11. Reloj en tiempo Real DS1307

Un dispositivo muy utilizado con los microcontroladores es el reloj de tiempo real, el cual, es capaz de mantener en forma autnoma un conteo completo de Hora-Fecha incluso con compensacin de ao bisiesto. El reloj de tiempo real modelo DS1307, es fabricado por Dallas Semiconductor y tiene la capacidad de comunicacin a travs del protocolo I2C. La figura anexa, muestra la distribucin de los pines de conexin. Los Pines 3,4 y 8 se utilizan para su alimentacin de tensin, los pines 1 y 2 son utilizados para la conexin de un cristal de referencia de 13.768KHz y los pines 5 y 6 son utilizados para la comunicacin I2C. La identificacin del dispositivo viene definida por el fabricante. Para realizar una escritura en los registros del DS1307 se debe enviar un byte de control con el valor $D0, para realizar una lectura se debe enviar el valor $D1. La figura 9.12., muestra la secuencia de bytes de control y direccin para realizar una escritura y una lectura en los registros internos del DS1307.

Figura 9.13. Registros internos del reloj en tiempo real DS1307.

El Terminal BAT del RTC se deber conectar a una batera de 3VDC a Tierra (si decide no usar la batera).
Figura 9.14. Esquema de conexiones del DS1307 del sistema de desarrollo iBOARD III. Figura 9.12. Secuencia de Bytes para acceder los registros internos del DS1307.

Los registros internos del reloj en tiempo real DS1307, se encuentran codificados en formato BCD (Binario Codificado en Decimal). En total el DS1307 posee ocho registros con direcciones 00h a la 07h, de las cuales, las primeras siete se utilizan para almacenar la informacin acerca del reloj - calendario; la ltima 07h se utiliza como registro de control. La figura 9.13., muestra la distribucin de los registros internos del DS1307, mientras que en la Figura 9.14 se puede observar el diagrama de conexiones del DS1307 en el sistema de desarrollo iBOARD III.

9.12. Ejemplo prctico con reloj de tiempo real DS1307 Utilizando el sistema de desarrollo iBOARD III, haga un programa que permita configurar los registros internos del reloj de tiempo real DS1307 con fecha y hora de referencia. Por ejemplo podr utilizar un ao bisiesto y ajustar el calendario a 28 de febrero y la hora a las 23:50. De esta forma, podr observar como el reloj de tiempo real se incrementa en forma correcta. Puede repetir la configuracin con un ao no bisiesto para que observe la diferencia.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 65

' ' ' '

CAP_09_Ejemplo_02.bas Configurar, leer y escribir en los registros internos del RTC Reloj de Tiempo Real, modelo DS1307 ......................... ------------------------------------------------------------Device = 16F876 XTAL 20 Declare SDA_PIN PORTB.0 Declare SCL_PIN PORTB.1 Symbol Symbol Symbol Symbol Symbol Symbol Seg Minu Hora Dia Mes Ano = = = = = = 0 1 2 4 5 6 As Byte As Byte ' Asignacin pin SDA ' Asignacin pin SCL ' ' ' ' ' ' Registro Registro Registro Registro Registro Registro de de de de de de Seg. Min. Horas Da Mes Ao

MOSTRAR_RTC: HRSOut "Hora = ", DEC2 RTC[Hora], ":", DEC2 RTC[Minu],_ ":", DEC2 RTC[Seg],13 HRSOut "Fecha = ", DEC2 RTC[Dia], "/", DEC2 RTC[Mes],_ "/", DEC2 RTC[Ano],13,13 Return BCD2BIN: For Index = 0 To 6 RTC[Index] = (RTC[Index]/16)*10 + RTC[Index] & $0F Next Return

Dim RTC[7] Dim Index Main: GoSub RTC_INI GoSub FECHA_INI DelayMS 500

' Vector almacenamiento ' Variable uso general ' Inicilizar el RTC ' Cargar Fecha inicial ' Retardo 500ms ' Leer registros RTC ' Mostrat registros RTC

Loop: GoSub LEER_RTC GoSub MOSTRAR_RTC DelayMS 1000 GoTo Loop End

RTC_INI: BusIn $D1,0,[RTC[Seg]] BusOut $D0,0,[RTC[Seg] & $7F] Return FECHA_INI: RTC[Seg] = $50 RTC[Minu] = $59 RTC[Hora] = $23 RTC[Dia] = $28 RTC[Mes] = $02 RTC[Ano] = $08 BusOut $D0,0,[Str RTC\7] Return ' ' ' ' ' ' '

' Lee byte 0, RTC ' Pone 0 en bit CH ' Para Activar RTC

Ajusta los Seg. iniciales Ajusta los Min. iniciales Ajusta la Hora inicial Ajusta el Da inicial Ajusta el Mes inicial Ajusta el Ao inicial Escribe registros RTC

LEER_RTC: For Index = 0 To 6 BusIn $D1,Index,[RTC[Index]] ' Lee registros Next ' del RTC 0..6 GoSub BCD2BIN Return

Figura 9.15. Resultado de la ejecucin del programa CAP_09_Ejemplo_02.bas Utilizando el IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 66

Anda mungkin juga menyukai