ATMega16: Interrupts lösen nicht aus

OP #2869087
Lesenswert?

Hallo zusammen,

seit einiger Zeit arbeite ich an meiner ersten uC Schaltung mt dem 
ATMega16 und dank diesem Forum konnte ich immer alles zum Laufen bringen 
;-)

Nun bin ich aber leider an einem Punkt, wo ich nicht weiterkomme und 
auch eine intensive Suche im Internet bringt mich nicht weiter.

Ich habe das Beispiel aus den FAQ verwendet, um ein Interrupt beim 
Overflow von Counter0 auszulösen. Leider wird dieses Interrupt aber nie 
aufgerufen.

Hier nochmal das Beispiel:
1
#define F_CPU 14745600UL
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
 
5
ISR( TIMER0_OVF_vect )       // Overflow Interrupt Vector
6
{
7
  static uint8_t swTeiler = 0;
8
 
9
  swTeiler++;
10
  if( swTeiler == 200 ) {    
11
    swTeiler = 0;            
12

13
    PORTB &= ~(1 << PB0); 
14
  }
15
}
16
 
17
int main()
18
{
19

20
  DDRB |= (1<<PB0)|(1<<PB1);
21
  PORTB |= (1<<PB0)|(1<<PB1);   
22

23
  TCCR0 = (1<<CS01);    
24
  TIMSK |= (1<<TOIE0);  
25
 
26
  
27
  sei();                
28
 
29
  
30
  while( 1 )
31
  {                     
32
  }                    
33
}

An Port B sind LEDs, die auch leuchten, aber leider geht die an PB0 
nicht aus :(
Habe im Interrupt selbst auch schon alles außer PORTB &= ~(1 << PB0); 
gelöscht, was zu keiner Veränderung führt.

Kann es an der interrupt.h liegen, die oben eingebunden wird?
Kann der Mikrocontroller derart defekt sein, dass nur der Timer nicht 
funktioniert?

Den Systemtakt habe ich zu Testzwecken mal auf 1MHZ vom internen 
Oszilator gestellt, ohne Erfolg.

Würd mich über einen Tipp echt freuen.

Viele Grüße
Philipp
Angehängte Dateien:
#2869701
Lesenswert?

> dann blinkt die LED

Warte mal

#define F_CPU 14745600UL

  TCCR0 = (1<<CS01);


Wenn mich mein Gedächtnis nicht trügt, dann ist CS01 ein Vorteiler von 8

Rechnen wir mal ein bischen.

Du hast 14Mhz (das Kleinvieh lass ich mal wegfallen).
Vorteiler 8, macht rund 1.75 Mhz Timertakt.

Der Zähler zählt bis 256:  1.75Mhz / 256 -> rund 6800 Overflows/Sekunde

In der ISR teilst du nochmal durch 200: 6800 / 200 -> 34

d.h. du kriegst eine Blinkfrequenz von ca 17Hz.
Das ist dann schon weniger ein Blinken, mehr ein Flackern.

Sehen wirst du es normalerweise noch, aber man muss schon genau schauen. 
Mit dem Vorteiler noch eine Stufe höher gehen, dann ist das Blinken 
augenfälliger.
OP #2871033
Lesenswert?

Hallo,

konnte leider erst heute wieder an meinem Projekt weiterarbeiten - mit 
Erfolg ;)

Also die LED sollte ja zunächst garnicht blinken, sondern erstmal nur 
ausgehen (vgl Code) und das funktionierte ja schon nicht. Die Hardware 
war auch korrekt und auf das richtige HEX File hatte ich auch nochmal 
überprüft.

Was ich aber nicht wusste, dass man im AVR Studio den Controller-Typ 
einstellen muss (dachte der ISP Programmer erkennt den automatisch) und 
deshalb möchte ich mich ganz ganz herzlich bei holger für diesen Tipp 
bedanken, mit dessen Hilfe ich herausgefunden habe, dass man unter 
"Project" > "Configuration Options" > "General" unter Device stehts den 
richtigen Controller einstellen sollte ;)

Danke an euch alle! Die Led blinkt nun und ich bin froh, dass ich jetzt 
weiterkomme :-)
Schönes Wochenende

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