www.mikrocontroller.net

Forum: Compiler & IDEs Timer, mega8515


Autor: Andreas B. (andreasb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche den Timer0 beim ATmega8515 anzusteuern, aber der Interrupt
wird nie ausgelöst. Ich habe schon die Suche benutzt aber habe die
Lösung nicht gefunden...

mfg Andreas

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast den Timer auch lediglich aktiviert, zählen tut der schon. Wenn
du jetzt noch das Flag setzt, welches den Interrupt bei Überlauf
aktiviert dann passt das :-)

Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und das geht so:

TIMSK = _BV(OCIE0);

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm, falsch ...

Es gibt einen Unterschied zwischen Output Compare und Timer Overflow.

Autor: Andreas B. (andreasb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
Ich konnte nirgends ein komplettes Code Beispiel finden...
Aber jetzt funktioneirt es.

mfg Andreas

Autor: tobster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hä, Und wie hast du das Programm verändert?

Autor: Andreas B. (andreasb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den gleichen Code jetzt nicht gerade... aber einer der funktioniert,
aber mit Timer 2...:

Initialisierung (bei mir in der main Funktion)

{
  TCCR1B = 1<<WGM12^1<<CS10<<CS11;
  OCR1A = 0;
  TCNT1 = 0;
  TIMSK = 1<<OCIE1A;
  sei();
}


SIGNAL (SIG_OUTPUT_COMPARE1A)
{
//wird ausgeführt wenn timerüberläuft
}


habe das mit den Timern auch noch nicht ganz begriffen, aber so
funktioniert es problemlos..


mfg Andreas

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich mich gestern auch ein wenig damit rumgeschlagen hab (Mein
Int wurde auch nicht ausgelöst), hab ich's glaub ich:

{
  TCCR1B = 1<<WGM12^1<<CS10<<CS11;   //setzt den Prescaler
  OCR1A = 0;                         //setzt den Vergleichswert
  TCNT1 = 0;                         //Startewert des Counters
  TIMSK = 1<<OCIE1A;                 //Compare-Int aktivieren
  sei();                             //globale Ints aktivieren
}

SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 //wird ausgeführt wenn der Counterwert mit dem Vergleichswert
übereinstimmt
}

Wenn man wirklich nur den Overflow haben will, dann reicht auch, das
ganze so zu schreiben:

SIGNAL (SIG_OVERFLOW0)
{
// Interrupt Code bei Timerüberlauf (8-Bit = 256 Timerzyklen)
}

{
  // 8-Bit Timer einstellen
  TCCR0 = (1<<CS00)|(1<<CS02);  // Vorteiler
  TIMSK = (1<<TOIE0);    // Überlauf-Int aktivieren
  sei();        // Globale Ints aktivieren

}

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.