Forum: Mikrocontroller und Digitale Elektronik 7-Segmentanzeige mit versch. Ports des ATmega8 ansteuern


von Uwe R. (b-kadett)


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

von yes (Gast)


Lesenswert?

Du musst halt zwei Ports setzen anstatt nur einen. Oder was war die 
Frage?

von Hannes L. (hannes)


Lesenswert?

Uwe Rößling schrieb:
> Ich
> teile aber die Segmente so auf:

Ich teil(t)e sie noch anders auf und steuerte sie so an:
http://www.hanneslux.de/avr/divers/pm24/vm24ko01.asm
Allerdings nicht in C, ist mir zu kryptisch. Das Prinzip ist aber 
dasselbe.

...

von Timm T. (Gast)


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.

von Fabian O. (xfr)


Lesenswert?


von Uwe R. (b-kadett)


Lesenswert?

... danke erstmal. Es funktioniert noch nicht richtig. Muss da noch mehr 
in die Theorie einsteigen.

von Utzel (Gast)


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

von Thomas E. (thomase)


Lesenswert?

Utzel schrieb:
> So müsste es richtig lauten:
Nein.

a-g sind die 7 Segmente und THZE, Tausender, Hunderter..., sind die 
Anoden.

mfg.

von Thomas E. (thomase)


Lesenswert?

Uwe Rößling schrieb:
> PD0 = a
> PD1 = b
> PD2 = c
> PD3 = d
> PD4 = e
> PB6 = f
> PB7 = g
Das sind 7 Balken, die du so einschalten musst, dass du das als Zahl 
erkennst.
Wo ist denn das Problem? Das ist ein bisschen Bitgefriemel.

mfg.

von Utzel (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Utzel schrieb:
>> So müsste es richtig lauten:
> Nein.

Darum hab ich ja extra im Konjunktiv geschrieben - "müsste" und nicht 
"muss".

von Thomas E. (thomase)


Lesenswert?

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.

mfg.

von Utzel (Gast)


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 !!!

von Axel G. (axelg) Benutzerseite


Lesenswert?

Utzel schrieb:
> Willst du mir etwa damit unterstellen, dass ich von Hexadecimalzahlen
> keine Ahnung habe?
Du verstehst sicher ganz richtig was Hexadezimalzahlen sind. (Du 
solltest sie aber mit 'z' schreiben.)

Es geht hier aber nicht um Hexadezimalzahlen, sondern um Segment und 
Spaltenbezeichnungen und im Zweifelsfall um #define Macros.


Axel

von Thomas E. (thomase)


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.

von Reinhard Kern (Gast)


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

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.