Forum: Mikrocontroller und Digitale Elektronik ATMega16: Interrupts lösen nicht aus


von Philipp S. (phil_i)


Angehängte Dateien:

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

von holger (Gast)


Lesenswert?

Schweigen aus dem AVR Lager;)

Falsche HEX Datei gebrannt? Programm nicht compiliert
und alte HEX Datei gebrannt?

Also ich sehe keinen Fehler im C Code.

von holger (Gast)


Lesenswert?

Programm für den falschen Controller übersetzt?

von Route_66 H. (route_66)


Lesenswert?

...LED hängt über Pullup an 5V?

von Karl H. (kbuchegg)


Lesenswert?

Hmm

Das Programm an sich ist in Ordnung.
Aber ändere mal

    PORTB &= ~(1 << PB0);

um zu

    PORTB ^= (1 << PB0);


dann blinkt die LED und es ist egal, ob sie gegen GND oder gegen Vcc 
angeschlossen ist.

von Karl H. (kbuchegg)


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.

von Philipp S. (phil_i)


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

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.