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.