I2C AVR

MÓDULO SSP (SYNCHRONOUS SERIAL PORT) • Puerto Serie Síncrono: Interface de Comunicación Serie Síncrona • Pensado para co

Views 154 Downloads 60 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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:

Interface I2C • Es un interface síncrono a 2 hilos pensado para la comunicación entre C.I. y desarrollado por Philips Corporation. Es un bus estándar para muchos equipos de consumo y telecomunicaciones • Las dos líneas de comunicación corresponden a reloj (SCL) y datos (SDA). Las transferencias son por tanto semi-dúplex. • En el bus debe existir al menos un dispositivo Maestro que genera la señal de reloj y uno o varios Esclavos que reciben tal señal SCL. • El dispositivo Maestro es el único que tiene capacidad de iniciar la transferencia, decidir con quién se realiza, el sentido de la misma (envío o recepción del Maestro) y cuándo se finaliza

• Cada dispositivo esclavo conectado al bus tiene asignada una dirección ú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 sólo hay uno dominante

Interface I2C Ventajas del BUS I2C • Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995 se definió un modo rápido de funcionamiento que permitía transferencias de hasta 400kbit/s (algunos dispositivos gráficos llegan a 3,4MHz). • 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 inclusión de un dispositivo I2C adicional sólo necesitaría su conexión a las dos líneas del bus (SDA y SCL que son las mismas para todos) y asignarle una dirección. Los intercambios se realizarían utilizando los mismos subprogramas para todos • La tensión de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de “drivers” de adaptación de tensión externos (integración en los propios dispositivos)

Interface I2C

Interface I2C ESTADOS EN EL BUS I2C: Inicio y Final de transferencia • En el ESTADO INACTIVO, las líneas SDA y SCL se encuentran a “1”: los transistores de las etapas de salida de todos los dispositivos se encuentran en corte • El INICIO de transferencia se produce cuando aparece una transición de “1” a “0” en la línea SDA manteniéndose la línea de reloj SCL a “1”

• El FIN de transferencia es por transición de “0” a “1” en SDA cuando SCL está a “1”

Interface I2C

START y STOP sólo pueden ser generados por el Maestro

Interface I2C • Cuando un Maestro decide iniciar una transferencia, envía primero la dirección del dispositivo con el que quiere “hablar”.

• Todos los dispositivos “escuchan” para determinar si la dirección colocada en el bus es la suya. Acompañando a la dirección aparece un bit R/W que indica al esclavo destinatario si el Maestro quiere “leer” (recibir si R/W=1) del Esclavo o si el Maestro quiere “escribir” (enviar si R/W=0) en el Esclavo. •El Maestro y el Esclavo direccionado se deben encontrarse siempre en estados opuestos: Maestro emite / Esclavo recibe Maestro recibe / Esclavo emite • En cualquiera de los casos, el Maestro será el que genere la señal de reloj en SCL • Si hay más de un Maestro en el bus, se debe producir un arbitraje cuando SCL=1: el Maestro que envía un “1” y detecta un “0” en la línea SDA “pierde” en el arbitraje y desactiva su salida de datos (aunque podría seguir generando flancos en la línea SCL hasta que finalizara el envío del byte donde “perdió” el control del bus)

Interface I2C Direccionamiento I2C En principio, el número de dispositivos que se puede conectar al bus no tiene límites, aunque hay que observar que la capacidad máxima sumada de todos los dispositivos no supere los 400 pF. El valor de los resistores de polarización no es muy crítico, y puede ir desde 1K8 (1.800 ohms) a 47K (47.000 ohms). Un valor menor de resistencia incrementa el consumo de los integrados pero disminuye la sensibilidad al ruido y mejora el tiempo de los flancos de subida y bajada de las señales. Los valores más comunes en uso son entre 1K8 y 10K. Lo más común en los dispositivos para el bus I2C es que utilicen direcciones de 7 bits, aunque existen dispositivos de 10 bits. Este último caso es raro. Una dirección de 7 bits implica que se pueden poner hasta 128 dispositivos sobre un bus I2C, ya que un número de 7 bits puede ir desde 0 a 127. Cuando se envían las direcciones de 7 bit, de cualquier modo la transmisión es de 8 bits. El bit extra se utiliza para informarle al dispositivo esclavo si el dispositivo maestro va a escribir o va a leer datos desde él. Si el bit de lectura/escritura (R/W) es cero, el dispositivo maestro está escribiendo en el esclavo. Si el bit es 1 el maestro está leyendo desde el esclavo. La dirección de 7 bit se coloca en los 7 bits más significativos del byte y el bit de lectura/escritura es el bit menos significativo.

