Timer0 vom Atmega8 funktioniert nicht

OP #659975
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
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
#660152
Paul P. wrote:
> Aha, das wusste ich nicht. AVR-Studio hat da noch nicht einmal eine
> Warnung ausgegeben.


Hallo,

da würde ich fast darauf tippen, das Du die falsche CPU eingestellt 
hast.

Wenn die CPU nicht die entsprechenden Register kennt, gibt es eigentlich
immer eine Fehlermeldung.


Jogibär
OP #660160
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
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
#660182
Paul P. wrote:
> Aha, das wusste ich nicht.
Unwissenheit schützt vor Strafe nicht...;-) Frage mich, wie man einen µC 
programmieren kann, ohne vorher wenigstens mal ins Datenblatt zu 
schauen, ob der das, was ich brauche, überhaupt hat...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.