Hi,
wenn ich eine Messung starte und sofort die Firmware auslese, sollte ich
ja den Statuscode 255 zurückbekommen, solange die Messung läuft. Doch
ich bekomme immer eine 5 zurück, was wohl meine Firmware-Version ist.(?)
Tausche ich die Abfrage der Version (sofort nach starten der Messung)
gegen das auslesen der beiden Bytes aus, bekomme ich einen anderen Wert
als den finalen Wert nach einem Delay:
-> Messung
-> Bytes auslesen - z.B. 100 cm
-> Delay 65ms
-> Bytes auslesen - z.B. 120 cm
Da scheint die Messung noch zu laufen. Wieso bekomme ich kein 255 Status
zurück?
Den Sensor habe ich vor 2 Monaten gekauft. Natürlich kann man schwer
davon ableiten welche Version ich habe, aber kann 5 stimmen? Gibt es
schon höhere Versionen?
Das zweite Problem ist, dass ich warum auch immer bei ca. 15cm mit einem
Lineal gemessen cm, einen Wert von ca. 30cm (stabil) vom Sensor bekomme.
Woran kann das den liegen? Bis auf 0 hatte ich noch keinen Wert unter
30. Kann das auch am TWI liegen? Ist das erste mal das ich damit
arbeite. Die beiden Leitungen sind mit 4,7K Widerständen an +5V
angeschlossen.
Snippet:
1 | i2c_transmit(SRF02, 0, 81);
|
2 | firmware = i2cRead(SRF02, 0);
|
3 | lcd_string_Int(firmware);
|
4 | _delay_ms(65); //Warten auf Messung
|
5 | range = getRange();
|
6 | lcd_setcursor(0,2);
|
7 | lcd_string("Range: ");
|
8 | lcd_string_Int(range);
|
9 | lcd_string(" cm");
|
10 |
|
11 | uint16_t getRange(void){
|
12 | uint16_t x;
|
13 | x = i2cRead(SRF02,2);
|
14 | if(x){x += 256;}
|
15 | x += i2cRead(SRF02,3);
|
16 | return(x);
|
17 | }
|