Atmega168 Timer auf dem Arduino Nano3

OP #5900927
Hi,

ich möchte einen 1ms Timer erzeugen.


#define TReload               ((0.001F * (F_CPU / 64 ))-1)


Timer init() (einmalig ausgeführt)


    TCCR0A |= (1 << WGM01);

    OCR0A =  TReload;

    TCCR0B |= (1 << CS01) | (1 << CS00);

    TIMSK0 |= (1 << OCIE0A);


Ich zähle im Interruptvektor (ISR (TIMER0_COMPA_vect)) eine Variable 
(ISRvar) von 0 hoch. Diese frage ich aus dem Hauptprogramm ungebremst 
ab.
Wenn die ISRvar größer gleich 1000 ist, sollte eine Sekunde vergangen 
sein, ist aber nicht, eher bei irgendwas zwischen 978 und 980...

Wie kann das sein. Ich weiß ohne richtigen Code immer schwierig. Es ist 
schon einen Moment her, da habe ich diese Steuerbits für diesen Zähler 
beackert, das war so wie es ist, aber eigentlich auch nicht so wirklich 
richtig, ich meine Vorteiler und Quarzfrequenz passen eigentlich nicht 
zusammen, aber es stimmte so grob halt. Konnte den Fehler nicht finden.

2 Fragen,

A) ist das Label F_CPU beim der Arduino Software überhaupt richtig 
nutzbar, also irgendwo gesetzt?
B) soweit ich das weiß ist dort auf dem Nano3 doch ein 16Mhz Quarz 
verbaut (hoffe ich?)

Auf Seite 148 ist die Tabelle zum Vorteiler, habe eben noch mal geschaut

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2545-8-bit-AVR-Microcontroller-ATmega48-88-168_Datasheet.pdf

16Mhz durch 64 (Teiler bei CS00 und CS01 =1) wären 250Khz.

Durch die 16Mhz als F_CPU ergibt sich ein Reloadwert von 249 für den 
Timer, sollte also alles passen, dennoch passt es nicht...

Hat jemand einen Tip, finde da nichts...

Danke

Gruß
DS
OP
...wenn ich mit 980 zurück rechne:

16Mhz  980  64 ergibt ziemlich genau 255. Auffällig. Selbst wenn ich 
249 oder 250 direkt zuweise:

OCR0A =  249;

ändert es nichts. Ich lade das falsche reload Register, kann das sein?

Danke.

Gruß
DS
Gast
> Ich lade das falsche reload Register, kann das sein?

Vielleicht läuft auch der falsche Modus, das ist es nämlich, was c-hater 
in seiner unnachahmlichen Art zum Ausdruck bringen wollte: könnte es 
sein, dass beim Arduino TCCR0A und B bereits vorbesetzt sind und die 
Ver-Oderung ins Chaos führt?
OP
Hi,

keine Ahnung, sie werden jedenfalls nicht von mir genutzt, ist nicht 
viel Code drauf, nur ein bissl Ausgabe auf LED. Mache da sonst noch 
nichts.

Die Timer auf dem Atmega waren mir schon immer zu viel, steige da nicht 
gut durch, auch nicht im Datenblatt, ist nicht meins. Da bräuchte ich 
etwas Unterstützung, die ganzen Modi etc...

Thema Fragen: ja 0.001 * 16.Mio durch 64 -1 ist halt 249...!?

Aber wie gesagt, wenn ich es so rein lade bleibt es dabei, von daher 
verstehe ich nicht was ich zu der Frage noch schreiben soll...

Viele Grüße
DS
Gast
> keine Ahnung

Okay, da sind wir schon zu zweit, ich kenne den Arduino nicht. Aber ein 
Ansatz wäre jetzt doch, statt dieser Ver-Oderung eine saubere Zuweisung 
an TCCR0A und B zu machen und zu schauen, ob bzw. was sich ändert.
Gast
Es ist doch mittlerweile eine alte Weisheit dass das
Arduino-Umgebungs-Zeugs welches ohne Zutun immer gestartet
wird bereits den Timer 0 setzt und benutzt.

Also wenn Timer 0, dann Vorsicht und komplett initialisieren,
nicht nur "weiterverwenden" ( =  vs.  |=  und  &=  )
Gast
sehr hilfreich:

in setup:

timer1.initialize(1000);
timer1.attachInterrupt(timer1_isr)

void timer1_isr(void) //wird 1000x in der sekunde aufgerufen
{}

So zerstört man sich nicht die vorhandene Struktur...

Viel Erfolg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 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.