Forum: Mikrocontroller und Digitale Elektronik 7-Segment-Anzeigen an Mega32 über I²C oder RS232 mit Bascom AVR


von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Angehängte Dateien:

Lesenswert?

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

von Top S. (topsoft)


Lesenswert?

Hi,

Na multiplexen im Timerinterrupt (z.B 10ms Intervall) und in der 
Hauptschleife auf Daten warten und dann ausgeben.

Gruß Rene

von Sven (Gast)


Lesenswert?

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

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

Aber ist das nicht so, das während die Interrupt-Routine ausgeführt 
wird, auch das Multiplexen stehenbleibt?

von Top S. (topsoft)


Lesenswert?

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
Noch kein Account? Hier anmelden.