29
1 Lenguaje C aplicado a microcontroladores PIC Comunicación Serie Síncrona ©ATE-Universidad de Oviedo-Fernando Nuño MCU EEPROM serie Conversores A/D Registros despl. LCD con SPI 2 Lenguaje C aplicado a microcontroladores PIC Comunicación Serie Síncrona ©ATE-Universidad de Oviedo-Fernando Nuño MÓDULO SSP (SYNCHRONOUS SERIAL PORT) Puerto Serie Síncrono: Interface de Comunicación Serie Síncrona Pensado para comunicación con otros Microcontroladores o Periféricos: EEPROM serie (almacenamiento de datos no volátiles) Registros de Desplazamiento (expansión de entradas y/o salidas) Drivers de Displays (reducción de conexiones) Conversores A/D (digitalización externa de señales) .... Modos de Operación posibles del módulo SSP: - SPI (Serial Peripheral Interface): Interface de Periféricos Serie SPI: Es una Marca Registrada de Motorola Corporation - I2C (Inter-Integrated Circuit): Entre Circuitos Integrados I2C: Es una Marca Registrada de Philips

Serie Sincrona en C-1

Embed Size (px)

DESCRIPTION

Descripicón de la serie sincrona

Citation preview

Microsoft PowerPoint - Serie_sincrona_en_C.ppt

1Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoMCUEEPROM serieConversores A/D

Registros despl.

LCD con SPI2Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoMDULO SSP (SYNCHRONOUS SERIAL PORT)Puerto Serie Sncrono: Interface de Comunicacin Serie SncronaPensado para comunicacin con otros Microcontroladores o Perifricos: EEPROM serie (almacenamiento de datos no voltiles)Registros de Desplazamiento (expansin de entradas y/o salidas) Drivers de Displays (reduccin de conexiones)Conversores A/D (digitalizacin externa de seales)....

Modos de Operacin posibles del mdulo SSP:

SPI (Serial Peripheral Interface): Interface de Perifricos SerieSPI: Es una Marca Registrada de Motorola Corporation

I2C (Inter-Integrated Circuit): Entre Circuitos IntegradosI2C: Es una Marca Registrada de Philips3Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo1.- Interface SPI en el mdulo SSPPermite la transmisin y recepcin sncrona simultnea de datos de 8 bits

Para la comunicacin debe existir un dispositivo Maestro (genera la seal de reloj) y uno o varios esclavos (reciben la seal de reloj)

En los microcontroladores PIC hay 3 pines asociados con la comunicacin SPI:Salida Serie de Datos (SDO) Serial Data Output Entrada Serie de Datos (SDI) Serial Data Input Reloj de comunicacin Serie (SCK) Serial Clock-> RC5-> RC4-> RC3De manera adicional, hay un 4 pin que se puede utilizar cuando el microcontrolador se configura como dispositivo Esclavo:

Seleccin de Esclavo (SS) Slave Select-> RA5

La inicializacin del Interface SPI se realiza mediante la configuracin de los bits de control SSPCON y SSPSTAT4naComunicacin Serie SncroATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Diagrama de Bloques del Mdulo SSP en modo SPIEntrada serie de bits Salida serieReloj de Salida (Maestro)Registro de Desplazamiento de transmisin/recepcin (no accesible)Seleccin Esclavo(opcional si es Esclavo)

Reloj de Entrada (Esclavo)Registro de Buffer (lectura/escritura)5Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuoa0 a1 a2 a3a4 a5 a6 a7RelojSDOSDOSDISDIMAESTRO SPIESCLAVO SPIb7 a0 a1 a2a3 a4 a5 a6RelojSDOSDOSDISDIMAESTRO SPIESCLAVO SPISCKSCKSCKSCK

Flanco 1 en reloj SCKSituacin InicialENVO/RECEPCIN SIMULTNEAa0 a1 a2 a3a4 a5 a6 a7b0b1b2b3b4b5b6b7RelojSDOSDOSDISDIMAESTRO SPIESCLAVO SPIRelojSDOSDOSDISDIMAESTRO SPIESCLAVO SPISCKSCKb4 b5 b6 b7SCKSCK

