8

Manual Iboard III Cap 09

  • Upload
    daniel

  • View
    121

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 1/8

Page 2: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 2/8

 

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.60 

9.2. Detalle de la comunicación I2C

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

Una vez inicializada la comunicación I2C condición de “Start”, comienza elproceso de transmisión/recepción de la información “Bytes” entre el dispositivomaestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3.

Todos los bytes de información colocados sobre la línea SDA deben tener 8 bits.El número máximo de bytes que pueden ser enviados en una transmisión no estárestringido, siendo el esclavo quien fija esta cantidad de acuerdo a suscaracterísticas.

El envío de los bits se efectúa siempre desde el bit más significativo MSB haciael menos significativo LSB. Aún cuando el maestro es quien siempre controla elestado de la línea del reloj; un esclavo de baja velocidad o que deba detener latransferencia de datos mientras efectúa otra función, puede forzar la línea SCL anivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual,no transmite información esperando a que el esclavo esté listo para continuar latransferencia en el punto donde había sido detenida.

9.3. Direccionamiento y formato de transferencia de información

En un bus I2C, los dispositivos se identifican por medio de una dirección única

que forma parte de un byte de control enviado por el dispositivo maestro al iniciarla comunicación. La definición inicial del I2C preveía la existencia de 7 bits paradireccionar al esclavo, de esta forma, se pueden conectar hasta 128 dispositivos enel bus.

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 versión 1.0 del año 1992, existe un formato de direccionamientode 10 bits y se ha incrementado significativamente el número de dispositivos quepueden conectarse simultáneamente al bus. El compilador Basic® no da soportepara dispositivos con direcciones de 10 bits por lo cual, no se hará un estudio

exhaustivo del direccionamiento del bus en estos casos.

9.4. Inicialización en modo maestro

La forma común de comunicación I2C, es utilizar al PIC® como único maestro ylos periféricos como esclavos, bajo está configuración, la habilitación de lascomunicaciones se logra a través de la configuración de los siguientes registros:

Page 3: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 3/8

 

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.61 

•  Ajustar la velocidad de Transmisión/Recepción a través del registro SSPADD.

• Eliminar el control del “slew rate” colocando a uno el bit SMP del registroSSPSTAT.

• Seleccionar el modo de comunicación tipo “Maestro” a través del registro

SSPCON.• Habilitar el módulo de comunicaciones bit SSPEN del registro SSPCON

• Esperar que el Flag bit SSPIF del registro PIR1 esté en uno indicando que todoestá listo para iniciar la comunicación.

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

9.5. Transmisión en modo maestro

•  Una vez inicializado el módulo I2C (bit SSPIF = 1 del registro PIR1) secomienza la transmisión de los datos una vez que son cargados en el registroSSPBUF.

•  El primer dato a cargar en el registro SSPBUF deberá ser la dirección deldispositivo esclavo, al cual, se pretende comunicar.

•  El microcontrolador tendrá que esperar la señal de reconocimiento (ACK) porparte del dispositivo esclavo, cuando esto ocurre el bit ASKSTAT del registro

SSPCON2 se colocará en cero (0), y se podrán enviar los próximos bytes querepresentan los datos de igual forma.

•  La transmisión de los datos termina cuando se coloca el bit SEN = 0 delregistro SSPCON2, de esta forma ocurrirá una condición de parada “STOP” habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación:

  “Arranque … Dirección … Reconocimiento …Datos … Reconocimiento …{Datos … Reconocimiento} …. Parada” 

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

9.6. Recepción en modo maestro

•  La preparación para la recepción de datos es similar a la transmisión con laexcepción de que el último bit del primer byte enviado (dirección) contiene ununo (1). Esto le indica al maestro que recibirá datos desde el dispositivoesclavo.

 

Page 4: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 4/8

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.62 

•  El dispositivo esclavo comienza a enviar los bytes de datos uno a la vez, estosbytes son almacenados en el registro SSPSR.

•  Una vez leído éste registro por parte del maestro, automáticamente el maestrogenera el bit de reconocimiento (ACK) al esclavo, lo cual, indica que el maestroestá listo para recibir otro byte con información.

•  La recepción de los datos termina cuando se coloca el bit SEN = 0 del registroSSPCON2, de esta forma ocurrirá una condición de parada “STOP” habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación:

  “Arranque … Dirección … Reconocimiento …Datos … Reconocimiento …{Datos … Reconocimiento} …. Parada” 

