Está en la página 1de 20

25/11/2022

Microcontroladores
PIC18F4550

Ing. Javier Barriga Hoyle

Arquitectura PIC18F4550

Ing. Javier Barriga Hoyle 1


25/11/2022

Arquitectura Harvard

I2C ó IIC ó TWI – Two Wire Interface

 Organización y configuración del I2C en el PIC18F4550


 Ejemplos.
 Bibliografía.

Ing. Javier Barriga Hoyle 2


25/11/2022

Puerto serial (I2C) - protocolo

 I2C (i-square-c) es un acrónimo de "Inter-Integrated-Circuit"


que fue creado originalmente por Philips Semiconductors
(ahora NXP) en 1982. I2CTM es una marca registrada de su
respectivo propietario y tal vez fue la razón por la que Atmel
AVR lo llamó "Interfaz de dos cables (TWI)" en sus
microcontroladores.
 El I2C es un bus de comunicación serie multimaestro,
multiesclavo, síncrono, bidireccional y semidúplex. Se utiliza
ampliamente para conectar circuitos integrados periféricos de
baja velocidad a procesadores y microcontroladores en
comunicaciones intraplaca de corta distancia.
 El puerto incluye dos cables de comunicación, SDA y SCL.
Además, el protocolo permite conectar hasta 127 dispositivos
esclavos con esas dos líneas, con hasta velocidades de 100,
400 y 1000 kbps.

Puerto serial (I2C) - protocolo

 El protocolo I2C es uno de los más utilizados para


comunicarse con sensores digitales, ya que a diferencia del
puerto Serial (UART), su arquitectura permite tener una
confirmación de los datos recibidos dentro de la misma
trama, así como, la conexión de tantos dispositivos al
mismo bus.
 Los mensajes que se envían mediante un puerto I2C,
incluye además del byte de información, una dirección del
registro como del sensor. Para la información que se envía
siempre existe una confirmación de recepción por parte
del dispositivo. Por esta razón es bueno diferenciar a los
distintos elementos involucrados en este tipo de
comunicación.

Ing. Javier Barriga Hoyle 3


25/11/2022

Puerto serial (I2C) - protocolo

 La conexión de tantos dispositivos al mismo bus, es una de


las principales ventajas. Además si comparamos a I2C con
otro protocolo serial, como Serial TTL, este incluye más
bits en su trama de comunicación que permite enviar
mensajes más completos y detallados.

Puerto serial (I2C) – esquema de


conexión

 En una comunicación digital I2C se diferencian dos


elementos básicos, un MAESTRO y un ESCLAVO. La Figura-
1, muestra una conexión típica de tres dispositivos, el bus
consiste de dos líneas llamadas, Serial DAta SDA y Serial
CLock – SCL. Es decir, Datos Seriales y Reloj Serial. En
particular al bus se le conectan dos resistencias en
arreglo pull-up, de entre 2.2K y 10K.

Figura 1.

Ing. Javier Barriga Hoyle 4


25/11/2022

Puerto serial (I2C) – protocolo de


comunicación

 El MAESTRO I2C se encarga de controlar la señal de reloj,


por sus siglas en inglés llamada SCL – Serial CLock.
Además, el MAESTRO se encarga de iniciar y parar la
comunicación. Dos Maestros no pueden hacer uso de un
mismo puerto I2C. Puede funcionar de dos maneras:

Maestro envía datos a un esclavo:


 Iniciar la comunicación – S (start)
 Enviar 7 bits de dirección – ADDR
 Generar 1 bit de Escritura – (R/W = 0)
 El esclavo direccionado responde con señal de conformidad -
(ACK).

Puerto serial (I2C) – protocolo de


comunicación
 El maestro envía 8 bits de datos.
 El esclavo devuelve conformidad de la recepción de datos –
(ACK). En caso de no recepción envía NACK (No-
ACKnowledged).
 Finalizar la comunicación – P (stop)

10

Ing. Javier Barriga Hoyle 5


25/11/2022

Puerto serial (I2C) – protocolo de


comunicación

Maestro recibe datos de un esclavo:


 El maestro inicia la comunicación – S (start)
 Enviar 7 bits de dirección – ADDR
 Generar 1 bit de Lectura – (R/W = 1)
 El esclavo direccionado responde con señal de conformidad -
