Forum: Mikrocontroller und Digitale Elektronik TimerOverflow -ISR wird nicht erreicht


von mr08b002 (Gast)


Lesenswert?

Hi,

ich bin grad am starten eines neuen Projekts und brauch mal wieder eure 
Hilfe. Ich brauch einen Timer und scheitere jetzt schon daran, dass die 
ISR des Timers nicht erreicht wird. Es muss einfach was ganz simples 
sein, bloß kann ich den Fehler momentan beim besten willen nicht finden. 
Vielleicht kann mir jemand von euch da auf die Sprünge helfen. Der Code 
sieht wie folgt aus (für einen ATMEGA8):
1
/**************************************************************** includes ***/
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
/********************************************************************* ISR ***/
6
ISR(TIMER0_OVF_vect)
7
{
8
  PORTB = 0x01;
9
}
10
11
/*********************************************************** main-function ***/
12
int main(void)
13
{
14
  PORTB = 0x00;
15
  DDRB  = 0XFF;
16
17
  TCCR0  = (1<<CS01)|(1<<CS02);
18
  TIMSK |= (1<<TOIE0);
19
  
20
  sei();
21
  
22
  while(1)
23
    {
24
    }
25
return 1;
26
}

lg michael

von Karl H. (kbuchegg)


Lesenswert?

Woran merkst du, dass die ISR nie ausgeführt wird?
Dein Programm ist nämlich korrekt.

von Benni (Gast)


Lesenswert?

könnte auch ein inhaltlicher fehler sein.
vllt ist die led (ich gehe man davon aus dass eine an PORTB ist...)
ja gegen + statt masse geschaltet.

wenn nun die ISR nach 0.00001s erreicht wird schaltet die LED sofort und 
du bemerkst es kaum.

von uwe (Gast)


Lesenswert?

Hmm solche Fehler haben meist was mit der richtigen definition des 
Mikrocontroller typs im Compiler zu tun. Oder im Namen des Registers 
weil diese ab und zu anders benannt sind bei unterschiedlichen µC. Timer 
0 ist jedoch bei allen gleich. Ich glaube die Anzahl (bzw. Reihenfolge) 
der Interupt Handler könnte bei einer falschen definition des µC Typs 
anders dsein und deshalb der Handler and der Flaschen Stelle im Flash 
stehen.
Habe ich mir aber nicht angeguckt.

von Floh (Gast)


Lesenswert?

In Projektoptionen mal nach dem eingestellten uC schauen.

von Dussel (Gast)


Lesenswert?

Geht das Bit nicht an oder nicht aus? Je nach Vorteiler und Takt wird 
der Interrupt sehr schnell erreicht und das Bit bleibt dann in dem 
Status. LED dran? Vielleicht falsch rum angeschlossen, also gegen Masse 
statt gegen Versorgungsspannung oder sowas? Davon abgesehen würde ich 
erst die Richtung festlegen und dann die Daten auf den Port geben. Ich 
weiß nicht, ob es was ausmacht, aber vielleicht könnte es Probleme 
geben.

von Dussel (Gast)


Lesenswert?

Oh, das ging schnell.

von mr08b002 (Gast)


Lesenswert?

danke für eure schnellen Antworten.

Karl Heinz Buchegger schrieb:
> Woran merkst du, dass die ISR nie ausgeführt wird?

ich hab eine LED dran hängen. Die ist auch garantiert richtig gepolt. 
Wenn ich sie in der while-Schleife einschalte leuchtet sie.

Floh schrieb:
> In Projektoptionen mal nach dem eingestellten uC schauen.

Hab das Makefile mit MFile erstellt. Für den uC hab ich da schon atmega8 
ausgewählt. Mit MFile erstellte Makefiles funktionieren bei mir 
normalerweise immer super.

Ich dachte ja anfangs, dass es vll. am Interrupt-Vector lieg, da ich 
damit schon einmal Probleme hatte. Daher hab ich in die m8.h gschaut. 
Dort ist er so definiert.

von Stefan E. (sternst)


Lesenswert?

mr08b002 schrieb:
> Hab das Makefile mit MFile erstellt. Für den uC hab ich da schon atmega8
> ausgewählt. Mit MFile erstellte Makefiles funktionieren bei mir
> normalerweise immer super.

Und welche Datei benutzt du dann zum Programmieren des Controllers? 
Womöglich die, die auf .elf endet?

von mr08b002 (Gast)


Lesenswert?

Stefan Ernst schrieb:
> Und welche Datei benutzt du dann zum Programmieren des Controllers?
> Womöglich die, die auf .elf endet?

Ich flashe die hex-datei mithilfe von avrdude.
Jetzt hab ich genau dieses Programm so umgeändert, dass anstelle von 
Timer0 der Timer2 verwendet wird.
Verrückterweise funktionierts jetzt (mit Timer2 halt).

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.