sarge
01.06.2009, 15:45
Hallo.
Ich benutze momentan einen SRF10 an einem USB_I2C zu Testzwecken. Angesteuert wird das ganze mit einem kleinen Python-Skript.
from usb2i2c import *
import time
srf=USB2I2C()
srf.write(0xe0, 2, 92)
srf.write(0xe0, 1, 7)
while 1:
time.sleep(0.2)
try:
srf.write(0xe0, 0, 81)
#time.sleep(0.1)
#revision=ord(srf.read(0xe1, 0, 1))
high= ord(srf.read(0xe1, 2, 1))
low = ord(srf.read(0xe1, 3, 1))
print low, high,'\n'
#print revision,'\n'
#distance= low + (high<<8)
#print distance
except:
pass
Wenn ich dieses Skript ausfuehre, bekomme ich auch Werte fuer die Entfernung aus dem Low-Byte Register des SRF10 zurück. Das High-Byte Register ist jedoch entweder 0 oder 255. D.h. Entfernungen ueber 255cm werden nicht richtig angezeigt (mit dem Eingestellten Reichweiten-Wert müssten jedoch 4m möglich sein)?
Habe ich einen Denkfehler in meinem Programm oder kennt jemand dieses Problem?
Wenn ich die µs beim SCF10 auslese, dann haben beide Register einen ordentlichen Wert, aber wenn ich Entfernungen in cm oder Zoll auslese, dann stimmt das High-Byte Register nicht. Hab auch schon ein wenig an der Reichweite und der Verstärkung rum gedreht, dabei hat sich die Situation auch nicht verändert - jedoch habe ich festgestellt, dass ab einem Verstärkungswert von 9 kein vernünftiges Messen mehr möglich ist, da permanent Werte im 20 cm Bereich angezeigt werden. Außerdem habe ich an verschiedenen Stellen im Skript einfach mal Pause eingesetzt, dies hatte entweder den Effekt, dass ich nur 0 zurück bekam, oder dass das Revisionsregister 255 gemeldet hat, also der Messvorgang noch nicht abgeschlossen war. Ab einer gewissen Entfernung bekomme ich für das Low Register auch nur noch 0 und für das High-Register 255 - obwohl der Abstand definitiv unter 4m liegt.
Vielleicht gibt es ja jemand, der ähnliche Probleme hat, oder der einen Denkfehler bei mir findet?
Mit freundlichen Grüßen,
Robert
Ich benutze momentan einen SRF10 an einem USB_I2C zu Testzwecken. Angesteuert wird das ganze mit einem kleinen Python-Skript.
from usb2i2c import *
import time
srf=USB2I2C()
srf.write(0xe0, 2, 92)
srf.write(0xe0, 1, 7)
while 1:
time.sleep(0.2)
try:
srf.write(0xe0, 0, 81)
#time.sleep(0.1)
#revision=ord(srf.read(0xe1, 0, 1))
high= ord(srf.read(0xe1, 2, 1))
low = ord(srf.read(0xe1, 3, 1))
print low, high,'\n'
#print revision,'\n'
#distance= low + (high<<8)
#print distance
except:
pass
Wenn ich dieses Skript ausfuehre, bekomme ich auch Werte fuer die Entfernung aus dem Low-Byte Register des SRF10 zurück. Das High-Byte Register ist jedoch entweder 0 oder 255. D.h. Entfernungen ueber 255cm werden nicht richtig angezeigt (mit dem Eingestellten Reichweiten-Wert müssten jedoch 4m möglich sein)?
Habe ich einen Denkfehler in meinem Programm oder kennt jemand dieses Problem?
Wenn ich die µs beim SCF10 auslese, dann haben beide Register einen ordentlichen Wert, aber wenn ich Entfernungen in cm oder Zoll auslese, dann stimmt das High-Byte Register nicht. Hab auch schon ein wenig an der Reichweite und der Verstärkung rum gedreht, dabei hat sich die Situation auch nicht verändert - jedoch habe ich festgestellt, dass ab einem Verstärkungswert von 9 kein vernünftiges Messen mehr möglich ist, da permanent Werte im 20 cm Bereich angezeigt werden. Außerdem habe ich an verschiedenen Stellen im Skript einfach mal Pause eingesetzt, dies hatte entweder den Effekt, dass ich nur 0 zurück bekam, oder dass das Revisionsregister 255 gemeldet hat, also der Messvorgang noch nicht abgeschlossen war. Ab einer gewissen Entfernung bekomme ich für das Low Register auch nur noch 0 und für das High-Register 255 - obwohl der Abstand definitiv unter 4m liegt.
Vielleicht gibt es ja jemand, der ähnliche Probleme hat, oder der einen Denkfehler bei mir findet?
Mit freundlichen Grüßen,
Robert