Zwei 4-Bit-Zahlen am selben Port (z.B. ATmega16)

Hallo!

Mal 'ne kurze Frage: Wie kann man zwei 4-Bit-Binärzahlen am selben 8-Bit-Port ausgeben?
Beispiel: Mithilfe von zwei ICs, die Binärzahlen in hexadizimalen (0-F) „Signalen“ für 7-Segment-Anzeigen ausgeben, zwei 7-S.-Anz. an einem Port nutzen.

Danke im Voraus!

Martin.

Hi,

du shiftest das erste Nibble (= 4 bit) um 4 Stellen nach links
und veroderst es mit dem 2. Nibble.

Gruß Armin²

Hallo Martin,

Mal 'ne kurze Frage: Wie kann man zwei 4-Bit-Binärzahlen am
selben 8-Bit-Port ausgeben?
Beispiel: Mithilfe von zwei ICs, die Binärzahlen in
hexadizimalen (0-F) „Signalen“ für 7-Segment-Anzeigen
ausgeben, zwei 7-S.-Anz. an einem Port nutzen.

Im Zeitmultiplex, also zeitlich nacheinander.

du brauchst dann aber noch ein zusätzliches Signal um unterscheiden zu können, welcher Nibble (Bez. für 4-Bit) gerade ansteht.

Bei LED-Anzeigen kann man mit einem Decoder arbeiten und und die gemeinsamen Anoden oder Kathoden der Anzeigen schalten. Gibt man die Bits schnell genug hintereinander aus nimmt das Auge das nicht als flimmern wahr.

Andernfalls verwendet man eine entsprechende Anzahl an 4-Bit Registern welche man nacheinander mit den Daten ansteuert.

Des weiteren gibt es noch diverse Chips mit serieller Ansteuerung, welche nur oder 3 Bits zur Ansteuerung benötigen und welche direkt die Anzeigen treiben können.

Aber zuerst stell sich die Frage obs LED oder LCD werden sollen.

MfG Peter(TOO)

Hi der code müsste ungefähr so ausschauen.

Zahl1=5;
Zahl2=7;