(ACK).
 El esclavo envía datos.
 El maestro direccionado responde con señal de conformidad
a los datos recibidos - (ACK).
 El maestro termina la comunicación.

11

Puerto serial (I2C) – protocolo de


comunicación

 Ejemplo: Cronograma para la transmisión I2C (dirección de


7 bits)

12

Ing. Javier Barriga Hoyle 6


25/11/2022

Puerto serial (I2C) – protocolo de


comunicación

13

Puerto serial (I2C) – protocolo de


comunicación

 El ESCLAVO I2C, generalmente suele ser un sensor. Este


elemento suministra la información de interés al
MAESTRO. Puede actuar de dos formas: esclavo-
transmisor ó esclavo-receptor. Un dispositivo I2C esclavo,
no puede generar la señal SCL. Sus funciones principales
son:

 Enviar información en paquetes de 8 bits.


 Enviar confirmaciones de recepción, llamadas ACK

14

Ing. Javier Barriga Hoyle 7


25/11/2022

Puerto serial (I2C) – protocolo de


comunicación

 Ejemplo: Cronograma para la recepción I2C (dirección de 7


bits)

15

Puerto serial (I2C) – protocolo de


comunicación

Llamada General:

 Ya hemos comentado que el primer byte que envía el


maestro después de la condición Start corresponde a la
dirección del esclavo al que van dirigidos los siguientes
datos. Excepcionalmente se puede realizar una llamada
general. Es decir, a todos los esclavos, a la que, en teoría,
todos deberán responder. Esta llamada general tiene lugar
cuando la dirección enviada tiene todos los bits a cero
(incluso ) y es reconocida si el bit GCEN está habilitado
(SSPCON2<7> =1).

16

Ing. Javier Barriga Hoyle 8


25/11/2022

Puerto serial (I2C) – protocolo de


comunicación
NOTA:
 Cabe mencionar que el bus I2C soporta un protocolo
Multimaster, por lo que dos o más maestros intentando
acceder al bus pueden crear un conflicto. Para evitar que esto
ocurra existe un procedimiento de “arbitraje”, de forma que si
un maestro está utilizando el bus, no puede ser interrumpido
por otro desde la condición de inicio hasta la condición de
parada. Este procedimiento de arbitraje se basa en la
conexión del bus en colector abierto, ya que se actúa sobre la
línea de datos SDA mientras SCL está a nivel alto.
 Si dos maestros intentan acceder al bus a la vez, deben
escuchar la línea, es decir, si lee un nivel bajo significa que
otro maestro está utilizando el bus y debe dejar de transmitir
hasta que la línea esté libre.

17

Diagrama de bloques I2C modo


master (PIC18F4550)

18

Ing. Javier Barriga Hoyle 9


25/11/2022

Diagrama de bloques I2C modo


slave (PIC18F4550)

19

RESUMEN

20

Ing. Javier Barriga Hoyle 10


25/11/2022

 Normalmente, el dispositivo maestro controla la línea de reloj, SCL. Esta línea


controla la sincronización de todas las transferencias en el bus I2C.
 Otros dispositivos pueden manipular esta línea, pero solo pueden forzar la línea
baja. Esta acción significa que el elemento en el bus no puede manejar más datos
entrantes. Al forzar la línea baja, es imposible registrar más datos en cualquier
dispositivo. Esto se conoce como "estiramiento del reloj“ (“Clock Stretching”).

21

 SDA: esta señal se conoce como datos en serie. Cualquier dato enviado de un
dispositivo a otro va en esta línea.
 SCL: esta es la señal del reloj en serie. Es generado por el dispositivo maestro y
controla cuándo se envían los datos y cuándo se leen. Como se mencionó
anteriormente, la señal se puede forzar a baja para que no se produzca ningún reloj.
Esto lo hace un dispositivo que está demasiado ocupado para aceptar más datos.

22

Ing. Javier Barriga Hoyle 11


25/11/2022

 Las líneas I2C solo pueden tener dos estados eléctricos posibles. Estos estados se
conocen como "float high" y "drive low". I2C funciona al tener una resistencia pull-
up en la línea y solo los dispositivos tiran de la línea hacia abajo. Es por eso que las
resistencias pull-up son importantes en I2C.

