mikrocontroller.net

Forum: Compiler & IDEs Warum lösst der Interrupt nicht aus?


Autor: Tamme D. (tamme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also im mom komm ich bei meinem Programm einfach nicht weiter...

Hier mal der Betreffende teil....

// Timer-Interrupt
ISR(TIMER0_OVF_vect)
{
  // save(ADCL, ADCH);    // Speichern
  test(0xff, 0xff);

  TCNT0 = TCNT0 + ZAEHL;    // Zähler neusetzen
}

In main():

// Timer   initsalisierung
ausg(BOOT_timer_init);
  TCCR0 = 0x1;    // Teiler 0
  TIMSK = 0x2;    // Timer0 Interrupt frei
  TCNT0 = ZAEHL;    // Startwert setzen


sei();

________________________

Also die Initsialisierung wird ohne Probleme durchlaufen. Aber der 
Timer-Interrupt wird nie Ausgelöst. Was hab ich falsch gemacht?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dem Code fehlen sowohl ein paar Zeilen als auch Infos, um welchen 
AVR es eigentlich geht. Ich kann das so nicht mit einem Datenblatt 
vergleichen, auch nicht übersetzen, geschweige denn im Simulator 
nachsehen, ob ich das Problem wenigstens reproduzieren kann. Sorry.

Autor: Tamme D. (tamme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
huch srr ganz vergessen also es geht um nen atmega8 ich weis nich... 
soll ich den ganzen code hochladen oder was fehlt?

Autor: Tamme D. (tamme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Timer oder Interrupt angeht gibts da keine code zeiln mehr... vllt 
liegt da mein fehler?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TIMSK ist falsch gesetzt.

Das funktioniert in der Simulation:

//
// Atmega8
// OPtimierung -O0 (keine)
// F_CPU 4000000
//
#include <avr/io.h>
#include <avr/interrupt.h>

#define ZAEHL 42

static void test(unsigned char dick, unsigned char doof)
{
  DDRB = dick;
  PORTB ^= doof;
}

// Timer-Interrupt
ISR(TIMER0_OVF_vect)
{
  test(0xff, 0xff);
  TCNT0 = TCNT0 + ZAEHL;    // Zähler neusetzen
}

int main(void)
{

  TCCR0 = (1<<CS00);  // Teiler 1 (no prescaling) Table 34 Datenblatt
  TIMSK = (1<<TOIE0); // Timer0 Overflow Interrupt frei 
  TCNT0 = ZAEHL;      // Startwert setzen

  sei();

  while(1);
}

Autor: Tamme D. (tamme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juhu es funktioniert :) thx

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.