PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2stellige 7 Segmentanzeige über BCD Decoder



pacer_one
25.12.2007, 13:22
Hallo,

da ich über die Feiertage mal wieder etwas Zeit habe...

habe aktuell das Problem, dass ich nicht weiß wie ich mehr als eine 7 -Segmentanzeige über BCD-Decoder ansteuern kann.
Irgendwie müsste ich die 1er und 10er Stelle voneinander trennen können.
Ich mache das nur aus Übungszwecken und weil ich die Bauteile dafür zu Hause habe, ich weiß dass es auch andere Möglichkeiten gibt O:)

Noch was, wieso braucht der Debugger eigentlich so lange? Mit einem Gigaherzrechner müsste das Teil doch in Echtzeit laufen können??
Stattdessen braucht er dafür die 10fache Zeit, irgendwie unglaublich

Gruß, JK

PicNick
25.12.2007, 13:51
Die meisten machen sowas mit MUltiplex, d.h. der BCD-DEcoder versorgt die 7-Segmente gemeinsam, durch das einzelne Ansteuern der Kathoden von jeder anzeige legst du fest, welche leuchtet. Bei flottem Betrieb sieht es dann so aus, als würden beide gleichzeitig was zeigen.
Klaro ?
Am BDC die 1-er stelle, die Kathode von der 1-er LED runter, also zeigt sie die 1-er, Kathode wieder rauf.
Dann am BCD die 10-er stelle anlegen, die Kathode von der 10-er Led runter, man sieht die 10-er. Kathode wieder rauf.
Und das eben flott.

pacer_one
25.12.2007, 14:02
aha, noch ein ruheloser Programmierer :-)

Nun ja, genau das habe ich schon realisiert über einen Timer. Funktioniert auch wunderbar, dank Sebastian seinem Tutorial.
Was mir jetzt fehlt, wie ich aus einer bliebigen Zahl die 1er und 10 Stelle extrahieren kann. Anders ausgedrückt, wie mache ich aus einer 15 eine 5 und eine 1? Die 15 könnte z.B. das Ergebnis einer Addition sein, dass einem der Register steht.

PicNick
25.12.2007, 15:31
Man muß man klären, was mit "15" gemeint ist, sonst reden wir schnell aneinander vorbei.
1) "15" => 0x0F
2) "15" => 0x15
im letzeren fall mußt du nur die Nibbles auseinanderkriegen

temp = 0x15
temp 4 mal nach rechts shiften --> 0x01 --> Zehner
temp = 0x15
temp AND 0x0F --> 0x05 ----> Einer
Das kannst du beim Multiplexen "on the fly" machen

bei 1) mußt du aber zuerst 15 --> 1 x 10 und 5 x 1 zerlegen
gibt's mehrere Methoden.
z.b durch zehn dividieren (ganzzahlige), bis nicht mehr geht -> Zehnerstellen , der Rest sind die 1-er.

robocat
25.12.2007, 15:31
in c könnte man machen:
a=x/10; // 15->1 zehnerstelle
b=x%10; //15->5 einerstelle

man könnte aber auch machen:
a=0;
while(x>=10){ x=x-10; a++; }

danach hast du in a die zehner, in x den rest.

gruesse

EDIT: hatte pseudocode da stehen, hab ich geändert

deSilva
25.12.2007, 15:53
So ganz war die Hardware-Seite noch nicht geklärt, glaube ich :-) Wo fleißt den der Strom der Kathode hin? Man kann sie ja nun nicht mehr an Ground legen... Wenn alle 7 Segmente "glühen" (mit üblicherweise 10mA), dann muss da jemand 70mA "versenken".

Es werden da gerne Universaltreiber genommen (ULN2803), aber ein einfacher NPN-Transistor tut es natürlich auch. Mit einem 3:8 Decoder kann man mit drei Beinchen dann auch 8 Stellen ansteuern.
Da sich die Leistung aufteilt, wird sowas natürlich nicht so schrecklich hell.
Wirklich hell wird's nur mit Latches..

pacer_one
25.12.2007, 16:16
naja, ist nur ne Testschaltung die ich auf einem Steckbrett aufgebaut habe.
Die Leistung meines BCD-Decoders ist offensichtlich ausreichend, Treiberbausteine habe ich nicht verwendet. Im Moment zeigen beide Segmentanzeigen die selben Nummern an, im Wechsel natürlich.

