Hectic
24.06.2021, 14:19
Hallo liebe Gemeinde,
seit ein paar Tagen beschäftige ich mich mit dem I2C-Bus und finde das eigentlich auch recht einfach. So habe ich z. B. schon problemlos zwei Motoren über den MD25 Dual-Motortreiber an's Laufen bekommen. Beim Ultraschallsensor SRF10 stoße ich jedoch auf Probleme.
- Ich greife unter Linux mit Perl und dem Modul Device::I2C auf den I2C-Bus zu.
- In der Beschreibung des Sensors steht, dass eine Messung ca. 65ms benötigt und vorher nichts brauchbares raus kommt. Also schreibe ich die 81 (für Antwort in cm) an Register 0 (Befehlsregister), warte 100ms (lieber mehr als zu wenig) und lese dann ein Byte von Register 2 (Hi Byte) und ein Byte von Register 3 (Lo Byte).
- ( Hi Byte * 256 ) + Lo Byte = Range in cm ( sollte so sein, oder? )
- Die erste Messung beim Programmaufruf ist korrekt ( Hindernis in 30cm Entfernung aufgestellt, zeigt ca. 29cm an). Alles folgende sind viel zu große Zahlen. Sogar die Software Revision ist beim zweiten Mal falsch! :confused:
Ich stelle diese Frage im Bereich Sensoren / Sensorik, weil alles andere bei mir bisher läuft. Dennoch kann ich nicht ausschließen, dass es auch am Treiber unter Linux oder an einer Eigenheit von Perl liegen könnte. So hatte ich im Internet schon recherchiert, dass es wohl mal ein Problem mit einem Linux-Treiber gab, der keine wiederholte Befehle an den I2C-Bus schicken konnte ohne den vorherigen abzuschließen (?). Habe das ehrlich gesagt nicht wirklich verstanden :confused:. Ich könnte mir auch vorstellen, das Perl die Bytes intern in signed integer umwandelt und deshalb was falsches dabei raus kommt. Das glaube ich aber weniger, weil die erste Messung ja stimmt.
Ich stehe gerade voll an der Wand und finde keinen Weg, darum frage ich einfach mal hier, wo sich die ganzen Profis treffen ;)
Hatte hier schon mal jemand das Problem, dass Folgemessungen am SRF10 nicht stimmen und wenn ja, wie wurde das gelöst?
Ich sag schon mal Danke für's lesen und antworten.
Hectic
Edit: SF10 geändert in SRF10
seit ein paar Tagen beschäftige ich mich mit dem I2C-Bus und finde das eigentlich auch recht einfach. So habe ich z. B. schon problemlos zwei Motoren über den MD25 Dual-Motortreiber an's Laufen bekommen. Beim Ultraschallsensor SRF10 stoße ich jedoch auf Probleme.
- Ich greife unter Linux mit Perl und dem Modul Device::I2C auf den I2C-Bus zu.
- In der Beschreibung des Sensors steht, dass eine Messung ca. 65ms benötigt und vorher nichts brauchbares raus kommt. Also schreibe ich die 81 (für Antwort in cm) an Register 0 (Befehlsregister), warte 100ms (lieber mehr als zu wenig) und lese dann ein Byte von Register 2 (Hi Byte) und ein Byte von Register 3 (Lo Byte).
- ( Hi Byte * 256 ) + Lo Byte = Range in cm ( sollte so sein, oder? )
- Die erste Messung beim Programmaufruf ist korrekt ( Hindernis in 30cm Entfernung aufgestellt, zeigt ca. 29cm an). Alles folgende sind viel zu große Zahlen. Sogar die Software Revision ist beim zweiten Mal falsch! :confused:
Ich stelle diese Frage im Bereich Sensoren / Sensorik, weil alles andere bei mir bisher läuft. Dennoch kann ich nicht ausschließen, dass es auch am Treiber unter Linux oder an einer Eigenheit von Perl liegen könnte. So hatte ich im Internet schon recherchiert, dass es wohl mal ein Problem mit einem Linux-Treiber gab, der keine wiederholte Befehle an den I2C-Bus schicken konnte ohne den vorherigen abzuschließen (?). Habe das ehrlich gesagt nicht wirklich verstanden :confused:. Ich könnte mir auch vorstellen, das Perl die Bytes intern in signed integer umwandelt und deshalb was falsches dabei raus kommt. Das glaube ich aber weniger, weil die erste Messung ja stimmt.
Ich stehe gerade voll an der Wand und finde keinen Weg, darum frage ich einfach mal hier, wo sich die ganzen Profis treffen ;)
Hatte hier schon mal jemand das Problem, dass Folgemessungen am SRF10 nicht stimmen und wenn ja, wie wurde das gelöst?
Ich sag schon mal Danke für's lesen und antworten.
Hectic
Edit: SF10 geändert in SRF10