Flanco 8 en SCKb0 b1 b2 b3Lenguaje C aplicado a microcontroladores PIC

Situacin InicialSituacin Final Intercambiados los 8 bits de datos 6Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuoa7b0b1b2b3b4b5b6b0b1b2b3b4b5b6b7a0a1a2a3a4a5a6a77Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

SSPSR (registro de desplazamiento) enva y recoge los bits simultneamente

SSPBUF tiene doble funcin: para cargar el registro SSPSR para envo de datos y para recoger los datos recibidos en SSPSRSSPBUFSSPSR1.- Carga de SSPSR a travs de SSPBUFSSPBUFSSPSR2.- SSPSR enviando/recibiendoSSPBUFSSPSR3.- Completada recepcin/envoSSPSRSSPBUF4.- SSPSR carga SSPBUF con recepcinSSPIF=1SSPIF=0 por softwareLenguaje C aplicado a microcontroladores PIC*SSPIF = PIR1 (Completada transmisin) Lectura/escrituraIndica que se ha completado un envo/recepcin en SSPSR Se debe poner a 0 por software, puede generar interrupcin*BF = SSPSTAT (Buffer de recepcin lleno) Slo lecturaSe pone a 1 cuando se ha completado la recepcin de un dato se pone a 0 por hardware cuando se lee el registro SSPBUF Se emplear normalmente nicamente en modo de recepcin*WCOL = SSPCON (Colisin de Escritura) Lectura/escrituraIndica que se ha intentado escribir en SSPBUF mientras se est transmitiendo un dato previo. Si se da tal situacin, se debe poner a 0 por software*SSPOV = SSPCON (Desbordamiento en Recepcin) Lectura/escrituraIndica que se ha recibido un byte nuevo mientras SSPBUF contiene un dato recibido anteriormente no leido. El nuevo dato se pierde y ya no se actualiza SSPBUF. Se pondr a 0 por softwareFlags Indicadores en modo SPI8Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuob0b1b2b3b4b5b6b7b0b1b2b3b4b5b6b7a4a5a6a7b0b1b2b3b0b1b2b3b4b5b6b7b0b1b2b3b4b5b6b7a0a1a2a3a4a5a6a7a0a1a2a3a4a5a6a7a0a1a2a3a4a5a6a79Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoEl mdulo SPI puede utilizarse (independientemente de modo Maestro o Esclavo):

Para envo y recepcin simultnea (SDI y SDO)

SSPBUF debe leerse antes de cargarlo con el nuevo dato a enviar

Slo para enviar datos (SDO)

SSPBUF se puede cargar con un nuevo dato nicamente despus de haberse completado el envo del anterior dato

Si se pretende cargar un dato en SSPBUF durante una transmisin se produce una colisin y dicha carga ser ignorada

Slo para recibir datos (SDI)

Slo en este caso SSPBUF se utilizara como buffer intermedio de recepcin, se puede iniciar la recepcin de un nuevo dato antes de leer el dato que se acaba de recibirLenguaje C aplicado a microcontroladores PICSSPBUFSSPSRSDISDOSSPSRSSPBUFSDISDOa) Para envo y recepcin simultneab) Slo para enviar datosSSPBUFSSPSRSDOSSPBUFSSPSRSDOIntento de carga de Dato2 en SSPBUF durante envoCOLISIN WCOL=1(1)Envo de un dato(2)Antes de cargar un nuevo envo debemos leer recepcinRecepcin datoCarga de un dato10Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuob0b1b2b3b4b5b6b7b0b1b2b3b4b5b6b7a0a1a2a3a4a5a6a7a0a1a2a3a4a5a6a7b0b1b2b3b4b5b6b7b0b1b2b3b4b5b6b7a4a5a6a7b0b1b2b3b0b1b2b3b4b5b6b711Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoSSPSRLenguaje C aplicado a microcontroladores PIC

c) Slo para recibir datos

Se completa la recepcin de un dato (BF=1)

