Forum: Mikrocontroller und Digitale Elektronik 8 DIP Schalter abfragen ad-wandler


von Daniel S. (supernova01)


Lesenswert?

Hi,

gibt ein Widerstandsnetzwerk (Schaltung) welche/s es erlaubt 8 DIP 
Schalter (alle Kombinationen) über einen Analogpin sicher abzufragen?

Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit wenig (<=4) 
Pins 8 Schalter (DIP-Schließer) abzufragen?

Danke.

DS

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo,

Für die AD-Wandlung von 8 Bit, kann man ein R2R-Netzwerk verwenden.

Siehe: https://de.wikipedia.org/wiki/R2R-Netzwerk

von Stefan (Gast)


Lesenswert?

Vor jedem einen Widerstand.

von Daniel S. (supernova01)


Lesenswert?

Hallo Karl,

danke für den Tip, es sind aber leider keine wechsler.

Hier:

http://www.avr-asm-tutorial.net/avr_de/apps/tasten_schalter_adc/tasten_schalter.pdf

Wird das ja schon ganz schön erklärt, es steht aber auch eindeutig da:

"Eine Warnung gleich zu Beginn: versuche das nicht mit mehr als vier 
Schaltern, es wird misslingen. Nimm dann besser zwei ADC-Eingänge für 6 
oder 8 Schalter."

Es geht aber meistens um Taster von denen maximal einer zurzeit gedrückt 
werden darf und nicht um Schalter von denen mehrere gleichzeitig aktiv 
sein können...

Gruß
Dennis

von georg (Gast)


Lesenswert?

Karl M. schrieb:
> kann man ein R2R-Netzwerk verwenden.

Das verlangt Umschalter, die sind als DIP-Schalter selten.

Dennis S. schrieb:
> über einen Analogpin sicher abzufragen?

Das sind 256 Stufen, m.a.W. alles muss genauer als 1% sein. Mit 2 
ADC-Eingängen und damit 16 Stufen wäre das einfacher. Aber realisierbar 
ist es schon.

Klassisch wäre ein Schieberegister, dafür reichen 3 Pins. Ein einfaches 
Mäuseklavier benötigt fast immer Pullups an jedem Schalter, da kann es 
platzsparender sein 8 Controller-Pins zu verwenden, wenn die interne 
Pups haben - kein Hühnerfutter.

Georg

von Route_66 H. (route_66)


Lesenswert?

Dennis S. schrieb:
> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit wenig (<=4)
> Pins 8 Schalter (DIP-Schließer) abzufragen?

DS2408 benötigt einen(!) I/O-Pin am µC für acht Ein-/Ausgänge.
Er kann sogar darüber mit Spannung versorgt werden (parasite power).

von H.Joachim S. (crazyhorse)


Lesenswert?

Route 6. schrieb:
> DS2408 benötigt einen(!) I/O-Pin am µC für acht Ein-/Ausgänge.

Und ist gut teuer....
Bei einem Bastelpojekt spielt das zwar keine grosse Rolle, muss aber 
trotzdem nicht sein. Ausserdem brauchts auch einiges an Code (wenn nicht 
eh schon im Projekt)

-2 A/D-Eingänge gehen problemlos
-I2C ist auch ne Möglichkeit
-Schieberegister mit SPI wurde schon genannt, geht mit kleinen Tricks 
auch mit 2 Pins

von Hermann W. (hermannw)


Angehängte Dateien:

Lesenswert?

Dennis S. schrieb:
> Oder eine andere schnelle Lösung mit etwas Hühnerfutter

Eine Reduzierung der Pins für eine Tasteneingabe mache ich immer mit ein 
paar Dioden. Mit der gezeigten Schaltung können 7 Tasten mit 3 Pins 
abgefragt werden. Für 8 Schalter wird ein 4. Pin benötigt, aber keine 
weitere Diode.

von Hermann W. (hermannw)


Lesenswert?

Die Pins natürlich mit PullUp-Widerstand.

von MaWin (Gast)


Lesenswert?

Dennis S. schrieb:
> gibt ein Widerstandsnetzwerk (Schaltung) welche/s es erlaubt 8 DIP
> Schalter (alle Kombinationen) über einen Analogpin sicher abzufragen?
>
> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit wenig (<=4)
> Pins 8 Schalter (DIP-Schließer) abzufragen?


Taster über Analogeingang ist doof, weil die Entprellung nicht gut geht.

Man könnte ein R2R Netzwerk nutzen, müsste aber 0.1% genau und damit 
teuer sein und jeder Schalter müsste ein Umschalter oder gepuffert sein 
(74HC244).

Besser ist Abfrage per Multiplex, wenn man andere Ausgänge hat die man 
kurzfristig beliebig schalten kann reicht dann sogar 1 (Digital-)eingang 
und pro Schalter 1 Diode.

