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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dennis S. (supernova01)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Vor jedem einen Widerstand.

von Dennis S. (supernova01)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Die Pins natürlich mit PullUp-Widerstand.

von MaWin (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Was soll der ganze Stress mit Schieberegistern

Ist doch kein Stress.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
so etwas habe ich schon mal gemacht

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.