PortadaI2C

En el inicio usar Arduino puede resultar algo complejo entender las diferencias entre los diferentes tipos de interfaces de comunicación.

El protocolo de transmisión de datos como es el I²C bus, acrónimo de «Inter-Integrated Circuit» fue creado hace ya muchos años a principios de los 80s esta novedosa técnica que presentó la firma «Philips Semiconductors».

Los ingenieros de «Philips» vieron la necesidad de la simplificación de las líneas de datos que viajan entre los diversos circuitos integrados en sus productos. Su solución fue el bus I²C. Esto redujo el número de cables a tres SDA – los datos, SCL – reloj y GND – tierra.

Dentro la comunicación serie integrada en los microcontroladores de Arduino tenemos:

  • UART (recepción-transmisión asíncrona universal) es uno de los protocolos serie más utilizados. La mayoría de los microcontroladores disponen de hardware UART. Usa una línea de datos simple para transmitir y otra para recibir datos. Comúnmente, 8 bits de datos son transmitidos de la siguiente forma: un bit de inicio, a nivel bajo, 8 bits de datos y un bit de parada a nivel alto. UART se diferencia de SPI y I2C en que es asíncrono y los otros están sincronizados con señal de reloj. La velocidad de datos UART está limitado a 2Mbps (mega bit por segundo)
  • SPI es otro protocolo serie muy simple. Un maestro envía la señal de reloj, y tras cada pulso de reloj envía un bit al esclavo y recibe un bit de éste. Los nombres de las señales son por tanto SCK para el reloj, MOSI para el Maestro Out Esclavo In, y MISO para Maestro In Esclavo Out. Para controlar más de un esclavo es preciso utilizar SS (selección de esclavo).

La velocidad del bus I²C es de 100 kbit/s en el modo estándar, aunque también permite velocidades de 3.4 Mbit/s. Es un bus muy usado en la industria, principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados  y generalizando más para comunicar circuitos integrados entre si que normalmente residen en un mismo circuito impreso.

La principal característica de I²C es que utiliza dos líneas para transmitir la información: una para los datos y otra para la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la referencia “masa”. Como suelen comunicarse circuitos en una misma placa que comparten una misma masa esta tercera línea no suele ser necesaria.

Las líneas son las siguientes:

  • SDA: datos
  • SCL: reloj
  • GND: tierra

El I²C bus, no tan sólo son dos cables, usados para realizar una transmisión bidireccional de datos entre distintos sistemas gobernados por microcontroladores de forma eficaz. Veremos, cómo podemos controlar un importante número de dispositivos con nuestro Arduino, aunque, no es fácil de dominar. Se trata de, un bus bidireccional que utiliza dos líneas, una de datos serie SDA y otra de reloj serie SCL, que requiere resistencias de polarización a positivo RPA. SCL es la línea de reloj, se utiliza para sincronizar todos los datos SDA de las transferencias durante I²C bus. SDA es la línea de datos.

Las líneas SCL y SDA están conectadas a todos los dispositivos en el bus I²C . Ambas líneas SCL y SDA son del tipo drenador abierto asociados a un transistor de efecto de campo “FET”, un estado similar al de colector abierto. Esto significa que el chip puede manejar su salida a LOW, pero no puede manejar a HIGHT. Para que la línea pueda ir a HIGH, se deben proporcionar resistencias de polarización a 5V. Necesita de una resistencia de la línea SCL a la línea de 5V y otra de la línea SDA a la línea de 5V. Sólo necesita un conjunto de resistencias de RPA (pull-up) para todo el I²C bus, no son necesarias para cada dispositivo. La alimentación del sistema, debe tener una masa común, también puede haber una alimentación compartida que, se distribuye entre los distintos dispositivos.

Los dispositivos en el bus I²C  son maestros o esclavosEl maestro, es siempre el dispositivo que maneja la línea de reloj SCL. Los esclavos, son los dispositivos que responden al maestro. Un esclavo no puede iniciar una transferencia a través del bus I²C , sólo un maestro puede hacer esa función. Generalmente son, varios esclavos en el bus I²C , normalmente hay un solo maestro. Es posible tener varios maestros, pero no es común. Los esclavos, nunca inician una transferencia. Tanto el maestro, como el esclavo puede transferir datos a través del bus I²C , pero la transferencia siempre es controlada por el maestro.

Proceso de comunicación en el bus I2C

La base del protocolo  I²C, el bus tiene dos funciones para los nodos: maestro y esclavo. El resultado de este sistema produce un anillo compuesto por dos vías para el desarrollo de la función de comunicarse entre sí, los dispositivos interconectados a las mencionadas vías, esto permite comunicarse entre ellos mismos con un protocolo que, consiste en que en cada momento hay un maestro y el resto son esclavo. mientras uno escribe, el resto leen.

