Forum: Mikrocontroller und Digitale Elektronik Timer Zeitbasis für Atiny461


von kölsch (Gast)


Lesenswert?

Guten Abend,
Ich möchte 1ms Timer Interrupt haben.
Leider klappt es nicht
1
OCR0A = (int16_t)((F_CPU / 64 * 10e-4 + 0.5));  // preload for 1ms
2
  TCCR0B |= (1<<CS01)|(1<<CS00);          // divide by 64
3
  TIMSK |= (1<<OCIE0A);                    // enable timer Compare A Interrupt
4
5
6
7
ISR(TIMER0_COMPA_vect)  //_evry 1ms Interrupt
8
{
9
  PORTA ^= (1<<OUT_RUNLED)  
10
}

Wenn ich das wackeln des Pins mit dem Oszi anschaue ist es irgendwie 
90ms.
Wie kann das sein?

von S. Landolt (Gast)


Lesenswert?

Das sind nicht vielleicht irgendwie 90 us?

von kölsch (Gast)


Lesenswert?

S. Landolt schrieb:
> Das sind nicht vielleicht irgendwie 90 us?

Ne eben 90ms das ist ja das komische

von c-hater (Gast)


Lesenswert?

kölsch schrieb:

> Ich möchte 1ms Timer Interrupt haben.
> Leider klappt es nicht

Ja, da mußt du halt mal das DB lesen. Dieser Timer ist ein recht 
spezieller. Er kann nämlich ein 8Bit-Timer oder auch ein 16Bit-Timer 
sein. Und er verhält sich in diesen beiden Fällen doch ziemlich 
verschieden.

Mit einer Raubkopie von Code für "normale" AVR8-Timer kommst du hier 
nicht weiter (und zwar weder mit Code für "normale" 8Bit-Timer noch mit 
welchem für "normale" 16Bit-Timer).

von S. Landolt (Gast)


Lesenswert?

> das komische
Spaß beiseite - wie sieht denn das komplette Programm aus? In dem 
gezeigten Schnipsel fehlt u.a. das Setzen von TCCR0A, was essentiell 
ist.

von kölsch (Gast)


Lesenswert?

S. Landolt schrieb:
>> das komische
> Spaß beiseite - wie sieht denn das komplette Programm aus? In dem
> gezeigten Schnipsel fehlt u.a. das Setzen von TCCR0A, was essentiell
> ist.

In das TCCR0A schreibe ich nichts wollte ja nur die 8Bit breite 
verwenden

von S. Landolt (Gast)


Lesenswert?

Dann gibt's aber auch kein CTC, wenn ich so das Datenblatt überfliege.

von kölsch (Gast)


Lesenswert?

S. Landolt schrieb:
> Dann gibt's aber auch kein CTC, wenn ich so das Datenblatt überfliege.

Das habe ich übersehen Danke

von S. Landolt (Gast)


Lesenswert?

Nun ja, der Timer0 läuft eben vollständig durch, 8-bit, ergibt bei z.B. 
8 MHz eine Interruptzeit von rund 2 ms, unabhängig davon, was in OCR0A 
steht. Aber es werden keine 90 ms daraus, wie man es auch dreht und 
wendet - deshalb meine Frage nach dem kompletten Programm.

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.