Arduino: Timer0 Compare Mode funktioniert nicht

Gast #4781575
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren