mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kein Interrupt beim Mega16 - Gedankenfehler?


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jungs, ich habe eine kleine Routine in C (AVR-GCC) ATmega16 
geschrieben.
Leider funktioniert meine Interrupt-Routine nicht und ich weiß nicht 
warum. Vielleicht habe ich einen Gedankenfehler. Schaut doch mal bitte 
über den Code:
#include <avr\io.h>
#include <avr\interrupt.h>
#include <stdint.h>

uint8_t zaehler = 0;

ISR(TIMER0_COMP_vect) //Output Compare Interrupt
{
  zaehler++;
}

void timer_init(void)
{
  TCCR0 = (1<<WGM01) | (1<<CS02);   // Prescaler auf 256 --> 1MHz / 256 = 4 kHz
                      
  TIMSK = (1<<OCIE0);  // Output Compare Interrupt Enable - 
                        // -> Interrupt bei Compare mit OCR0 einschalten
  OCR0 = 212;           // Zeitpunkt für Interrupt
  TCNT0 = 0x00;         // Zählerregister auf 0 setzen
}

int main (void)
{

  uint8_t ergebnis = 0;

  DDRB = 0xff;  // Port B ist Output
  PORTB = 0xff; //LED's ausschalten (invers am Board)

  timer_init();

  while(1) // Programmschleife
  {
    sei();
    ergebnis = zaehler % 8; // modulo
    PORTB = ~(1<<ergebnis);
  }
}

Autor: Daniel C. (cecky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde zaehler mal als volatile deklarieren, und sei() vor die while 
schieben. Einmal Interrupts einschalten sollte ja reichen :-)

Autor: mork (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deklarier zaehler als volatile.

MfG mark

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja klar!

Das wars natürlich. X-mal gemacht und einmal "mal ebend" was 
programmieren - und schon passieren solche flüchtigkeitsfehler.

Super Vielen Dank nochmal

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.