7-Segmentanzeige mit versch. Ports des ATmega8 ansteuern

OP #3045619
Lesenswert?

Hallo,

ich habe ein 4x7-Panel gebaut (gem. Anode, mit Vorwiderst. und 
Transistoren) um es an ein ATmega8 anzuschließen. Das Besondere:

Die Segmentansteuerungen a-f und T,H,Z,E liegen so nebeneinander,
dass sie direkt (kreuzungsfrei) an den ATmega8 über ein Steckboard 
ansteckbar sind. Damit sind die PINS 2-14 (ohne 7 und 8 (Vcc und GND)) 
auf der einen Seite des Mikrocontrollers belegt (geht in ein kleines 
Gehäuse und ist sehr übersichtlich).

Jetzt mein Problem:

Wie muss der C-Code aussehen, damit die Dezimalzahlen richtig angezeigt 
werden. Ich fand nur Darstellungen die sich auf einen Port beziehen. Ich 
teile aber die Segmente so auf:

PD0 = a
PD1 = b
PD2 = c
PD3 = d
PD4 = e
PB6 = f
PB7 = g
PD5 = T
PD6 = H
PD7 = Z
PB0 = E
Gast #3045648
Lesenswert?

Lookup-Tabelle, in der für jede Ziffer 0 bis 9 in 2 Bytes das Muster für 
die 2 Ports steht.

Nicht vergessen: Portzustand einlesen => Pins maskieren => Muster setzen 
=> Portzustand ausgeben.

Einlesen auf PORTx, nicht PINx.
Gast #3046992
Lesenswert?

Uwe Rößling schrieb:
> PD0 = a
> PD1 = b
> PD2 = c
> PD3 = d
> PD4 = e
> PB6 = f
> PB7 = g
> PD5 = T
> PD6 = H
> PD7 = Z
> PB0 = E

Du hast einen Fehler hier in der Auflistung. Hast Du schon mal was von 
Hexadecimalzahlen gehört?
Die gehen so:
1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f!

Werte wie T H Z und g kommen da garnicht vor und zw. Groß- und 
Minischreibung wird garnicht unterschieden (e/E).

So müsste es richtig lauten:

 PD0 = 1
 PD1 = 2
 PD2 = 3
 PD3 = 4
 PD4 = 5
 PB6 = 6
 PB7 = 7
 PD5 = 8
 PD6 = 9
 PD7 = a
 PB0 = b
Gast #3047173
Lesenswert?

Thomas Eckmann schrieb:
> Utzel schrieb:
>> Darum hab ich ja extra im Konjunktiv geschrieben - "müsste" und nicht
>> "muss".
> Was du geschrieben hast, ist totaler Stuss. Da ändert der Konjunktiv
> auch nichts dran.

Willst du mir etwa damit unterstellen, dass ich von Hexadecimalzahlen 
keine Ahnung habe?

Schau doch mal bei Wikipedia nach und lese den Artikel zu 
Hexadecimalzahlen. Dort wirst Du erkennen, dass nur die Buchstaben von a 
bis f (für 10 bis 15) verwendet werden dürfen !!!
#3047206
Lesenswert?

Utzel schrieb:
> Willst du mir etwa damit unterstellen, dass ich von Hexadecimalzahlen
> keine Ahnung habe?
Du solltest mal ein bisschen lesen und darüber nachdenken, anstatt dich 
hier so aufzuplustern. Ich habe dir doch ganz sachlich mitgeteilt, was 
du falsch verstanden hast:

Thomas Eckmann schrieb:
> a-g sind die 7 Segmente und THZE, Tausender, Hunderter..., sind die
> Anoden.
Dann kamst du mit deinem Konjunktiv.

Das Ganze hat mit Hexadezimalzahlen überhaupt nichts zu tun. Und es geht 
nicht darum, ob du etwas von Hexadezimalzahlen verstehst oder nicht.

mfg.
Gast #3047218
Lesenswert?

Thomas Eckmann schrieb:
> Wo ist denn das Problem? Das ist ein bisschen Bitgefriemel.

Muss doch nicht sein - man macht sich eine Tabelle 1 mit den Segmenten 
für die darzustellenden Zahlen, die hat halt einen etwas anderen Inhalt, 
wenn die Anschlüsse nicht a,b,c.. sind, aber ist genauso gross. Wenn 2 
Prots betroffen sind, dann halt 2 Bytes pro Ziffer.

In gleicher Weise macht man eine Tabelle 2, für die gleichen Ports, mit 
den Bitmustern für das Einschalten der Einer, Zehner usw., und zur 
Ausgabe verodert man die beiden Tabellen, um z.B. eine 5 an der 
Zehnerstelle auszugeben. Und bis dahin hat man noch nicht ein einziges 
Bit verschieben müssen.

Und bitte verschont mich mit Hexadezimal-Quatsch, Siebensegment hat mit 
Hexadezimalzahlen nicht das geringste zu tun.

Gruss Reinhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren