Forum: Mikrocontroller und Digitale Elektronik ATMEGA16 & Timer0


von Max M. (gbl1)


Lesenswert?

Hallo Leute,

ich werd' noch verrückt. Versuche seit zwei Wochen an einem ATMEGA16 den 
Timer0 mittels C-Programm zum Laufen zu bekommen.

Mein µC ist mit 8MHz getaktet.
Am PORTD7 soll die LED alle 1ms ein/aus gehen.

Innerhalb der while Schleife funktioniert die LED - also kein 
HW-Problem.


1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <util/delay.h>
5
6
7
ISR (TIMER0_OVF_vect)
8
{
9
    PORTD ^= (1<<PD7);
10
}
11
12
13
14
int main(void)
15
{
16
    DDRD |= (1<<PD7);
17
18
19
    TCCR0  =  (1<<WGM01) | (1<<CS01) | (1<<CS00);
20
    OCR0   =  128;    
21
    TIFR = 1<<TOV0;
22
    TIMSK = 1<<TOIE0;
23
    sei();
24
25
    while(1)
26
    {
27
        //PORTD ^= (1<<PD7);
28
29
        _delay_ms(25);
30
    }
31
32
33
    return 0;
34
}


Danke im voraus.

Günter

von Karl H. (kbuchegg)


Lesenswert?

Du musst den Compare Match Interrupt benutzen.

von david (Gast)


Lesenswert?

Hallo Günter

alle 1ms ein/aus...
von Auge kannst du das ein/aus ja nicht sehen (1000x pro Sekunde).
Ist also eher ein Dimmer welcher die Led mit 50% ansteuert.
Und da leuchtet die LED evt. schon gar nicht mehr.

Oder hast du den Ausgang am Oszi angesehen ob da was geht?

Gruss
David

von Max M. (gbl1)


Lesenswert?

@david:

Ich habe auch ein Oszi am Ausgang. Da rührt sich nichts.
Innerhalb der While Schleife schon.

@Karl:

Könntest du mir mit einem Codebeispiel helfen. Ich wurschtel da schon so 
lange rum. Irgendwo habe ich da ein Brett vorm Kopf. BTW: Ich meine, ich 
verwende doch den Compare Macht Interrupt.

LG
Günter

von spess53 (Gast)


Lesenswert?

Hi

>Könntest du mir mit einem Codebeispiel helfen. Ich wurschtel da schon so
>lange rum. Irgendwo habe ich da ein Brett vorm Kopf. BTW: Ich meine, ich
>verwende doch den Compare Macht Interrupt.

Nein. Du benutzt den Overflow-Interrupt .

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Günter W. schrieb:

> Könntest du mir mit einem Codebeispiel helfen. Ich wurschtel da schon so
> lange rum.

Ähm. Wie lange sagtest du beschäftigst du dich jetzt mit dem Mega?
Und da bist du noch kein einziges Mal auf die Idee gekommen, ins 
Datenblatt zu sehen?
Ich hab mir das Datenblatt geholt, das Kapitel zum Timer 0 
aufgeschlagen, etwas überflogen und in 5 Minuten hatte ich die 
Information die ich gebraucht habe. Nämlich, dass im CTC kein Overflow 
Interrupt sondern ein Compare Match Interrupt ausgelöst wird. Ein paar 
Seiten weitergescrollt um zur Registerübersicht für diesen Timer zu 
kommen und da ist dann schön aufgeschlüsselt, welches Bit für den 
Compare Match Interrupt anstelle des Overflow Interrupts zuständig wäre. 
Und wie die ISR heißen musws ... wenn man das Schema kennt, nach dem die 
Namen gebildet werden, ist auch das keine Hexerei.

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.