Übergabe von GPIO's von Pico auf PI 4

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Hallo,

ich möchte mit einem Raspberry Pi Pico einen Ausgang beschalten der das Signal an einen Eingang vom Raspberry 4 sendet, was soweit auch funktioniert. Am Raspberry 4 "Überwache" ich diesen Eingang GPIO.setup(17, GPIO.IN).

Nun soll der Eingang: Am PI 4 folgendes Ausführen:

Code: Alles auswählen

while True:

if GPIO.input(17):
with.open(...................)

Das Problem ist nun aber folgendes. Der Ausgang vom Pico scheint permanent "bestromt" zu sein, da die Bedingung am Eingang vom Raspberry 4 immer erfüllt ist. Ziehe ich das Kabel vom Eingang ab, so ist die Bedingung nicht erfüllt und es läuft wie es sein soll.

Wieso registriert der Eingang vom Raspi 4 Eingänge obwohl die Ausgänge vom Pico gar nicht geschaltet sind?

Ich hoffe ich konnte mein Problem einigermassen beschreiben.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Schlangenmensch: Schritt 1 wäre Messen was da wirklich auf der Leitung passiert. Schritt 2 schauen wie das mit den internen Pullup/down-Widerständen vom Raspi konfiguriert ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Messen bekomme ich noch hin. Pullup/down Konfiguration mache ich Programmseitig?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die pullups/pulldowns koennen darauf nicht wirklich einen Einfluss haben. Die sind eine gute Idee wenn man den Pin definiert low ziehen will, wenn kein Kabel dran ist. Aber die sind notwendigerweise immer so schwach, dass sie ein eingehendes Signal nicht stoeren koennen.

Und ja, die kannst du steuern in deinem Programm, steht in der Dokumentation zu deiner GPIO library. Versprochen.
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Ok, dann werde ich mir mal die GPIO library ansehen.

Danke Euch
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Schlangenmensch hat geschrieben: Dienstag 7. Juni 2022, 10:17 Ich hoffe ich konnte mein Problem einigermassen beschreiben.
Für mich leider nicht!

Willst Du damit sagen, dass ein GPIO vom Pico als Ausgang und ein GPIO vom RPi als Eingang fungieren soll und dazwischen nur eine Strippe hängt ...ohne Transistor, Optokoppler etc.? Und dann soll das Skript auf dem RPi reagieren, wenn der Pin des Pico auf HIGH geht?

Da stellen sich die Fragen was ist HIGH für den Pico und was ist HIGH für den RPi UND vor allem gibt es einen gemeinsame Nenner?

Btw. Falls ich das oben mit der Strippe doch richtig verstanden haben sollte, dann würde ich eher auf ein (elektronische) Trennung der Geräte setzten. Man muss ja im Fehlerfall nicht gleich beide grillen.
Alles was wir sind ist Sand im Wind Hoschi.
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

@hyle. Du hast richtig Verstanden. Das ist mein Vorhaben. Ich habe gestern ein paar Sachen getestet und bin an gewisse Grenzen gestossen. Ich habe mir das mit High und Low wohl zu einfach gedacht und war der Annahme High ist 1 und Low ist 0.

Insofern muss ich mir wohl einen anderen Weg suchen um einen Ausgang zu einem Eingang zu schicken.

Oder direkt vom Raspi4 ausgehen, da der Versuchmit einem Infrarotsensor und dem ADC0 Eingang nicht das Ergebnis brachte was ich mir vorstellte. Der Sensor liefert mir "streuende" Werte die ich mit einer if Wert < 3500 nicht verarbeiten kann weil eben diese Werte sehr stark "streuen". So weit binich aber noch nicht und ich glaube das Problem ist dann hier im dalschen Forum und ich muss auch über Hardwaremäsige Lösungen nachdenken, ( Thema prellen.)
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

High ist 1 und Low ist 0. Aber sowas geht auch nur, wenn es eine gemeinsame Bezugsbasis. Du musst also GND miteinander verbinden, oder optokoppler verwenden.

Allgemein gilt hier mal wieder, was schon tausend mal gesagt wurde: beschreibe erstmal, was du eigentlich erreichen willst. Statt mit unvollständiger Vorstellung sich auf eine aller Wahrscheinlichkeit unzureichende Lösung zu fokussieren. Einfache Pins zur Kommunikation zwischen Pi & Pico sind nämlich sehr ungewöhnlich. Eigentlich nimmt man da gleich sowas wie eine. UART.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Schlangenmensch: High und Low ist aus Programmsicht 1 und 0 aber die Hardware legt da an den Pins ja Spannungen an. Und wenn ein Gerät A so ca. 5V Spannung als High ansieht und ein Gerät B so ca. 3V, dann kann B zwar eine Leitung auf High setzen, B ist das aber noch deutlich zu niedrig als das als High zu erkennen. Und umgekehrt kann 5V auf einen Anschluss der maximal 3V erwartet, dazu führen, dass das Gerät nie wieder was erkennt.

