PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unrealistische Werte beim SRF10



Twist
09.03.2005, 12:27
Hallo zusammen.

Ich betreibe einen SRF10 an meinem C-Control I. Der Messwert soll in cm ausgegeben werden. Dazu schreibe ich in das Command Register die 81.
Bei Abständen bis zu einem Meter bekomme ich noch ganz normale Werte. Aber darüber scheint irgend etwas nicht zu stimmen. Der höchste Wert für Low Range war bisher 161 und das High Register ist immer nur 0.

'-----------------Abfrage des Sensors ------------------------

SDA = ON
SCL = ON

' Starte Messung
gosub Start
Daten = 224
gosub I2C_Write
Daten = 0
gosub I2C_Write
Daten = 81
gosub I2C_Write
gosub Stop
pause 10

' Lese Ergebnis Low
gosub Start
Daten = 224
gosub I2C_Write
Daten = 3
gosub I2C_Write
gosub Stop
gosub Start
Daten = 225
gosub I2C_Write
gosub I2C_Read
Low = Daten
print Low
gosub NoAck
gosub Stop


' Lese Ergebnis High
gosub Start
Daten = 224
gosub I2C_Write
Daten = 2
gosub I2C_Write
gosub Stop
gosub Start
Daten = 225
gosub I2C_Write
gosub I2C_Read
High = Daten
print High
gosub NoAck
gosub Stop


Zu Testzwecken gebe ich die beiden Werte an die serielle Schnittstelle aus. Ich hoffe das mir jemand einen Tip geben kann.

Vielen Dank im voraus.

Gruß
Matthias

PicNick
09.03.2005, 12:37
Beim SF08 les' ich beide Werte auf einmal, und folgende reihenfolge funktioniert jedenfalls,


I2cstart
I2cwbyte Tad ' write addr
If Err = 1 Then
I2cstop
Else
I2cwbyte 2 ' register
I2cstop
Incr Tad ' --> read addr
I2cstart
I2cwbyte Tad
I2crbyte Msb , Ack
I2crbyte Lsb , Nack
I2cstop

is zwar BasCom, aber trotzdem verständlich, denk ich

Twist
09.03.2005, 12:47
Danke für die schnelle Antwort. Leider werde ich nicht ganz schlau daraus. 8-[ Wäre nett, wenn du mir das vorgehen etwas genauer erklären könntest.

PicNick
09.03.2005, 14:31
Gut, ich nehm jetzt den Code von dir


' Lese Ergebnis Low & High
gosub Start
Daten = 224
gosub I2C_Write
Daten = 2
gosub I2C_Write
gosub Stop

gosub Start
Daten = 225
gosub I2C_Write
gosub I2C_Read
gosub Ack // ich hoff, das gibts auch bei dir
high = Daten
print high
gosub I2C_Read
gosub NoAck
Low = Daten
print Low
gosub Stop

Ich weiß nicht, wie es bei dir mit der Sub "Ack" steht, die sollte es aber geben

09.03.2005, 17:33
Danke. Das Ergebnis bleibt aber leider das gleiche. Ich bekomme keine Werte über 151. Ich glaube schon, daß der Sensor einen weg hat. Hatte jemand ähnliche Erfahrungen gemacht?

PicNick
09.03.2005, 17:57
Hi, so schnell geben wir nicht auf.
Beim SF08 bekamen wir erst sinnvolle werte nachdem wir beim Start initialisiert haben:


gosub Start
Daten = 224
gosub I2C_Write
Daten = 2
gosub I2C_Write
Daten = 100 // Range
gosub I2C_Write
gosub Stop
UND
gosub Start
Daten = 224
gosub I2C_Write
Daten = 1
gosub I2C_Write
Daten = 1 // GAIN
gosub I2C_Write
gosub Stop


Dieses "151": in welchem Wert steht das drinnen High oder Low ?

Twist
09.03.2005, 19:05
Ja die 151 standen im Low byte.

Wenn ich den letzten Tip befolge, kommen recht brauchbare Werte heraus. Das einzige was mir jetzt noch Probleme bereitet, sind Fehlmessungen Aufgrund der Ausbreitung des Schallkegels. Da muß ich wohl noch etwas rumprobieren.

Vielen Dank für die schnelle Hilfe.

PicNick
09.03.2005, 19:16
Na dann, ev. bis morgen