Forum: Mikrocontroller und Digitale Elektronik BCD- Schalter einlesen


von J. H. (joho62)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich habe hier einen Vorwahlschalter zu liegen, mit dem ich einem Mega8
einen Wert 0 bis 9 vorgeben möchte (Sollwert).
Dieser ist BCD-kodiert. Den könnte ich jetzt an vier Eingangspins
anschließen (und GND). Was muß ich tun, um daraus ein Hex-Byte oder
eine Binärzahl zu bilden, zur weiteren Verarbeitung?
Tabelle aufstellen?
Bits addieren?
Kurze Hilfestellung erbeten! (Schubs in die richtige Richtung).
Joachim

von Karl H. (kbuchegg)


Lesenswert?

J. H. schrieb:

> Dieser ist BCD-kodiert. Den könnte ich jetzt an vier Eingangspins
> anschließen (und GND).

Vorzugsweise an die Datenbits 0 bis 3 vom bewussten Port.

> Was muß ich tun, um daraus ein Hex-Byte oder
> eine Binärzahl zu bilden, zur weiteren Verarbeitung?

Wenn angeschlossen, wie vorgeschlagen: gar nichts.
Einfach den Port einlesen und die nicht benutzen Bits auf 0 setzen.

zb
1
   x = PINB & 0x0F;

wenn der BCD-Schalter an die Bits 0 bis 3 vom Port B angeschlossen ist.

Ansonsten: ja, dann wirst du die Einzelbits anhand ihrer Wertigkeit eben 
addieren müssen. Ist jetzt auch kein Beinbruch, aber wenn dir die 
Hardware durch die Art des Anschlusses das schon abnimmt, ist es 
natürlich simpler.

: Bearbeitet durch User
von jojo1969@gmx.de (Gast)


Lesenswert?

BCD und Hex code sind für Zahlen von 0-9 zunächst mal identisch!

BCD bedeutet binary coded decimal-> damit werden immer aus 4bit die 
Ziffern 0-9 abgebildet - die Zahl 16dez währe somit z.b. in BCD 0001 
0110

Bei einstelligen (dezimal) Ziffern gibts keinen Unterschied zu hex

von ich (Gast)


Lesenswert?

Karl Heinz schrieb:
> Wenn angeschlossen, wie vorgeschlagen: gar nichts.

Eine kleine Ergänzung hätte ich da noch: Vier Pullup-Widerstände (intern 
oder extern) braucht man noch. Aber sonst wirklich nichts. Einfach nur 
einlesen.

von J. H. (joho62)


Lesenswert?

Ich präzisiere mal:
Ich habe an einem Mega8 nur noch die oberen vier Bits vom Port B
zur Verfügung, alle anderen sind schon belegt. Und: ich kann bis jetzt
"nur" Bascom (Anfänger). "Einlesen" hört sich gut an, aber wie?
Soll ich den ganzen Port nehmen und dann viermal rechts-shiften?

von ich (Gast)


Lesenswert?

J. H. schrieb:
> Ich präzisiere mal:
> Ich habe an einem Mega8 nur noch die oberen vier Bits vom Port B
> zur Verfügung, alle anderen sind schon belegt. Und: ich kann bis jetzt
> "nur" Bascom (Anfänger). "Einlesen" hört sich gut an, aber wie?
> Soll ich den ganzen Port nehmen und dann viermal rechts-shiften?

Richtig. Ich kenne mich mit Bascom nicht aus, deswegen der Hinweis: Wenn 
beim Rechts-Shiften von links Nullen reingeschoben werden, dann ist 
alles ok. Wenn nicht (dann heißt es eigentlich "rotieren"), dann mußt du 
nach dem Schieben die oberen 4 Bits auf Null setzen, also

 x = (PINB >> 4) & 0x0F;

von Route_66 (Gast)


Lesenswert?

Hallo!
Je nachdem wie der Schalter intern aufgebaut ist, und wie du ihn 
anschlisst, mußt du vielleicht das Eingelesene noch invertieren.

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.