START está definida, cuando la señal de reloj SCL permanece estable “High” por otro lado, el nivel de la señal de no reconocimiento, debe ser también  “High”, si en ese preciso instante se produce un descenso ,flanco de bajada en la señal de datos, automáticamente se produce la condición de START “inicio” de la transmisión y el dispositivo que la produjo se convierte en MAESTRO, dando comienzo a la transmisión. El pulso de reconocimiento, conocido como ACK , “Acknowledge” logra colocando la línea de datos a un nivel lógico Low , durante el transcurso del noveno pulso de reloj.

Es importante, debe observar con atención, los cuatro pasos que sigue el inicio de una transmisión, son los 4 bytes de inicio.

  1. En el primer paso, el byte que se envía es START, después de la condición de Bit inicio “START” se envía un byte que, contiene siete bits que componen la dirección del dispositivo que se quiere seleccionar y un octavo bit R/W (que corresponde a la operación que se quiere realizar con él, lectura o escritura).
  2. El segundo paso, este byte, contiene la dirección del registro que se desea leer/escribir. Puede realizarse un reinicio como se muestra en la figura.
  3. El tercer paso, aquí se escribe la dirección con el bit menos significativo LSB a nivel 1, para indicar que se lee.
  4. El cuarto paso y siguientes continúan la misma función de lectura, no tiene por qué ser sólo uno.

A cada byte transferido al bus, le sigue un noveno pulso de reloj durante el cual, el dispositivo receptor, debe generar un pulso de reconocimiento.

Para pasar a la función de escritura en el mismo dispositivo, puede realizarse, enviando un bit de STOP o de reinicio, considerado como parada e inicio. El paso que sigue es, escribir el byte que contiene siete bits que componen la dirección del dispositivo que se quiere seleccionar y un octavo bit a 0 que corresponde a la operación que se quiere realizar con él, ahora escritura. Los pasos siguientes son similares como en el caso de lectura.

I²C en Arduino

Arduino dispone de soporte I²C por hardware vinculado físicamente a ciertos pines. También es posible emplear cualquier otro grupo de pines como bus I²C a través de software, pero en ese caso la velocidad será mucho menor.

Los pines a los que está asociado varían de un modelo a otro. La siguiente tabla muestra la disposición en alguno de los principales modelos.

Para usar el bus I²C en Arduino, el IDE Standard proporciona la librería “Wire.h”, que contiene las funciones necesarias para controlar el hardware integrado.

Características de I²C en ATmega328p:

  • Simple, yet Powerful and Flexible Communication Interface, only two Bus Lines Needed
  • Both Master and Slave Operation Supported
  • Device can Operate as Transmitter or Receiver
  • 7-bit Address Space Allows up to 128 Different Slave Addresses
  • Multi-master Arbitration Support
  • Up to 400kHz Data Transfer Speed
  • Slew-rate Limited Output Drivers
  • Noise Suppression Circuitry Rejects Spikes on Bus Lines
  • Fully Programmable Slave Address with General Call Support
  • Address Recognition Causes Wake-up When AVR is in Sleep Mode
  • Compatible with Philips I²C protocol

La librería para manejar el bus I²C en Arduino es Wirehttp://arduino.cc/en/reference/wire

Esta librería permite comunicar con I²C/TWI Arduino con otros dispositivos. En las placas Arduino con el diseño R3 , la SDA “línea de datos” y SCL “línea de reloj” están en los pines cerca del pin AREF.

Funciones que contiene la libreria Wire:

  • available() – Devuelve el número de bytes para leer.
  • begin() – Inicia la librería Wire y especifica si es master o slave.
  • beginTransmission() – Comenzar transmisión con esclavo.
  • requestFrom() – Usado por el maestro para solicitar datos del esclavo.
  • endTransmission() – Finaliza la transmisión que comenzó con un esclavo y transmite los bytes en cola.
  • write() – Escribe datos desde un esclavo como respuesta a una petición del maestro o pone en cola la transmisión de un maestro.
  • read() – Lee un byte transmitido desde un esclavo a un maestro o viceversa.
  • onReceive() – Llama a una función cuando un esclavo recibe una transmisión de un maestro. Registra una función de callback.
  • onRequest() – Llama a una función cuando un maestro solicita datos de un maestro. Registra una función de callback.

Escaner I²C

Cada componente que conectamos al bus I²C tiene una dirección única, y cada mensaje y orden que transmitimos al bus, lleva anexa esta dirección, indicando cuál de los muchos posibles, es el receptor del mensaje.

Lo normal es comprobar la información técnica del fabricante del componente, y ahí suele decirnos cuál es la dirección por defecto. Pero es posible que tengamos un dispositivo sin documentación, para ello hay un programa para Arduino, que nos informa, de lo que hay en nuestro bus y con qué dirección.

Ver http://playground.arduino.cc/Main/I2cScanner 

Hasta la próxima. Saludos Daniel

views
57


ElectroMercado

  • : tutorial_de_proyecto
  • arduino | otros
1 Comentario
  1. Juanjo
    Juanjo 4 meses

    Este protocolo es simple de usar y se usa mucho.

    0

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account