Hi. Ich hab es mir zum Ziel gesetzt, 6 7-Segment Anzeigen an einen Mega32 zu hängen. Gemultiplext funzt das auch. Jetzt möchte ich aber Daten die ich über die RS232 Schnittstelle empfange auch darauf ausgeben. Das soll so funktionieren. Ich sende eine 6 stellige Zahl übers Hypterm oder so an Com1 der µC empfängt dies, und stelld die Zeichen so lange da, bis was neues kommt, oder ein Befehl zum löschen des Displays. Hab so was noch nie gemacht, und auch ansonsten nur Bascom AVR Erfahrung (eigentlich schon übertrieben. mal reingeschnuppert) aber alleine an der überlegung wie ich gleichzeitig multiplexe und daten empfange bin ich schon gescheitert. könnt ihr mir da mit nem gut kommentierten Codeschnipsel weiterhelfen? hab leider nix passendes gefunden. Im Vorraus danke, Olli
Hi, Na multiplexen im Timerinterrupt (z.B 10ms Intervall) und in der Hauptschleife auf Daten warten und dann ausgeben. Gruß Rene
hallo, zunächst einmal zu der schaltung, ich habe früher auch immer mit transistoren "gemultiplext". bis ich auf die idee gekommen bin zum ansteuern der kathoden einen uln2803 und zum ansteuern der anoden einen td62738 zu verwenden. oder auch eben umgekehrt, je nachdem ob es sich um ein 7-segment-display mit gemeinsamer anode oder kathode handelt. immerhin kann man bei der schaltung damit 13 transistoren und 13 widerstände sparen, durch den einsatz von zwei 16-poligen ic's, was platzmässig interessant sein könnte. zum prinzip des multiplexig: also multiplexing basiert auf der täuschung des auges. bei einer frequenz von unter 50 hz nimmt das menschliche auge ein flimmern der anzeige war. also muss demnach jede 7-segment-anzeige mindestens 50 mal in der sekunde aufleuchten um für das auge eine satische anzeige (aller sechs 7-segment-displays) "vorzutäuschen". optimal wären übrigends 75 hz, denn ab dieser frequenz nimmt das menschliche auge überhaupt kein flimmern mehr war. im übrigen nimmt die retina des auges ein schnell pulsierendes licht intensiver war als ein statisches licht(also was immer leuchtet). wie realisiert man so etwas: einen fertigen code in basic habe ich nicht, da ich meinen atmega32 in c programmiere. aber das prinzip ist folgendes: es muss permanent über einen timer-interrupt die anzeige aktuallisiert werden. in deinem fall sollte dies mindestens 300 mal in sekunde sein (warum: sechs 7-segment-displays x 50 hz = 300 hz). bei jedem interrupt wird jeweils ein 7-segment-display aktualisiert. die zeit indem sich der atmega nicht in der interrupt-routine befindet hat der micro zur verfügung um andere dinge zu erledigen, z.b. messwerte einzulesen oder taster abzufragen etc., je nach programmgestalltung. durch die interuptroutine wird die anzeige immer im entsprechenden "zeitzyklus" aktuallisiert, der "rest" des programmes wartet dann halt bis die interrupt-routine fertig ist und macht an der stelle weiter wo sie unterbrochen wurde. fazit: ich weiss nicht wie das in basic (bascom) funktioniert, aber in c multiplexe ich 16 7-segment-displays und lese diverse daten von adc's ein, habe taster und ein lcd display - das funktioniert alles bestens. von der performance gibt der atmega32 (meiner bei einer taktfrquenz von 8 mhz) das locker her - bei einer sekündlichen aktuallisierung der daten. vielleicht hilft dir das ein wenig ...
Aber ist das nicht so, das während die Interrupt-Routine ausgeführt wird, auch das Multiplexen stehenbleibt?
Wie meinste das? Jedesmal wenn der Interrupt aufgerufen wird halt die nächste Stelle ansteuern und gut. Die Interruptroutine sollte man natürlich kurz halten. Gruß Rene
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.