www.mikrocontroller.net

Forum: Compiler & IDEs AVR - Compiler kennt Register von Timer 0 nicht (TCCR0A undeclared)


Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin seit einiger Zeit dabei, ATtiny2313er zu programmieren. Die 
ersten Mini-Programme hab ich zum Laufen gekriegt (so was wie ein 
Lauflicht etc). Nun wollte ich einen Timer so programmieren, daß ein 
Interrupt ausgelöst wird, wenn der 200 erreicht. Doch es haut einfach 
nicht hin:
Obwohl die avr/io.h includiert ist, kennt der Compiler kein Register des 
Timer0.
Ich habe schon in die io.h bzw in die iotn2313.h geschaut und dort sind 
die Register so definiert, wie ich sie angegeben habe. Wenn ich die 
ganze Sache mit Timer1 statt Timer0 schreibe (TCCR1A, TCCR1B, OCR1A), 
kompliert das Programm fehlerfrei. Ich bin auch sicher, daß ich mich 
nicht vertippt habe (z.B. ein Oh statt einer Null).

Hier der Auszug aus dem Programm mit den Fehlermeldungen des Compilers:
#include <avr/io.h>
#include <avr/interrupt.h>

int main ()
{

  DDRB=0b11111111;    //PortB (TimerAusgang) ist Ausgang
  PORTB=0b00000000;    //Am Anfang ist alles dunkel
  TCCR0A |= 0b01000000;  //Signal an PortB ausgeben, Normale Timerfunktion
  TCCR0B |= 0b00000101;    //Timer start! 1/1024 CPU-Takt
  OCR0A = 200;      //Erreicht der Timer 200, wird ein Interrupt geschmissen  
  TIMSK |= 0b00000001;    //Compare-Interrupt für ComareRegister A einschalten
  sei();

while(1)
{
//uswusw
}
}
Und hier die Fehler des Compilers:
Build started 4.1.2010 at 14:05:41
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP 
-MT Interrupts.o -MF dep/Interrupts.o.d  -c  ../Interrupts.c
../Interrupts.c: In function 'main':
../Interrupts.c:9: error: 'TCCR0A' undeclared (first use in this 
function)
../Interrupts.c:9: error: (Each undeclared identifier is reported only 
once
../Interrupts.c:9: error: for each function it appears in.)
../Interrupts.c:10: error: 'TCCR0B' undeclared (first use in this 
function)
../Interrupts.c:11: error: 'OCR0A' undeclared (first use in this 
function)
make: *** [Interrupts.o] Error 1
Build failed with 5 errors and 0 warnings...


Ich programmiere mit AVR Studio 4.14 und WinAVR-20090313. Danke für eure 
Hilfe!

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen schrieb:
> avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99
                     ^^^^^^^^^
einstellen. am besten im makefile.
und rtfm =)

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, das ging aber schnell :-)
Ich hatte erst das Projekt auf dem ATmega begonnen, später aber auf den 
ATtiny umgestellt. Aber anscheinend wurds nicht richtig übernommen.

Danke für die Hilfe!

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach du schreibst unter dem avrstudio und nicht mit dem pn von winavr. 
dann lieber nicht im makefile ändern (grausam aber wahr), sondern in den 
project optionen einstellen.
nur beim flashen reichts nicht.

Autor: Stefan Engelhardt (stefane)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich muß diesen Thread noch einmal aufgreifen, weil ich genau die im 
ersten Posting beschriebenen Fehlermeldungen auch bekomme, ich aber mit 
der Lösung nicht so recht was anfangen kann.

In dem Tutorial

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

gibt es einen Quellcode für die Benutzung des Timer0 im CTC-Mode. Der 
Quellcode ist für den AT90S2313 geschrieben. Wenn ich diesen Quellcode 
in AVR-Studio4 (Version 4.16) in ein Projekt einbinde und compiliere, 
bekomme ich die oben beschriebenen Fehlermeldungen (z.B. TCCR0A 
undeclared), auch wenn ich unter den Configuration Options den at90S2313 
angebe. Ein Blick in die io2313.h zeigt dann tatsächlich, dass es ein 
Register dieses Namens nicht gibt. Wo liegt nun der Fehler? Ist die 
io2313.h unvollständig? Ist der Quellcode im Tutorial falsch?

Gruß
StefanE

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Blick ins Datenblatt und siehe da: der AT90S2313 hat kein TCCR0A.

Autor: Stefan Engelhardt (stefane)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Ein Blick ins Datenblatt und siehe da: der AT90S2313 hat kein TCCR0A.

Danke, also ist der Quellcode im Tutorial falsch. Dann werde ich mich 
mal bemühen, dass das geändert wird.

Gruß
StefanE

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Engelhardt schrieb:

> In dem Tutorial
> 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
>
> gibt es einen Quellcode für die Benutzung des Timer0 im CTC-Mode. Der
> Quellcode ist für den AT90S2313 geschrieben.

Nö ist er nicht.

Nur der im Tutorial vorangehende Quellcode für das Overflow-Beispiel 
ist für den AT90S2313 geschrieben (und wurde korrigiert: Richtiger 
Name des ISR Vektors).

Der Quellcode fürs CTC-Beispiel ist für Attiny2313 geschrieben und 
die Register passen. Der AT90S2313 hat keinen CTC-Modus bei Timer0.

Zur Verdeutlichung habe ich je eine Kommentarzeile an die Anfänge der 
Quellcodes geschrieben.

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.