Allerdings sollte das zwischen Pico und Pi4 eigentlich kein Problem sein, weil die beide 3V verwenden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Also, ich will mal versuchen zu erklären was ich vor habe.

Ich würde gerne einen alten Ferraris Stomzähler mit einem Infrarotsensor (TCR 5000) und dem Raspberry Pi Pico auslesen. Den Pico habe ich gewählt, da ich der Meinung war ich bräuchte einen ADC Ein bzw. Ausgang.

Der Infrarotsensor soll jedesmal wenn die rote Markierung vorbeiläuft "1" zählen. Ist die Markierung 75 mal durchgelaufen, ist eine KWh erreicht und der Pico sendet über den PINOUT quasi, daß der Raspberry 4 eine Datei anlegen soll wo die Verbrauchten KWh mit Datum und Uhrzeit versehen werden.

Den Raspy 4 nehme ich deshalb, weil der Pico zu wenig Speicherplatz hat um die ganzen Werte zu speichern.


Mit meinem Versuchsaufbau CD mit schwarzem Streifen abgeklebt, funktionierte zumindest mal die Speicherung der Datei auf dem Pico. Hier sind jedoch die Werte die vom TCR 5000 kommen relativ stabil und ich kann mit

Code: Alles auswählen

if MOVE.read_u16() > 3500:
klare Eingänge schaffen. Anders sieht es dann beim Ferraris Zähler aus. Hier sitzt der Sensor weiter von der Markierung weg und hat zusätzlich noch eine Glasscheibe dazwischen, welche das Signal auch noch verfälschen dürfte. Hier sind beim Wechsel der Markierung auf die silberne Scheibe alle möglichen Werte drin.

Das Problem habe ich in einem Tutorial auch schon gesehen, hier wurden die schwankenden Eingänge mit einem elektrischen Bauteil, dessen Namen mir gerade nicht einfällt, gelöst.

Ich danke Euch für die bisherigen Antworten und werde mich jetzt erstmal wieder weiter durch das Tutorial arbeiten.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Einen Pin einfach nur als Zähler zu verwenden ist unnötig limitiert. Da würde man wie schon erwähnt zu jener richtigen Schnittstelle wie UART oder I2C greifen, mit welcher der Pico einen tatsächlichen Zählerstand kommunizieren kann.

Und dann ist ja ein Pi involviert & kann per Kamera gleich die Zahlen auf dem Stromzähler erfassen, mit Bilderkennung. Wieso machst du das nicht? Siehe zb https://www.kompf.de/cplus/emeocv.html, das sich ähnlich auch in Python mit der OpenCV darstellen lässt.
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Mit der Lösung die Zählerstände per Kamera auszulesen habe ich auch schon geliebäugelt, schien mir aber bis jetzt zu kompliziert, da noch einiges an Software auf den Raspi aufgespielt werden muß und ich irgenwo gelesen habe, daß sich das ganze gerne mal aufhängt.

Man sollte vielleicht noch wissen, daß der Raspi schon einen digitalen Stromzähler mit 2 Tarifen mit loggt. Die Stromversorgung bzw. die Stabilität der Spannung könnte auch zum Problem werden, da ja noch ne kleine Lampe benötigt wird.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na der klare Vorteil der Kamera-Lösung: die kann tagelang ausfallen, und dann erfasst sie wieder den aktuellen Stand. Wehe dein Pi verpasst jetzt mal einen zählimpuls, dann ist sofort zappenduster. Mit UART kann der robustere Pico das wenigstens ein bisschen ausgleichen, aber auch da gilt: der misst immer nur Pulse, dein System krankt also daran, dass man dem jederzeit einen aktuellen Zählerstand unterjubeln können muss. Wäre nicht meine Lösung.
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Wenn ich mir das genau Überlege, würde ich wenigstens mal die Option mit der Kamera versuchen. Das Problem ist nur, bei dem Tutorial was du mir geschickt hast wird mit C++ programmiert und ich kann noch nicht mal Python. :oops:
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Ups, hab da wohl übersehen, das sowohl C++ und Python verwendet werden. :oops:
Antworten