Protocolo de comunicación I2C El bus I2C es un protocolo de

Anuncio
Protocolo de comunicación I2C
El bus I2C es un protocolo de comunicación serie. Su extructura es muy simple ya que
con tan solo dos cables podemos conectar multitud de sensores, controladores,
actuadores hasta un límite de 400pF.
Funcionamiento del bus I2C
Este bus tiene varias características a tener en cuenta:







Requiere dos líneas de comunicación, por un lado SDA (Signal Data) y por otro
lado SCL (Signal Clock). Las dos líneas son bidireccionales.
Ambas líneas de comunicación deben tener conectadas unas resistencias pull-up
de 10KΩ. Éstas se conectan para provocar que en el momento que no exista
comunicación alguna entre los dispositivos que conformen la red, las líneas se
encuentren a nivel alto (5V).
Ambas líneas de comunicación son las que transportan la información a los
dispositivos que conforman la red, estos datos están formados por palabras de 8
bits.
El protocolo de comunicación es Master-Slave.
Está permitida la conexión de varios masters.
Todos los dispositivos conectados pueden ser Master o Slave.
Cada uno de los dispositivos conectados disponen de un código propio para ser
reconocido por el resto de dispositivos, por lo que en el momento de iniciar la
comunicación, el dispositivo que quiera comunicarse con otro, deberá hacerlo
mediante la dirección del dispositivo destinatario.
Funcionamiento de la comunicación
La transmisión bidireccional serie se puede realizar a dos velocidades, el modo más
común de funcionamiento es el estándar de 100kbit/s.
Esta velocidad también puede llegar a 400kbit/s en modo rápido o 3,4Mbit/s para
aplicaciones industriales.
Una vez montada la red tendrá una apariencia como la que mostraremos a continuación.
En esta imagen podemos observar ambas resistencias de pull-up en las dos líneas de
comunicación y la conexión de los diversos dispositivos.
Podemos observar también como el uC de la derecha está funcionando como Master, es
decir, estaría enviando un mensaje a uno de los otros dispositivos.
El Master es el dispositivo emisor, es decir, es el que decide a “quien” y el “que”
enviará.
Cuando el Master inicia la transferencia de información hacia el Slave, genera la señal
de Clock, es decir, tal y como se observa en la figura posterior, enviaremos la
información y unos microsegundos después generamos la señal de Clock (SCL).
Ejemplo
Comunicación entre Arduino UNO y Arduino MEGA
Necesitaremos dos arduinos, los cuales, el Uno funcionará como Master con su propio
código y un MEGA, que funcionará como Slave con otro código propio.
Con este montaje lo que haremos será que cada vez que pulsemos el pulsador,
enviaremos un dato por I2C al SLAVE que llegará al MEGA y decidirá encender o
apagar el led dependiendo de cómo se encuentre el pulsador.
Código MAESTRO
#include <Wire.h>
int pulsador=0;
int lectPulsa=0;
byte x = 0;
void setup(){
Wire.begin();
pinMode(pulsador,INPUT);
}
void loop(){
Wire.beginTransmission(9);
Wire.write(x);
Wire.endTransmission();
lectPulsa=analogRead(pulsador);
if(lectPulsa==HIGH){
x=1;
}
else{
x=0;
}
}
Código SLAVE
#include <Wire.h>
int x=0;
int led=13;
void setup(){
Wire.begin(9);
Wire.onReceive(recepcion);
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
}
void loop(){
if (x==0){
digitalWrite(led,LOW);
}
if (x==1){
digitalWrite(led,HIGH);
}
}
void recepcion(int valor){
x= Wire.read();
}
Descargar