Forum: Mikrocontroller und Digitale Elektronik Wer setzt den Interrupt für den ISR (LCD_vect) beim Butterfly


von schmitt45 (Gast)


Lesenswert?

Hi Zusammen,

bin grad dabei den portierten GCC Code vom Butterfly zu debuggen, um den 
Funktionsablauf zu verstehen.

Mir ist nun aufgefallen, dass irgendwann der ISR(LCD_vect) immer wieder 
angeworfen wird.

Wo wird ein entsprechendes Flag gesetzt? Bzw wer wirft den ISR() an?

Komme an dieser Stelle nicht weiter und bin für jede Hilfe dankbar.

Viele Grüße,
Mike

von Michael U. (amiga)


Lesenswert?

Hallo,

ohne jetzt nachzuschauen: LCD_vect würde ich dem LCD-Controller zuordnen 
und zu dem sollte doch eine Beschreibung seiner IRQ-Möglichkeiten im 
Datenblatt des Mega169 stehen?

Gruß aus Berlin
Michael

von schmitt45 (Gast)


Lesenswert?

Hey Michael,

danke für Deine schnelle Antwort.

Die Register habe ich diesbzgl durchgesehen.
LCDIE := Interrupt enable ist gesetzt
daher erwarte ich beim
LCDIF ein Flag und anschließend den Sprung in die ISR Routine.
Leider wird das LCDIF nie gesetzt und meine logische Welt beginnt zu 
bröckeln...

Das hier habe ich noch im Netz gefunden:
http://simplecircuitdesign.com/html/LCD__driver_8c.html#a41facc6819739d0109a49044a11a87c

scheint mir so, als ob alle Referenzen den Interrupt anwerfen, jedoch 
kann ich nirgends im Quellcode entsprechende Einträge finden, wo ein 
Flag (insbesondere das LCDIF) gesetzt wird...

Viele Grüße,
Mike

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rein von der Erinnerung her wird der LCD-Interrupt durch den 32-kHz-
Timer angeworfen, der für das Multiplexen des LCDs zuständig ist.

von Michael U. (amiga)


Lesenswert?

Hallo,

LCDIF ist ein Interrupt-Flag, das wird durch die Hardware gesetzt.
Welcher Hardwareteil dafür zuständig ist, kann Dir nur die Beschreibung 
des Mega169 sagen. Wie Jörg Wunsch schon bemerkte, dürfte es ein 
spezieller Timer sein, der vom LCD-Controller genutzt wird.

PS: gerade mal schnell ins Datenblatt geschaut: LCDIF wird gesetzt, wenn 
ein neues Frame beginnt und die Displaydaten geupdatet werden. genaueres 
muß Du Dir selbst aus dem Datenblatt raussuchen. Ich habe mich mir der 
Programmiereung des Displaycontrollers noch nicht befaßt.

Gruß aus Berlin
Michael

von Mike (Gast)


Lesenswert?

Hi,

der Quarz hängt am Timer2, da müsste die ISR() angeworfen werden. sehe 
dort aber keinen flag das gesetzt wird. Kann es sein, dass nur ein 
Sprungmarke zur Vektortabelle zum ISR gesetzt wird? dort ist ja 
wiederrum die adresse als einsprungmarke zum ISR(LCD) drin...
Habt ihr ein Tipp wie ich die Sprungmarke am Besten finden kann???

Gruß,
Mike

@Mods
P.S. Obiger Text wurde von der Seite als Spam erkannt?
Mache ich etwas falsch oder sind einfach nur die Einstellung für das 
Forum so restriktiv eingestellt???

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mike wrote:

> der Quarz hängt am Timer2, da müsste die ISR() angeworfen werden.

Nein, bei den LCD-Controllern wird dieser Quarz auf den LCD-Block
,,umgebogen''.

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.