I2C Wire.h читает через раз...

JonnyQuest
Offline
Зарегистрирован: 08.01.2015

Ув. Товарищи. Прежде всего о конфигурации.

Девайс (мастер, 100кГц) выдает в i2c данные в виде 7бит адрес, R-бит, регистр, значение. ссылка на девайс - http://www.amanero.com/USB_E.pdf Линии XTDI и XTDO (38,39 - PA8,PA9) это и есть i2c. Как видно линнии подтянуты к +3.3в через 6.8кОм

На шине Ардуино Нано(ATMega328) в режиме слейв читает данные

#include <Wire.h>
#define SLAVE_ADDRESS 0x30

Wire.begin(SLAVE_ADDRESS);

void receiveData(int byteCount){
 byte i2cData;
  Serial.println("onReceive..." + String(byteCount) + "byte");
  for (int i=0; i<=byteCount; i++){
  while(Wire.available()) {
    i2cData[i] = Wire.read();
   Serial.print("data received: ");
  Serial.println(i2cData[i]);
  }
  parseData(i2cData);
}

и пишет в порт.

Беда в том что работает все "через раз", т.е. в 6ти случаях из 10ти читает и пишет все как надо, в остальных нет. Сначала грешил, на несогласование уровней, с одной стороны 3.3 с другой как бы 5. заказал ADUM1250 запитал обе стороны раздельно изолировал, преобразовал уровни. Не помогло. Добавил со стороны Ардуины подтягиваюшие резисторы к +5в. тоже не помогло. Пробовал все это проделать на Ардуино Мега 2560. Стабильность таже 5-6 раз из 10ти читает, в остальных нет.

Помогите советом, может сталкивался кто-то. Спасибо! 

JonnyQuest
Offline
Зарегистрирован: 08.01.2015

Да, чуть не забыл. Работает все "на столе", питается от 2х хвостов УСБ портов.

JonnyQuest
Offline
Зарегистрирован: 08.01.2015

UP !

Radjah
Offline
Зарегистрирован: 06.08.2014

За подъём темы в приличном обществе канделябром по лицу бьют.

fagci
Offline
Зарегистрирован: 12.01.2015

Может задержку добавить в 5-100мс?

JonnyQuest
Offline
Зарегистрирован: 08.01.2015

fagci пишет:

Может задержку добавить в 5-100мс?

Где именно задержку? Спасибо!

fagci
Offline
Зарегистрирован: 12.01.2015

После записи и после чтения. В некоторых примерах задержка используется.

В библиотеке для дисплея с тачскрином для перевода в factory mode задержка после записи регистра стоит вообще в 300мс=)

Кстати, тоже сейчас парюсь с тем, что читаются только нули..поэтому тоже попробую согласовать уровни..девайс на 3.3в, сейчас 5-ти вольтовую ардуинку запитываю от 3.3=)

http://arduino.ru/forum/programmirovanie/eeprom-tachskrina-i2c

Radjah
Offline
Зарегистрирован: 06.08.2014

На ebay есть куча преобразователей для i2c для таких случаев.

JonnyQuest
Offline
Зарегистрирован: 08.01.2015

У меня с преобразователем все впорядке. ADUM1250 она и изолятор и преобразователь. На мастер девайс, на запись влиять не могу... Сообщение о приеме байт из обработчика появляется через раз (((( Как заставить работать? Спасибо!

fagci
Offline
Зарегистрирован: 12.01.2015

А через раз - это что значит?..не происходит чтение вообще, или читается не то? Что именно читается?