Inzwischen habe ich auch ein entsprechendes Tutorial auf mikrocontroller.net gefunden. Dort wird eine Funktion mit dem Namen out_number verwendet, das musses sein. Da muss ich nur noch durchsteigen.

deSilva
25.12.2007, 16:38
Der Strom muss nicht nur irgendwo herkommen (da ist dein BCD-Decoder gerade noch ausreichend für), sondern auch irgendwo "verschwinden".. Denk mal drüber nach :-)

pacer_one
25.12.2007, 16:46
na in der Anode der 7 Segmentanzeige natürlich, wo denn sonst?!
Hab ich das Problem jetzt nicht verstanden?

deSilva
25.12.2007, 17:19
...und wie dann weiter?

pacer_one
25.12.2007, 17:30
Also, vom Port des AVR gehts zum BCD-Decoder und dann an die Kathoden der einzelnen Segmente, die Anoden der Segmente sind verbunden und gehen zurück auf einen Port des AVRs. Das entsprechende Segment wird aktiv, wenn wenn der Port an der Anode auf high geht.

Aber, ich weiß immer noch nicht worauf du hinauswillst, die Hardware funktioniert.

deSilva
25.12.2007, 17:40
ok. Du hast also 7-Segment Anzeigen mit gemeinsamer Anode; die eine Sorte is ja genau so häufig wie die andere. Also drehe ich das mal alles um im Kopf.
Die BCD-Decoder "versenken" also den Strom der Segmente, 10mA jeder. Nun muss jemand diesen Strom liefern, das macht nie und nimmer Dein AVR :-) Du hast Glück, dass er einigermaßen kurzschlussfest ist, du quälst ihm aber 30 mA ab oder sogar etwas mehr.... das fällt nicht so auf, wenn nur zwei oder drei Segmente leuchten.

Wie gesagt, üblicherweise kommt hier ein "Stellentreiber" dazwischen, ein NPN Transistor tut's durchaus

wkrug
26.12.2007, 16:59
Gemeinsame Anode... ...wie gesagt, üblicherweise kommt hier ein "Stellentreiber" dazwischen, ein NPN Transistor tut's durchaus
Bei Gemeinsamer Anode wären aber PNP Transistoren, meiner Meinung nach, sinnvoller.
Bei einem NPN Transistor muss ich ja die Basis Emitterspannung überschreiten um ihn durchzusteuern.
Da auch der AVR nicht voll gegen +5V durchsteuern kann fallen an diesem Transistor ca. 0,8...1V zwischen Kollektor und Emitter ab.

Wenn ich einen PNP Transistor mit einem Masse Signal ansteuere, fällt an diesem nur die UCE ( sat ) mit etwa 0,3V ab.

Die Ansteuerung der PNP Transistoren muß aber auch mit einem GND Signal anstatt eines +5V Signales erfolgen.

PicNick
26.12.2007, 17:14
Ich bin schön langsam verwirrt.
Stellen wir mal klar: was hast du da, (nur damit ich mich auch auskenne):
LED-Anzeige gemeinsame Kathode ODER Gemeinsame Anode ?
BDC-Treiber/decoder ? Type ?
Vielleicht kriegen wir dann raus, ob der Strom von links oder von rechts kommen muss und wo wir ihn dann hinschicken, wenn er durch die LED's durch ist.


Am Anfang verwirren sich die Worte
dann verwirren sich die Begriffe
zuletzt verwirren sich die Dinge

pacer_one
26.12.2007, 17:37
Hmm, irgendwie interessieren sich alle für meine Hardware, die ja eigentlich läuft :-k

aber gut, um der Verwirrung über meine Schaltung ein Ende zu bereiten...
als LED-Anzeige verwende ich den Typ HD1131
als Decoder kommt ein 74LS47 zum Einsatz
die Schaltung wird mit 4,87V betrieben und die Vorwiderstände haben einen Wert von 680Ohm

deSilva
26.12.2007, 19:55
Ja, mit 680 Ohm ist irgendwie alles wurscht :-)
Mach aber trotzdem nicht immer die 88 an ...