El Blog de Joselu header image 2

Radio Despertador FM Arduino (Segunda parte) (Bus I²C)

febrero 17th, 2014 · 1 Comentario

Si has leído la primera parte de esta publicación, explicaba que voy a detallar el diseño de mi Radio Despertador FM Arduino, hice un desglose rápido de los módulos que iba a incluir en mi circuito y prometí explicar uno a uno como los había utilizado.

En esta asegunda parte voy a explicar los fundamentos del bus I²C, ya que considero una parte de vital importancia antes de explicar ninguno de los dispositivos que lo van a utilizar. Como este no es un artículo científico, vamos a verlo muy por encima.

350px-I2C.svg

I²C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Inter-Circuitos Integrados). La versión 1.0 data del año 1992 y la versión 2.1 del año 2000, su diseñador es Philips. La velocidad 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 (Embedded Systems) y generalizando más para comunicar circuitos integrados entre si que normalmente residen en un mismo circuito impreso.

i2c-bus-logo-204x226

En mi radio este bus permitirá al Arduino  comunicarse con el módulo RTC que provee la hora exacta, la radio FM y su amplificador, el teclado y dejará abierta la posibilidad de seguir incorporando tantos dispositivos como queramos.

En un bus I²C existen dos tipos de dispositivos, los maestros, y los esclavos. Un dispositivo maestro es capaz de iniciar una comunicación, con otro dispositivo, simplemente transmitiendo su dirección a través del bus y esperando la respuesta de este, una vez establecida, el dispositivo recibe la dirección de memoria en la que se va a leer o escribir, dependiendo de si se ha solicitado una lectura o una escritura en el bit (R/W). Como se trata de un bus síncrono el dispositivo maestro se encarga de controlar el reloj, pudiendo un esclavo transferir a baja velocidad forzando la línea de reloj a permanecer en nivel bajo.

i2c-tutorial-typical-signals

¿Y electrónicamente como ocurre? Tal vez sea esta la parte más importante que vamos a tratar en cuanto a I²C, su conexión.
En el bus I²C contamos con 3 líneas: Datos, reloj y tierra, la línea de reloj va marcando el paso, en el que se envían los datos a través de la línea de datos, tierra simplemente es para cerrar el circuito y que exista corriente en el bus.
Estas dos líneas, datos y reloj están alimentadas con 5V externos de forma constante, en modo Pull-Up a través de resistencias, esto quiere decir, que mientras el bus está libre, su tensión es +5V, por tanto los dispositivos se van a comunicar haciendo que la tensión del bus baje a 0V o se mantenga en +5V. El dispositivo maestro acciona el reloj haciéndolo bajar y dejando subir de nuevo el voltaje (flancos), mientras que en la línea de datos podrá poner un 0, o dejarlo a 1.
En este esquema se puede ver un bus I²C y su conexión en modo pull-up. Que decir que el valor de las resistencias utilizado es 10K, si utilizas un valor de resistencia demasiado bajo o conectas el bus sin pull-up, cuando el dispositivo comience a transmitir conectará la fuente a tierra y tu dispositivo morirá achicharrado de cortocircuito intentando poner el bus en baja.

image001_574243917

En cuanto al tema de Arduino, vamos a utilizar siempre la librería wire.h y como vemos, en la página de Arduino tenemos todo lo necesario:
“Esta librería te permite comunicar con dispositivos I2C / TWI. En la mayoría de las placas Arduino, SDA (línea de datos) está en el pin analógico 4, y SCL (línea de reloj) está en el pin analógico.”
Las funciones para lectura y escritura entre otras tantas son:

  • begin()
  • begin(address)
  • requestFrom(address, count)
  • beginTransmission(address)
  • endTransmission()
  • send()
  • byte available()
  • byte receive()
  • onReceive(handler)
  • onRequest(handler)

Para más información se ruega visitar la documentación oficial, esto es sólo un resumen, con lo imprescindible para alguien que esté empezando.

resistencia_10k

En el próximo post veremos como se conecta el módulo RTC, ponerlo en hora y leerla. Principalmente, tendremos un registro donde guardaremos la hora y la iremos actualizando cada vez que consultemos el RTC, para mantener siempre la hora actualizada en nuestra memoria RAM.

Share

Etiquetas: Miscelanea · Tecnología y Red

1 respuesta hasta ahora ↓

Deja un Comentario

¿Qué hay de nuevo?