srf10 auslesen
|
21.06.2007, 17:16
Beitrag #1
|
|||
|
|||
srf10 auslesen
Hallo,
ich bin gerade dabei mein srf10 ultraschall modul in gebrauch zu nehmen. angeschlossen ist das ganze korrekt, jedoch gibt das modul keine werte über 17 cm zurück hier der code den ich benutze: #use "i2c-treiber.ic" void main(){ int m; i2c_init(); while(1){ i2c_write_2byte(224,0,81); sleep(0.07); i2c_write_2byte(224,2,3); m = i2c_receive_2byte(224); printf("%d\n", m); sleep(2.0); } } mfg benj sometimes High-Tech problems have Low-Tech solutions... |
|||
25.06.2007, 10:08
Beitrag #2
|
|||
|
|||
RE: srf10 auslesen
Hallo benj!
Sind die Messergebnisse unterhalb der 17 cm korrekt, oder misst er da auch irgend etwas? Du kannst versuchen, mit den Verstärkungswerten ein wenig zu spielen. Wir haben schon mehrmals festgestellt, dass die Schallkeule relativ breit ist und bei zu hohem Verstärkungsfaktor schnell Echhos von sehr kleinen Objekten mit wahrnimmt und dadurch nicht auf die Reichweite kommt. Allerdings musst du aufpassen, da bei kleineren Verstärkungen kleinere Objekte nicht mehr erkannt werden. Das sollte man dann ausprobieren. Ich hoffe, das hat den gewünschten Effekt. Grüße Thomas |
|||
26.06.2007, 12:14
Beitrag #3
|
|||
|
|||
RE: srf10 auslesen
das problem ist, das er bei mehr als 17 cm als resultat 0 ausgibt, also auch kein kleines objekt erkennt wird. ich habe dann etwas herumgespielt mit der verstärkung etc und mittlerweile gibt das modul auch entfernungn bis zu 4 meter an, nur sind alle messwerte etwa 1,5 mal so gross wie die wirkliche distanz ist...
sometimes High-Tech problems have Low-Tech solutions... |
|||
27.06.2007, 10:47
Beitrag #4
|
|||
|
|||
RE: srf10 auslesen
Hallo!
Ich glaube, ich habe den Denkfehler. Um die Beiden Register mit der Entfernung auszulesen gibst du folgenden Befehl an: i2c_write_2byte(224,2,3); Mit diesem Befehl bewirkst du aber etwas ganz Anderes. Du schreibst damit in das Register 2 den Wert 3. Das Register 2 ist das Entfernungsregister, mit dem man die maximale Messentfernung einstellen kann. Die Formel dafür ist die folgende: (Registerwert * 43 mm) + 43 mm Bei dem durch dich eingetragenen Wert 3 ergibt sich also: (3 * 43) + 43 = 172 mm entspricht 17,2 cm Das ist also die maximale Entfernung, die du damit ungewollt einstellst. Um das Messergebnis auszulesen müssen die Befehle wie folgt aussehen: i2c_write_byte(224,2); m = i2c_receive_byte(224) * 256; i2c_write_byte(224,3); m = m + i2c_receive_byte(224); Ich hoffe, das funktioniert jetzt so. Wäre nett, wenn du uns mitteilen könntest, obs so funktioniert hat, oder ob noch ein Wurm drin steckt. Grüße Thomas |
|||
27.06.2007, 15:12
Beitrag #5
|
|||
|
|||
RE: srf10 auslesen
so funktionierts, auch die messergebnisse sind korrekt. das problem mit den zu grossen ergebnissen konnte ich auch lösen. das *256 hatte ich nicht eingebaut, dafür das 2. register 2-fach ausgelesen :/
vielen dank für die hilfe benj sometimes High-Tech problems have Low-Tech solutions... |
|||
03.07.2007, 09:44
Beitrag #6
|
|||
|
|||
RE: srf10 auslesen
Hallo!
Sehr schön, dass es jetzt klappt. Die *256 sind dafür da, das Byte nach links zu verschieben. Bei der Messung handelt es sich um ein 16 Bit Ergebnis. Das passt aber so nicht in ein Register bzw eine Übertragung. Also ist es Zweigeteilt und wird in ein High-Byte und in ein Low-Byte abgelegt. Das High-Byte bekommt man dann ebenfalls als Byte (8 Bit) und muss dieses dann erst in den High-Bereich der 16-Bit Variable schieben. Alternativ kann man das auch mit folgendem Befehl machen: m = i2c_receive_byte(224) << 8; Grüße Thomas |
|||
|
Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste