Forum: Compiler & IDEs Interrupt wird nicht richtig ausgeführt TMR0


von xmen (Gast)


Lesenswert?

Hallo,
Woran könnte es liegen das die ISR nicht richtig ausgeführt wird?

Und zwar wird bei einem Overflow von TMR0 wieder bei der Initialisierung 
angefangen ? nur Warum ?

Könnte mir da jemand helfen?

Grüße

1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4
#include <avr/iom16.h>
5
6
volatile uint8_t PWM;
7
8
//Interrupt Service Routinen
9
10
ISR (TIMER0_OVF_vect)
11
  {
12
  PWM++;
13
  }
14
15
16
//----Hauptschleife
17
18
int main(void)
19
{
20
  //Initialisierung
21
  DDRB    =    0xFF;
22
  DDRD    =    0x3F;
23
  TCCR0     |=    (1<<CS00);
24
  TIMSK      |=     (1<<TOIE0);
25
26
27
  sei();
28
  
29
  while(1)
30
  {PORTB  = 0x01;
31
  PORTB   = 0x02;
32
   }
33
34
}

von Karl H. (kbuchegg)


Lesenswert?

Irgendwelche Warnings vom Compiler?

(warum bindest du die iom16.h direkt ein. Die brauchst du nicht. Das 
macht schon die iom.h. Schmeiss sie raus und wenn du dann irgendwelche 
Warnungen kriegst, weißt du, dass deine Projektkonfiguration nicht 
stimmt. Die spezifischen iomXX.h bindet man nie selber ein)

von xmen (Gast)


Lesenswert?

Ja eine Warnung gibt es und zwar die hier:

<command-line>: warning: this is the location of the previous definition

Aber wenn ich da einen Doppelklick mache dann springt er nicht zur 
Programmzeile.


hmm

von xmen (Gast)


Lesenswert?

Mhm ich hab mir jetzt mal in der Simulation ne Fehlermeldung bekommen 
und Zwar habe ich in der ISR wo PWM++; steht einen Breakpoint gesetzt.

Wenn ich dann auf RUN Drücke dann stoppt die Simulation und im Output 
steht:
AVR Simulator: Excessive stack overflow, stop sim

von Stefan E. (sternst)


Lesenswert?

Sehr wahrscheinlich falschen Controller eingestellt, entweder beim 
Compilieren oder im Simulator.

von xmen (Gast)


Lesenswert?

Mhm also ich bin so oder so nur in der Simulation grade und dort 
Funktioniert es nicht.

Wenn ich mit einem Rechtklick auf mein Projekt gehe und auf Properties 
klicke dann steht da Target Part: Atmega 16

Wenn ich unter Projekt/Configuration gehe dann steht dort auch Atmega 16

und wenn ich den Controller Programmieren wollte mit dem AVR Dragon dann 
steht doch auch Atmega 16.



Kann man das noch irgendwo umstellen ? denn für die Simulation sollte ja 
eigentlich der Prozessor verwendet werden den man unter 
"Projekt/Configuration " eingestellt hat.

von xmen (Gast)


Lesenswert?

Also Es hat anscheinend Doch irgendwas mit dem Controller im Projekt zu 
tun. und zwar hab ich das Projekt früher mal für einen Atmega 32 
erstellt. Bin aber dann auf den 16er umgesprungen. Wenn ich jetzt das 
Programm auf Atmega 32 stelle dann Funktioniert die ISR ganz normal wenn 
ich den wieder auf den 16er Stelle dann kommt wieder die Overflow.

Mhmmm. Aber wie kann man das Projekt denn dann so umstellen das man 
jetzt nen anderen Controller verwenden kann?  ohne ein Neues Projekt 
anlegen zu müssen ?

Oder Hat der Atmega 16 irgendwie Probleme bei der ISR ?

von Stefan E. (sternst)


Lesenswert?

xmen schrieb:
> denn für die Simulation sollte ja
> eigentlich der Prozessor verwendet werden den man unter
> "Projekt/Configuration " eingestellt hat.

Nö, das muss man separat einstellen:
Debug -> Select Platform and Device

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.