Forum: Mikrocontroller und Digitale Elektronik MSP430: Dip-Switch auslesen


von Sven Scholz (Gast)


Lesenswert?

Hallo Gemeinde,

ich würde gerne mit dem MSP430G2553 einen 8bittigen Dip-Switch auslesen.
Einmalig beim Programmstart.
Problem: Ich habe nur noch ca. 3 GPIO-Pins frei.

Benötige ich für 8 Schalter(-Stellungen) auch 8 Eingang-Pins?

Wie lese ich die Schalterstellungen ein?

Herzlichen Dank!

von Frank K. (fchk)


Lesenswert?

Du kannst mit einer Diodenmatrix arbeiten.

Oder HC595 Schieberegister.

Oder I2C Port Expander a la PCF8574.

fchk

von hinz (Gast)


Lesenswert?

Oder mit ein paar Widerständen und A/D-Eingängen.

von georg (Gast)


Lesenswert?

Sven Scholz schrieb:
> Problem: Ich habe nur noch ca. 3 GPIO-Pins frei.

Das geht mit jedem Schieberegister mit 8 Eingängen und einem seriellen 
Ausgang. Du brauchst IOs für diesen Ausgang, für einen Übernahmeimpuls 
und für den Takt, passt also mit 3. xx595 ist eine Möglichkeit von 
vielen.

Georg

von A. S. (Gast)


Lesenswert?

Frank K. schrieb:
> Du kannst mit einer Diodenmatrix arbeiten.

Wie macht man das mit 3 IOs bei Dip switsches?

von MaWin (Gast)


Lesenswert?

Sven Scholz schrieb:
> Benötige ich für 8 Schalter(-Stellungen) auch 8 Eingang-Pins?

Nein.

DIP Schalter haben noch den Vorteil, alle einzeln zu sein, keinen 
gemeinsamen Anschluss, also beliebig verdrahtbar.

Aber ohne zusätzliche Bauteile sehe ich keine Lösung bei nur 3 Pins. 
Wenn man jedoch andere Pins mitverwenden könnte mit ihrem low oder high 
als Ausgang, kann es sogar Lösungen ohne zusätzliche Bauteile geben.

Man kann über Widerstände und Analogeingänge arbeiten, aber nehmen wir 
mal an es sind keine Analogeingänge.

Mit 2 Ausgängen kann man nur 1 von 4 auf den restlichen Eingang 
schalten.

Ein parallel ladbares Schieberegister wie 74HC166 kann mit 2 Ausgängen 
und 1 Eingang benutzt werden, braucht aber noch 8 pull up Widerstände.

Ein I2C Portexpander wie PCF8574 hat die schon drin.

Ein parallel out Schieberegister mit open drain Ausgängen käme mit 1 
pull up, der noch intern im uC  Eingang sotzen kann, aus. Leider fallen 
mir nur LED Treiber wie DM13 mit open drain ein, und die möchten einen 
zusätzlichen Widerstand um den Strom zu bestimmen.

Statt solchem teuren Exoten könnte man natürlich auch direkt einen 
kleinen 14 Pin uC verwenden.

Ganz passi  und trotzdem ohne A/D Pin könnten die DIP Schalter 
Kondensatoren an Masse schalten und man bestimmt über einen Pin den man 
von low auf Eingang schaltet und pull up Widerstand, wie lange es dauert 
bis die Kondensatorspannung die Eingangsschaltschwelle erreicht. Für 
alle 8 braucht man dazu einen Analogkomparatoreingang, aber da du pro 
Pin maximal 3 auswerten musst, also 8 Zeiten unterscheiden musst, geht 
das sicher auch ohne. Sind aber 8 Kondensatoren und 3 Widerstände, 
immerhin kein IC.

von Gerald K. (geku)


Lesenswert?

Welches Gehäuse wird verwendet?
Wie sind die anderen PINs verwendet.
Benutze Eingänge könnten mit einem Vorwiderstand versehen werde und beim 
Hochfahren als Ausgänge geschaltet werden, die die Schaltermatrix 
scannen.

Z.B. 4 Eingänge werden auf 2x 4 Dipswitches als Ausgänge geschaltet, und 
über die zwei freien Eingänge abgefragt. Es bleibt sogar ein  I/O frei. 
Die Dipswitches werden über Dioden entkoppelt.  Die 4 Ausgänge werden 
der Reihe nach zur Abtastung angesteuert und am Ende wieder auf Einänge 
umprogrammiert.

Es werden 4 Widerstände und 2x 4 Schottkydioden oder 4 SMD 
Schottkydoppeldioden benötigt.

Kann bei Bedarf gerne die Schaltung nachliefern.

: Bearbeitet durch User
von Zeno (Gast)


Lesenswert?

Du nimmst einen 8 zu 3 Encoder, z.B. einen 4532. Der macht aus Deinen 8 
Schaltzuständen ein 3Bit-Signal. Das mußt Du mit Deinen 3 freien Ports 
nur einlesen und dekodieren.

von Gerald K. (geku)


Lesenswert?

Zeno schrieb:
> Du nimmst einen 8 zu 3 Encoder, z.B. einen 4532. Der macht aus Deinen 8
> Schaltzuständen ein 3Bit-Signal. Das mußt Du mit Deinen 3 freien Ports
> nur einlesen und dekodieren.

Mit den 8 Dipswitches lassen sich 256 Möglichkeiten einstellen. Wie kann 
ich diese 256 Zustände mit 3 Bit codieren, geschweige dekodieren?

von Baendiger (Gast)


Lesenswert?

Hast du noch bspw. LEDs in deiner Schaltung? Die PINs könntest du für 
eine Art Multiplexing nutzen, wenn es nicht so schlimm ist, das diese am 
Anfang kurz leuchten.

Wenn du noch einen AD Wandler frei hast kannst du auch durch die DIP 
Schalter geschaltete Spannungsteiler auswerten aber das wird bei 8 
Schaltern und beliebigen Kombinationen sehr aufwändig.

von Wolfgang (Gast)


Lesenswert?

MaWin schrieb:
> Ein I2C Portexpander wie PCF8574 hat die schon drin.

Auch der I2C Portexpander wird zumindest zwei Widerstände brauchen, 
jedenfalls wenn der I2C-Bus beim Prozessor noch nicht eingerichtet ist.
Insofern wäre es nützlich, zu wissen, wie bei dem µC die restlichen Pins 
belegt sind. Bussysteme sind meist für Nutzung durch mehrere 
Busteilnehmer ausgelegt.

von Gerald K. (geku)


Lesenswert?

Baendiger schrieb:
> Hast du noch bspw. LEDs in deiner Schaltung? Die PINs könntest du für
> eine Art Multiplexing nutzen, wenn es nicht so schlimm ist, das diese am
> Anfang kurz leuchten.

Drum wär es wichtig die Schaltung zu kennen. Nur dann können wir 
effizient helfen.

Den MSP430G2553 gibt es auch mit 24 IO's. Mit den zusätzliche 8 PINs 
kann man die Dipswitches direkt anschließen.

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.