BOB-Platine für FiPy

Hallo Didi,

Vielen Dank für Deine Beobachtungen beim Auslesen des HX711 mit einem RaspberryPi.

Das ist absolut plausibel, über den wahrscheinlichsten Grund haben wir im Beitrag Use realtime systems for reading digital sensors ein paar Zeilen geschrieben:

Auch dieser Artikel passt zum Thema:

Man sollte also wirklich nicht mit non-realtime Systemen an das Auslesen der Sensoren herangehen, ungeachtet der Tatsache, dass man entsprechenden Code dazu im Netz findet, der versucht, die Sache zu kompensieren à la

Raspberry Pi sometimes reads invalid data because the pin pd_sck is high for 60 micro seconds or longer. To eliminate this problem, a simple filter solves this problem. Therefore it provides better and more precise readings.

GitHub - gandalf15/HX711: Read HX711 ADC for Weigh Scales on Rasperry PIs.
HX711/HX711_Python3/hx711.py at 6a160dc223196fd3e0e1afe33783c84be6dda37c · gandalf15/HX711 · GitHub

Das bedeutet zwar nicht unbedingt, dass man den RaspberryPi gleich abschreiben muss, aber mit einem regulären Linux Kernel wird man Messungen, in denen immer nur ein oder wenige Bit fehlen wohl niemals ganz ausschließen können.

Es könnten zwar Verbesserungen erreicht werden, indem man den Prozess mit einer höheren Priorität versieht oder eine in C/C++ geschriebene Variante verwendet, die u.a. das gleiche tut (z.B. HX711/HX711_C at master · gandalf15/HX711 · GitHub), das Problem, dass Prozess jederzeit vom Linux Kernel unterbrochen werden kann, während er gerade mit der Hardware kommuniziert, bleibt jedoch bestehen.

Es gibt jedoch auch Realtime Erweiterungen für den Linux Kernel. Wenn wir also das Auslesen des HX711 in diese Realtime Domäne verlagern könnten, wäre ein RaspberryPi- oder Beagblone-basierter Datenlogger, der auch ohne Workarounds solide Werte liefert, durchaus machbar.

Beim Beaglebone könnte man auch noch die PRU Mikrocontroller verwenden, die genau für solche Dinge vorgesehen sind und ebenfalls Realtime Fähigkeiten anbieten. Der dort verbaute Sitara-Chip enthält zwei 32-Bit-Mikrocontroller, die sogenannten programmierbaren Echtzeit-Einheiten oder PRUs. Wie man das examplarisch tut, wird unter [1,2,3] beschrieben.

Viele Grüße,
Andreas.

[1] PRU tips: Understanding the BeagleBone's built-in microcontrollers
[2] How to run C programs on the BeagleBone's PRU microcontrollers
[3] http://catch22.eu/beaglebone/beaglebone-pru-c/