SSPBUFSe lee el dato recibido (BF=0)No se escribe nada en SSPBUF(slo recibimos)y se inicia una nueva recepcinSDISSPBUFSSPSRSDISi antes de leer el dato anterior se completa la recepcin de un nuevo dato,se perdera el dato previamente recibido, se da error de OVERFLOW (SSPOV=1).Este error slo es posible si el dispositivo es ESCLAVOUn microcontrolador MAESTRO inicia una nueva transferencia cargando el dato en SSPBUFLenguaje C aplicado a microcontroladores PIC

ESPECIFICACIN DEL MODO SPI EN LA INICIALIZACIN* Modo de funcionamiento:* Polaridad del Reloj:* Flancos activos del Reloj:* Muestreo bits de datos:* Frecuencia de Reloj:* Modo de Seleccin:Maestro (SCK salida) o Esclavo (SCK entrada)

Estado Inactivo del Reloj (SCK) a 1 a 0

Salida de bits en flancos de subida o bajada en SCKMuestreo de entrada en el centroo al final del bit SLO SI ES MAESTRO, frecuencia en salida SCK SLO SI ES ESCLAVO

Control externo de SDI y SDO con entrada SSSin control externo con pin SS12Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuob0b1b2b3b4b5b6b7b0b1b2b3b4b5b6b7a4a5a6a7b0b1b2b3b0b1b2b3b4b5b6b713Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoEl dispositivo Maestro inicia la transferencia enviando la seal de reloj SCK, los datos salen en los flancos programadosy se capturan las entradas en el momento indicado con el bit SMP si es Maestro.Los dos dispositivos deben ser programados con la misma POLARIDAD DE RELOJ para que reciban y emitan a la vezEjemplo de ConexinLenguaje C aplicado a microcontroladores PIC

HABILITACIN DE LOS PINES DE ENTRADA/SALIDA de SSPPara habilitar el mdulo SSP, es necesario que el bit SSPEN se encuentre a 1. Si se desea resetear el mdulo SSP, se debe poner a 0 este bit y luego volverlo a 1

Para que la funcionalidad de los pines SDI, SDO, SCK y /SS sea la determinada por los bits de configuracin, es necesario adems que los bits de direccin de datos(en TRISA y en TRISC) tengan la direccin adecuada:SDI (RC4) debe tener TRISC = 1 para ser entrada de datos SDO (RC5) debe tener TRISC = 0 para que sea salida de datos SCK (RC3)debe tener TRISC = 0 si el microcontrolador es MAESTRO y TRSC = 1 si se define como ESCLAVO/SS (RA5) debe ser TRISA = 1 si es ESCLAVO y tiene control externo Cualquier funcin no deseada en el puerto serie puede ser omitida si en elregistro de direccin de datos (TRIS) se configura el valor opuesto

P.ej.: Si en modo Maestro slo se van a enviar datos, SDI puede usarse como una salida de propsito general del microcontrolador cargando TRISC=014Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo15Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Funcionamiento como MAESTRO

El Maestro puede iniciar la transferencia en cualquier momento puesto que controla la lnea SCK. El protocolo software determinar cundo el Esclavo est en condiciones de enviar datos.

En modo Maestro, la transmisin/recepcin se inicia tan pronto como se escribe en el registro SSPBUF. Si se desea slo recibir, la lnea SDO puede desactivarse definindola como entrada, los datos presentes en la lnea SDI irn entrando al registro SSPSR a la velocidad marcada por el reloj de transferenciaLa velocidad de transferencia del modo SPI es programable entre los valores: Fosc/4Fosc/16 Fosc/64Frecuencia de Salida de TMR2/2

siendo por tanto la mxima velocidad de transferencia: 5Mbps (con Fosc=20MHz)

La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKELenguaje C aplicado a microcontroladores PICEscritura en SSPBUFCRONOGRAMA SPI MAESTROMuestreo caso SMP=1Muestreo caso SMP=0BYTE COMPLETO SSPIF=116Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo17Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Funcionamiento como ESCLAVO sin Seleccin Externa

Para el esclavo, el dato es transmitido/recibido cuando aparecen los pulsos en la entrada SCK

Cuando el ltimo bit termina de ser muestreado, el flag SSPIF se pone a uno

La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE

El muestreo de los bits de datos se realiza siempre en la mitad de un bit en el modo Esclavo (SMP=0 siempre en modo Esclavo)