Interface I2C Direccionamiento I2C

Interface I2C Direccionamiento I2C

Direcciones reservadas:

Interface I2C Reconocimiento de Transferencia (ACK) • Los datos se transmiten en paquetes de 8 bits (bytes), no hay límite en cuanto a número de bytes, pero después de cada byte se debe intercalar un bit de reconocimiento (ACK) por parte del dispositivo receptor • Si es el Esclavo el receptor y no genera el bit de reconocimiento después de cada byte, el Maestro debe abortar la transferencia generando un bit de fin (STOP) • Si el dispositivo Maestro es el receptor, genera un ACK tras cada byte recibido, permitiendo al Esclavo que continúe enviando bytes. Si el Maestro decide finalizar la transferencia, genera un bit de STOP en lugar de colocar un bit de reconocimiento • Si el Esclavo necesita retardar el envío del siguiente byte (porque no lo tiene todavía disponible, p.e.), puede situar la línea SCL en estado bajo y forzar al Maestro a situarse en un estado de “Espera” puesto que no se podrían generar flancos en SCL

Interface I2C

Interface I2C Repetición de START (Sr) Si un dispositivo Maestro no desea abandonar el bus tras una transferencia, en lugar de generar un bit de STOP y volver a generar el nuevo START, puede generar una Repetición de START (Sr) La Repetición de START es idéntica a la condición de START (SDA pasa de 1 a 0 con SCL en estado alto) pero se produce tras un pulso de reconocimiento de bus (ACK) y no desde un estado inactivo

Interface I2C en AVR

El microcontrolador AVR cuenta con el módulo TWI el que se utilizará para la comunicación serial I2C AVR, el AVR puede ser configurado como maestro o como esclavo. Los pines que se utilizan nombrados como SDA serial data y SCL serial clock, a estos pines se les debe conectar mediante unas resistencias que pueden ser de 4,7K a la tensión de alimentación del microcontrolador AVR, o también se puede habilitar las resistencias internas pull up de estos pines, y ya se necesitaría utilizar las resistencias externas; La velocidad de comunicación puede ser desde 100Kbps en el modo estandar o normal, aunque puede llegar en el modo rápido hasta los 400Kbps y en la alta hasta mas de 3Mbps, esto dependerá de los dispositivos utilizados, según su hoja de datos del ATmega328/P puede llegar hasta los 400Khz.

Interface I2C en AVR En la comunicación serial I2C AVR se debe configurar los registros asociados a I2C del ATmega328, estos registros según la hoja de son los siguientes: ➢TWBR ➢TWCR ➢TWSR ➢TWDR ➢TWAR ➢TWAMR

Interface I2C en AVR TWI Bit Rate Register Name: TWBR

Si el microcontrolador es configurado como maestro, este registro sirve para cargar el valor que determina la velocidad de transmisión de los datos, (baudios o la cantidad de bits por segundo) que se enviarán po la linea I2C AVR. El valor a cargar en el registro TWBR se según la ecuación que proporciona la hoja de datos, la cual depende de la velocidad elegida, de la frecuencia del oscilador utilizado y de un prescaler para la frecuencia del oscilador, el prescaler puede ser 1, 4, 16 o 64, se elige mediante las combinaciones de los bits 1 y 0 del registro TWSR.

Interface I2C en AVR TWI Control Register Name: TWCR

