mikrocontroller.net

Forum: Compiler & IDEs Timer0-Register OCR0 bei Atmega16 nimmt keine Werte


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>

void init_timer0()
{
  //Timer
  TCCR0 =  (1<<COM00) | (1<<CS00);//| (1<<CS02) ;
}

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

while (1)
{

}
return 0;
}
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

Autor: Wasweissich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wasweissich: Bei welchem Mega16 hast du schon mal ein TCCR0A erblickt? 
Guck lieber noch mal nach.

Autor: Wasweissich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@Wasweissich: Bei welchem Mega16 hast du schon mal ein TCCR0A erblickt?
>Guck lieber noch mal nach.

Oh. Mist. Habe im 48er Datenblatt geguckt.
Dankeschön

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
OCR0 = 0x81;
schreibe ich nun
 asm volatile ("ldi  r24, 0x81");
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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann solltest du die Definitionen in avr/iom16.h (oder so ähnlich) mal 
kontrollieren.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab die Datei gefunden. Da steht folgendes drin:

...
#define OSCCAL  _SFR_IO8(0x31)

#define OCDR    _SFR_IO8(0x31)
...
#define OCR0    _SFR_IO8(0x3C)

Ist IMHO richtig, oder?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte der Compiler dann 0x31 daraus machen? Tippfehler? 
Versehentlich redefinierter Makro OCR0? Modul nicht neu kompiliert?

Übersetz das Modul mit avr-gcc -E, dann siehst du was der Präprozessor 
draus macht und such dort drin mal nach der Zeile.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.