Ich hätte gerne einen "Knopf" zum Drehen am Raspi wie am Radio für die Lautstärke: Ein linker und ein rechter "Anschlag", also < 360 Grad und die gleiche "Lautstärke" beim der gleichen Radstellung. Nun hat ja der Raspi keine analogen Eingänge (schade eigentlich) - sonst könnte ich einfach ein Drehpoti als Spannungsteiler setzen und den Abgriff messen. So werde ich jetzt einen externen ADC dazubasteln und das so machen - oder gibt es eine einfachere Lösung dafür? Drehencoder scheinen mit nicht geeignet, denn wenn das Poti z.B. auf der Mitte steht, gibt es mir nach dem Einschalten ganz sicher wieder diesen Wert (mit dem ich ausgeschaltet habe) oder ich kann vor dem Enschalten leise drehen - mit dem Encoder nicht, oder? Alternativen?
Du könntest einen Drehkondensator nehmen und die Kapazität messen. Das geht mit digitalen Pins (sofern sie Schmitt-Trigger-Verhalten haben), wie bei Touchsensoren: Beitrag "qtouch - sekt oder selters"
Dreh schrieb: > oder gibt es eine einfachere Lösung dafür? Du kannst mit einem Kondensator, einem Widerstand und einem GPIO-Pin eine "ADC des kleinen Mannes" bauen. Die dafür nötige Zeitmessung ist allerdings etwas problematisch in der Linux-Umgebung. Deswegen wirst du mit stark fehlerhaften Messwerten rechnen müssen. Also mehrfach messen und Ausreißer eleminieren. Erst dann Mittelwert der verbleibenden Messwerte bilden.
c-hater schrieb: > Du kannst mit einem Kondensator, einem Widerstand und einem GPIO-Pin > eine "ADC des kleinen Mannes" bauen. Das ist interessant! Würde ich gerne probieren . hast Du eine Schaltung oder einen Link zum Prinzip?
Dreh schrieb: > mit dem Encoder nicht, oder? Du kannst dir mit einem Drehencoder bzw. mit einem Speicher an/in deinem Raspi jeden beliebigen Zustand merken oder herstellen, z.B. [x] den letzten gehörten Lautstärkewert (entspricht deinem Poti-Verhalten) [so macht es z.B. mein Autoradio, da gibt es auch nur Encoder] [x] die Lautsärke steht beim Einschalten immer auf 20% (oder irgendwas andere "leises") und geht dann wenn du nicht am Encoder drehst nach 5 Sekunden langsam in die vorherige Lautstärke über [das verhindert, das einem gleich der Hut wegfliegt, wenn die vorherige Lautsärke 100% war, und du schaltest unbedacht ein] oder sonstewelche Spielereien. Was du halt willst. Alles also, ws dein analoges Poti NICHT kann.
:
Bearbeitet durch User
Was ist so schlecht an einem ext. ADC? Selbst ein überdimensionierter 16 Bit Wandler kostet nur 2-5€ als Modul, je nachdem wie schnell man den geliefert haben möchte. http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-ADS1115/index.html
Dreh schrieb: > Das ist interessant! Würde ich gerne probieren . hast Du eine Schaltung > oder einen Link zum Prinzip? Wenn du in den von mir verlinkten Thread guckst, dann siehst du einen Ansatz, wie man das machen kann. Im Prinzip läuft das darauf hinaus, dass du einen entladenen Kondensator über die unbekannte Spannung so lange auflädst, bis er an einem digitalen Pin ein HIGH siehst. Je länger das dauert, desto kleiner war die unbekannte Spannung. Oder du machst das über eine Ladungspumpe, bei der du eine bekannte Ladung (über einen zweiten kleinen Kondensator, den du immer wieder auflädst) in den Messkondensator pumpst, bis dessen Spannung groß genug ist. Setzt halt voraus, dass die zu messende Spannung relativ lange stabil und belastbar genug ist, ist weder genau noch schnell, braucht dafür aber keine komplizierten Bauteile. Hier vollkommen ausreichend. Billige China-Allwinner-Tablets nutzen einen "low resolution ADC" für die Erkennung der Tasten (Lautstärke, Ein-Aus). Würde mich nicht wundern, wenn das genau so eine Schaltung ist.
S. R. schrieb: > Im Prinzip läuft das darauf hinaus, dass du einen entladenen Kondensator > über die unbekannte Spannung so lange auflädst, bis er an einem > digitalen Pin ein HIGH siehst. Je länger das dauert, desto kleiner war > die unbekannte Spannung. Hmm.. wenn die unbekannte Spannung klein ist - wie soll der auf HIGH gehen ?? Ich hab das in den Thread nicht erkennen können, da ging es wohl auch eher um Spannnugsänderungen durch Touch.
Dreh schrieb: > Hmm.. wenn die unbekannte Spannung klein ist - wie soll der auf HIGH > gehen ?? Indem du ihn auf VDD auflädst und zur unbekannten Spannung entlädst.
Wolfgang schrieb: > Indem du ihn auf VDD auflädst und zur unbekannten Spannung entlädst. also sollte ich 2 Fälle unterscheiden? /wenn die unbekannte Spannung recht hoch ist, tut sich ja auch nichts.. Wie wäre die "Schaltung" hinter dem Poti-Abgriff?? So?
1 | 5V |
2 | | |
3 | R Poti |
4 | | |
5 | +-------+-- GPIO |
6 | | | |
7 | R Poti C |
8 | | | |
9 | GND GND |
Dreh schrieb: > also sollte ich 2 Fälle unterscheiden? /wenn die > unbekannte Spannung recht hoch ist, tut sich ja auch nichts.. Die unbekannte Spannung hängt davon ab, was du für ein Poti mit was für Festwiderständen verknotest. Es liegt an dir, geschickte Werte zu wählen.
Beitrag #6123166 wurde von einem Moderator gelöscht.
Dreh schrieb: > Wie wäre die "Schaltung" hinter dem Poti-Abgriff? Kein Spannungsteiler. Poti 10k in Reihe mit Widerstand 10k und damit einen Kondensator auf oder entladen. Die Zeit mit einem Captureinput messen.
Dreh schrieb: > Ich hab das in den Thread nicht erkennen können, da ging es wohl auch > eher um Spannnugsänderungen durch Touch. Da ging es um Kapazitätsänderungen durch Touch. Und die Kapazität wurde gemessen, indem durch Ladungstransfers in einen Kondensator dessen Spannung gezielt erhöht wurde - wobei die Anzahl der Ladungstransfers ein Maß für die Kapazität des Kondensators ist. Das gleiche kannst du auch umgekehrt machen, indem du den Kondensator auf deine Wunschspannung auflädst und dann durch Ladungstransfers entlädst und die Anzahl der Ladungstransfers zählst. Die Kapazität ist bekannt, also ist die Spannung die Variable. Ist halt eine indirekte Messung mit wenig externer Beschaltung und insbesondere ohne analoge Bauteile. Denn darum ging es hier ja (als Alternative dazu, einfach einen ADC anzuklemmen). Nachtrag: Den Ansatz von Peter, einfach durchgängig zu laden und die Zeit zu messen, kann man natürlich auch verwenden.
:
Bearbeitet durch User
Peter D. schrieb: > Poti 10k in Reihe mit Widerstand 10k und damit einen Kondensator auf > oder entlade Ich bin nicht sicher, ob ich es richtig verstanden habe - , also Schaltung so? Raspi-Out---R_Poti---10k---Raspi-In---C---GND in Reihe? Sollte doch klappen, wenn ich immer abwechselnd H und L setze und dann am Raspi_in die Zeit messe entweder bis am Eingang auch wieder H bzw. wieder L ist?
Dreh schrieb: > Ich bin nicht sicher, ob ich es richtig verstanden habe - , also > Schaltung so? > > Raspi-Out---R_Poti---10k---Raspi-In---C---GND in Reihe? Mal abgesehen von der katastrophalen Art, die Sache zu zeichnen: ja, das würde so funktionieren. Resourcensparender (weil nur ein GPIO) wäre aber: Vcc o---*-- | | | o ---/ | | |/| P --- | --- | | | | R --- | *----o GPIO | --- --- C | GND o--- Initialer Zustand: setze GPIO auf Ausgang mit Status aktiv Low. Dann warte einen kleinen Moment. Das Schema der Messung ist: Starte Zeitmessung und schalte GPIO auf Eingang. Dann zyklisch (so schnell wie möglich) Status von GPIO bestimmen, wenn High, stoppe Zeitmessung. Zum Schluß wieder: schalte GPIO auf Ausgang (Status Low sollte er behalten haben). Damit ist der Messzyklus beendet und die Auswertung der gemessenen Zeit kann erfolgen.
c-hater schrieb: > Mal abgesehen von der katastrophalen Art Ok jetzt habe ich verstanden, wie s gemeint ist, und Deine Zeichnung ist vieeel schöner! :-) Ich dachte 2 Pins wären besser, weil ja mit nur einem ein hoher Strom fließt im Ausschaltmoment (geladener Kondensator wird kurzgeschlossen) - wird der Raspi den vertragen?
Dreh schrieb: > Ich dachte 2 Pins wären besser, weil ja mit nur einem ein hoher Strom > fließt im Ausschaltmoment (geladener Kondensator wird kurzgeschlossen) - > wird der Raspi den vertragen? Wenn du den Kondensator kapazitätsmäßig klein genug machst: ja, klar. Wenn du ganz viel Angst hast, kannst du auch einen zusätzlichen Widerstand zwischen dem GPIO und dem Verbindungspunkt von C und R vorsehen. Dann musst du aber ggf. eine kleine Extra-Pause zwischen aufeinanderfolgenden Messzyklen einlegen.
Peter D. schrieb: > 8 Bit sollten reichen, z.B. PCF8591. Der hat auch gleich einen Kernel-Treiber, brauchst also auch kein eigenes Userspace-Tool dafür. Ran an den i2c-Bus Modul laden # modprobe pcf8591 (input_mode=XXX) (mit input_mode kannst du wählen: 0 = four single ended inputs 1 = three differential inputs 2 = single ended and differential mixed 3 = two differential inputs Ungünstig, dass das global pro Modul und nicht pro instanz geht, aber meh.) Instanziieren echo "pcf8591 0x48" > /sys/bus/i2c/devices/i2c-X/new_device (X=busnummer, 0x48 I²C-Adresse) Nun gibt es einen neuen Ordner /sys/bus/i2c/devices/X-Y (X wieder busnummer, Y devicenummer) darin Dateien in0_input, in1_input, in2_input, in3_input Einfach lesen, per cat in der shell oder fopen, oder wie auch immer. Gibt Wert 0..255 Details siehe: https://www.kernel.org/doc/html/latest/hwmon/pcf8591.html
Warum nicht noch einmal den Drehencoder bedenken? Der gibt dir die Pulse und alles Andere machst du bequem in Software. Wurde ganz am Anfang ja schon beschrieben! Und ist bestimmt weniger Hexenwerk als die R-C-Lösung :-) Gruß Rainer
Rainer V. schrieb: > Warum nicht noch einmal den Drehencoder bedenken? Absolutgeber sind teurer als ein Poti: https://de.rs-online.com/web/p/mechanische-drehgeber/2632918
Peter D. schrieb: > Absolutgeber sind teurer als ein Poti: ja, klar...sind aber auch zuverlässiger als Poti. Wäre mir hier wichtig. Immerhin wird kein HiFi-Verstärker gebaut :-) Gruß Rainer
Rainer V. schrieb: > Warum nicht noch einmal den Drehencoder bedenken? Wurde bereits erwähnt. Ist aber für den T0/die Bastler im Thread nichts.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.