overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Wed Mar 22, 2023 10:57 am

Hi, aktuell versuche ich einen Arduino-Sketch für einen Pi Pico zu portieren (also C, kein Python).
Es wird über I2C ein AS5600 Winkelsensor abgefragt, was am Arduino funktioniert (z.B. mit dem einfachen Beispiel-Sketch aus der AS5600-Lib).
Alle verwendeten Libs sind auch für den Pico vorhanden und es lässt sich alles compilieren und uploaden, jedoch kann der Pico kein Signal vom Sensor einlesen.

Dies KÖNNTE daran liegen, dass der Pico im Gegensatz zum Arduino nicht nur über einen I2C-Anschluss verfügt sondern über mehrere.
Zwar habe ich sowohl versucht den Standard I2C-Anschluss zu verwenden (Pin 4/5), als auch andere Pins entsprechend zu konfigurieren und zu verwenden, jedoch alles ohne Erfolg.
Jedoch kann es auch an etwas anderem liegen, da zumindest ein I2C-Scan zurückmeldet, dass "etwas" angeschlossen ist.
Dies sind meine ersten "Gehversuche" mit dem Pi, daher übersehe ich evtl. etwas.

Über Hilfe bei der Ursachenforschung oder gar Lösungsansätze für das Problem wäre ich dankbar.

User avatar
mline
Posts: 1554
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Wed Mar 22, 2023 7:29 pm

Wenn du dir die Pinbelegung ansiehst gibts 2 mögliche (ich nenns mal so) I2C-Channels. Einer ist I2C0, der andere I2C1.

Für den normalen Pico mit Arduino Framework gilt:
Wenn du I2C0 verwendest, wird standardmässig Pin 4 und 5 verwendet. Außerdem wird mit Wire.begin initialisiert.
Wenn du I2C1 verwendest, wird standardmässig Pin 26 und 27 verwendet. Außerdem wird mit Wire1.begin initialisiert.

Willst du nicht die Standardpins verwenden, musst du diese mit Wire.setSDA bzw Wire.setSCL (bzw Wire1.setSDA und Wire1.setSCL) setzen. Du musst aber wieder darauf achten ob es ein I2C0 oder I2C1 ist und dementsprechend Wire bzw Wire1 nutzen. Danach erst mit begin initialisieren.

Falls das dein Problem nicht löst, wird der Fehler wohl irgendwo anders liegen. Da du beim scannen nach I2C Geräten aber wohl schon was gefunden hast war das vermutlich eh schon richtig wie du es ursprünglich hattest.

Der Scanner aus den Beispielen zeigt dir ja die Adresse des I2C Gerätes an. War die denn korrekt?
<~~>

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Thu Mar 23, 2023 10:20 pm

Danke für die Rückmeldung!

Also der Scanner (https://www.elektronik-labor.de/Raspberry/Pico22.html) "reagiert" darauf, wenn ich z.B. Pin 4 oder 5 ziehe oder stecke. Er liefert ein "Ergebnis" aber keinen Wert (was er wohl tun sollte wenn alles ok wäre). Lasse ich nach den falschen, also nicht angeschlossenen PINs suchen, gibt es erwartungsgemäß auch kein Ergebnis. Zumindest das passt schonmal, aber irgendwas stimmt nicht, weil kein Wert rauskommt. Leider habe ich den Scanner nicht so recht verstanden um nach zu vollziehen was genau das Problem ist.
Habe leider auch kein anderes I2C-Gerät statt dem Sensor zum gegen prüfen. Aber am Arduino macht der Sensor ja auch was er soll.

In der Lib für den AS5600 für Arduino (genau ein I2C Pin-Paar) hat .begin() genau einen Parameter. Für ESP (mehrere I2Cs) sind es drei Parameter: Die ersten beiden für die gewählten Pins für SDA und SCL. Würde ja dann entsprechend auch Sinn machen, wenn die Lib für den Pi ebenfalls die drei Parameter erwarten würde. Wenn ich aber drei Stück angebe beschwert sich der Compiler und sagt er will nur genau einen Wert. Auch das kommt mir komisch vor. Könnte also sein das DAS Problem (oder zumindest ein Teil davon) an der AS5600.h liegt (der Pi Pico wird auch nicht als getestetes Gerät angegeben).
Insofern wäre ein anders I2C-Gerät incl. passender Lib vermutlich schon mal einen Test wert.

Auch wenn ich meinen Adruino-Sketch erweitere und den Channel sowie die Pins explizit angebe passiert nichts.
Sicherheitshalber am Ende nochmal am Arduino geprüft: Da funzt der Sensor nach wie vor ordnungsgemäß.

Wenn gar nix hilft kann ich immer noch versuchen den Sensor analog aus zu lesen, aber bei 60cm Kabellänge auch nicht optimal. Daher und weil ich um dran zu kommen alles auseinander bauen und am Sensor umlöten müsste wäre mir die I2C Variante lieber.

User avatar
mline
Posts: 1554
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Sat Mar 25, 2023 6:22 am

Er liefert ein "Ergebnis" aber keinen Wert
Wie meinst du das?

Entweder zeigt der Scanner ein Ergebnis (irgendwo ein X), dann weißt du die Adresse und dass dein I2C Gerät geantwortet hat.
Oder es zeigt kein Ergebnis (kein X), dann weißt du das dein I2C Gerät nicht erkannt wurde.

Bei den Scanner Beispielen wird dir in einer Tabelle ein X angezeigt. Dieses X gibt dir in dieser Tabelle an bei welche Adresse ein I2C Gerät geantwortet hat.
Beim "Default I2C-PINs" Sketch auf der Seite die du verlinkt hast wäre das 0x27 --> horizontal 0x20 und vertikal 0x07 --> 0x27
<~~>

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Sun Mar 26, 2023 11:40 am

Also nun habe ich doch mal Python installiert, da gibt es mehr Testcodes etc.
Der ganz einfache i2C Scan liefert schon kein Ergebnis:

---
from machine import Pin, I2C

i2c = I2C(0, sda=Pin(4), scl=Pin(5))

print(i2c.scan())
---
Es kommt nur [] raus, obwohl der Sensor mit 3.3V an Pin 36 und GND an Pin 38 sowie SDA an Pin 4 und SCL an Pin 5 verbunden sind.
Einfacher geht es ja kaum noch.

Wie gesagt: Sensor tut am Adjuino und das Board ist auch ok (Blink z.B. macht was es soll).
Vermutlich mach ich da einen ganz doofen Fehler, aber ich erkenne ihn nicht.

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Sun Mar 26, 2023 1:31 pm

Jetzt habe ich das hier gefunden:

To use the I2C pins on the Raspberry Pi Pico, you will need to enable the I2C interface in the firmware and software
(https://iotprojectsideas.com/how-to-use ... cropython/)

Kann es daran liegen? Und falls ja wie kann ich das interface aktivieren (ohne Pi OS)?

User avatar
mline
Posts: 1554
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Tue Mar 28, 2023 5:23 pm

Der Code aus dem oberen Post von dir ist zu wenig. Du hast versucht ein Array (dieses hier: i2c.scan() ) mit print auszugeben. Das klappt so nicht.

Bei dem Link vom unteren Post stimmt der Code. Was du mit aktivieren meinst passiert schon in den ersten paar Zeilen des Codes. Mit dem initialisieren von I2C sagst du der state machine welche Pins als was arbeiten sollen.
Also der Code aus dem Link deines letzten Posts sollte schon ein Ergebnis liefern. Wenn "No i2c device !" da steht dann wurde kein i2c Gerät gefunden.

Doku:
https://docs.micropython.org/en/latest/ ... e.I2C.scan
<~~>

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Sun Apr 02, 2023 9:12 pm

Danke für die Info, das mit dem Array macht Sinn. Und richtig: Der "untere" Code funktioniert und zeigt ein I2C Gerät an.
Glaube aber dass ich mein Problem gefunden habe. Den AS5600 Winkelsensor kann man programmieren, so dass er nicht volle 360°, sondern einen kleineren Winkel mit entsprechend besserer Auflösung ausgeben kann.
Bei meinen Anschluss-Versuchen habe ich wohl ungewollt eine solche eine Programmierung vorgenommen mit einem dummerweise sehr geringen Winkel, so dass im Ergänzungswinkel ein Nullwert ausgegeben wird. Dies ist korrekt, wirkt aber wie ein Fehler, wenn man sich dessen nicht bewusst ist und entsprechend nicht über volle 360° testet bzw. nur im "totprogrammierten" Winkelbereich.
Ärgerlich ist, dass man eine solche Programmierung laut Handbuch (wodurch ich darauf gekommen bin) nur dreimal ausführen und wohl dann auch nicht mehr rückgängig machen kann. Somit habe ich den Sensor für meine Zwecke permanent unbrauchbar gemacht. Naja, immerhin etwas gelernt dabei.
Neuer Sensor ist bestellt und ich hoffe und gehe davon aus, dass dieser dann im Neuzustand erwartungsgemäß funktioniert.

User avatar
mline
Posts: 1554
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Mon Apr 03, 2023 4:38 pm

overgegeared wrote:
Sun Apr 02, 2023 9:12 pm
Bei meinen Anschluss-Versuchen habe ich wohl ungewollt eine solche eine Programmierung vorgenommen mit einem dummerweise sehr geringen Winkel, so dass im Ergänzungswinkel ein Nullwert ausgegeben wird. Dies ist korrekt, wirkt aber wie ein Fehler, wenn man sich dessen nicht bewusst ist und entsprechend nicht über volle 360° testet bzw. nur im "totprogrammierten" Winkelbereich.
Ärgerlich ist, dass man eine solche Programmierung laut Handbuch (wodurch ich darauf gekommen bin) nur dreimal ausführen und wohl dann auch nicht mehr rückgängig machen kann. Somit habe ich den Sensor für meine Zwecke permanent unbrauchbar gemacht. Naja, immerhin etwas gelernt dabei.
Neuer Sensor ist bestellt und ich hoffe und gehe davon aus, dass dieser dann im Neuzustand erwartungsgemäß funktioniert.
Das kann ich mir nicht vorstellen... Hast du einen Link zu dem Handbuch? Auf welcher Seite soll das stehen?
<~~>

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Mon Apr 03, 2023 4:52 pm

Klar. Hier:

https://ams.com/documents/20143/36005/A ... 5_5-00.pdf
(oder google "AS5600 pdf")

auf Seite 21 unter "Angle Programming" ganz unten:
"The BURN_ANGLE command can be executed up to 3 times"
Wüsste nicht wie ich das sonst interpretieren soll.

User avatar
mline
Posts: 1554
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Mon Apr 03, 2023 5:50 pm

Ok. Konnt ich nicht glauben weil 3 halt so willkürlich schien. Aber ja das funktioniert tatsächlich so :lol:
Bisschen dumm find ich das Register 0xFF. Die Chance das man das versehentlich beschreibt ist wesentlich höher als eine Adresse zwischen 0x00 und 0xFF.
<~~>

overgegeared
Posts: 7
Joined: Wed Mar 22, 2023 10:44 am

Re: Pi Pico, an I2C einen AS5600 Winkelsensor einlesen

Thu Apr 06, 2023 10:02 pm

Neuer Sensor da. Und schwupps: Voller Winkelbereich auslesbar!

Ich hätte auch gedacht "wenige" Schreiboperationen sind wenige Tausend oder so, aber nicht 3, DREI! WTF? ;-)
Naja, RTFM. Und zwar vorzugsweise sinnverfassend!

Danke für die Unterstützung - und bis zum nächsten mysteriösen Ploplem ;-D

Return to “Deutsch”