Arduino: Timer0 Compare Mode funktioniert nicht

Gast #4781575
Hallo zusammen,

ich versuche mich gerade am Timer0 Output Compare Mode

Dafür habe ich folgenden sketch geschrieben:

volatile long meine_milli = 0;

void setup() {
  // put your setup code here, to run once:
   TIMSK0 |= (1 << OCIE0A);
    Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
      Serial.println(millis());
      Serial.println(meine_milli);
      Serial.println(millis()-meine_milli);

      Serial.println(OCR0A_ALT);
      Serial.println(OCR0A_NEU);

}


ISR(TIMER0_COMPA_vect)
{
    OCR0A = TCNT0 +100;
    meine_milli++;
}

Eigentlich ist es relativ simpel.
Ich aktiviere Output Comare A ISR und setze innerhalb dieser ISR OCR0A 
neu.

So wie ich es verstanden habe gleicht OCR0A ab, ob es den gleichen Wert 
hat wie TCNT0 und löst dann die ISR aus.

Nun war meine Überlegung OCR0A neu zu setzen mit den Werten von TCNT0 
+100, sodass die nächste ISR in 400µs kommen müsste, da der Timer0 eine 
Prescaler von 64 hat.

Nun zu meinem Problem:
Ich kann den + Wert von 10-250 setzen und die ISR löst immer alle 1024µs 
aus....

Was mache ich falsch?
Gast #4781630
Der Big F. schrieb:
> Was mache ich falsch?

Vermutlich wird Timer0 vom Arduino-Framework benutzt,
d.h. er ist schon belegt (damit der User z.B. ohne lange zu
überlegen millis() aufrufen kann). Solange du Setup() und Loop()
in deinem Projekt angelegt hast.

Schreibst du dein main() selbst inkusive aller Initialisierung
dann wird dies die Arduino IDE nicht für dich tun und du hast
den Timer zur freien Verfügung.
Gast #4782134
Danke für deine Antwort...

Ich hab noch weiterprobiert.

Wenn ich in das OCR0A Register aus der ISR schreibe klappt es... schreib 
ich das Register außerhalb der Isr klappt es nicht

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.