PORTA=(Zahl1

Hallo,

Beispiel: Mithilfe von zwei ICs, die Binärzahlen in
hexadizimalen (0-F) „Signalen“ für 7-Segment-Anzeigen
ausgeben, zwei 7-S.-Anz. an einem Port nutzen.

Im Zeitmultiplex, also zeitlich nacheinander.

du brauchst dann aber noch ein zusätzliches Signal um
unterscheiden zu können, welcher Nibble (Bez. für 4-Bit)
gerade ansteht.

Warum so kompliziert? Ein 8-bit-Port reicht doch völlig um zweimal 7-Segmente direkt anzusteuern (außer man möchte den Punkt auch nutzen, aber dann reichen 4 Bit auch nicht). Dann muß sich der Programmierer halt überlegen, welche Segmente er für welches Zeichen ansteuern muß. Ich halte das für eine gute Übung :wink:

Cu Rene

Hello again.

Zahl1=5;
Zahl2=7;
PORTA=(Zahl1

Hallo,

Denn alle vier Ports mit insgesamt vier 7-Segment-Anzeigen zu
belegen, halte ich für „Verschwendung“.

das macht man auch nicht unbedingt so.
Man nimmt einn Decoder, der mit 4 Bit angesteuert wird und dazu
ein paar Steuerleitungen, um die Anzeigen im Zeitmultiplex nacheinander
anzusteuern.
Mit 8 Bits kann man dann z.B. 16 Stellen realisieren, wenn man
4 Bit auf einen 1 aus 16 Decoder gibt.

z.B. so wie hier:
http://www.mikrocontroller.net/attachment/18818/Scha…

Auf die Decoder kann man natürlich auch verzichten, wenn man genug
Ports drüber hat und der Kontroller auch sonst genug Recourcen hat.
http://www.batronix.com/gif/t_modul_sch.gif

Gruß Uwi

http://www.google.de/images?um=1&hl=de&tbs=isch%3A1&…

1 Like

Hello,

Denn alle vier Ports mit insgesamt vier 7-Segment-Anzeigen zu
belegen, halte ich für „Verschwendung“…

Technisch stimme ich dir zu, finanziell möglicherweise nicht - auch, wenn jedes Bauteil nur ein paar Cent kostet, kostet es was.
Der Platz dürfte ja kein Problem sein, wenn man so einen (von den Abmessungen) großen Prozessor verwendet.
Bei mehr als zwei Ziffern würde ich aber auf jeden Fall über multiplex nachdenken.

Cu Rene

Bei mehr als zwei Ziffern würde ich aber auf jeden Fall über
multiplex nachdenken.

Ja, so werde ich es wohl lösen. Danke für die Antwort.
Schaden wird es keinesfalls, sich das Multiplex-Verfahren anzueignen.

Gruß.

z.B. so wie hier:
http://www.mikrocontroller.net/attachment/18818/Scha…

Diese Schaltung sieht doch wunderbar aus und beinhaltet das Nötigste.
Mit den Transistoren die 7Seg-Anzeigen zu „aktivieren“, finde ich gut :smiley:

Denn muss ich mich da nur noch Software-seitig einarbeiten und denn is’ gut.

Vielen Dank!

Hallo,

z.B. so wie hier:
http://www.mikrocontroller.net/attachment/18818/Scha…

Diese Schaltung sieht doch wunderbar aus und beinhaltet das Nötigste.

wobei die so nicht ganz vollständig ist.

Mit den Transistoren die 7Seg-Anzeigen zu „aktivieren“, finde ich gut :smiley:

Ja, allerdings sind in der verlinkten Schaltung die gezeigten
Transistoren nur zum Aktivieren der Dezimalpunkte genutzt.

Aber im Prinzip wird das bei Zeitmultiplex so gemacht, dass der
gemeinsame Anschluss der 7 Segmente über einen Treiber-(Transistor)
geschaltet wird (je nach Typ der Anzeige gegen Masse mit npn oder
gegen +Ub mit pnp).
Hier ist das besser gezeigt: http://www.batronix.com/gif/t_modul_sch.gif

Gruß Uwi

Okay, dankeschön!

Ich habe es jetzt so gemacht, dass ich gleiche Segmente an den selben Pin lege und die (im meinen Fall) gemeinsame Anode über einen PNP-Transistor mit 2 weiteren Pins steuer (aufgrund von 2 Anzeigen).

Und wenn ich bei der Software nicht mehr weiterkomme, dann hab ich ja euch :smile:

Hallo,

Ich habe es jetzt so gemacht, dass ich gleiche Segmente an den
selben Pin lege

dabei gibt es noch eine Kleinigkeit zu beachten.
Da die Segmente immer nur einen Bruchteil der Gesamtzeit leuchten,
gibt man entsprechend mehr Strom auf die Segmente, damit die
Helligkeit auch ausreichend ist.
Deshalb braucht es in der Regel auch für die Segmente einen Treiber.
Die Prozessorpins treiben in der Regel nicht ausreichend Strom
bzw. sind dafür nicht spezifiziert.
Gruß Uwi

Deshalb braucht es in der Regel auch für die Segmente einen Treiber.

Okay. Ich schon einmal von Treibern (also nicht für Computer) gehört. Diese sind wohl in IC-Form. wieviele Pins haben die? Welchen kannst du mir empfehlen? Und sollte ich noch etwas wissen, oder sind die Treiber annähernd selbsterklärend?

Danke im Voraus!

Hallo,

Computer) gehört. Diese sind wohl in IC-Form. wieviele Pins
haben die? Welchen kannst du mir empfehlen? Und sollte ich
noch etwas wissen, oder sind die Treiber annähernd selbsterklärend?

ja is’ses den so schwör :-?)

Hier in dem „alt bekannten Plan“ hat man z.B. diesen LED-Treiber ULN2803
eingesetzt: http://www.batronix.com/gif/t_modul_sch.gif
Man kann aber auch ganz normale Transistoren dafür nehmen,
so wie in diesem Plan für die Ansteuerung der Dezimalpunkte:
http://www.mikrocontroller.net/attachment/18818/Scha…
wobei in diesem Plan freilich die Basisvorwiderstände fehlen und
auch in den Ansteuerleitungen der Segmente keine LED-Vorwiderstände
drin sind (ist mehr so ein Prinzipschaltplan).

Wenn du doch einen Decoder BCD zu 7-Segment (z.B. 74xx147) nimmst,
hast du damit auch gleich einen ausreichend leistungsfähigen Treiber.
http://www.datasheetcatalog.com/datasheets_pdf/7/4/H…
Gruß Uwi

Man kann aber auch ganz normale Transistoren dafür nehmen

Allerdings werden es dann ein paar mehr, wenn man für jedes Segment einen Transistor verwendet…

wobei in diesem Plan freilich die Basisvorwiderstände fehlen

Jap, das habe ich, nachdem ich mich über die Temperatur gewundert habe, auch gemerkt. Habe einen 1k-Widerstand verwendet, funktioniert einwandfrei.

