www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt funktioniert nicht


Autor: max (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: Netzpolizei (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
ldi temp, 0b00000101  ;Timer 0 auf CK 1024 einstellen
out TCCR0, temp

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

Dann ist es mit dem Nachschlagen im Datenblatt einfacher.

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> was kann ich da machen???

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

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...).

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mich verlesen. Sorry.

MW

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Netzpolizei (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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... ;-)

...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Netzpolizei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paß auf, sonst wirst du wegen Beamtenbeleidigung weggebeamt.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jou, bin schon unterwegs... ;-)

...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>weggebeamt

weg ge Beamt(et)...

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

(Duck & Elch)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.