Flackernde Hintergrundbeleuchtung/Timer/Interrupt

Oskar01

Mitglied
24. März 2008
267
0
16
Köln
Sprachen
  1. Assembler
Hallo,
möchte ein kleines Proggi vorstellen, das einmal auf LCD und zum anderen gleichzeitig auf Hyperterminal via RS232 serielle Verbindung Uhrzeit und "Messwert" darstellt.
Gleichzeitig soll Hintergrundbeleuchtung über PortB Bit 3 gesteuert werden.

Klappt alles einwandfrei bis auf eine Kleinigkeit:
Die Beleuchtung wird beim Timer-Interrupt kurz im Sekundentakt ausgetastet.
Habe ich da vielleicht im Programm etwas übersehen?
Also, die Beleuchtung kommt erst, wenn LCD vollständig initialisiert ist, und Festtexte-Anzeige
"Zeit"
"Messwert"
erscheint. Das ist so gewollt.
Also, habe "Lötbrücken" ausschließen können in Testprogrammen, wo ich gezielt die einzelnen Portbits mal "high" und "low" setzte, also ist Port B Bit 3, (Hex0x08) gesetzt, leuchtet die Hintergrundbeleuchtung, sonst nicht. Wird auch in Label "Datenuebernahme" bewußt am Ende mal der Port auf Null gesetzt, leuchtet die Beleuchtung die ganze Zeit nicht.

Die Portanbindung erfolgt über 4,7 Kiloohm Widerstand an Basis von BC338, "Ausräumwiderstand" 10 Kilooohm an Masse, Kollektor direkt an Kathoden der LEDs, deren gemeinsame Anoden über Widerstand 51 Ohm an 5 Volt vom STK500 Board über die gemeinsame 10-polige Portjumperung.
Die Spannung an den LEDs beträgt 3,77 Volt, ist also im "grünen" Bereich, habe noch eine Reserve bis 4,2 Volt laut Datenblatt.

Wäre für Tipps dankbar.
Ist das vielleicht bei Interrupt-Aktivierungen immer so, daß Ports kurzzeitig "resettet" werden?

Gruß von Oskar01
 

Anhänge

  • Uhr_CTC_0211.txt
    14,2 KB · Aufrufe: 15
  • Uhr_CTC_Terminal.png
    Uhr_CTC_Terminal.png
    3,1 KB · Aufrufe: 15
  • LCD_CTC2.PNG
    LCD_CTC2.PNG
    23,4 KB · Aufrufe: 13
  • Backlight.PNG
    Backlight.PNG
    30,1 KB · Aufrufe: 13
Hallo Oskar,
Ist das vielleicht bei Interrupt-Aktivierungen immer so, daß Ports kurzzeitig "resettet" werden?

Interrupts haben mit den Ports eigentlich nichts zu tun.

Du schaltets ja das Backlight über PB3. In der Routine Kommando setzt du zweimal den Portpin PB3 auf low, das Backlight wird hierbei ausgeschaltet.
Code:
.equ    daten = portb
...
Kommando:
...
andi     temp,    0b1111[COLOR=RoyalBlue][B]0[/B][/COLOR]000    ;unteres Nibble ausblenden
out     daten,    temp
...
Grüße,
Dirk
 
Fehler gefunden....

Hallo Dirk,
erstmal vielen Dank für die prompte Hilfestellung.
Zwischenzeitlich habe ich das Proggi nochmals untersucht und bin auch darauf gestoßen, daß etwas in der Datenübernahme bzw. Kommando-Erteilung in der "Endlosschleife" bzw. Positionierung fehlerhaft sein musste.

Die LCD-Routinen wurden ja von anderen vorherigen Proggis unverändert übernommen.
Dabei verhält es sich so, daß im Kommandomodus ja das RS-Bit sowieso auf "low" stehen muß, daher entfiel hier schlichtweg die Portmaskierung, wie sie in der "Datenübernahme" ja sein musste, um das RS-Bit auf "high" zu halten.

Habe das Programm dahingehend abgeändert, jetzt gibt es keinen Sekunden-Tick mehr auf Port B, Bit 3.

Code:
kommando:

push	temp
cbi	daten,	0
mov	temp1,	temp		; Kopie des Wertes fuer weitere;	
;				; Operation unten
andi 	temp,	0b11110000	; unteres Nibble ausblenden
ori	temp,	0b00001000	; Port maskieren
out 	daten,	temp		; Ausgabe oberes Nibble auf D4-D7 
cbi	daten,	0
rcall	enable
nop
nop
swap 	temp1			; Nibble-Vertauschen, Wert aus temp;
;				; kopiert, siehe oben
andi 	temp1,	0b11110000	; unteres Nibble ausblenden
ori	temp1,	0b00001000	; Port maskieren
out	daten,	temp1		; Ausgabe unteres Nibble auf D4-D7 
rcall	enable
rcall	verzoegerung2
pop	temp
ret


Andererseits ist es vielleicht garnicht mal so schlecht, den Sekunden-Tick so auf einen Port zu bekommen.

Danke nochmals,

schönen Sonntag noch....
Gruß von Oskar01
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)