I2C Wire.h читает через раз...
- Войдите на сайт для отправки комментариев
Ув. Товарищи. Прежде всего о конфигурации.
Девайс (мастер, 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ти читает, в остальных нет.
Помогите советом, может сталкивался кто-то. Спасибо!
Да, чуть не забыл. Работает все "на столе", питается от 2х хвостов УСБ портов.
UP !
За подъём темы в приличном обществе канделябром по лицу бьют.
Может задержку добавить в 5-100мс?
Может задержку добавить в 5-100мс?
Где именно задержку? Спасибо!
После записи и после чтения. В некоторых примерах задержка используется.
В библиотеке для дисплея с тачскрином для перевода в factory mode задержка после записи регистра стоит вообще в 300мс=)
Кстати, тоже сейчас парюсь с тем, что читаются только нули..поэтому тоже попробую согласовать уровни..девайс на 3.3в, сейчас 5-ти вольтовую ардуинку запитываю от 3.3=)
http://arduino.ru/forum/programmirovanie/eeprom-tachskrina-i2c
На ebay есть куча преобразователей для i2c для таких случаев.
У меня с преобразователем все впорядке. ADUM1250 она и изолятор и преобразователь. На мастер девайс, на запись влиять не могу... Сообщение о приеме байт из обработчика появляется через раз (((( Как заставить работать? Спасибо!
А через раз - это что значит?..не происходит чтение вообще, или читается не то? Что именно читается?