Hy Leute, bin auf dies tolle forum gestossen wie ich mein problem gegoogelt hab. Hab gesehen das hier einigen bisschen weitergeholfen wird wenn man wo steckt. Mein problem ist das multiplexen mit dem µC. Und zwar gebe ich Zahlen von 0 -9 schon aus,aber höherere zahlen wie zB 10 versuche ich schon seit 1,5h,und mir fällt nur diese idee ein. OEB=0x01; Pin 1 am port b wird als Ausgang definert OUTB=0x01; HIGH an diesem PIN OUTC=EINS; Im define schon alles erledigt OEB=0x00;Alles wieder abdrehen OEB=0x02;Jetzt wird bur der zweite PIN als ausgang definiert OUTB=0x02; Für die zweite Anzeige wird common anode auf 1 OUTC=NULL; Im define 7 Segment-Anzeigen sind common anode darum wird immer ein portpin auf masse gelegt (OUTB=0x00). Hat wer einen besseren Ansatz? Danke im Vorhinein Ach ja und mein controller ist ein 805q1 von cypress
Fabian schrieb: > Hy Leute, > > bin auf dies tolle forum gestossen wie ich mein problem gegoogelt hab. > Hab gesehen das hier einigen bisschen weitergeholfen wird wenn man wo > steckt. Mein problem ist das multiplexen mit dem µC. Und zwar gebe ich > Zahlen von 0 -9 schon aus,aber höherere zahlen wie zB 10 versuche ich > schon seit 1,5h,und mir fällt nur diese idee ein. Das ist ok. Multiplexen ist hier durchaus eine vernünftige Lösung. > OEB=0x01; Pin 1 am port b wird als Ausgang definert > OUTB=0x01; HIGH an diesem PIN > OUTC=EINS; Im define schon alles erledigt > OEB=0x00;Alles wieder abdrehen > OEB=0x02;Jetzt wird bur der zweite PIN als ausgang definiert > > OUTB=0x02; Für die zweite Anzeige wird common anode auf 1 > OUTC=NULL; Im define > > 7 Segment-Anzeigen sind common anode darum wird immer ein portpin auf > masse gelegt (OUTB=0x00). Hat wer einen besseren Ansatz? Na ja. Aus dem was du da zeisgt, kann man nicht wirklich etwas ablesen. Multiplexen steht und fällt mit dem Einsatz von Timern. Du brauchst einen Timer, der in regelmässigen Zeitabständen eine Funktion aufruft (eine ISR). In dieser Funktion wird die aktuell gerade leuchtende Anzeige abgeschaltet, die Segmentleitungen für die nächste Anzeigestelle umgestellt und diese dann aktiviert. Das ist auch schon alles. Beim nächsten Aufruf der Funktion geht es dann wieder weiter: die jetzt eben leuchtende Anzeige abgeschaltet, die Segmentleitungen für die nächste Stelle eingestellt und diese aktiviert. Und so weiter und so weiter. Immer reihum eine Anzeige nach der nächsten. Jede darf so lange leuchten, bis die ISR die nächste Stelle aktiviert. Wenn das nur schnell genug passiert, sehen wir langsame Menschen alle Anzeigen gleichzeitig leuchten. d.h. das Hauptprogramm selbst kümmert sich überhaupt nicht mehr um den Multiplex, das erledigt einer Timer mit der regelmässig aufgerufenen ISR-Funktion. Das Hauptprogramm hat lediglich ein paar globale Variablen, in die es das auszugebende Muster für jede Stelle reinschreibt und wenn die ISR dann diese Stelle bearbeitet, dann erscheint dieses Muster auch auf der Anzeige. Für das Hauptprogramm bedeutet das ganz einfach: Das auszugebende Muster in diese globalen Variablen zu schreiben und irgendwie 'magisch' erscheint diese Muster auf den 7-Segment. Solange der Timer läuft, natürlich, der diesen 'magischen' Hintergrundmechanismus antreibt.
1) Hardware abbilden Versuche jede LED eines deiner Zifferndisplays ein Bit in einer Variablen deines Controller zuzuweisen, idealerweise in 8Bit ein 7-Segmentdisplay: bsp.: Display 0 Segment a = Byte 0 Bit 0 Display 0 Segment b = Byte 0 Bit 1 Display 0 Segment c = Byte 0 Bit 2 Display 0 Segment d = Byte 0 Bit 3 Display 0 Segment e = Byte 0 Bit 4 Display 0 Segment f = Byte 0 Bit 5 Display 0 Segment g = Byte 0 Bit 6 Display 0 Dotpoint = Byte 0 Bit 7 Das und nur dass sollte deine Anzeigenmultiplexroutine als ISR oder zyklisch aufgerufene Funktion machen. 2) Set funktion Deine Set funktion bekommt die nummer des Displays und den Inhalt übergeben. Set_Funktion (display0,wertx) Set_Funktion (display1,werty) Sie wandelt den in wert_ stehenden Inhalt in 7-Segment info um und schreibt ihn in die 8Bit Variablen aus deiner Zyklischen Routine. 3) Stellenübergreifend Binärvariable in Dezimalstellen wandeln. Stellen separieren Inhalte an entsprechende Stellen der Set funktion übergeben. Fertig. T.
Wäre es nicht am einfachsten Decoder wie den HEF5411 zu verwenden? Ich kenn mich mit dem µC programmieren noch nicht so aus aber der HEF hat so einen Pin, mit dem man den Input "schließen" kann, so dass man nicht bei den LEDs mit diesen mega Frequenzen rumspielen muss... dann braucht für 6 7 Segment Anzeigen NUR 10 Pins und die 6 Kontroll Pins lassen sich auch noch zu 3 Pins codieren. Der Link vom Datenblatt: http://pdf1.alldatasheet.com/datasheet-pdf/view/17747/PHILIPS/HEF4511BD.html der Pin den ich meine ist EL hoffe mein Beitrag vereinfacht das Multiplexen ein bisschen
"Gast" schrieb: > Wäre es nicht am einfachsten Decoder wie den HEF5411 zu verwenden? Warum sollte es? Versuch mal mit diesem Decoder Hex-Zahlen auszugeben :-) oder negative Zahlen (in unseren Breiten soll es des Nachts auch schon mal Minusgrade haben, so dass eine Temperaturanzeige auch ein '-' braucht) Der springende Punkt: In Software kann ich jede beliebige Anzeige realisieren, solange sie sich nur mit den vorhandenen Segmenten realisieren lässt. Mit so einem Decoder bin ich immer darauf angewiesen, was mir der Hersteller als "Zeichensatz" gibt. > Ich kenn mich mit dem µC programmieren noch nicht so aus aber der HEF > hat so einen Pin, mit dem man den Input "schließen" kann, so dass man > nicht bei den LEDs mit diesen mega Frequenzen rumspielen muss... Übertreib nicht. 7 Segment Multiplex hat doch nix mit Mega-Frequenzen zu tun. > dann braucht für 6 7 Segment Anzeigen NUR 10 Pins Ist aber jetzt wirklich kein Thema. Wenn es sein muss, kann ich mit einem Schiebregister auch mit 3 Pins komplett durchkommen. > hoffe mein Beitrag vereinfacht das Multiplexen ein bisschen Nicht wirklich. 7-Segment-Multiplexen in Software ist ein 10-Zeiler. (OK, Ich hab nicht nachgezählt. können in Summe auch 12 oder 15 Zeilen sein Edit: Hab ich das jetzt richtig gesehen? Dieser Decoder unterstützt noch nicht mal die Ansteuerung des Dezimalpunktes? Wie willst du denn da dann bei zb einem Messgerät so Dinge wie Bereichsumschaltung machen, wenn du den Dezimalpunkt nicht visualisieren kannst.
Karl Heinz Buchegger schrieb: > Wenn es sein muss, kann ich mit einem Schiebregister auch mit 3 Pins > komplett durchkommen. Dann brauchst du aber eigentlich auch kein Multiplex mehr ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.