23

 Este diagrama representa el valor de resistencia de pull-up recomendado para


varias velocidades I2C. Puede usar cualquier valor de resistencia que desee, pero el
cálculo de qué usar dependerá de la capacitancia de la línea impulsada y de la
velocidad de la comunicación I2C. También puede haber otros factores. Estos
valores se eligieron porque representan valores que se ha encontrado que funcionan
con frecuencia a estas velocidades. Ellos se proporcionan solo como referencia como
valores sugeridos. Su aplicación puede elegir otros valores.

24

Ing. Javier Barriga Hoyle 12


25/11/2022

 El bus I2C tiene una serie de "condiciones". Estas condiciones indican cuándo una
transferencia comienza, se detiene, se reconoce y otros eventos. Para simplificar la
explicación de las comunicaciones I2C, esta presentación las representará como
“elementos”, pequeños bloques de colores con una letra y un color para representar
cada condición.

25

 El primer elemento que debemos observar es la condición de inicio. Una condición de inicio
indica que un dispositivo desea transferir datos en el bus I2C. Aquí se muestra el bloque
con una "S" y cómo se ven las señales en el bus I2C (SDA se baja primero, seguido de SCL).
 El microcontrolador PIC se encargará de los detalles de sincronización. Sin embargo, será
necesario que le digan que desea una condición de inicio y comprobará cuando se
complete.

26

Ing. Javier Barriga Hoyle 13


25/11/2022

 Una condición de parada indica que un dispositivo ha finalizado su transferencia en el bus


I2C y le gustaría liberar el bus. Una vez liberados, otros dispositivos pueden usar el bus
para transmitir datos. Recuerde que soltar una línea apaga el controlador y, dado que
tiene una resistencia pull-up, la línea flota alto.
 Una vez que se completa la condición de parada, tanto SCL como SDA serán altos. Esto se
considera un bus inactivo (idle). Una vez que el bus está inactivo, se puede usar una
condición de Inicio para enviar más datos.

27

 Una condición de reinicio (Restart) indica que un dispositivo desea transmitir más
datos, pero no desea liberar la línea. Esto se hace cuando se debe enviar un inicio,
pero no se ha producido una parada. También es una forma conveniente de enviar
una parada seguida de una salida inmediatamente después de la otra. Evita que
otros dispositivos tomen el autobús entre transferencias.

28

Ing. Javier Barriga Hoyle 14


25/11/2022

 Aquí podemos ver claramente que la señalización utilizada para un reinicio puede verse
como nada más que una condición de parada seguida rápidamente por una condición de
inicio. Recuerde que una condición de parada es cuando el SDA sube mientras que el SCL es
alto. Una condición de inicio es cuando el SDA se baja mientras que el SCL es alto.
 El microcontrolador PIC también genera esto automáticamente. Uno simplemente solicita
que se envíe una condición de reinicio y luego espere a que se complete.

29

 Analicemos ahora el elemento de transferencia de datos. El bloque de datos


representa la transferencia de 8 bits de información. Los datos se envían por la línea
SDA y SCL produce una señal de reloj. El reloj se puede alinear con los datos para
indicar si cada bit es un "1" o un "0". Los datos sobre SDA solo se consideran válidos
cuando el SCL es alto. Cuando SCL no es alto, se permite que los datos cambien. Así
es como funciona la sincronización de cada bit.

30

Ing. Javier Barriga Hoyle 15


25/11/2022

 Aquí hay una vista de cerca de un bloque de datos. Como se puede ver, contiene 8
bits de datos y los datos son válidos en el flanco ascendente de SCL. El dato sigue
válido mientras SCL es alto.
 Si SDA es alto cuando esto sucede, el bit de datos es un "1“ y si es bajo, es un "0".

31

 Por último, discutiremos la condición ACK y NACK. Un dispositivo puede "ACK" o reconocer una
transferencia de cada byte bajando la línea SDA durante el noveno pulso de reloj de SCL.
 Los 9 bits de una transferencia se ven así: se sincronizan 8 bits para los datos, luego, durante el
