Timer0-Register OCR0 bei Atmega16 nimmt keine Werte

Gast #886686
Lesenswert?

Hallo Forum,

ich betreibe eine Atmega16 im STK500 mit Avr Studio und JTAGICE II. Ich 
will die Timer0 Funktionen ausprobieren. Nun habe ich folgenden Code 
eingegeben:
1
#include <avr/io.h>
2

3
void init_timer0()
4
{
5
  //Timer
6
  TCCR0 =  (1<<COM00) | (1<<CS00);//| (1<<CS02) ;
7
}
8

9
int main(void)
10
{
11
init_timer0();
12
OCR0 = 0x80;
13
PORTB = 0xff;  //Port B wird H --> LEDs aus
14
DDRB = 0xff;   //Alle Pins von Port B als Ausgang
15

16
while (1)
17
{
18

19
}
20
return 0;
21
}
Die LED an Pin PB3 blinkt zwar aber wenn ich es mir im Debug-Modus 
ansehe akzeptiert der µC das ändern vom OCR-Register nicht. Da bleibt 
konstant 0x00 stehen. Er toggelt auch nur bei TCNT = OCR = 0x00. Wo 
mache ich was falsch? Weisse ich das Register falsch zu?

Danke schon mal für die Antworten.

Gruß Holger
Gast #887017
Lesenswert?

Also dieses TCCR0 kommt mir schonmal komisch vor.
Es gibt TCCR0A und TCCR0B aber TCCR0 kann ich im Datenblatt nicht 
finden.

Genauso COM00.
Es gibt COM0A0 und COM0A1 aber nicht im selben Register wie CS00.

Guck lieber nochmal nach.
Gast #887549
Lesenswert?

Ok, ich habe den Fehler zwar nicht gefunden, dafür kann ich ihn umgehen.
Mein Prog sieht gleich aus, nur dass ich an stelle von
1
OCR0 = 0x81;
schreibe ich nun
1
 asm volatile ("ldi  r24, 0x81");
2
asm volatile ("out  0x3C, r24");

Damit tut es.
Wenn ich mir die *.lss angesehen habe steht da
  OCR0 = 0x81;
  ca:  81 e8         ldi  r24, 0x81  ; 129
  cc:  81 bf         out  0x31, r24

Der Unterschied steht in der letzten Zeile. Der Compiler schreibt für 
die OCR0-Adresse 0x31. In der Doku und im AVR-Studio steht aber als 
Adresse 0x3C.
Ich schreibe also, wenn ich das richtig verstehe, an die falsche 
Speicheradresse.

Verwenden tue ich AVRstudio 4.13 SP2 build 571 und WinAVR 20060421. Ich 
weiss, dass die WinAVR alt ist, jedoch funktioniert mit den aktuellen 
der Debug-Modus mit dem JTAGICE mkII nicht. Entweder fällt er mit Fehler 
aus (WinAVR 20071221) oder der Debug-Modus startet gar nicht 
(WinAVR20080512).
Vielleicht habe ich da aber auch ein Einstellungsfehler.
Gast #887696
Lesenswert?

Kopf auf den Tisch knall

Ich bin so doof!!!

Ich habe zwar AVR Studio gesagt, dass ich einen Atmega16 verwende, aber 
nicht dem GCC-Compiler. Da stand noch Atmega128 drin. Jetzt tut es.

Danke euch trotzdem für die Antworten.

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