Timer interrupt funktioniert nicht

OP #2707016
Lesenswert?

Den angehängten Code habe ich von dem Interrupt Tutorial. 
(http://www.mikrocontroller.net/articles/Interrupt#.28AVR-.29_Beispiele_f.C3.BCr_die_praktische_Programmierung)

Ich habe eine LED am Port D5 anhängen.
Die Fuses habe ich auf Werkseinstellung.
Ich benutze einen ATmega8 und das AVR-Studio 4

Ich habe noch nie mit einem Timer oder Interrupt
gearbeitet (Status: Anfänger :D) und wollte das mal
ausprobieren aber es klappt einfach nicht.

Das Interrupt Tutorial habe ich schon mehrmals durchgelesen und
auch im Datenblatt den abschnitt über den Timer gelesen.

Könnte mir vielleicht einer den Fehler zeigen??
Angehängte Dateien:
#2707033
Lesenswert?

Hallo !

ich du schrieb:
> und wollte das mal
> ausprobieren aber es klappt einfach nicht.

und was klappt nicht ?

Hast Du mal die Blinkfrequenz ausgerechnet ?

Dazu schaut man in's Datenblatt, das gibt's bei Atmel.com

Warum setzt Au ALLE Ports auf Ausgabe ?
1
// IO konfigurieren
2
 
3
 DDRA = 0xFF;
4
 DDRB = 0xFF;
5
 DDRC = 0xFF;
6
 DDRD = 0xFF;

Reichen würde doch nur das Bit 5 von Portd ?
1
DDRD |= (1 << PD5);
Gast #2707041
Lesenswert?

Viel Zutrauen in den Code aus dem Artikel habe ich nicht. Ein Beispiel 
zum Blinken einer LED an PD5 braucht keine solche IO-Konfiguration. IMHO 
extrem kontraproduktiv in einem Tutorial. Worst case raucht die ein oder 
andere Schaltung ab.

> // IO konfigurieren
>
>     DDRA = 0xFF;
>     DDRB = 0xFF;
>     DDRC = 0xFF;
>     DDRD = 0xFF;

Deine Blinkfrequenz ist (vorausgesetzt dein unbekannter µC läft 
physikalisch mit 1 MHz wie im Programm vorausgesetzt):

1000000  1024  256 => LED Toggle alle 262 ms bzw. ca. 4x je Sekunde.

> Ich habe eine LED am Port D5 anhängen.

Nur die LED (Kenndaten? Datenblatt?), die könnte dann bereits hinüber 
sein, oder auch den Widerstand R z.B. so?

               R     LED
Pin PD5 o-----###----|<----o Vcc
OP #2707047
Lesenswert?

Das Datenblatt habe ich wie oben schon geschrieben gewälzt und bin grade 
wieder dabei :D

ich habe einen Takt von 1 MHZ und den Vorteiler 1024... Ich habe die 
Frequenz nicht ausgerechnet aber es müsste sichtbar sein...

Uwe S. schrieb:
> und was klappt nicht ?

Die LED bleibt aus...
wenn ich nach der while(1) schleife in der if-Verzweigung flag == 0 
schreibe leuchtet die led.. das heißt es muss ab timer liegen, oder ?
OP #2707054
Lesenswert?

Krapao schrieb:
> Nur die LED (Kenndaten? Datenblatt?), die könnte dann bereits hinüber
> sein, oder auch den Widerstand R z.B. so?

einen 1k-Ohm Wiederstand hab ich natürlich.. sry, vergessen zu schreiben
und die LED ist auf jeden fall nicht kapput.


Muss man vielleicht etwas an den fuses verstellen??

Christian F. schrieb:
> Bitte Code demnächst als .c posten. Dann gibt es Syntax-Highlighting

OK mach ich

Christian F. schrieb:
> Oben steht überall Timer2, unten aber ISR(TIMER*0*...

Das hab ich vergessen zu änder.. ändert aber am Ergebnis nichts
Persönliche Seite #2707075
Lesenswert?

Uwe S. schrieb:
> Christian F. schrieb:
>> Oben steht überall Timer2, unten aber ISR(TIMER*0*.
>
> Spielt doch keine Rolle, nur der C-Code, nicht die Kommentare werden vom
> avr-gcc übersetzt.
Ach wirklich? ;)

Ich dachte nur, dass die Wahrscheinlichkeit, dass TCCR0 für Timer2 
zuständig ist hoch ist, wenn solche Kommentare drüber stehen. (Was im 
Nachhinein auch wieder Blödsinn ist, es ist ja TCCR*0*)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren