Hallo oberallgeier,
mir fallen 3 Dinge auf.
1)
Im deinem oben angegebenen ersten Code liest du in der while(1)-Schleife immer ZWEI Bytes aus.
Laut Doku bzw. Musterprogramm aus dem PDF von Robotikhardware (http://www.robotikhardware.de/download/srf02doku.pdf) Seite 8 wird dort aber nur das Register 0 gelesen. (Auch so im Text erwähnt.)
Dein Code mit meinen Kommentaren:
2)Code:while ( 1 ) { i2c_start( Sadd + I2C_WRITE ); i2c_write( 0x00 ); // HIER OK. Adresse 0 anzusprechen i2c_stop(); i2c_start ( Sadd + I2C_READ ); byte_0 = i2c_readAck(); // OK, um das Firmware-Register geht es byte_1 = i2c_readNak(); // NICHT OK, ein weiteres Byte zu lesen? i2c_stop(); if ( byte_0 == 0 ) break; }
In deiner while(1)-Schleife ist KEIN wait enthalten.
In dem Beispiel ist ein 'Wait' mit Bascom als "Waitms 1" angegeben.
Ich bin nicht sicher, aber ein "Dauerfeuer" auf dem Bus ist nicht erlaubt.
Hier solltest du doch eines deiner eigentlich zu sparenden waits auch mal einbauen.
3)
In deinem "... NICHT realisierten ..." Codestück liest du zwar nicht mehr das zweite Byte vom Register, aber dort loopst du auch nicht mehr.
Warum?
Viele Grüße und vor allem Erfolg
Sternthaler
Lesezeichen