Gast
#362257
Hallo, kann mir jemand helfen, mein Interrupt geht nicht!! Ziel ist LEDs blinken zu lassen!
|
Anzeige
|
Interrupt funktioniert nicht
Gast
#362257
Hallo, kann mir jemand helfen, mein Interrupt geht nicht!! Ziel ist LEDs blinken zu lassen!
Gast
#362258
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
lieber
Dann ist es mit dem Nachschlagen im Datenblatt einfacher.
Gast
#362259
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??? > was kann ich da machen???
Die Symbole (Bezeichnungen, Namen) benutzen, die im Datenblatt
aufgelistet sind und in der Include-Datei definiert sind.
...
Gast
#362261
> 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.
Gast
#362262
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
Gast
#362263
@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...). > 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. ...
Gast
#362265
Ich habe mich verlesen. Sorry. MW
Gast
#362266
@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...
Gast
#362267
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. @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... ;-) ... > 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...
Gast
#362270
Paß auf, sonst wirst du wegen Beamtenbeleidigung weggebeamt. Jou, bin schon unterwegs... ;-) ...
Gast
#362272
>weggebeamt
weg ge Beamt(et)...
Wusste gar nicht, dass Beamte das Beamen erfunden haben...
(Duck & Elch)
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|