von Bauform B. (bauformb)


Lesenswert?

georg schrieb:
> Karl M. schrieb:
>> kann man ein R2R-Netzwerk verwenden.
>
> Das verlangt Umschalter, die sind als DIP-Schalter selten.
>
> Dennis S. schrieb:
>> über einen Analogpin sicher abzufragen?
>
> Das sind 256 Stufen, m.a.W. alles muss genauer als 1% sein.

Gute R2R-Netzwerke gibt es komplett mit den nötigen Umschaltern und 
Buffer-OP z.B. als AD5331 im TSSOP-20. Der braucht zwar noch eine 
positive Flanke, damit Änderungen am ADC ankommen, aber meist reicht 
dafür das Reset-Signal oder eine Blink-LED oder so. Zum Ausgleich ist er 
bei Digikey genau 1 Cent billiger als der DS2408 :)

von Stefan F. (Gast)


Lesenswert?

Hermann W. schrieb:
> Eine Reduzierung der Pins für eine Tasteneingabe mache ich immer mit ein
> paar Dioden.

Nütztz leider bei DIP Schaltern nichts.

von c-hater (Gast)


Lesenswert?

Dennis S. schrieb:

> gibt ein Widerstandsnetzwerk (Schaltung) welche/s es erlaubt 8 DIP
> Schalter (alle Kombinationen) über einen Analogpin sicher abzufragen?

Nicht wirklich. Ein gutes Widerstandsnetzwerk ist ja nur die eine Hälfte 
der Aufgabe...

> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit wenig (<=4)
> Pins 8 Schalter (DIP-Schließer) abzufragen?

Kommt drauf an. Nämlich: ob beliebige Kombinationen der acht Schalter 
erkannt werden müssen, oder ob nur nur ein Schalter erkannt werden muss 
(während alle anderen in der "Ruheposition" sind). Letzteres ist mit 4 
Pins problemlos machbar: Prinzip "Charlieplexing" (nur halt für Input). 
Du brauchst dazu nur 8 Dioden.

Ersteres hingegen nicht. Am zuverlässigsten und einfachsten wäre hier 
eine Lösung mit Schieberegistern, braucht zwei bis drei Pins am µC und 
ein passendes 8Bit-Schieberegister (PISO mit Latch). Im Falle von nur 
zwei µC-Pins auch noch ein DRC-Glied, um die Latch-Funktion 
bereitzustellen.

von Hermann W. (hermannw)


Lesenswert?

Stefanus F. schrieb:
> Nütztz leider bei DIP Schaltern nichts.

Warum wohl nicht?

Dennis S. schrieb:
> Es geht aber meistens um Taster von denen maximal einer zurzeit gedrückt
> werden darf und nicht um Schalter von denen mehrere gleichzeitig aktiv
> sein können...

Das war die Voraussetzung für die Diodenlösung. Geht also wunderbar.

von Manfred (Gast)


Lesenswert?

MaWin schrieb:
> Taster über Analogeingang ist doof, weil die Entprellung nicht gut geht.

Das habe ich neulich mit einem Arduino gemacht und funktioniert sauber: 
Wert lesen, 15ms später nochmal lesen. Wenn mehr als drei digit 
Abweichung, raus - wird geprellt haben. Im Gegensatz zu Dennis' Frage 
brauche ich keine gleichzeitige Betätigung.

c-hater schrieb:
> Kommt drauf an.

Wer lesen kann, ist klar im Vorteil:
Dennis S. schrieb:
> (alle Kombinationen)

Und genau da gerät die Kuh auf's Eis: 8 Schalter sind 256 Kombinationen, 
mit 12 bit Auflösung könnte das gerade so gehen. Ich bezweifele, dass 
das zuverlässig realisierbar ist.

von c-hater (Gast)


Lesenswert?

Manfred schrieb:

> Wer lesen kann, ist klar im Vorteil:
> Dennis S. schrieb:
>> (alle Kombinationen)

Verdammt, das habe ich doch tatsächlich überlesen. Also, ganz klar: 
Schieberegister ist die einzig zielführende Lösung.

von Butrus (Gast)


Lesenswert?

Dennis S. schrieb:
> Hi,
>
> gibt ein Widerstandsnetzwerk (Schaltung) welche/s es erlaubt 8 DIP
> Schalter (alle Kombinationen) über einen Analogpin sicher abzufragen?
>
> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit wenig (<=4)
> Pins 8 Schalter (DIP-Schließer) abzufragen?
>
> Danke.
>
> DS

Wie wäre es mit einem Schieberegister? Dann kannst du beliebig viele 
Schalter anschließen...

