Вопрос по i2c

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Денис, 21 фев 2011.

  1. Денис

    Денис Нуб

    помогите разобраться с i2c
    вроде написал тестовые скетчи для двух контролеров
    но почему то работает это всё это ровно один раз
    второй пакет посылается но не читается в чем дело понять не могу

    отладкой всего этого занимаюсь в Proteus
    Код (Text):
    #include "Wire.h" //подключаем библиотеку


    float x = 0.987446452; //создаем переменную


    void setup()
    {
      Wire.begin();//активизируем шину в режиме мастера
      Serial.begin(57600); // включаем связь с пк
    }

    void loop()
    {

      union Decompozition{ float arg; uint8_t res[4];}  DecVar;
      Serial.println(x,8); // отправляем в пк
      DecVar.arg=x;
      Wire.beginTransmission(1); // включаем передачу по адресу 1

      Serial.print(DecVar.res[0],BIN); // отправляем в пк
      Serial.print(" "); // отправляем в пк
      Wire.send(DecVar.res[0]); // отправляем 1 байт

      Serial.print(DecVar.res[1],BIN); // отправляем в пк
      Serial.print(" "); // отправляем в пк
      Wire.send(DecVar.res[1]); // отправляем 1 байт

      Serial.print(DecVar.res[2],BIN); // отправляем в пк
      Serial.print(" "); // отправляем в пк
      Wire.send(DecVar.res[2]); // отправляем 1 байт

      Serial.print(DecVar.res[3],BIN); // отправляем в пк
      Serial.print(" "); // отправляем в пк
      Wire.send(DecVar.res[3]); // отправляем 1 байт

      Serial.println(""); // отправляем в пк
      Wire.endTransmission(); // прекрашаем передачу

      x++; //увеличиваем х
      delay(500); // ждем полсекунды
    }
     

    Код (Text):
    #include "Wire.h"// подключаем библиотеку





    void setup()
    {
      Wire.begin(1); // становимся подчиненым
      Wire.onReceive(receiveEvent); // создаем прерывание по появлению обрашения к шине
      Serial.begin(57600); // включаем связь с пк
    }
    void loop()
    {
      delay(100);
    }

    void receiveEvent(int howMany)
    {
      union Decompozition{float arg;uint8_t res[4];}DecVar;

      for (int x=0;0<Wire.available();x++){

        DecVar.res[x] = Wire.receive(); //получаем байт данных
        Serial.print(DecVar.res[x],BIN); // отправляем в пк
        Serial.print(" "); // отправляем в пк
      }
      Serial.println("");
      Serial.println(DecVar.arg,8); // отправляем в пк
    }

    схема на которой идет отладка
    [​IMG]