- ¿Qué es el protocolo de comunicación I2C?
- ¿Cómo funciona la comunicación I2C?
- ¿Dónde utilizar la comunicación I2C?
- I2C en MSP430: control del potenciómetro digital AD5171
MSP430 es una poderosa plataforma proporcionada por Texas Instruments para proyectos integrados, su naturaleza versátil ha hecho que encuentre formas en muchas aplicaciones y la fase aún continúa. Si ha estado siguiendo nuestros tutoriales de MSP430, se habrá dado cuenta de que ya hemos cubierto una amplia gama de tutoriales sobre este microcontrolador comenzando desde los conceptos básicos. Desde ahora, hemos cubierto los conceptos básicos, podemos entrar en cosas más interesantes como el portal de comunicación.
En el vasto sistema de aplicaciones integradas, ningún microcontrolador puede realizar todas las actividades por sí mismo. En algún momento tiene que comunicarse con otros dispositivos para compartir información, existen muchos tipos diferentes de protocolos de comunicación para compartir esta información, pero los más utilizados son USART, IIC, SPI y CAN. Cada protocolo de comunicación tiene sus propias ventajas y desventajas. Centrémonos en la parte I2C por ahora, ya que eso es lo que vamos a aprender en este tutorial.
¿Qué es el protocolo de comunicación I2C?
El término IIC significa " Circuitos Inter integrados ". Normalmente se denota como I2C o I al cuadrado C o incluso como protocolo de interfaz de 2 cables (TWI) en algunos lugares, pero todo significa lo mismo. I2C es un protocolo de comunicación síncrono, lo que significa que ambos dispositivos que comparten la información deben compartir una señal de reloj común. Tiene solo dos cables para compartir información, de los cuales uno se usa para la señal del gallo y el otro se usa para enviar y recibir datos.
¿Cómo funciona la comunicación I2C?
La comunicación I2C fue introducida por primera vez por Phillips. Como se dijo anteriormente, tiene dos cables, estos dos cables se conectarán a través de dos dispositivos. Aquí un dispositivo se denomina maestro y el otro dispositivo se denomina esclavo. La comunicación debe ocurrir y siempre ocurrirá entre dos maestros y esclavos. La ventaja de la comunicación I2C es que se puede conectar más de un esclavo a un maestro.
La comunicación completa se lleva a cabo a través de estos dos cables, a saber, Serial Clock (SCL) y Serial Data (SDA).
Serial Clock (SCL): comparte la señal de reloj generada por el maestro con el esclavo
Datos en serie (SDA): envía los datos hacia y desde el maestro y el esclavo.
En un momento dado, solo el maestro podrá iniciar la comunicación. Dado que hay más de un esclavo en el bus, el maestro debe referirse a cada esclavo utilizando una dirección diferente. Cuando se le llame, solo el esclavo con esa dirección en particular responderá con la información, mientras que los demás seguirán saliendo. De esta forma podemos usar el mismo bus para comunicarnos con múltiples dispositivos.
Los niveles de voltaje de I2C no están predefinidos. La comunicación I2C es flexible, significa que el dispositivo que funciona con 5v voltios, puede usar 5v para I2C y los dispositivos de 3.3v pueden usar 3v para la comunicación I2C. Pero, ¿qué pasa si dos dispositivos que funcionan con diferentes voltajes necesitan comunicarse mediante I2C? Un bus I2C 5V no se puede conectar con 3.3V dispositivo. En este caso, se utilizan cambiadores de voltaje para igualar los niveles de voltaje entre dos buses I2C.
Hay un conjunto de condiciones que enmarcan una transacción. La inicialización de la transmisión comienza con un flanco descendente de SDA, que se define como la condición de 'INICIO' en el diagrama a continuación, donde el maestro deja SCL alto mientras configura SDA bajo.
Como se muestra en el diagrama anterior a continuación, El flanco descendente de SDA es el disparador de hardware para la condición de ARRANQUE. Después de esto, todos los dispositivos del mismo bus pasan al modo de escucha.
De la misma manera, el flanco ascendente de SDA detiene la transmisión, que se muestra como la condición 'STOP' en el diagrama anterior, donde el maestro deja SCL alto y también libera SDA para ir HIGH. Entonces, el flanco ascendente de SDA detiene la transmisión.
El bit R / W indica la dirección de transmisión de los siguientes bytes, si es ALTO significa que el esclavo transmitirá y si es bajo significa que el maestro transmitirá.
Cada bit se transmite en cada ciclo de reloj, por lo que se necesitan 8 ciclos de reloj para transmitir un byte. Después de cada byte enviado o recibido, se mantiene el noveno ciclo de reloj para el ACK / NACK (reconocido / no reconocido). Este bit ACK lo genera el esclavo o el maestro, según la situación. Para el bit ACK, el maestro o el esclavo establece el SDA en bajo en el noveno ciclo de reloj. Por lo tanto, se considera bajo como ACK, de lo contrario NACK.
¿Dónde utilizar la comunicación I2C?
La comunicación I2C se utiliza solo para comunicaciones de corta distancia. Ciertamente es confiable hasta cierto punto, ya que tiene un pulso de reloj sincronizado para hacerlo inteligente. Este protocolo se utiliza principalmente para comunicarse con sensores u otros dispositivos que tienen que enviar información a un maestro. Es muy útil cuando un microcontrolador tiene que comunicarse con muchos otros módulos esclavos utilizando un mínimo de solo cables. Si está buscando una comunicación de largo alcance, debe probar RS232 y si está buscando una comunicación más confiable, debe probar el protocolo SPI.
I2C en MSP430: control del potenciómetro digital AD5171
Energia IDE es uno de los software más fáciles de programar en nuestro MSP430. Es lo mismo que Arduino IDE. Puede obtener más información sobre cómo comenzar con MSP430 usando Energia IDE aquí.
Entonces, para usar I2C en Energia IDE, solo tenemos que incluir el archivo de encabezado wire.h. La declaración de PIN (SDA y SCL) está dentro de la biblioteca de cables, por lo que no es necesario declararla en la función de configuración .
Se pueden encontrar ejemplos de muestra en el menú Ejemplo del IDE. Uno de los ejemplos se explica a continuación:
Este ejemplo muestra cómo controlar un potenciómetro digital AD5171 de Analog Devices que se comunica a través del protocolo serial síncrono I2C. Usando la biblioteca de cables I2C de MSP, la olla digital pasará por 64 niveles de resistencia, apagando un LED.
Primero, incluiremos la biblioteca responsable de la comunicación i2c, es decir, la biblioteca de cables.
#incluir
En la función de configuración , iniciaremos la biblioteca de cables mediante la función .begin () .
configuración vacía () { Wire.begin (); }
Luego inicialice una variable val para almacenar valores del potenciómetro
byte val = 0;
En la función de bucle , comenzaremos la transmisión al dispositivo esclavo i2c (en este caso, potenciómetro digital IC) especificando la dirección del dispositivo que se proporciona en la hoja de datos del IC.
bucle vacío () { Wire.beginTransmission (44); // transmitir al dispositivo # 44 (0x2c)
Posteriormente, ponga en cola los bytes, es decir, los datos que desea enviar al IC para su transmisión con la función write () .
Wire.write (byte (0x00)); // envía el byte de instrucción Wire.write (val); // envía el byte del valor del potenciómetro
Luego, transmítalos llamando a endTransmission () .
Wire.endTransmission (); // deja de transmitir val ++; // incrementa el valor if (val == 64) {// si alcanzó la posición 64 (max) val = 0; // empezar de nuevo desde el valor más bajo } delay (500); }