Продолжение возни с 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.
Прошу помочь, кто может и кому не лень. :)
Прошу помочь, кто может и кому не лень. :)