La seal de reloj debe cumplir las especificaciones mnimas de tiempos mnimos en los estados alto y bajo

En modo de bajo consumo (SLEEP) el Esclavo puede transmitir y recibir datos puesto que el registro de desplazamiento es asncrono con el oscilador.

Al completar una transferencia de un byte, el dispositivo podra despertarse si se encontraba dormidoLenguaje C aplicado a microcontroladores PICCKE=0F.subida

F.bajadaMuestreosiempre con SMP=0 (en mitad del bit) con el flanco opuestoal de salida de los datosCRONOGRAMA SPI ESCLAVO SIN SELECCIN EXTERNA

Esperando a que el Maestro genere flancosBYTE COMPLETO SSPIF=118Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo19Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Funcionamiento como ESCLAVO con Seleccin Externa

El pin /SS (nivel activo bajo) permite la conexin de varios esclavos con un Maestro, habilitando en cada instante nicamente la transferencia con un Esclavo

El dispositivo Maestro debe seleccionar para la transferencia nicamente uno delos Esclavos mediante la activacin de la seal /SS (a cero) del elegido, permaneciendo el resto en estado alto

Se debe configurar el modo SSP Esclavo con SSPCON = 0100 y adems definir el pin /SS/RA5 como entrada con TRISA=1

Cuando /SS est a 0, se permite transmisin/recepcin y el pin SDO se maneja internamente por parte del registro dedesplazamiento

Si el pin /SS est a 1, el pin SDO se sita en alta impedancia respecto al registro de desplazamiento (podran necesitarse resistencias de polarizacin).

Adems, con /SS a 1 (Vdd) el mdulo SPI permanecer reseteado igual que si SSPEN=0 y el contador de bits entrantes permanecer a ceroLenguaje C aplicado a microcontroladores PICMuestreosiempre con SMP=0 (en mitad del bit) con el flanco opuestoal de salida de los datosCRONOGRAMA SPI ESCLAVO CON SELECCIN EXTERNA

Necesaria seal /SS a 020Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo21Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Interface SPI: Posibilidades de conexin

A).- Un Maestro y un Esclavo con conexin a 3 hilos,MAESTROESCLAVOSCKSDOSDISDISDOSCKTransmisin/recepcin simultneaTransmisin/recepcin pero no simultneasB).- Un Maestro y un Esclavo con conexin a 2 hilos,MAESTROESCLAVOSCKSDOSDISDISDOSCK2 hilos3 hilos Conflicto en las Salidas !Lenguaje C aplicado a microcontroladores PICB).- Un Maestro y un Esclavo con conexin a 2 hilosMAESTROESCLAVOSCKSDOSDISDISDOSCK2 hilosMAESTRO(TRISC=0)ESCLAVO(TRISC=1)SDISCKSDOSDISCK2 hilosSlo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos(TRISC=1 define SDO como entrada)

Estado1: Maestro emite (y recibe lo mismo que est emitiendo), Esclavo recibe Conflicto en las Salidas !22Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo23Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoB).- Un Maestro y un Esclavo con conexin a 2 hilos,MAESTROESCLAVOSCKSDOSDISDISDOSCK2 hilosMAESTRO(TRISC=1)ESCLAVO(TRISC=0)SDISCKSDISDOSCK2 hilosSlo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos(TRISC=1 define SDO como entrada)

Estado 2: Maestro recibe, Esclavo emite (y recibe lo mismo que est emitiendo) Conflicto en las Salidas !Lenguaje C aplicado a microcontroladores PICMAESTROESCLAVO 1ESCLAVO 2ESCLAVOnSDI......SDO SCKSCK SDISCKSDISCKC).- Un Maestro emitiendo y varios Esclavos recibiendo, conexin a 2 hilosNo sera necesario el control de la seleccin del esclavo, todos tendran la entrada de datos activaSDOSDOSDOSDI24Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo25Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

D).- Un Maestro y varios Esclavos con posibilidad de emisin, 3 h. y lneas de seleccinMAESTROESCLAVO 1ESCLAVO 2ESCLAVOnSDISDI......SDO SCKSCK SDISCKSCKSDISDO /SSSDO /SSSDO /SSCircuito de Seleccin de Esclavo (directoo decodif.)...PORT?Slo un Esclavo Seleccionado que maneja la lnea SDOy que recibe por SDI (/SS=0, resto /SS=1)Lenguaje C aplicado a microcontroladores PIC

