Hallo Zusammen, als erstes ein herzliches Danke schön für die tolle Seite. Bitte entschuldigt wenn ich diese Frage ins falsche Forum gestellt habe, war mir nicht so sicher wo das hin gehört. Meine Frage bezieht sich auf das oben genannte Tutorial, beim Multiplexen werden die Segmente über PNP Transistoren an PORTC gesteuert. Im Programm werden die einzelne Segmente mit einem Linksshift geschaltet, das heisst das Digit wird mit High angesteuert und mit Low ausgeschaltet. Sollte das nicht umgekehrt sein? Also z.B. alle Digits auschalten: ldi temp1, 0xff ; Die 7 Segment ausschalten out PORTC, temp1 statt wie im Programm: ldi temp1, 0x ; Die 7 Segment ausschalten out PORTC, temp1 Verstehe ich da etwas falsch? Grüsse, René
> Bitte entschuldigt wenn ich diese Frage ins falsche Forum gestellt habe, Hast Du geschafft. Punktlandung. > war mir nicht so sicher wo das hin gehört. Hierhin, wo es jetzt ist. > ldi temp1, 0x ; Die 7 Segment ausschalten Das ist mit Sicherheit ein Schreibfehler. 0x ist keine hexadezimale Konstante.
Ups, ja sorry, tippfehler, meinte natürlich:
> ldi temp1, 0 ; Die 7 Segment ausschalten
PS: danke fürs verschieben ;-))
René ich denke du hast Recht! Im Programm http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige#Programm_2 steht in der Routine multiplex: ldi temp1, 0 ; Die 7 Segment ausschalten out PORTC, temp1 In der Schaltung sind am Common Anode Anschluss der Displays PNP Transistoren verbaut http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige#Schaltung_2 PNP-Transistoren sperren, wenn seitens des µC an der Basis Vcc zugeführt wird (wenn Emitter aus Vcc sieht) http://www.mikrocontroller.net/articles/Transistor#PNP.2FNPN_als_Schalter.2C_wohin_mit_der_Last.3F Damit müsste in dem Programm der Sourcecode wie folgt geändert werden: ldi temp1, 0xFF ; Die 7 Segment ausschalten out PORTC, temp1
Stefan B. wrote: > Damit müsste in dem Programm der Sourcecode wie folgt geändert werden: > > ldi temp1, 0xFF ; Die 7 Segment ausschalten > out PORTC, temp1 Das wird noch nicht reichen. Die ganze Steuerung rund um NextDigit muss geändert werden. Seltsam: Ich hab damals das Original geschrieben und ich bin mir eigentlich ziemlich sicher, das ich das am Steckbrett aufgebaut hatte. Aber ich muss zugeben: Die Argumentation mit den PNP ist nicht von der Hand zu weisen.
@Stefan danke für Deine Antwort. Hmm, ok, dann müsste in der Multiplex Routine aus > lsl temp1 ; beim nächsten Interrupt kommt reihum die > cpi temp1, $10 ; nächste Stelle dran. > brne multi1 > ldi temp, 0 > ldi temp1, $01 folgendes werden: sec ; beim nächsten Interrupt kommt reihum die rol temp1 ; nächste Stelle dran. cpi temp1, 0b11101111 ; dazu wird das carry bit gesetzt welches eine 1 brne multi1 ; mit rol einschiebt ldi temp, 0 ldi temp1, 0b11111110 werden. Ebenfalls im Main muss NextDigit richtig initialisiert werden (auf 0b11111110).
René wrote: > sec ; beim nächsten Interrupt kommt > reihum die > rol temp1 ; nächste Stelle dran. > cpi temp1, 0b11101111 ; dazu wird das carry bit gesetzt > welches eine 1 > brne multi1 ; mit rol einschiebt > ldi temp, 0 > ldi temp1, 0b11111110 > > werden. > > Ebenfalls im Main muss NextDigit richtig initialisiert werden (auf > 0b11111110). Yep. Das müsste es sein. Kannst du das an der tatsächlichen Hardware testen und das Tutorial richtig stellen?
Hallo Karl, klar, mach ich. Hatte etwas Skrupel das einfach so zu ändern ohne zu fragen (als Neuling im Forum). Ich werde das ASAP tun. Bis jetzt läuft es trotzdem noch nicht wie ich es denke, ich kann aber noch nicht sagen ob es an meiner Hardware liegt oder am Program (ich benutze ein intern gemultiplexted Display von Kingsbright / CA56). Die Timer Routine schaltet mit 64us weiter, was meinem Display zu schnell ist. Sobals es Einwandfrei läuft, mache ich das. OK? Grüsse, René
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.