von Bauform B. (bauformb)


Lesenswert?

Was soll der ganze Stress mit Schieberegistern oder one-wire? Zwei 
Analog-Eingänge und 10 normale Widerstände reichen doch für 2 mal 4 
Schalter.

Außer, es gibt sowieso einen I2C-Bus. Der ist mit 0 Pins, 0 Widerständen 
und 1 IC natürlich schon attraktiv.

von Stefan F. (Gast)


Lesenswert?

Bauform B. schrieb:
> Was soll der ganze Stress mit Schieberegistern

Ist doch kein Stress.

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


Lesenswert?

Dennis S. schrieb:
> über einen Analogpin sicher abzufragen?
"Sicher" geht das mit dieser Analog-Widerstands-Geschichte überhaupt 
nicht.
Denn wenn da "nur" ein einziges Bit kippt und das zwischen 01111111 und 
1000000 passiert,  dann hast du alle Schalter falsch eingelesen.

Und selbst wenn das heute mit neuen Schaltern noch geht: in 5 Jahren 
sind die oxidiert und haben nach dem Umschalten auch mal 
Übergangswiderstände im "100 Ohm und mehr"-Bereich...

: Bearbeitet durch Moderator
von m.n. (Gast)


Lesenswert?

Lothar M. schrieb:
> "Sicher" geht das mit dieser Analog-Widerstands-Geschichte überhaupt
> nicht.
> Denn wenn da "nur" ein einziges Bit kippt und das zwischen 01111111 und
> 1000000 passiert,  dann hast du alle Schalter falsch eingelesen.

Ich bitte Dich. Analoge Signale kann man leicht filtern. Und bei der 
Auswertung fragt man nicht auf Gleichheit ab, sondern ob sich der Wert 
innerhalb eines Bereiches befindet.

> Und selbst wenn das heute mit neuen Schaltern noch geht: in 5 Jahren
> sind die oxidiert und haben nach dem Umschalten auch mal
> Übergangswiderstände im "100 Ohm und mehr"-Bereich...

Das ist doch mehr als übertrieben. Kauf Schalter, zu denen es ein 
Datenblatt gibt.

von HildeK (Gast)


Lesenswert?

Jetzt müsst ihr nur noch 0.1%-Widerstände finden, die die Toleranz über 
Temperatur, Alterung u.a. auch noch einhalten werden.
Wird nicht einfach sein ...

Lothar M. schrieb:
> "Sicher" geht das mit dieser Analog-Widerstands-Geschichte überhaupt
> nicht.

Dem schließe ich mich an.

von Bauform B. (bauformb)


Lesenswert?

HildeK schrieb:
> Jetzt müsst ihr nur noch 0.1%-Widerstände finden, die die Toleranz über
> Temperatur, Alterung u.a. auch noch einhalten werden.
> Wird nicht einfach sein ...
>
> Lothar M. schrieb:
>> "Sicher" geht das mit dieser Analog-Widerstands-Geschichte überhaupt
>> nicht.
>
> Dem schließe ich mich an.

ABER:

Dennis S. schrieb:
> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit
> wenig (<=4) Pins

Also sind 2 oder 3 Analog-Eingänge erlaubt. Mit 3 Eingängen, also 3 
Schaltern pro Eingang, ist es ja wohl trivial.
Mit 4 Schaltern an einem Eingang kann man z.B. 2k4, 4k7, 10k, 20k nehmen 
und 2k4 für die andere Seite vom Spannungsteiler; 1% reicht locker. Dann 
liefert ein 10-Bit-ADC:
1
 0   1023
2
 1    914
3
 2    826
4
 3    753
5
 4    678
6
 5    628
7
 6    585
8
 7    547
9
 8    512
10
 9    483
11
10    457
12
11    434
13
12    408
14
13    389
15
14    372
16
15    357
Sicher geht alles noch sicherer...

von m.n. (Gast)


Lesenswert?

Bauform B. schrieb:
> Dann
> liefert ein 10-Bit-ADC: 0   1023
>  1    914
>  ...
> 15    357

Diesen Werten sieht man an, daß sie sehr gut separiert werden können.

Persönlich würde ich einen IIC-Bus auf zwei freien Pins per Software 
aktivieren, mit dem sich geeignete IO-Expander abfragen lassen.

von HildeK (Gast)


Lesenswert?

Bauform B. schrieb:
> ABER:
>
> Dennis S. schrieb:
>> Oder eine andere schnelle Lösung mit etwas Hühnerfutter mit
>> wenig (<=4) Pins

Das hatte ich übersehen bzw. nicht mehr im Fokus - sorry. War auf 
einen Pin fixiert.

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Angehängte Dateien:

Lesenswert?

so etwas habe ich schon mal gemacht

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.