COMUNICACIN SPI en C (compiladores de CCS)Existen 4 funciones asociadas con el mdulo SPI, pero todas ellas son utilizables nicamente si el microcontrolador seleccionado dispone de mdulo hardware SSP. No existe implementacin software del mdulo SPI

Communications

El asistente de C permite configurar: si el micro va a ser dispositivo Maestro o Esclavo, los flancos de transferencia, la frecuencia del reloj que se va a utilizar en el supuesto de que sea dispositivo Maestro y el empleo o no del pin de seleccin si se trata de un dispositivo Esclavo

Tiene efecto en la funcin setup_SPI( )26Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo27Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Comunicacin mediante SPI

setup_SPI(modos)

Esta funcin sirve para inicializar y configurar el Interface de Puerto Serie (SPI) ya que define el modo de trabajo de esta comunicacin. Al contrario que la comunicacin serie asncrona, aqu no hay directiva de configuracin.En el fichero de cabeceras del dispositivo microcontrolador (.h) estn definidas una serie de etiquetas que estn asociadas a los modos de funcionamiento y que se separan en 3 grupos:Modo:Flanco:SPI_MASTER SPI_L_TO_HSPI_SLAVESPI_SS_DISABLED SPI_H_TO_Lc) Frecuencia:SPI_CLK_DIV_4 SPI_CLK_DIV_64SPI_CLK_DIV_16 SPI_CLK_T2Las etiquetas anteriores se enlazan mediante el operador OR (|):

p.e.: setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);Lenguaje C aplicado a microcontroladores PIC

spi_write()-> spi_write(caracter)

Esta funcin se utilizar si el dispositivo es Maestro y originar que se generen los correspondientes 8 flancos en la seal de reloj saliente

spi_read()-> valor=spi_read(dato)

Esta funcin tiene distinto efecto en funcin de que el dispositivo sea Maestro o Esclavo en SPI. La funcin devuelve un dato ledo a travs del SPI y puede llevar un dato como parmetro o no.

Si el dispositivo es Maestro SPI, se puede realizar una llamada a la funcin SPI_WRITE(dato) [con el dato a enviar] y despus una llamada con SPI_READ() [sin parmetro] o bien una llamada del tipo SPI_READ(dato). En ambos casos el efecto ser el mismo, se coloca el dato en SSPSR y se generan 8 flancos en la seal de reloj

Si el dispositivo acta como Esclavo, cargar el dato en el registro de saliday esperar por la llegada de los flancos en la entrada de reloj28Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo29Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

spi_data_is_in()-> resultado = spi_data_is_in()Esta funcin devuelve TRUE si se ha recibido un dato a travs del SPI Ejemplos de las funciones para SPI:

spi_write(dato_salida); dato_entrada = spi_read( );

Equivale adato_entrada = spi_read(dato_salida); Otros ejemplos:

if(spi_data_is_in( )) dato=spi_read( );

while (!spi_data_is_in( )); //Esperamos a que llegue un dato dato_entrante = spi_read( );Lenguaje C aplicado a microcontroladores PICEs un interface sncrono a 2 hilos pensado para la comunicacin entre C.I. y desarrollado por Philips Corporation. Es un bus estndar para muchos equipos de consumo y telecomunicaciones

Las dos lneas de comunicacin corresponden a reloj (SCL) y datos (SDA). Las transferencias son por tanto semi-dplex.

En el bus debe existir al menos un dispositivo Maestro que genera la seal de reloj y uno o varios Esclavos que reciben tal seal SCL.

El dispositivo Maestro es el nico que tiene capacidad de iniciar la transferencia, decidir con quin se realiza, el sentido de la misma (envo o recepcin del Maestro) y cundo se finaliza

Cada dispositivo esclavo conectado al bus tiene asignada una direccin nica codificada en 7 ( en 10 bits de manera opcional)