El registro TWCR es el registro de control del módulo TWI para la comunicación I2C AVR ➢ El bit7 TWINT este es la bandera de interrupción en caso de que esta este habilitada la interrupción del módulo TWI al poner a uno el bit0 TWIE, en el caso de no habilitar las interrupciones este será el bit mas utilizado ya que mediante la verificación del estado de este bit se podrá conocer si se ha iniciado correctamente la comunicación I2C AVR, o también si se ha detenido la comunicación, o también si se han enviado o recibido los datos correctamente.

Interface I2C en AVR TWI Control Register Name: TWCR

El bit6 TWEA al poner este bit a 1 se habilita el uso del bit de reconocimiento ACK El bit5 TWSTA Al poner este bit a 1 se da inicio a la comunicación I2C AVR El bit4 TWSTO Al poner este bit a 1 se para o termina la comunicación I2C AVR. El bit3 TWWC este bit se pone a 1 automáticamente indicando un error cuando se quiere enviar o recibir un dato mientras no se dan las condiciones apropiadas. ➢ El bit2 TWEN Al poner este bit a 1 se habilita el uso del módulo TWI para la comunicación serial, mientras este bit esté a 0 no se podrá utilizar la comunicación I2C AVR. ➢ El bit1 este bit se pone a 0 ya que no se utiliza. ➢ El bit0 TWIE Habilita el uso de la interrupción del módulo TWI ➢ ➢ ➢ ➢

Interface I2C en AVR TWI Status Register Name: TWSR

Este registro se utiliza para averiguar en que estado se encuentra el módulo TWI cuando se realiza la comunicación serial I2C AVR, en este registro también se encuentran los bits mediante los cuales se elige el prescaler para obtener la velocidad de la comunicación I2C AVR. Bit7 a bit3 estos 5 bits trabajan en forma automática generando diferentes combinaciones, dependiendo de las combinaciones permite conocer en que estado se encuentra la comunicación I2C AVR, para ello en la hoja de datos del AVR utilizado se tienen unas tablas con lo que indican esta combinaciones, la siguiente es por ejemplo para el caso cuando el ATmega328 se comporta como maestro y está enviando un dato al esclavo:

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

Interface I2C en AVR TWI Status Register Name: TWSR

El bit2 no se utiliza se pone a 0. Los bits 1 y 0 con las combinaciones de estos bits se elige el prescaler a utilizar para obtener la frecuencia de transmisión, de donde se obtiene el valor a cargar en el registro TWBR, las combinaciones son las siguientes:

Interface I2C en AVR TWI Data Register Name: TWDR

El Bits 0, 1, 2, 3, 4, 5, 6, 7 – TWDn: TWI Data en la comunicación I2C AVR sirve para colocar el dato que se quiera transmitir hacia el esclavo, y también donde se encontrará el dato recibido desde el esclavo,

Interface I2C en AVR TWI (Slave) Address Register Name: TWAR

Bits 1, 2, 3, 4, 5, 6, 7 – TWAn: TWI (Slave) Address Bit 0 – TWGCE: TWI General Call Recognition Enable Bit El registro TWAR en los bits del 7 al 1 de este registro se colocará la dirección del microcontrolador AVR cuando este es utilizado como esclavo, el bit0 es para una llamada general, al poner el bit0 a 0 el microcontrolador responderá solo si el maestro envía su dirección, al poner este bit a 1 el AVR esclavo responde cuando el maestro envíe la dirección 0x00.

Interface I2C en AVR Para iniciar el I2C AVR, siendo el AVR el maestro. Los pines del Atmega328 para el manejo de la comunicación I2C AVR son el pin PC5 para la señal de reloj por lo que en este caso se le llama pin SCL, y el pin PC4 para la transmisión y recepción de datos, en este caso se le llama pin SDA, los pines serial clock SCL y serial data SDA no es necesario que se configuren como entradas digitales, lo que si se puede aprovechar es utilizar sus resistencias internas PULL UP, lo que en el ATMEL STUDIO se puede hacer así: PORTC|=((1