mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere BCD-Codierschalter pinsparend abfragen


Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte 4 Stück BCD-Codierschalter (je 4 Bit, also 5 Anschlüsse) 
abfragen. Dafür möchte ich natürlich keine 16 Pins am Mikrocontroller 
verwenden. Hat jemand eine Idee, wie man den Zustand aller vier Schalter 
mit möglichst wenigen Pins abfragen könnte, vielleicht so á la 
Matrixtastatur, aber wie konkret?

Frank

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank,

wenn Du 4 Dioden je Schalter spendierst,
braucht Du insgesamt 8 Pins....

Gruß Otto

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je weniger Port-Pins, desto mehr Aufwand.

Mit 8 Ports:
4 Ports als Ausgänge wie ein Lauflicht aktivieren und mit den 
"Schleifern" jedes Schalters verbinden. Die Kontakte der Schalter über 
Dioden an 4 Input-Ports. Nachteil: 16 Dioden.

oder 3 Ports: Die 16 Schaltkontakte an ein Schieberegister. Der eine 
Port sagt "Load", der andere Clock-Clock, und am dritten Port guckt man 
die Daten an.

oder Port-Expander für einen seriellen Bus.

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vielen Dank.

Frank

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne zusätzlich externe Bauteile, auch keine Dioden, mit 8 Portpins:

Die Schleifer jeweils an ein Ausgangsportpin (nennen wir diese A1, A2,
A3, A4)

Die 4 Kontaktausgänge der Codierschalter an 4 Eingangspins (E1, E2,
E3, E4) anschließen (entsprechende Kontaktausgänge sind dabei für alle
vier Schalter untereinander verbunden).

Die Eingänge E1, E2, E3, E4 werden softwaremäßig mit einem
Pullup-Widerstand versehen (viele µC, z. B. der AVR, unterstützen
dies).

Von den Ausgängen A1, A2, A3, A4 wird nacheinander jeweils einer auf
Low, die drei anderen hochohmig geschaltet. An den Eingängen, kann nun
die Stellung des aktivierten Codierschalter gelesen werden. Beim AVR
schaltest du Portpin hochohmig, indem du es als Eingang kofigurierst.

Natürlich kann man die Anzahl der benötigten Portpins mit externer
Beschaltung auf 1 reduzieren. Eine Möglichkeit wäre es, einen zweiten
µC nach der oben beschriebenen Methode einzusetzen und die Ergebnisse
periodisch seriell zu übertragen :)

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ist natürlich noch genialer...hab aber in den letzten paar Minuten 
schon die Dioden reingelötet :-). Ich machs nun ausserdem mit einem 
Portexpander PCF8574. Wahrscheinlich mit externen Pullups an den 
Eingängen (Schleifern), die dann auf low gezogen werden, weil ich mir 
nicht sicher bin, ob das bisschen Saft, das die PCFs abegeben können, 
für eine sichere Abfrage über die Dioden genügt.

Frank

Autor: Giradeli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit 2 ADCs könnte und 6 widerständen, sollte das auch Funktionieren.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@yalu: funktioniert nicht

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse: doch

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse:

Nee, hast recht, funktioniert doch nicht. Entschuldigung an alle, falls 
ich Verwirrung gestiftet haben sollte :)

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So..., guten Morgen zusammen!

Habs nun mit nem PCF8574 realisiert. Immer 3 von 4 Ports ziehen 
nacheinander externe Pullups an den BCD-Codierschalter-Schleifern nach 
unten, weitere 4 Ports lesen die über 16 Dioden parallelgelegten 
Ausgänge. Leider kommt bisher Murks raus. Normalerweise schreibt man 
beim PCF8574 ja erstmal ne 0xff rein, um die Ports lesen zu können. Das 
lasse ich weg, schliesslich sollen ja 4 Ports weiterhin ihren 
"3-1"-Zustand an den Schleifern als Ausgang behalten. Oder kann es sein, 
dass der PCF8574 selbstständig alles auf eins (quasi als inerne Pullups) 
setzt, sobald man eine Leseaktion ankündigt, es also gar nicht möglich 
ist, gleichzeitig 4 Ports als Eingänge, die anderen 4 als Ausgänge zu 
benutzen?

Hab allerdings gestern Nacht nicht mehr so lang rumprobiert und war auch 
nicht mehr der allerfitteste in der Birne, aber vielleicht hatte ja 
jemand von Euch schon ein ähnliches Problem.

Frank

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Normalerweise schreibt man beim PCF8574 ja erstmal ne 0xff rein, um
> die Ports lesen zu können.

Genauer gesagt: Man schreibt in diejenigen Portbits, die man lesen
möchte eine 1.

> Das lasse ich weg

Wenn in den Eingangsportbits eine 0 steht, kann das externe Signal
nicht gelesen werden, es kommt immer eine 0 heraus.

Angenommen, die Schleifer sind an P3 bis P7 angeschlossen und die
Schalterausgänge an P0 bis P3, musst du in das Port-Register
nacheinander folgende Werte schreiben:

 0xef   -> 1110 1111
 0xdf   -> 1101 1111
 0xbf   -> 1011 1111
 0x7f   -> 0111 1111

Dadurch wird immer genau einer der Schleifer auf Low gezogen, die
Eingangsbits sind aber alle 1, so dass von den entsprechenden Pins
gelesen werden kann.

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke. Werds heute abend ausprobieren. Denke die oberen 4 Bits muss 
ich andersrum setzen. Besser gesagt ist eigentlich nur ne 
Software-Frage.

Frank

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwie klappt das nicht. Lese an den 4 Eingangsbits immer 0x0f 
unabhängig von der Schleiferbeaufschlagung. Aber ist eigentlich auch 
klar: Wenn man die Eingänge auf 1 setzt, um sie zu lesen, wo soll da je 
eine 0 herkommen? Über die so gesehen in Sperrichtung liegenden Dioden 
kann ja nichts runtergezogen werden. Habs nun mal mit 
PullDown-Widerständen an den Eingängen probiert, war leider auch nix. 
Aber vielleicht waren 0,5 M auch'n bisschen viel...

Frank

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nimmst Du nicht einfach 2 * PCF8574 und sparst Dir die 16 Dioden ?


Peter

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, wäre einfacher gewesen. Die 4 Schleifer fest an 5V, 16 Ausgänge über 
2 PCFs abfragen. Wenns mit anderen PullDown-Widerständen nicht klappt, 
mach ich es so.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.