Interrupt wird nicht richtig ausgeführt TMR0

Gast #1519904
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
}
#1519922
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)
Gast #1519951
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
Gast #1519956
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
Gast #1519982
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.
Gast #1519986
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 ?

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