Forum: Mikrocontroller und Digitale Elektronik TimerOverflow-Interrupt am ATmega2560 funktioniert nicht


von Konrad B. (brutzelnerd)


Lesenswert?

Guten Abend zusammen!
Ich probiere mich gerade am MyAVR-Board MK3 mit dem ATmega2560 im 
Interruptprogrammieren aus und habe folgenden kleinen Code verwendet:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#define F_CPU 16000000
4
int main(void)
5
{
6
7
  DDRL = 0xFF;                   // Setup PORTL as output
8
  
9
  TCCR0= (1<<CS02)|(1<<CS00);    // Start Timer 0 with pescaler 1024
10
  TIMSK= (1<<TOIE0);             // Enable Timer 0 overflow interrupt
11
12
  sei();                         // Set the I-bit in SREG
13
14
  while(1)
15
  {}                             
16
  
17
18
  return 0;                         
19
}
20
21
22
// Interrupt subroutine for Timer0 Overflow interrupt
23
ISR(TIMER0_OVF_vect)
24
{
25
  PORTL ^= 0xFF;                    // Toggle PORTL
26
            
27
}
Ich möchte das ganze mit dem Atmel Studio 6 compilieren, aber folgende 
Fehlermeldungen treten auf:

'TIMSK' undeclared (first use in this function)
'TCCR0' undeclared (first use in this function)

Was habe ich falschgemacht?
Im AVR-Tutorial ist es genau so beschrieben!
Ich danke schon mal im Voraus für eure Hilfe!
MFG
Konrad

: Bearbeitet durch User
von holger (Gast)


Lesenswert?

>Was habe ich falschgemacht?

Du hast das Daenblatt nicht gelesen.

>Im AVR-Tutorial ist es genau so beschrieben!

Aber nicht für einen ATmega2560.

von holger (Gast)


Lesenswert?

>Du hast das Daenblatt nicht gelesen.

Upps ich kaufe noch ein 't';)

Datenblatt sollte das heissen.

von Karl H. (kbuchegg)


Lesenswert?

Konrad Bethmann schrieb:

> Im AVR-Tutorial ist es genau so beschrieben!

Das Tutorial ist aber für einen einfacheren Prozessor geschrieben.
Mit den neueren, großeren Prozessoren sind zum Teil dann auch mehr Timer 
mit mehr Mögllichkeiten ins Spiel gekommen, so dass 1 Register TIMSK 
nicht mehr ausreicht um all die Bits aufzunehmen. Da gibt es dann eben 
mehrere derartige Register, TIMSK0, TIMSK1, bzw. wie die dann auch immer 
heissen.

Welche es sind, wie sie heissen und wie die Bits heissen, steht im 
Datenblatt zum Mega2560. Das Datenblatt solltest du sowieso zu deinem 
Freund machen. Gerade dann, wenn du aus einem Tutorial die Beispiele auf 
DEINEN Prozessor übertragen musst.

In den Atmel Datenblättern gibt es schöne Kapitel über jeden Timer. Am 
Endes jedes Kapitels gibt es immer einen Abschnitt "Register Summary" 
oder so ähnlich. Dort findest du in kompremierter Form alle jeweils 
relevanten Register, die Namen der Register und wie die Bits konkret in 
diesem Register auf diesem Prozessor heissen.

D.h. mit dieser Hilfe überträgst du das Beispiel auf deinen Prozessor, 
indem du dir aus diesem Datenblattabschnitt die relevanten Informationen 
holst. Erleichternd kommt hinzu, dass die Dinge in deinem speziellen µC 
meistens sehr ähnlich, wenn nicht gleich heissen. D.h. das TIMSK 
Register wird in deinem Prozessor nicht XYZAB heissen, sondern so 
ähnlich wie TIMSK. Hast du einen Kandidaten, dann checkst du noch kurz 
in dieser Summary, ob es sich wirklich um die gleiche Funktionalität 
handelt und wenn ja (der Normalfall), dann bist du auch schon fertig. 
Auf zum nächsten 'Problem'.

Dieses Gegenchecken solltest du im übrigen IMMER machen, wenn du mit 
einem Tutorial arbeitest, welches nicht speziell für deinen µC 
geschrieben ist. Denn manchmal sind es die Kleinigkeiten und blindes 
Übernehmen kann mächtig ins Auge gehen.

: Bearbeitet durch User
von Konrad B. (brutzelnerd)


Lesenswert?

Hi!
Ich habe mir das Datenblatt angesehen, nun sind die Fehlermeldungen weg!
Das Programm macht zwar nicht, was es soll, aber das ist erstmal nicht 
wichtig!
Einen schönen Abend noch!
Konrad

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.