Forum: Mikrocontroller und Digitale Elektronik Interrupt funktioniert nicht


von max (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

kann mir jemand helfen, mein Interrupt geht nicht!!
Ziel ist LEDs blinken zu lassen!

von Netzpolizei (Gast)


Lesenswert?

Deine Interruptvektor-Tabelle ist falsch. Timer1 hat zwei
Compare-Match-Interrupts. Deine Interrupt-Routine wird nicht beim
Timer0-Overflow, sondern beim Timer1-Overflow angesprungen, der
natürlich nicht aktiviert ist.

Deine Interrupt-Routine benutzt r16 und verändert die Flags, ohne diese
vorher zu sichern.

Statt den Timerwert jedesmal manuell zu ändern, könntest du auch gleich
den CTC-Mode verwenden und statt des Overflow-Interrupts den
Compare-Match-A. Dann kannst du nämlich einfach einmal in OCR0A
schreiben, wie weit der Timer laufen soll, und er macht das dann
automatisch bei jedem Durchlauf.

Übrigens: Du solltest dir angewöhnen, bei den I/O-Registern die
Bitnamen zu verwenden statt Ziffernkolonnen, z.B. statt
1
ldi temp, 0b00000101  ;Timer 0 auf CK 1024 einstellen
2
out TCCR0, temp

lieber
1
ldi temp, (1 << CS02) | (1 << CS00) ;Timer 0 auf CK 1024 einstellen
2
out TCCR0, temp

Dann ist es mit dem Nachschlagen im Datenblatt einfacher.

von max (Gast)


Lesenswert?

hallo, es hat funktioniert danke.

1. Ich habe versucht in diesem CTC-Mode interrupt zu initialisieren,
leider hat es nicht funktioniert, er gibt mir ständig den Fehler
heraus. error: Undefined symbol: OCR0
Eigentlich sollte dieser Register in Definitonsdatei bekannt sein, aber
ich habe ihn nicht drin gefunden: .include "8515def.inc", oder mache
ich es falsch.


  ldi temp, 0b11111111
  out DDRB, temp      ;Port B als Ausgang


  ldi temp, 0b00001000  ;Timer 0 CTC-Mode
  out TCCR0, temp

  ldi temp, 61      ;Timer 0 auf 195 einstellen
  out TCNT0, temp

  ldi temp, 61      ;nachlade register
  out OCR0, temp

  ldi temp, 0b00000001  ;Timer 0 Interrupt initialisieren
  out TIMSK, temp

2. du hast mir empfohlen so zu schreiben
ldi temp, (1 << WGM01) ; auch mit CTC0 probiert
TCCR0, temp

leider funktioniert es nicht --> Fehler error: Undefined symbol: WGM01
und CTC0

was kann ich da machen???

von Hannes L. (hannes)


Lesenswert?

> was kann ich da machen???

Die Symbole (Bezeichnungen, Namen) benutzen, die im Datenblatt
aufgelistet sind und in der Include-Datei definiert sind.

...

von johnny.m (Gast)


Lesenswert?

>  ldi temp, 61      ;Timer 0 auf 195 einstellen
>  out TCNT0, temp

>  ldi temp, 61      ;nachlade register
>  out OCR0, temp

Das Compare-Register ist kein "Nachlade"-Register! Entweder Du
arbeitest mit CTC oder Du lädst das TCNT mit einem Startwert vor.
Beides auf einmal macht keinen Sinn!

>  Undefined symbol: OCR0

>  Fehler error: Undefined symbol: WGM01
>  und CTC0

Der 90S8515 ist ja auch hoffnungslos veraltet. Der hat manche Features
noch nicht (afaik hat der Timer 0 da auch noch keine Compare-Einheit
und demzufolge auch keinen entsprechenden Interrupt!) und einige Bits
heißen anders.

von Michael Wilhelm (Gast)


Lesenswert?

Ich bin zwar kein Assemblerspezialist, aber du überschreibst das TCNT0 2
mal mit neuen Werten. Entwerder die Einstellungen in einem Befehl
reinschreiben oder die Folgebefehle mit dem Inhalt verodern, sodass der
bestehende Inhalt nicht überschrieben wird.

MW

von johnny.m (Gast)


Lesenswert?

@Michael:
Wenn er den Timer im Overflow-Modus betreiben will, dann muss er ihn
zwangsläufig in der ISR mit dem Startwert nachladen (Ich gehe davon
aus, dass Du das damit meintest...).

von Hannes L. (hannes)


Lesenswert?

> Der 90S8515 ist ja auch hoffnungslos veraltet.

Das sehe ich etwas anders. Er hat zwar etliche Features noch nicht,
aber gerade deshalb ist das Kapitel "Timer" im Datenblatt für den
Einsteiger besser verständlich (weil nicht so überladen) als das des
Mega8515.
Ich will damit sagen, dass der Einsteiger, der den AVR nicht nur
benutzen will (BASCOM, C mit fremden Bibliotheken), sondern auch
verstehen will, keinen Fehler macht, sich intensiv mit dem AT90S8515 /
8535 / 2313 zu beschäftigen, ehe man sich den moderneren Typen widmet.
Wenn nämlich die Grundfunktionen der Timer verstanden wurden, dann hat
man auch eine Chance, die zusätzlichen Features der neuen AVRs richtig
einzuordnen. Es gibt halt weniger Möglichkeiten für Missverständnisse.

...

von Michael Wilhelm (Gast)


Lesenswert?

Ich habe mich verlesen. Sorry.

MW

von johnny.m (Gast)


Lesenswert?

@Hannes:
Da geb ich Dir völlig Recht. Der Datenblattaspekt ist für Einteiger
sicher nicht zu vernachlässigen. Und mittlerweile sind selbst die
Datenblätter von den "winzigen" Tinys signifikant umfangreicher als
die von den "alten großen" AT90S8515 / 8535. Da ist es tatsächlich
nicht verwunderlich, wenn manch ein Anfänger vor der Informationsflut
kapituliert...

von Netzpolizei (Gast)


Lesenswert?

Ach so, ich dachte, es ginge um den Mega8515. Wußte gar nicht, daß es
einen Vorgängertyp gibt. Auf jeden Fall gilt von meiner Antwort aber
noch das mit den nicht gesicherten Registern.

von Hannes L. (hannes)


Lesenswert?

@Johnny:
Genau... Wenn man aber erstmal anhand der alten AVRs verstanden hat,
wie Timer-Overflov, -Cpmpare, -Input-Capture, Pin-Toggeln und einfache
PWM funktioniert, dann findet man das auch im Datenblatt der neueren
AVRs wieder und hat den Kopf frei für die zusätzlichen Features. Im
Zweifel kann man sich dann immernoch auf das beschränken, "was man
kennt" (und bereits versteht).

Kennt man aber die Standardfunktionen nicht, dann wird man vom
Datenblatt erschlagen. Das ist wahrscheinlich auch ein Grund, warum
immer mehr Einsteiger das Datenblatt nicht mehr lesen wollen und nach
Hochsprachen mit Standardbibliotheken schreien... ;-)

...

von Hannes L. (hannes)


Lesenswert?

> Wußte gar nicht, daß es einen Vorgängertyp gibt.

Jaja, die (Netz-)Polizei, Dein Freund und Helfer...
Die wissen bekanntlich so Manches nicht...

Duck & wech...

...HanneS...

von Netzpolizei (Gast)


Lesenswert?

Paß auf, sonst wirst du wegen Beamtenbeleidigung weggebeamt.

von Hannes L. (hannes)


Lesenswert?

Jou, bin schon unterwegs... ;-)

...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>weggebeamt

weg ge Beamt(et)...

Wusste gar nicht, dass Beamte das Beamen erfunden haben...

(Duck & Elch)

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.