Forum: Mikrocontroller und Digitale Elektronik ATMEGA 8 Timer 0 Interrupt löst nicht aus


von intenso (Gast)


Lesenswert?

Hallo,

ich versuche gerade beim ATMEGA 8 den TIMER/COUNTER 0 in Betrieb zu 
nehmen.

Habe mir folgenden Code überlegt
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <util/delay.h>
4
#include <avr/interrupt.h>
5
6
int main(void){
7
8
DDRD = (1<<PD6);  //Pin 6 von Port D als Ausgang definieren
9
TCCR0 = (1<<CS02) | (1<<CS00); //CT/1024
10
TIMSK !=(1<<TOIE0); // Interrupt erlauben;
11
12
sei(); // Interrupt aufrufen
13
14
while(1){
15
}
16
}
17
18
ISR (TIMER0_OVF_vect)
19
{
20
21
PORTD = 0b0100000; // Pin 6 auf VCC und LED blinken lassen
22
}

jedoch blinkt meine LED nicht.
Kann es sein das die Interruptfunktion nicht aufgerufen wird?

Kann man sich bei AVR STudio den Wert von TCNT0 anzeigen lassen?
Ähnlich wie Variable bei C mit Visual Basic?

von Karl H. (kbuchegg)


Lesenswert?

intenso schrieb:

> TIMSK !=(1<<TOIE0); // Interrupt erlauben;


Du wolltest hier ein | und kein !

von holger (Gast)


Lesenswert?

>PORTD = 0b0100000; // Pin 6 auf VCC und LED blinken lassen

Wie soll das auch blinken?

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

intenso schrieb:
> PORTD = 0b0100000;

und das schaltet bestenfalls den Ausgang dauernt auf 1

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

intenso schrieb:
> PORTD = 0b0100000

if (PORTD == 0b0100000) PORTD=0; else PORTD = 0b0100000;

so könnte es blinken

von intenso (Gast)


Lesenswert?

Vielen Dank.

Es lag am ! =).

Ja die LED blinkt nicht sondern leuchtet dauerhaft.

Hatte mir gedacht, das wenn der Interrupt alle x Zeit aufgerufen wird, 
die LED dann blinkt.

Da muss ich nochmal drüber nachdenken

von Florian T. (grendal)


Lesenswert?

Oder ganz einfach

PORTD ^ = (1<<6);

sollte es auch blinken lassen, etwas einfacher als die if else Variante

von Karl H. (kbuchegg)


Lesenswert?

intenso schrieb:
> Vielen Dank.
>
> Es lag am ! =).
>
> Ja die LED blinkt nicht sondern leuchtet dauerhaft.
>
> Hatte mir gedacht, das wenn der Interrupt alle x Zeit aufgerufen wird,
> die LED dann blinkt.
>
> Da muss ich nochmal drüber nachdenken

Dank denk mal darüber nach, das es für ein Blinken auch notwendig ist, 
dass die LED auch mal abgeschaltet wird. Du kannst am Lichtschalter so 
oft du willst auf 'Ein' drücken. Da wird nichts blinken, wenn du 
zwischendurch nicht auch mal auf 'Aus' drückst.

von intenso (Gast)


Lesenswert?

Stimmt.

Den Ausgang toggeln.

Das man selber net drauf kommt.

Funktioniert und wieder was dazu gelernt.

Vielen Dank

von Washington I. (washington_i)


Lesenswert?

pin toggeln auf atmega, geht das nicht mit:
PIND |= (1<<6);

(steht irgendwo im datenblatt, nicht grad was für anfänger..)

von spess53 (Gast)


Lesenswert?

Hi

>pin toggeln auf atmega, geht das nicht mit:
>PIND |= (1<<6);

>(steht irgendwo im datenblatt, nicht grad was für anfänger..)

Aber nicht mit einem altmodischen ATMega8. Mit ATMega88 geht das.

MfG Spess

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.