Forum: Mikrocontroller und Digitale Elektronik Arduino: Timer0 Compare Mode funktioniert nicht


von Der Big F. (Gast)


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?

von Nebelstocherer (Gast)


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.

von Der Big F. (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

In the Arduino world timer0 is been used for the timer functions, like 
delay(), millis() and micros().

http://letsmakerobots.com/node/28278

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.