So, wir sind einen Schritt weiter - allerdings wissen wir ab jetzt wirklich nicht mehr weiter:
Wenn man in unserer neuen else if Abfrage in task_i2c das hier:
Code:
TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(0<<TWEA)|(0<<TWSTA)|(0<<TWSTO);
zu dem:
Code:
TWCR = (1<<TWEN)|(1<<TWIE)|(0<<TWINT)|(0<<TWEA)|(0<<TWSTA)|(0<<TWSTO);
ändert, können wir damit:
Code:
I2CTWI_transmitByte_RepeatedStart(0x55<<1,0x07);
uint8_t irmsb = I2CTWI_readByte(0x55<<1);
und damit (bewirkt das gleiche):
Code:
I2CTWI_transmitByte_RepeatedStart(0x55<<1,0x07);
I2CTWI_readBytes(0x55<<1, sensorBuf, 1);
das MSB abfragen - Juhu!
ALLERDINGS: Das Programm bzw. die I2C Kommunikation stürzt ab, sobald das MSB 255 ist und sobald man zwei Bytes abfragen möchte, also hiermit:
Code:
I2CTWI_transmitByte_RepeatedStart(0x55<<1,0x07);
uint8_t irmsb = I2CTWI_readByte(0x55<<1);
uint8_t irlsb = I2CTWI_readByte(0x55<<1);
und hiermit:
Code:
I2CTWI_transmitByte_RepeatedStart(0x55<<1,0x07);
I2CTWI_readBytes(0x55<<1, sensorBuf, 2);
Anscheinend wird ja mit TWINT das I2C Interrupt deaktiviert - sollte man vielleicht doch dort nach dem Fehler suchen?
Danke und
Viele Grüße
teamohnename
EDIT:
Gerade mal das Bild am Scope pausiert, kurz bevor die Kommunikation abschmiert: Zum Schluss wird nach dem MSB ein Stop durchgeführt. Wenn das MSB 255 erreicht, wird SDA auf low gezogen, wo es vorher high war - liegt das am Slave oder wird ein Repeated Start durchgeführt?
Hier zwei Bilder davon - einmal, solange der Wert unter 255 ist, danach, wenn er 255 ist, ein Bruchteil einer Sekunde nach Bild 2 stürzt alles ab.

Lesezeichen