noveno bit, el elemento que recibe los datos toma el bus por un bit. Si baja este bit, entonces el
dispositivo está señalando un "ACK". De lo contrario, permite que la línea SDA flote alto, está
transmitiendo un "NACK". Recuerde que el dispositivo debe activar el bus a bajo para enviar un
ACK, pero un NACK podría ser una respuesta pasiva. Este es uno de los beneficios de I2C.

32

Ing. Javier Barriga Hoyle 16


25/11/2022

 Por último, discutiremos la condición ACK y NACK. Un dispositivo puede "ACK" o reconocer una
transferencia de cada byte bajando la línea SDA durante el noveno pulso de reloj de SCL.
 Los 9 bits de una transferencia se ven así: se sincronizan 8 bits para los datos, luego, durante el
noveno bit, el elemento que recibe los datos toma el bus por un bit. Si baja este bit, entonces el
dispositivo está señalando un "ACK". De lo contrario, permite que la línea SDA flote alto, está
transmitiendo un "NACK". Recuerde que el dispositivo debe activar el bus a bajo para enviar un
ACK, pero un NACK podría ser una respuesta pasiva. Este es uno de los beneficios de I2C.

33

 Esta es una condición NACK. I2C establece que cada byte DEBE responderse con un NACK o
ACK. Si el dispositivo no puede decidir si quiere ACK o NACK, mantendrá baja la línea del
reloj hasta que se decida. Esta acción se conoce como "alargamiento del reloj" y es una
característica de I2C para dar a los dispositivos tiempo suficiente para responder.
 Observe que un "NACK" es cuando la línea SDA flota en alto durante el noveno pulso del
reloj. El significado de estos reconocimientos dependerá de qué byte se está transfiriendo y
con qué dispositivo se está hablando.

34

Ing. Javier Barriga Hoyle 17


25/11/2022

 El objetivo de esta presentación es comunicarse para escribir en una EEPROM I2C en serie.
A continuación se muestra un ejemplo de transferencia de escritura a una pequeña
EEPROM.
 Necesitamos transferir 3 bytes de información. La transferencia comienza con un inicio (S),
para señalar el comienzo de la transferencia. Luego, se envía el byte de control (dirección
del esclavo), la dirección de memoria donde guardar el dato y el dato.

35

 Necesitamos transferir 4 bytes de información. La transferencia utilizará el byte Control IN para


cargar la dirección en la EEPROM, luego la dirección de memoria a leer. Una vez que se carga la
dirección, queremos recuperar los datos. Entonces, enviamos un byte de control OUT para indicar
a la EEPROM que queremos datos de ella. La EEPROM reconocerá esto y luego enviará los datos
que solicitamos. Cuando terminamos de obtener los datos, enviamos un "NACK" para decirle a la
EEPROM que no queremos más datos. Si tuviéramos que enviar un ACK en este punto, podríamos
obtener el siguiente byte de datos de la EEPROM. Como solo queremos leer un byte, enviamos un
NACK. Esto se detalla en las especificaciones de la EEPROM.

36

Ing. Javier Barriga Hoyle 18


25/11/2022

 Una pregunta frecuente sobre las transferencias I2C es: ¿Cuándo utilizo una condición de
reinicio en lugar de una condición de inicio?
 Las razones pueden variar, pero a veces es necesario reiniciar un dispositivo en medio de
una transferencia. En el caso de una EEPROM, una vez que tiene la dirección, está listo
para ser leído, por lo que se usa un reinicio para detener la transferencia actual y enviar
inmediatamente una condición de inicio. Recuerde, las condiciones de inicio solo se
pueden usar en un bus inactivo, NO en medio de una transferencia.

37

 Aquí hay otro ejemplo de lectura EEPROM. Como puede ver, se usa una
condición de inicio para comenzar la transferencia, se usa un reinicio en el
medio de la transferencia para restablecer el dispositivo EEPROM y una
parada finaliza la transferencia.

38

Ing. Javier Barriga Hoyle 19


25/11/2022

Bibliografía

 PIC18F4550 datasheet.
 I2C PICMICRO - MICROCHIP.
 SETISA: División de Electronica y Telecomunicaciones ©
2006 Microchip Technology Incorporated. All Rights Reserved

39

Ing. Javier Barriga Hoyle 20

También podría gustarte