Wenn du doch einen Decoder BCD zu 7-Segment (z.B. 74xx147) nimmst, hast du damit auch gleich einen ausreichend leistungsfähigen Treiber.

Okay, das ist gut. Kann ich dann alle Anzeigen an diesen Decoder anschließen und mithilfe der gemeinsamen Anoden einen Multiplex machen? Oder sollte ich lieber pro Segment einen Decoder verwenden?

Achja, etwas war/ist da noch, was ich komisch finde. Ich habe je Anzeige einen 470-Ohm-Widerstand an der gem. Anode verwendet. Wenn ich diesen mit einem Stück Draht überbrücke (etwas ungesund für die LEDs darin, aber diese dienen nur zu Testzwecken) oder mit einem 150-Ohm-R. auswechsel, dann überspringt der mC z.B. die „1“ und hängt sich bei der „0“ auf. Ich weiß nicht, warum.
150er sollte ja eigentlich gehen, weil mindestens zwei Segmente zur Zeit leuchten und Anzeige[1,6V_20mA].

mfG

Oder sollte ich lieber pro Segment einen Decoder verwenden?

Ich meinte natürlich pro Anzeige.

Hallo,

Man kann aber auch ganz normale Transistoren dafür nehmen

Allerdings werden es dann ein paar mehr, wenn man für jedes
Segment einen Transistor verwendet…

ja, dann braucht man eben 7 Transistoren und evtl. noch einen für DP.

Wenn du doch einen Decoder BCD zu 7-Segment (z.B. 74xx147) nimmst,
hast du damit auch gleich einen ausreichend leistungsfähigen Treiber.

Okay, das ist gut. Kann ich dann alle Anzeigen an diesen
Decoder anschließen und mithilfe der gemeinsamen Anoden einen
Multiplex machen?

Ja, genau so.

Oder sollte ich lieber pro Segment einen Decoder verwenden?

Das spart man ja nix :frowning:

Achja, etwas war/ist da noch, was ich komisch finde. Ich habe
je Anzeige einen 470-Ohm-Widerstand an der gem. Anode verwendet.

Schon mal seltsam. Die Vorwiderstände gehören auf die andere
Seite. Für jedes Segment ein Widerstand. Sonst leuchtet die
Anzeige sehr unterschielich hell, weil sich der Strom ja immer auf
alle aktiven Segmente verteilt.

Wenn ich diesen mit einem Stück Draht überbrücke
(etwas ungesund für die LEDs darin, aber diese dienen nur zu
Testzwecken)

Naja, wenn das am Kontroler hägt, ist es noch viel ungesunder für
die Ports. Zu hast da wohl einen sehr robusten Typ. Bei manchen
Kontrollern machst du das einmal kurz, dann ist der Ausgang gestorben.

oder mit einem 150-Ohm-R. auswechsel, dann
überspringt der mC z.B. die „1“ und hängt sich bei der „0“
auf. Ich weiß nicht, warum.

Sehr wahrscheilich, weil du die Kontrollerports überlastest.
Was der dann im Innern macht, weiß kein Mensch so genau.
Außerdem kann die Betriebsspannung einbrechen usw.

150er sollte ja eigentlich gehen, weil mindestens zwei
Segmente zur Zeit leuchten und Anzeige[1,6V_20mA].

Keine Ahnung, was du da so hast und wurstelst.
Gruß Uwi

Okay, das ist gut. Kann ich dann alle Anzeigen an diesen
Decoder anschließen und mithilfe der gemeinsamen Anoden einen
Multiplex machen?

Ja, genau so.

Wunderbar, dann weiß ich ja bescheid. Dankeschön!

Schon mal seltsam. Die Vorwiderstände gehören auf die andere
Seite. Für jedes Segment ein Widerstand. Sonst leuchtet die
Anzeige sehr unterschielich hell, weil sich der Strom ja immer
auf alle aktiven Segmente verteilt.

Ja, das mit der unterschiedlichen Helligkeit habe ich erwartet und so ist es ja auch. Aber zu Testzwecken war mir das nicht so wichtig.

[…] Kontrollern machst du das einmal kurz, dann ist der Ausgang
gestorben.
Sehr wahrscheilich, weil du die Kontrollerports überlastest.
Was der dann im Innern macht, weiß kein Mensch so genau.
Außerdem kann die Betriebsspannung einbrechen usw.

Oh, das dachte ich gar nicht, dass man da so schnell etwas kaputt machen kann. Gut, dass ich das jetzt besser weiß.

Keine Ahnung, was du da so hast und wurstelst.

Das geht mir machmal auch so :smiley:

Vielen Dank!

Zahl1=5;
Zahl2=7;
PORTA=(Zahl1