Продолжение возни с I2C на Due
- Войдите на сайт для отправки комментариев
Пнд, 15/12/2014 - 22:38
"Уже всю голову поломал" - так часто начинают темы, и моя, к сожалению, не исключение :(
Суть вопроса вот в этом (вкратце, не нужно подавать сигнал "стоп" на шину после записи номера регистра для чтения),мануал по стандартным библиотекам утверждает, что все так и есть, как в обсуждении, но, черт побери, как ни пытался, конструкции вида:
void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial for output inputString.reserve(3); //for debug } void loop() { if (stringComplete) { pos = inputString.toInt(); switch (pos) { case 1: Wire.beginTransmission(0x5a); Wire.write(7); Wire.endTransmission(false); //delay(100); Wire.beginTransmission(0x5a); Wire.requestFrom(0x5a, 3); // request 3 bytes from slave device # case 2: Wire.beginTransmission(0x5a); Wire.write(7); Wire.endTransmission(true); //delay(100); Wire.beginTransmission(0x5a); Wire.requestFrom(0x5a, 3); case 3: Wire.beginTransmission(0x5a); Wire.write(7); Wire.endTransmission(false); //delay(100); //Wire.beginTransmission(0x5a); Wire.requestFrom(0x5a, 3); case 4: Wire.beginTransmission(0x5a); Wire.write(7); //Wire.endTransmission(false); //delay(100); Wire.beginTransmission(0x5a); Wire.requestFrom(0x5a, 3); //case 5: } //end switch while(Wire.available()) // slave may send less than requested { char c = Wire.read(); // receive a byte as character Serial.println(c, HEX); // print the character } Wire.endTransmission(); inputString = ""; //for debug stringComplete = false; //for debug //Serial.println(res, HEX); } delay(500); }
не дают нужного результата ни в одном случае. Ковыряние в библиотеке Wire.cpp вызвало у меня недоумение- там нет проверки параметра, передаваемого в функцию endTransmission. Или я этого не вижу? На мой взгляд "стоп" в
if (error == 0) {
TWI_Stop(twi);
будет всегда выполняться, если передача буфера прошла успешно, не взирая на параметр, передаваемый в endTransmission.
Прошу помочь, кто может и кому не лень. :)
Прошу помочь, кто может и кому не лень. :)