ATMega32 CTC Mode ?

Gast #2379304
Lesenswert?

Hey,

Da der selbst geschrieben Code einfach nich compillierbar war, hab ich 
mal probiert ein Fertigen Code vom AVR Totorial zu kompillieren.
ABER: Wir bekommen nur ein Fehlercode. Hat jemand einen Tipp für uns,
was wir übersehen haben ?
AVR: Atmega32
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
 
4
int main(void)
5
{
6
  // Timer 0 konfigurieren
7
  TCCR0A = (1<<WGM01); // CTC Modus
8
  TCCR0B |= (1<<CS01); // Prescaler 8
9
  // ((1000000/8)/1000) = 125
10
  OCR0A = 125-1;
11
 
12
  // Compare Interrupt erlauben
13
  TIMSK |= (1<<OCIE0A);
14
 
15
  // Global Interrupts aktivieren
16
  sei();
17
 
18
  while(1)
19
  {
20
    /*Hier kann die aktuelle Zeit
21
      ausgeben werden*/
22
  }
23
}
24
 
25

26

27
ISR (TIMER0_COMPA_vect)
28
{
29
 
30
}

Der Errorcode:
1
Compiling C: main.c
2
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o 
3
main.c: In function 'main':
4
main.c:7: error: 'TCCR0A' undeclared (first use in this function)
5
main.c:7: error: (Each undeclared identifier is reported only once
6
main.c:7: error: for each function it appears in.)
7
main.c:8: error: 'TCCR0B' undeclared (first use in this function)
8
main.c:10: error: 'OCR0A' undeclared (first use in this function)
9
main.c:13: error: 'OCIE0A' undeclared (first use in this function)
10
main.c: At top level:
11
main.c:27: warning: 'TIMER0_COMPA_vect' appears to be a misspelled signal handler
12
make.exe: *** [main.o] Error 1
13

14
> Process Exit Code: 2
15
> Time Taken: 00:01

Irgendwelche Tipps oder Lösungsvorschläge??? Wäre echt dankbar bin 
nähmlich schon halber am verzweifeln :)

Greetings :]
Gast #2379333
Lesenswert?

Uwe S. schrieb:
> Ok?

Nee leider nicht,
hab mich heute morgen schon mit dem Datenblatt beschäftigt und die 
Register vergliechen. Ich glaub dass könne was mit TCCR0A/B zu tun 
haben, denn die Register/Registerunterteilung findet sich weit und breit 
nicht im Datenblatt. Oder muss man anstatt TCCR TCNT benutzen? Hab 
leider noch nie mit dem Controllertyp gearbeitet.
Gast #2379365
Lesenswert?

Marv schrieb:
> Irgendwelche Tipps oder Lösungsvorschläge??? Wäre echt dankbar bin
> nähmlich schon halber am verzweifeln :)

Nimm als Arbeitshypthese: Code ok, Registernamen falsch
Die Namen, die der Compiler für den ATmega32 kennt, stehen in iom32.h

Dann anhand des Datenblattes oder iom32.h gucken, in welchem Register 
die Bits liegen. Der Sprungvektor dürfte TIMER0_COMP_vect heißen.
Gast #2379368
Lesenswert?

Jap da hab ich geschaut aber da gibts trzd. kein Programmbeispiel xD. So 
lässts sichs zumindest schonmal kompillieren:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
 
4
int main(void)
5
{
6
  // Timer 0 konfigurieren
7
  TCCR0 = (1<<WGM01), (1<<CS01); // CTC Modus
8
    // ((1000000/8)/1000) = 125
9
  OCR0 = 125-1;
10
 
11
  // Compare Interrupt erlauben
12
  TIMSK |= (1<<OCIE0);
13
 
14
  // Global Interrupts aktivieren
15
  sei();
16
 
17
  while(1)
18
  {
19
    /*Hier kann die aktuelle Zeit
20
      ausgeben werden*/
21
  }
22
}
23
 
24

25

26
ISR (TIMER0_COMP_vect)
27
{
28
 
29
}
Obs funktioniert bleibt noch dahingestellt xD

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