Академический Документы
Профессиональный Документы
Культура Документы
Maestro
Clk
Esclavo
Maestro
Clk
Esclavo
Un bus I 2C puede tener distintas configuraciones. y varios . Configuracin de un . Configuracin es el En cualquiera de estas configuraciones, el dispositivo nico que tiene capacidad de iniciar la transferencia, decidir con quin se realiza, el sentido de la misma (envo o recepcin desde el ) y cundo se finaliza. punto de vista del El bus I 2C consiste fsicamente en dos lneas de colector abierto. SCL para el reloj (pin RC3). SDA para los datos (pin RC4).
La comunicacin es, por tanto, .
VDD
Rp
Rp Rp
Perifrico
Rs Rs
VDD VOL i OL
Nmero mx. de dispositivos definidos por la capacidad en el bus: C max=400pF
SDA SCL
C bus=10 400pF
A7 A6 A5 A4 A3 A2 A1 R/W ACK Direccin de 7 bits del esclavo Lectura (1) o Escritura (0)
En este caso, y dado que las etapas de salida son de drenador abierto, los niveles lgicos 0 son dominantes en las lneas, por lo que el Esclavo debe dejar su salida SDA a 1 para que el Maestro pueda generar el STOP (paso de 0 a 1 con SCL=1)
Si el receptor es el dispositivo Maestro, genera un ACK tras cada byte recibido, permitiendo al Esclavo que contine enviando bytes. Si el Maestro decide finalizar la transferencia, genera un bit de STOP tras colocar un bit de no-reconocimiento (NACK). El Esclavo puede retardar el envo del siguiente byte (porque no lo tiene todava disponible, p.e.) situando la lnea SCL en estado bajo, forzando as al Maestro a situarse en un estado de Espera puesto que no podr generar flancos en SCL.
A7 A6 A5 A4 A3 A2
A1 R/W
ACK
ACK D7 D6 D5 D43 D3 D2 D1 D0
Pulso ACK
Pulso ACK
Pulso ACK
A7 A6 A5 A4 A3 A2
A1 R/W
ACK
D7 D6 D5 D4 D3 D2
D1 D0
Pulso ACK
Pulso ACK
MSSP (M aster
Ambos mdulos son idnticos en lo que se refiere al interface SPI. Caractersticas del interface I 2C en el mdulo MSSP. - Detecta condiciones START y STOP en el bus por interrupcin. - Permite seleccionar tres modos de operacin.
Esclavo I2 C con direccin de 7 bits. Esclavo I2 C con direccin de 10 bits. Maestro I2 C con reloj SCL de frecuencia fSCL = fOSC /[4(SSPADD+1)] SSPCON SSPADD SSPCON2 SSPBUF SSPSTAT
Reloj
SSPBUF SSPSR
MSb LSb
Buffer Buffer para para envo envo y y recepcin recepcin Registro Registro E/S E/S
No Noaccesible accesible directamente directamente
SSPM3:SSPM0 SSPADD<6:0>
SSPBUF
RC4 SDA
SDA In
SSPSR
MSb LSb
Reloj
Generador de baudios
RC3 SCL
(SSPSTAT) (SSPCON2)
CKE: Bit de seleccin de niveles umbral en los pines D/A: Informacin del ltimo byte transmitido P: Bit de STOP S: Bit de START
bit 1 bit 0
GCEN: Habilita
0: Deshabilitada 0: Recibido ACK del 0: ACK 0: Desactivada 0: Recepcin desactivada 0: Desactivada 0: Desactivado 0: Desactivada 1 : Habilita interrupciones por ( / Recepcin) ( / Recepcin) / Recepcin) ) ( ( ( ) ) ) 1 : No se ha recibido ACK del 1 : NACK ( ( 1 : Inicia secuencia de reconocimiento en SDA y SCL 1 : Activa modo recepcin 1 : Inicia situacin de STOP en SDA y SCL 1 : Inicia repetidas situaciones de START 1 : Inicia situacin de START en SDA y SCL
ACKDT: Valor a transmitir tras una recepcin ACKEN: Habilitacin de secuencia ACK RCEN: Bit de habilitacin de recepcin PEN: Habilitacin de una secuencia STOP RSEN: Habilitacin de START repetido
(87h)
SSPBUF SSPSR
(13h)
SSPADD
(93h)
).
PIR1 PIE1
Interrupciones del mdulo SSP (SSPIF SSPIE). Interrupcin por colisin del bus (BCLIF BCLIE). Habilita interrupciones de perifricos.
(0Ch 8Ch)
(0Dh 8Dh)
Esperar por un suceso I 2C. Se puede determinar con la ayuda del bit SSPIF.
La interrupcin puede estar activada o no
Identificar el suceso y actuar en consecuencia. Los sucesos I2C que percibe el pueden ser de 5 tipos.
10
Debe leerse el registro SSPBUF aunque no se vaya a usar la informacin que contiene. . Esta accin borra el bit BF y evita posteriores
Debe leerse el registro SSPBUF. Si SSPBUF no estaba lleno antes de la escritura, el un reconocimiento ACK en el 9 pulso de reloj. Lo hace el MSSP automticamente. Si ya estaba lleno, SSPOV 1 y se enva un NACK. enva
11
El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, para preparar el dato a enviar. dando as tiempo al El debe escribir en el buffer el dato solicitado por el . Y debe hacer CKP 1 para liberar la lnea SCL.
El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, para preparar el dato a enviar. dando as tiempo al El Esclavo manda el dato al Maestro escribindolo en el registro SSPBUF y haciendo CKP 1 para liberar la lnea SCL.
12
El envo de un NACK queda identificado porque R/W 0. Debido a que la recepcin de un NACK da lugar a un reset de la . lgica I2C del Esta situacin da lugar a que los bits del registro SSPSTAT reflejen una situacin incoherente.
Indican que se ha recibido un dato del est vaco. pero que el buffer
Tras escribir un dato en SSPBUF, el usuario debe comprobar el valor de WCOL para asegurar que no se ha producido una colisin. En la prctica, no habr colisiones si nicamente se escribe en est transmitiendo al . SSPBUF cuando BF=0 y el
13
I 2C.
Implementar alguno de los 6 eventos I 2C. 1. START 5. Reconocer (tras una lectura) 2. RESTART * ACK 3. STOP * NACK 4. Leer (recibir datos) 6. Escribir (transmitir datos)
14
15
16
2C por software. Si , ,implementar Sino nose seindica indica NOFORCE_SW NOFORCE_SW implementarel elprotocolo protocoloII2 C por software.
- Pensado para aquellos microcontroladores PIC que no disponen de MSSP. - Pensado para aquellos microcontroladores PIC que no disponen de MSSP. , sin embargo, deber usarse con el MSSP. - El modo , sin embargo, deber usarse con el MSSP. - El modo
i2c_stop (); Si el PIC est en modo secuencia STOP. , esta instruccin genera una
17
Entero de 8 bits a sacar por el bus. Bit que recoge el valor del ACK enviado por el receptor.
Manda un byte al bus I2C. En modo , esta funcin generar adems la seal de reloj que marca la velocidad de transmisin del dato; en modo , se . esperar por la seal de reloj que genere el Esta funcin puede devolver el bit ACK que enva el receptor cuando la transmisin ha terminado. El LSb del primer dato transmitido tras una secuencia de START indica el sentido en que se pretende establecer la comunicacin (si dicho LSb es 0, la informacin se transmitir de a
).
Lee el dato presente en el bus I2C. Se usa junto con i2c_poll() para evitar que el programa se cuelgue. Para que el watchdog se resetee mientras se espera a poder leer el dato, se incluye la opcin RESTART_WDT en la directiva #use i2c().
valor1 = i2_poll();
valor1 : 0 (FALSE) si no se ha recibido un byte en el buffer. 1 (TRUE) si se ha recibido un byte en el buffer.
18