Timer0 vom Atmega8 funktioniert nicht

OP #659975
Lesenswert?
• ▲
▼
Hallo,

ich bin grad dabei meine Kenntnisse in Sachen Interrupts zu vertiefen 
und versuche grade den Timer0 von meinem Atmega8(16MHz) so zu 
konfigurieren, dass er mit ca. 10ms läuft. Nur leider funktioniert das 
nicht so wie erhofft. Hier mal mein Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
volatile uint8_t counterT2;
5

6
ISR(TIMER0_COMP_vect)
7
{
8
counterT2++;
9
}
10

11
void init_timer(void)
12
{
13
TCNT0=0;
14
OCR0=156;                 //10ms bei 16MHz
15
TIMSK=(1<<OCIE0);
16
sei();
17
TCCR0 = ((1<<CS02) | (1<<CS00) | (1<<WGM01)); //Prescaler=1024(?), CTC Mode
18
}
19

20
inline void sleep(uint8_t t)
21
{
22
counterT2=0;
23
while(counterT2<t);
24
}
25

26
inline void sleep_s(uint16_t ms)
27
{
28
uint16_t i;
29

30
for(i=0;i<ms;i++)
31
sleep(100);
32
}
33

34
int main(void)
35
{
36

37
init_timer();
38

39
DDRD|=(1<<PD5) | (1<<PD6);
40

41
while(1)                        
42
{
43
PORTD|=(1<<PD5);
44
PORTD&=~(1<<PD6);
45

46
sleep_s(1);                    //1s warten
47

48
PORTD|=(1<<PD6);
49
PORTD&=~(1<<PD5);
50

51
sleep_s(1);                    //1s warten
52
}
53

54
return 0;
55
}

Warum funktioniert das nicht? Es leuchtet immer nur die LED an PD5.

Gruß
Paul
OP #660105
Lesenswert?
• ▲
▼
Aha, das wusste ich nicht. AVR-Studio hat da noch nicht einmal eine 
Warnung ausgegeben. Ich hab das ganze mal mit CTC beim Timer2 probiert, 
da ließ sich aber der Prescaler nicht einstellen. Ich hab halt einfach 
TCCR2=(1<<CS22) | (1<<CS20) | (1<<WGM21); gesetzt, aber die LEDs 
leuchteten entweder beide auf, oder blinkten sehr schnell wenn ich statt 
sleep_s(1) sleep_s(100) verwendete. Also warum lässt sich der Prescaler 
nicht einstellen?

Gruß
Paul
OP #660160
Lesenswert?
• ▲
▼
Ahhhhh, das vergess ich irgendwie immer wieder einzustellen, wenn ich 
ein neues Projekt erstellen will. Gibt es eine Möglichkeit, generelle 
Einstellungen vorzunehmen, die bei jedem neuen Projekt übernommen 
werden?

Jetzt funktioniert das auch mit der ISR.

Danke für eure Hilfe.

Gruß
Paul
#660178
Lesenswert?
• ▲
▼
Paul P. wrote:
> Ahhhhh, das vergess ich irgendwie immer wieder einzustellen, wenn ich
> ein neues Projekt erstellen will. Gibt es eine Möglichkeit, generelle
> Einstellungen vorzunehmen, die bei jedem neuen Projekt übernommen
> werden?
>
> Jetzt funktioniert das auch mit der ISR.
>
> Danke für eure Hilfe.
>
> Gruß
> Paul


Hallo,

passiert mir auch ab und zu mal.
Besonders wenn ich mal kurz ein programm von einem Gerät auf meine 
Testumgebung spiele um "schnell" mal was auszuprobieren.

Allerdings merkt man das recht schnell.

Wo Du das bei AVRStudio einstellen kannst, weiß ich nicht.
Bei mir ändere ich es immer direkt im makefile.

Jogibär

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