[DUVIDA][comunicação i2c] quando slave é desligado, master para de processar, isso é normal ?

Olá Pessoal,

    Tava olhando o forum e vi um post do nosso amigo zé gustavo sobre comunicação i2c,  dai resolvi fazer uns testes.

     Aproveitando os exemplos da biblioteca WIRE do proprio arduino,  gravei o sketch master_write em um arduino mega,   e o sketch  slave_receiver  em um arduino UNO.

Teste 1 - normal -  liguei os dois com os cabos corretos e liguei o monitor serial no UNO,   tudo lindo,  comunicação perfeita.

Teste 2- Acrescentei um detalhe no codigo do mega,  acrescentei no master_write que toda vez que ele transmitisse um led deveria acender e piscar.  

   Resultado -  Tudo lindo:  cada vez que aparece um resultado no receiver que [e o arduino UNO, o led do arduino mega pisca, indicando funcionamento.

Tá aqui o codigo:

// Wire Master Writer
// by Nicholas Zambetti a href="http://www.zambetti.com>">http://www.zambetti.com>;

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

int led = A7;

#include <Wire.h>

void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
pinMode(led, OUTPUT); 
}

byte x = 0;

void loop(){
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)

Wire.beginTransmission(4); // transmit to device #4
Wire.write("x is "); // sends five bytes
Wire.write(x); // sends one byte 
Wire.endTransmission(); // stop transmitting

x++;
delay(500);
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(500); 
}

Teste 3 -  Eu simplesmente desliguei o arduino UNO ou seja o slave_receiver,  -  RESULTADO:  o Arduino mega deixou de funcionar e processar,  ou seja,  quando se desliga o slave o master simplesmente para.

     A DUVIDA:    ISSO É NORMAL ??????????

  Quer dizer, você criar uma aplicação onde um nucleo master se comunica com algum periferico, e se esse for desplugado o master para de funcionar????  e todo o restante do processamento? e se a comunicação for só pra uma funcao de visualização e o importante mesmo for o processamento no nucleo master,  então tudo sera travado se um slave cair ????

Exibições: 297

Responder esta

Respostas a este tópico

Peço desculpas ao ze gustavo, parece que ele respondeu num post anterior que fiz mas deu um bug, 

Ainda não matei essa, peço ajuda da galera.

bom, testei seu código em um nano v3. coloquei uns print da serial em cada linha da i2c (init, write e end), sem nada conectado na i2c dele. e ele executa todos os prints ou seja não tá ficando preso, mesmo sem slave comunicar. a execução continua.

Jonas,

     De ontem pra hoje fiz vários testes, o que descobri foi o seguinte:

1- Se durante a comunicação i2c você simplesmente retirar os fios, deixando eles livres,  Realmente, o master continua a processar, continuando outras funções do sketch.

2- Já se durante essa comunicação, você simplesmente desliga o Slave(ao menos comigo tendo o mega como master e um uno como slave),  o master simplesmente para de processar, ele trava.

3- Testei então colocar os dois resistores de 1k de pull up recomendados,  do SDA e do SCL para o Vcc,   dai desliguei o slave e de novo o master continuou travado.

4- Implementei um terceiro resistor de 1k,  só que agora em serie,  causando resistência no sinal do SCL,  e voilá,   Funcionou.

    O lance é que fiz testes usando um UNO como Master e um nano como slave e tambem travava,  mas com a configuração dos 3 resistores ( dois em paralelo e um em série)  a coisa parece que se resolveu.

    O mais preocupante é que não encontrei nada sobre isso na net.

     Mas espero que se alguem mais tiver esse problema,  esse post ajude.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço