Helpdesk

Hallo,


ich habe mir den Joy-Pi Note gekauft und möchte gern dadurch in die Python-Programmierung einsteigen. Bin gerade bei Übung 7 ( Python, Joystick). Ich würde gern den ganzen Beispielcode verstehen. Aber mir fehlen hier einscheidende Hinweise über die Details, was da genau per SPI passiert. Wird hier ein ADC ausgelesen? Woher kommen die Werte 650/400? Was hat es mit den Bitmanipulationen auf sich? Wäre klasse, wenn man hier etwas mehr Background erhalten würde.


Dankee!

dspi2021

31.10.21 10:46

Sehr geehrte Damen und Herren,


wie Sie bereits vermutet haben wird ein ADC ausgelesen, dabei handelt es sich um den "MCP3008". Dieser kann 10 Bit (also 1024 Werte) über SPI auslesen.[nbsp]


[nbsp]


https://ww1.microchip.com/downloads/en/DeviceDoc/21295d.pdf



Die Variablen X und Y geben dabei die Achsen des Joysticks an, dessen Werte sich mit der jeweiligen Richtung verändern. Der Mittelwert in Ruhestellung des Joysticks liegt somit bei ca. 512.


Ändert man die Richtung, ändern sich somit auch die Werte die bei den Grenzen [gt]650 und [lt]400 dann als "links", "rechts", "oben" und "unten" ausgegeben werden.


[nbsp]


mit freundlichen Grüßen


Kai Renn[nbsp]

03.11.21 09:36


Sehr geehrte Damen und Herren,




wie Sie bereits vermutet haben wird ein ADC ausgelesen, dabei handelt es sich um den "MCP3008". Dieser kann 10 Bit (also 1024 Werte) über SPI auslesen.[nbsp]




[nbsp]




https://ww1.microchip.com/downloads/en/DeviceDoc/21295d.pdf





Die Variablen X und Y geben dabei die Achsen des Joysticks an, dessen Werte sich mit der jeweiligen Richtung verändern. Der Mittelwert in Ruhestellung des Joysticks liegt somit bei ca. 512.




Ändert man die Richtung, ändern sich somit auch die Werte die bei den Grenzen [gt]650 und [lt]400 dann als "links", "rechts", "oben" und "unten" ausgegeben werden.




[nbsp]




mit freundlichen Grüßen




Kai Renn[nbsp]



Hallo Kai,


vielen Dank für die Erklärung. Ich schaue mir gern einmal das Datenblatt an. Wäre klasse, wenn im Lernmodul entsprechende Hinweise ergänzt würden, insbesondere auch eine kurze Erläuterung, was da genau bei der Bit-Manipulation geschieht.[nbsp]


Vielen Dank und Gruss,


Dirk

dspi2021

03.11.21 11:09

Hallo Dirk,


Dem ADC muss, bevor die entsprechenden Daten abgerufen werden können, mitgeteilt werden, welcher Kanal als nächstes ausgelesen werden soll.


adc = spi.xfer2([1,(8+channel)[lt][lt]4,0])

Die für diesen Befehl notwendige Bitreihenfolge wird über genau diese Manipulation errechnet.
Soll beispielsweise der ADC-Kanal 1 (was in diesem Fall die X-Achse des Joysticks ist) abgefragt werden, so muss die Bitreihenfolge "10010000" übertragen werden. (siehe im Datenblatt Seite 19, Tabelle 5-2). Shiftet man nun also die Zahl 9 (8+1) um 4 Stellen nach links so erhält man die entsprechende Bitreihenfolge.


data = ((adc[1][&]3) [lt][lt] 8) + adc[2]

Daraufhin antwortet der ADC mit 3 Bytes (adc[0], adc[1] und adc[2]). Hier wird über Bit-Maskierung und eine weitere Shift-Operation das Ergebnis berechnet.[nbsp]


Vielen Dank für deinen Hinweis. Du hast völlig Recht, die entsprechenden Hinweise sollten hier definitiv ergänzt werden.


Ich hoffe der Teil ist mit dieser Erklärung nun etwas klarer geworden 🙂?


Liebe Grüße,
Jens

Jens

05.11.21 09:40