Forum: Mikrocontroller und Digitale Elektronik Mehrere Taster / wenige Inputs


von Sascha K. (kuschelganxta)


Lesenswert?

Liebes Forum,

ich suche nach einer einfachen (kleinen, leicht umzusetzenden Lösung) um 
3 Taster über 2 Inputs erfassen zu können.

Hintergrund:
- An einem ESP8266 (H801 Dimmer) habe ich 2 Inputs mit aktivierten 
PULL-UPs, also schalten die Taster gegen GND.
- Die Auswertung mache ich über OneButton 
(https://github.com/mathertel/OneButton).
- 2 Taster sind angeschlossen und funktionieren.

Über gleichzeitige Betätigung könnte ein weiterer Schalter/Taster 
erkannt werden. Muss hier über Diodenlogik 
(https://de.wikibooks.org/wiki/Digitale_Schaltungstechnik/_Logikfamilien/_Innenleben/_DDL) 
gearbeitet werden? Falls ja, wie?

Für weitere Ideen und Vorschläge bin ich dankbar!

Grüße
Sascha

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sascha K. schrieb:
> Muss hier über Diodenlogik gearbeitet werden? Falls ja, wie?
So, dass der eine zusätzliche Taster beide EIngänge auf GND zieht.
1
 
2
3
     in1  -------o-------->|------.
4
                 |                |
5
                 |                |
6
                 |                |
7
     in2  -------+-----o-->|------o
8
                 |     |          |
9
                 |     |          |
10
                 T1    T2         T3
11
                 |     |          |
12
                 |     |          |
13
     GND  -------o-----o----------'
Mehrfachbetätigung kannst du natürlich nicht mehr erkennen, denn T1+T2 = 
T3.

von Sascha K. (kuschelganxta)


Lesenswert?

Dankeschön, ich hätte die Dioden falsch gesetzt.
Vielen Dank!

von Klaus R. (klara)


Lesenswert?

Sascha K. schrieb:
> 2 Taster sind angeschlossen und funktionieren.
>
> Über gleichzeitige Betätigung könnte ein weiterer Schalter/Taster
> erkannt werden. Muss hier über Diodenlogik
> 
(https://de.wikibooks.org/wiki/Digitale_Schaltungstechnik/_Logikfamilien/_Innenleben/_DDL)
> gearbeitet werden? Falls ja, wie?

Klar funktioniert es mit zwei Taster. Du hast ja auch zwei Inputs. Die 
beiden Taster dürfen sicher beliebig betätigt werden. Also hast Du binär 
mir den zwei Inputs schon alles ausgeschöpft.

Mit einer Diodenlogig und einen AD - Input könnte man das Problem lösen 
indem man die Spannungen 2 - 4 - 8 erzeugt.
mfg klaus

: Bearbeitet durch User
von DAVID B. (bastler-david)


Lesenswert?

also wenn es NICHT unbedingt mit Interrupt pins gelöst werden muss,
KÖNNTE man es auch mit EINEN analogen pin und Widerständen lösen.

Der ESP Arbeitet ja mit 3,3 Volt so weit ich weiß.
Gesetzt die Spannung ist stabil was ich mal voraussetze (kein Akku 
betrieb)
Heist das also man könnte locker 4 oder mehr Taster abfragen.

Ein Taster zieht meinetwegen den pin auf 2,5-2,8 Volt runter.
Ein 2ter zieht auf zb 1,8-2 Volt runter.
ein 3ter auf 1 Volt
ein 4ter zb auf 0,5 oder Gnd.

jetzt musst du nur abfragen wie hoch die Spannung ist und erhältst 
Rückschlüsse auf die Taster?

Und da man keinen Interrupt nutzt entfehlt das entprellen der Taster.
wenn du ein sehr kleines Programm nutzen solltes reicht zb ein delay von 
10-50ms zum entprellen oft aus.

von Peter D. (peda)


Lesenswert?

DAVID B. schrieb:
> Gesetzt die Spannung ist stabil

Nö, die VCC kürzt sich raus. Sie muß nur für die aktuelle Messung stabil 
sein.

DAVID B. schrieb:
> Und da man keinen Interrupt nutzt entfehlt das entprellen der Taster.

Natürlich muß man auch die Tasten am ADC entprellen. Hier mal ein 
Beispiel:
Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"

von J. S. (engineer) Benutzerseite


Lesenswert?

DAVID B. schrieb:
> Ein Taster zieht meinetwegen den pin auf 2,5-2,8 Volt runter.
> Ein 2ter zieht auf zb 1,8-2 Volt runter.
> ein 3ter auf 1 Volt
> ein 4ter zb auf 0,5 oder Gnd.

Wenn man diese Überlegung zu Ende denkt, gelangt man zu einem 
R2R-Netzwerk, mit dem man alle 4 Taster unabhängig einlesen könnte. Das 
wären 16 Spannungslevel, die sich i.d.R. perfekt und störsicher mit nur 
einem Wandler trennen lassen. Aufgebaut habe ich das schon mit 8 
Tastern. Allerdings muss man dann mit den Widerständen schon etwas 
aufpassen. Es empfiehlt sich dann eine leicht logarithmische Einteilung 
der Spannungslevel, um solche Codes wie 0010.0000 von 0001.1111 sicher 
zu unterscheiden.

Wenn kein Wandler zur Verfügung steht, muss man mit einem Ausgang und 
einem Eingang einen Dual-Slope oder mini Delta-Sigma bauen:

Analog-IO mit digitalen Bausteinen
Erweiterung von digitalen IO-Ports

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Peter D. schrieb:
> Nö, die VCC kürzt sich raus.

Das bezweifle ich, da der ESP8266 nicht VCC sondern eine interne 
Referenzquelle mit 1V verwendet. Den anapogen Eingang würde ich aber 
sowieso nicht verwenden, denn er lässt sich zu stark durch die internen 
HF Schaltkreise stören. Laut Datenblatt sind bis zu 20% Abweichung vom 
richtigen Messwert zu erwarten. Ganz so schlimm hatte ich es zwar noch 
nicht, aber 10% Abweichung ist mir auch schon unterkommen - gleich beim 
ersten Versuch. Seit dem nutze ich den intenren ADC nicht. Der taugt ja 
nichtmal als Schätzeisen.

von Jörg R. (solar77)


Lesenswert?

Sascha K. schrieb:
> Für weitere Ideen und Vorschläge bin ich dankbar!

Schieberegister parallel zu seriell, z.B. 74HC165

http://www.ti.com/lit/ds/symlink/sn74hc165.pdf

von Dieter R. (drei)


Lesenswert?

Stefanus F. schrieb:

> Laut Datenblatt sind bis zu 20% Abweichung ...

Wo steht das denn? Ich habe mir jetzt interessehalber aus dem Internet 
mehrere Versionen des Datenblatts heruntergeladen, finde aber keine 
Angabe.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Dieter R. schrieb:
>> Laut Datenblatt sind bis zu 20% Abweichung ...
> Wo steht das denn?

Auf jeden Fall gut versteckt. In einer frühen chinesischen Version des 
Datenblattes war das eine winzig kleine Fußnote unter einer Tabelle mit 
elektrischen Daten.

von Dieter R. (drei)


Lesenswert?

Stefanus F. schrieb:
> Dieter R. schrieb:
>>> Laut Datenblatt sind bis zu 20% Abweichung ...
>> Wo steht das denn?
>
> Auf jeden Fall gut versteckt. In einer frühen chinesischen Version des
> Datenblattes war das eine winzig kleine Fußnote unter einer Tabelle mit
> elektrischen Daten.

Da steht was über den zulässigen Restfehler der RF calibration. Ich 
glaube nicht, das man daraus schließen kann, welche Toleranz der ADC 
hat.

Ich selbst habe mich mit dem Prozessor noch nicht beschäftigt, aber die 
im Internet berichteten Fehler sind 1. teilweise gar nicht so groß (die 
letzten beiden Bits schwanken, also 8 Bit effektive Genauigkeit), 2. 
hängt es offenbar von Aufbau und HF-Einstrahlung ab und 3. kann man das 
mit intelligenter Auswertung wohl auch noch aussortieren. Für den Zweck 
hier (3 Tasten!) könnte es durchaus reichen. Man müsste wohl ein 
sauberes Layout machen und es dann probieren. Für ein einmaliges 
Hobbyprojekt könnte der Evaluierungsaufwand zu groß sein, für 
Serienentwicklung wäre das ein Thema, um Schaltungsaufwand zu sparen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Dieter R. schrieb:
> Da steht was über den zulässigen Restfehler der RF calibration. Ich
> glaube nicht, das man daraus schließen kann, welche Toleranz der ADC
> hat.

Es passt aber zu mehrfach gemeldeten Beobachtungen und in einem früheren 
Datenblatt war der Satz noch etwas deutlicher formuliert.

> die letzten beiden Bits schwanken

Es gibt da noch eine beträchtliche Nicht-Linearität und nahe Null Volt 
haben mehrere Leute einen erheblichen Offset gemeldet.

Siehe auch
Beitrag "ESP8266 (Wemos D1) Analogwert schwankt stark"
Beitrag "8266-12E ADC Kalibrieren?"
https://github.com/esp8266/Arduino/issues/2070

Wenn du die WLAN Schnittstelle aus schaltest, liefert der ADC stabilere 
Werte.

von kein Gast (Gast)


Lesenswert?

Achtung, der ESP8266 hat zwar einen ADC, welcher aber zumindest im 
WiFi-AP-Modus zur Signalstaerkenmessung verwendet wird. Hat mich mal 
einen halben Nachmittag gekostet, zu debuggen, warum das WLAN 
unregelmaessig wegfliegt, wenn man den ADC beschaltet und ausliest (ggf. 
hardwarespezifisch, hier NodeMCU).

von Stefan F. (Gast)


Lesenswert?

kein Gast schrieb:
> Achtung, der ESP8266 hat zwar einen ADC, welcher aber zumindest im
> WiFi-AP-Modus zur Signalstaerkenmessung verwendet wird. Hat mich mal
> einen halben Nachmittag gekostet, zu debuggen, warum das WLAN
> unregelmaessig wegfliegt, wenn man den ADC beschaltet und ausliest (ggf.
> hardwarespezifisch, hier NodeMCU).

Ich habe dazu mal irgendwo gelesen, dass man ihn nicht ununterbrochen 
benutzen darf. Mit genug Pausen dazwischen läuft es angeblich "stabil".

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
Noch kein Account? Hier anmelden.