Se admite la presencia de varios Maestros en el bus (sistema multi-Maestro) con un arbitraje que asegura que en cada instante slo hay uno dominante2.- Interface I2C30Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo31Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Ventajas del BUS I2C

Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995 se defini un modo rpido de funcionamiento que permita transferencias de hasta 400kbit/s (algunos dispositivos grficos llegan a 3,4MHz).

Presenta una transferencia lenta en comparacin con el modo SPI y mucho ms con la lectura/escritura directa de los puertos de un microcontrolador

Es til y se emplea en muchas aplicaciones en las que la velocidad de transferencia es mucho mayor de lo que el caso requiere (p.e. Medida de temperaturas con constantes de tiempo de segundos)

Su principal ventaja, es que una vez disponible el microcontrolador con sus funciones de interface con bus I2C, la inclusin de un dispositivo I2C adicional slo necesitara su conexin a las dos lneas del bus (SDA y SCL que son las mismas para todos) y asignarle una direccin. Los intercambios se realizaran utilizando los mismos subprogramas para todos

La tensin de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de drivers de adaptacin de tensin externos (integracin en los propios dispositivos)MAESTROESCLAVO(direccin n1)SDA (datos)SCL (reloj)ESCLAVO(direccin n2)MAESTROo ESCLAVO(direccin ni)ESCLAVO(direccin n3)Es posible que un Maestro tras perder el control del bus en un arbitrajepase a ser EsclavoLenguaje C aplicado a microcontroladores PIC

BUS I2CNmero mx. de dispositivos por capacidad en el bus:Cmax=400pFTransferencias:100 kHz,400 kHz 1MHz32Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo33Lenguaje C aplicado a microcontroladores PICComunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoESCLAVOESCLAVOMAESTRO/ESCLAVOLas etapas de Salida deben ser de Drenador abierto(para que exista wire-and) sin conflicto en las salidasResistencias de polarizacinLnea de Datos (SDA)Lnea de Reloj (SCL)Resistencias serie opcionales (Rs dato=I2C_read( )o biendato=I2C_read(ack)

Esta funcin sirve para leer un byte a travs del bus I2C. En modo Maestro, se generarn los flancos en la seal de reloj (SCL) y en modo Esclavo esperar por la aparicin de los mismos. No existe lmite de tiempo de espera como Esclavo, se deber usar la funcin I2C_poll( ) para evitar el bloqueo del dispositivo. El ack es opcional y puede ser1 (hay reconocimiento, que es la opcin por defecto) 0 (no hay reconocimiento)

I2C_poll( )

Esta funcin slo puede utilizarse si el dispositivo dispone de mdulo SSP y est implementado el bus I2C con su empleo. Esta funcin devuelve TRUE si se ha recibido un byte y ste est disponible en el buffer. Si se devuelve TRUE, la llamada a la funcin I2C_read( ) devuelve de manera inmediata el byte recibido.54Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo55Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoLenguaje C aplicado a microcontroladores PIC

Ejemplos:#USE I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3)//Dispositivo Maestro//Se enva bit de START//Direccin del Esclavo y peticin de lectura//Se generan flancos y se lee un dato//se lee el siguiente dato y se enva NO ACK//Se manda bit de STOPi2c_start( ); i2c_write(0xA1); dato_1=i2c_read( ); dato_2=i2c_read( 0 ); i2c_stop( );i2c_start( );//Se enva bit de STARTi2c_write(0xA0); //Direccin del Esclavo y escritura posterior i2c_write(hi(direccion)); //Se manda parte alta de una direccin i2c_write(direccin); //Se manda parte baja de la direccin i2c_write(dato);//Se enva el dato a grabari2c_stop( );//Envo del bit de STOPSecuencia LecturaSec. de EscrituraLenguaje C aplicado a microcontroladores PIC

Un ejemplo como esclavo:#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0xA0) contador=0;while (contador>8); i2c_write(comando); i2c_stop( );//generacin de START//Direccin de dispositivo y escritura//envo de parte alta de comando//envo de parte baja//envo de bit de STOP56Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando Nuo57Comunicacin Serie SncronaATE-Universidad de Oviedo-Fernando NuoEEPROM 24LC256Sensor de temperatura TC74Lenguaje C aplicado a microcontroladores PIC

Dispositivos I2C presentes en la placa PICDEM2 plus