Hallo Leute,
hab hier einen quick&dirty Aufbau mit dem Raspberry Pi Pico und
folgendem PIR-Sensor:
https://www.pollin.de/productdownloads/D811274D.PDF
Auf dem Pico läuft ein C-Programm das u. A. die folgende Methode
benutzt:
(..)
int main() {
(..)
gpio_set_irq_enabled_with_callback(userGPIO, GPIO_IRQ_EDGE_RISE |
GPIO_IRQ_EDGE_FALL, true, &sensor_irq_handler);
(..)
}
Hinweis: userGPIO = GP1.
Mit "&sensor_irq_handler" wird dann über an sich trivialen Code in jener
Funktion die grüne User LED angesteuert sobald der Sensor Bewegung
detektiert (der Code selbst tut hier nichts weiter zur Sache, kann ihn
aber nachliefern bei Bedarf).
Eigentlich ist das Alles ganz stumpf verbunden, da der PIR-Sensor nur
drei Anschlüsse hat:
PIR-Sensor - Pico:
VCC - USB VBUS (+5V)
GND - GND
SIG - GP1
Im Prinzip funktioniert das auch alles problemlos, nun aber zu meiner
Frage: Mich wundert dass der standardmäßige Output von 3,3V an SIG auf
2,7V "einbricht" (siehe Foto) sobald er mit GP1 verbunden ist.
Meine Vermutung ist dass der interne Pulldown Widerstand von GP1 zu viel
Strom zieht. Kann das sein?
Abhilfe: Widerstand zwischen SIG und GP1? Wie groß sollte dieser
sinnvollerweise sein?
BTW habe mich an diesem Projekt orientiert, der Kollege benutzt an
seinem SIG Ausgang aber auch keinen Widerstand:
https://www.heise.de/developer/imgs/06/3/0/7/3/7/9/6/PriSensorOnARaspPiPico_Steckplatine-3b720aefc49c33dd.jpeg
Danke für eure Hinweise.
Florian W. schrieb:> Meine Vermutung ist dass der interne Pulldown Widerstand von GP1 zu viel> Strom zieht.
Dann muß Du nach einer Methode suchen, die ihn abschaltet.
DEBUGCORE("ERROR: Illegal pin in pinMode (%d)\n",ulPin);
32
return;
33
}
34
_pm[ulPin]=ulMode;
35
}
die Hysterese/Schmidt-Trigger am Eingang kann man damit nicht
aktivieren, und die nette "Bus-Keep"-Funktion bei gleichzeitig aktivem
Pull-Up und Pull-Down auch nicht.
Mache doch mal ein Detailfoto von der Ecke auf dem PIR Board, wo der
Ausgang geschaltet wird. Ist da vielleicht ein NPN mit einem
Ausgangswiderstand in Reihe?
m.n. schrieb:> Na, dann sollte man wohl doch besser> PADS_BANK0->GPIO1 = 0xc2; // ggf. Bitnummern aus rp2040.h verwenden> schreiben ;-)
"Besser" ist relativ. Nachdem der TE im kleinen Codeschnipsel, den er
gezeigt hat, weder Arduino-funktionen noch direkten Registerzugriff
verwendet hat, ist für ihn wohl eine Lösung mittels SDK besser.
10k, das würde doch schon das Verhalten erklären - ungewöhnlich hoher
Wert für einen open-collector Ausgang.
Wie heißt denn das IC, da könnte man ja im Datenblatt nachschauen, ob
man den problemlos verkleinern kann.
Wenn die Bildunterschrift passt und es auch hier ein TM2291 ist, ist die
Lösung des Problems im Datenblatt beschrieben. Der Ausgang hat einen
Widerstand (R11), damit man dort direkt einen Transistor anschließen
kann (also High-Aktiv). Das wäre ja auch hier die Lösung, NPN mit Basis
an den Ausgang, Emitter auf GND und Collector an den RPI-Eingang - mehr
Bauteile braucht es nicht. Der interne Pull-Up bleibt dann natürlich
eingeschaltet.
Hallo Leute,
erstmal danke für den guten Input. Sorry hatte ein etwas nichtssagendes
Datenblatt verlinkt. Das hier ist denke ich besser:
https://joy-it.net/de/products/SBC-PIR
Dort erkennt man auch den Chip den Harald sich schon angesehen hat.
Also 10k hängt am T1 Kollektor und ist dann offenbar in Reihe mit dem
internen Pico GP1 Pulldown sobald T1 sperrt?
Okay ist dann wohl nachvollziehbar warum die Spannung etwas einbricht,
an einem 10k fällt relativ viel ab.
Angehängt übrigens noch der C-Code, für alle den er interessiert.
Florian W. schrieb:> Angehängt übrigens noch der C-Code
uiii, als PNG :)
Bau da doch mal noch ein gpio_disable_pulls(userGPIO) ein.
oder ein gpio_set_pulls(userGPIO, true, true);
und messe danach deine Spannung am Pin
Εrnst B. schrieb:> Florian W. schrieb:>> Angehängt übrigens noch der C-Code>> uiii, als PNG :)>> Bau da doch mal noch ein gpio_disable_pulls(userGPIO) ein.> oder ein gpio_set_pulls(userGPIO, true, true);>> und messe danach deine Spannung am Pin
Uh, sicher dass da nichts durchbrennt? Ohne einen Widerstand gehts doch
dann schnurstracks nach Ground wenn T1 durchschaltet oder nicht?
Florian W. schrieb:> Uh, sicher dass da nichts durchbrennt?
der Pin ist als Input konfiguriert. Daran ändert sich nix. Nur am
Pull-Up oder Pull-Down im µC.
Sicherheitshalber kann ja noch ein
gpio_set_dir(userGPIO, false);
dazu, um explizit auf "INPUT" zu stellen.
und
gpio_set_input_hysteresis_enabled(userGPIO, true);
ist evtl. überflüssig, ich weiß nicht wie der Default da ist. Schadet
aber auch nicht, das explizit zu initialisieren.
Εrnst B. schrieb:> gpio_set_input_hysteresis_enabled(userGPIO, true);> ist evtl. überflüssig, ich weiß nicht wie der Default da ist. Schadet> aber auch nicht, das explizit zu initialisieren.
Man findet die Reset-Einstellungen im Datenblatt.
m.n. schrieb:> Man findet die Reset-Einstellungen im Datenblatt.
Ausgezeichnet. Faulheit siegt, so muss ich das nicht selber aufmachen :)
Da sieht man auch gleich die Werte die man ändern muss und den Grund
für:
Florian W. schrieb:> Mich wundert dass der standardmäßige Output von 3,3V an SIG auf> 2,7V "einbricht"
Εrnst B. schrieb:> Faulheit siegt,
Es muß nicht unbedingt Faulheit sein.
Manche Angaben finden sich unter GPIO, andere unter PADS_BANK0 und
völlig verkehrt ist man unter PIO.