Escolar Documentos
Profissional Documentos
Cultura Documentos
de Comunicao
At este momento vimos alguns protocolos de comunicao que o Arduino suporta, como
SPI, One-Wire, e mesmo a interface serial um protocolo de comunicao bem definido.
O I2C trabalha no modelo master-slave, com pelo menos um dispositivo atuando
como master, e os demais dispositivos atuando como slave. A funo do master
coordenar a comunicao, sendo que ele quem envia informaes a determinado slave
ou consulta informaes. No vi nenhum setup, ou tutorial, onde o dispositivo slave inicia a
comunicao, sempre o master quem faz esse papel. Podemos ter mais de um master
numa conexo I2C, e at 112 dispositivos slaves. Alguns materiais pela Internet, incluindo
o site do Arduino, falam que possvel termos 127 dispositivos num setup I2C, mas eu
acredito que esse nmero seja terico, e que 112 dispositivos um nmero mais realista.
Nesta pgina voc encontra um excelente material sobre I2C.
Um dispositivo conectado ao barramento, atuando como Master, e 3 dispositivos atuando como Slave,
tambm conectados ao barramento
O Arduino vem com pinos prprios para a conexo I2C, no caso do Uno e derivados os
pinos so sempre o 4 (SDA) e 5(SCL). No caso do Arduino Mega, os pinos utilizados so
o 20 (SDA) e 21 (SCL).
SDA significa Serial Data e SCL significa Serial Clock. SDA o pino que efetivamente
transfere os dados, e SCL serve para temporizao entre os dispositivos, de modo que a
comunicao pela SDApossa ter confiabilidade. Como podem observar, tanto o envio
quanto a recepo de dados realizada utilizando a linha SDA, ou seja, uma linha bidirecional de comunicao, ora estamos enviando dados por este pino, ora estamos
recebendo dados.
Existem uma variedade enorme de dispositivos que utilizam o protocolo I2C, como o
prprio Arduino, Raspberry, memrias externas (EEPROM), I/O expanders, RTC (Real
Time Clock), Visor (LCD, TFT, etc), sensores diversos(temperatura, acelermetro, etc).
Portanto, uma hora ou outra voc certamente vai se deparar com um dispositivo I2C, e
saber trabalhar com o protocolo vai ser muito til. Vrios dispositivos oferecem vrias
interfaces de conexo, ou seja, podemos conect-lo ao Arduino usando I2C, ou serial, ou
SPI, e, depois que aprender I2C, bem provvel que esta seja sua escolha.
Alm do SDA e SCL, os dispositivos utilizam o terra (GND) e o Vcc para alimentao.
Abaixo um exemplo de ligao mais real:
Reparem na imagem acima o uso de resistores pull-up para as linhas SDA e SCL. Estes
resistores normalmente so utilizados quando h mais de um slave no barramento, e o
valor do resistor dependente dos dispositivos. Normalmente dispositivos I2C possuem
um datasheet, e nele podemos encontrar o valor adequado dos resistores pull-up. Se
estiver utilizando apenas um dispositivo slave conectado ao Arduino, no se preocupe, o
Arduino j vem com resistores pull-up internos especializados para a comunicao I2C.
Ainda com relao a imagem acima, a ordem que conectamos os dispositivos no importa.
Podemos ligar os dispositivos como quizermos, respeitando a pinagem certa, que o
resultado final ser o mesmo.
Como podem ver no exemplo acima, o dispositivo X possui dois endereos( 0x92 e 0x93),
sendo que o valor que realmente nos interessa o 0x49, que obtido desconsiderando o
ultimo bit de qualquer um dos endereos anteriores.
Caso no fique claro pelo datasheet se o seu dispositivo usa 7 ou 8 bits no
endereamento, outra forma verificar se o endereo esta na faixa de endereos I2C
vlidos.
Como podem ver, a faixa disponvel vai de 0x08 a 0x77. No se esquea que em
hexadecimal, e fazendo as converses para decimal podemos concluir que o nmero de
I2C Escrita
A escrita em dispositivos I2C relativamente simples. O trecho de cdigo abaixo mostra
como funciona esse processo:
Wire.beginTransmission(endereo);
Wire.write(memria);
Wire.write(valor);
Wire.endTransmission();
I2C Leitura.
O processo de leitura envolve mais comandos. Normalmente o dispositivo possui diversos
registradores (ou posies de memria) para armazenar diferentes informaes, ento
temos que informar de qual registrador queremos ler informao. Ainda, lembrando que
cada registrador armazena um byte, podemos especificar o nmero de bytes que
queremos ler. Vamor ver um trecho de cdigo:
Wire.beginTransmission(endereo);
Wire.write(memoria);
Wire.endTransmission();
Wire.requestFrom(endereo, 1);
byte valor;
if (Wire.available()){
valor=Wire.read();
}
Wire.endTransmission();
Referncias
Blog TronixStuff
Endereamento
PDF sobre o protocolo I2C
I2C a sigla de Inter-Integrated Circuit, e basicamente um protocolo de comunicao
entre dispositivos que falam I2C.
At este momento vimos alguns protocolos de comunicao que o Arduino suporta, como
SPI, One-Wire, e mesmo a interface serial um protocolo de comunicao bem definido.
O I2C trabalha no modelo master-slave, com pelo menos um dispositivo atuando
como master, e os demais dispositivos atuando como slave. A funo do master
coordenar a comunicao, sendo que ele quem envia informaes a determinado slave
ou consulta informaes. No vi nenhum setup, ou tutorial, onde o dispositivo slave inicia a
comunicao, sempre o master quem faz esse papel. Podemos ter mais de um master
numa conexo I2C, e at 112 dispositivos slaves. Alguns materiais pela Internet, incluindo
o site do Arduino, falam que possvel termos 127 dispositivos num setup I2C, mas eu
acredito que esse nmero seja terico, e que 112 dispositivos um nmero mais realista.
Nesta pgina voc encontra um excelente material sobre I2C.
Um dispositivo conectado ao barramento, atuando como Master, e 3 dispositivos atuando como Slave,
tambm conectados ao barramento
O Arduino vem com pinos prprios para a conexo I2C, no caso do Uno e derivados os
pinos so sempre o 4 (SDA) e 5(SCL). No caso do Arduino Mega, os pinos utilizados so
o 20 (SDA) e 21 (SCL).
SDA significa Serial Data e SCL significa Serial Clock. SDA o pino que efetivamente
transfere os dados, e SCL serve para temporizao entre os dispositivos, de modo que a
comunicao pela SDApossa ter confiabilidade. Como podem observar, tanto o envio
quanto a recepo de dados realizada utilizando a linha SDA, ou seja, uma linha bidirecional de comunicao, ora estamos enviando dados por este pino, ora estamos
recebendo dados.
Existem uma variedade enorme de dispositivos que utilizam o protocolo I2C, como o
prprio Arduino, Raspberry, memrias externas (EEPROM), I/O expanders, RTC (Real
Time Clock), Visor(LCD, TFT, etc), sensores diversos(temperatura, acelerometro, etc).
Portanto, um hora ou outra voc certamente vai se deparar com um dispositivo I2C, e
saber trabalhar com o protocolo vai ser muito til. Vrios dispositivos oferecem vrias
interfaces de conexo, ou seja, podemos conect-lo ao Arduino usando I2C, ou serial, ou
SPI, e, depois que aprender I2C, bem provvel que esta seja sua escolha.
Alem do SDA e SCL, os dispositivos utilizam o terra(GND) e o Vcc para alimentao.
Abaixo um exemplo de ligao mais real:
Reparem na imagem acima o uso de resistores pull-up para as linhas SDA e SCL. Estes
resistores normalmente so utilizados quando h mais de um slave no barramento, e o
valor do resistor dependente dos dispositivos. Normalmente dispositivos I2C possuem
um datasheet, e nele podemos encontrar o valor adequado dos resistores pull-up. Se
estiver utilizando apenas um dispositivo slave conectado ao Arduino, no se preocupe, o
Arduino j vem com resistores pull-up internos especializados para a comunicao I2C.
Ainda com relao a imagem acima, a ordem que conectamos os dispositivos no importa.
Podemos ligar os dispositivos como quizermos, respeitando a pinagem certa, que o
resultado final ser o mesmo.
A distncia normal de trabalho no barramento I2C de aproximadamente 1 metro.Alem
disso podemos ter problemas de impedncia, mas ai j no posso ajudar muito, se
Como podem ver no exemplo acima, o dispositivo X possui dois endereos( 0x92 e 0x93),
sendo que o valor que realmente nos interessa o 0x49, que obtido desconsiderando o
ultimo bit de qualquer um dos endereos anteriores.
Caso no fique claro pelo datasheet se o seu dispositivo usa 7 ou 8 bits no
endereamento, outra forma verificar se o endereo esta na faixa de endereos I2C
vlidos.
Como podem ver, a faixa disponvel vai de 0x08 a 0x77. No se esquea que em
hexadecimal, e fazendo as converses para decimal podemos concluir que o nmero de
Bem, j sabemos como conectar os dispositivos e como nos direcionar a ele. Vamos
comear a brincadeira?
I2C Escrita
A escrita em dispositivos I2C relativamente simples. O trecho de cdigo abaixo mostra
como funciona esse processo:
Wire.beginTransmission(endereo);
Wire.write(memria);
Wire.write(valor);
Wire.endTransmission();
I2C Leitura.
O processo de leitura envolve mais comandos. Normalmente o dispositivo possui diversos
registradores (ou posies de memria) para armazenar diferentes informaes, ento
temos que informar de qual registrador queremos ler informao. Ainda, lembrando que
Wire.beginTransmission(endereo);
Wire.write(memoria);
Wire.endTransmission();
Wire.requestFrom(endereo, 1);
byte valor;
if (Wire.available()){
valor=Wire.read();
}
Wire.endTransmission();