Figura 9.7. Recepción 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 fotografía del sistema de desarrollo iBOARD III, enla cual, los circuitos integrados con tecnología I2C se han encerrado en un recuadrode color rojo. El primero dispositivo incluido es un reloj de tiempo real fabricado porla empresa Dallas Semiconductor™ modelo DS1307. Este dispositivo es un

completo reloj – cronómetro en tiempo real, el cual, utilizaremos en general, comofuente de información referida a la hora y fecha en nuestras aplicaciones. Elsegundo dispositivo es la memoria Eeprom modelo 24LC16B de capacidad 2KByte x8bits.

Figura 9.8. Dispositivos con capacidad de comunicación I2C incluidosen el sistema de desarrollo iBOARD III.

DS1307 24LC16B

Pines de conexión al BUS I2C

Page 5: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 5/8

 

Page 6: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 6/8

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.64 

9.10. Ejemplo de utilización de una memoria Eeprom 24LC16B

Utilizando el sistema dedesarrollo iBOARD III, haga unprograma que permita escribir yleer las primeras 256 localidadesde la memoria Eeprom. Deberáconectar el Bus I2C almicrocontrolador de la siguienteforma: PORTB<0> con SDA yPORTB<1> con SCL. Tambiénse deberá mostrar el resultado através de IDE Serial comunicatora una velocidad de conexión 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 = 16F876XTAL 20

Declare SDA_PIN PORTB.0 ' Asignación SDA pinDeclare SCL_PIN PORTB.1 ' Asignación SCL pin

Dim Index  As Byte ' Variable uso generalDim DatoLeido  As Byte ' Variable uso general

Main:For Index = 0 To 255

BusOut $A0,Index,[Index] ' $A0 = dirección memoria eepromDelayMS 5 ' Retardo escritura por fabricante

 Next

For Index = 0 To 255BusIn $A1,Index,[DatoLeido]HRSOut "Eeprom[",Dec Index,"]",_

" Valor Leído = ", Dec DatoLeido, 13

DelayMS 500Next

GoTo Main

Figura 9.10. Fotografía de las conexiones entre el PIC16F876y el Bus I2C del sistema de desarrollo iBOARD III.

Figura 9.11. Resultado de la ejecución del programa CAP_09_Ejemplo_01.bas 

Page 7: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 7/8

 

Page 8: Manual Iboard III Cap 09

5/7/2018 Manual Iboard III Cap 09 - slidepdf.com

http://slidepdf.com/reader/full/manual-iboard-iii-cap-09 8/8

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.66 

' CAP_09_Ejemplo_02.bas' Configurar, leer y escribir en los registros internos del RTC ' Reloj de Tiempo Real, modelo DS1307 .........................' -------------------------------------------------------------

Device = 16F876XTAL 20

Declare SDA_PIN PORTB.0 ' Asignación pin SDA Declare SCL_PIN PORTB.1 ' Asignación pin SCL

Symbol Seg = 0 ' Registro de Seg.Symbol Minu = 1 ' Registro de Min.Symbol Hora = 2 ' Registro de HorasSymbol Dia = 4 ' Registro de DíaSymbol Mes = 5 ' Registro de MesSymbol Ano = 6 ' Registro de Año

Dim RTC[7]  As Byte ' Vector almacenamientoDim Index  As Byte ' Variable uso general

Main:GoSub RTC_INI ' Inicilizar el RTC GoSub FECHA_INI ' Cargar Fecha inicialDelayMS 500 ' Retardo 500ms

Loop:GoSub LEER_RTC ' Leer registros RTC GoSub MOSTRAR_RTC ' Mostrat registros RTC DelayMS 1000

GoTo Loop

End 

RTC_INI:BusIn $D1,0,[RTC[Seg]] ' Lee byte 0, RTC BusOut $D0,0,[RTC[Seg] & $7F] ' Pone 0 en bit CH Return ' Para Activar RTC 

FECHA_INI:RTC[Seg] = $50 ' Ajusta los Seg. inicialesRTC[Minu] = $59 ' Ajusta los Min. inicialesRTC[Hora] = $23 ' Ajusta la Hora inicial

RTC[Dia] = $28 ' Ajusta el Día inicialRTC[Mes] = $02 ' Ajusta el Mes inicialRTC[Ano] = $08 ' Ajusta el Año inicialBusOut $D0,0,[Str RTC\7] ' Escribe registros RTC 

Return

LEER_RTC:For Index = 0 To 6

BusIn $D1,Index,[RTC[Index]] ' Lee registros Next ' del RTC 0..6 GoSub BCD2BIN

Return

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

Figura 9.15. Resultado de la ejecución del programa CAP_09_Ejemplo_02.basUtilizando el IDE Serial Comunicator.