Einfachstes Timer Beispiel

Gast #1140249
Hallo!


Ich möchte einfach nur einen Timer laufen lassen und nach einer 
bestimmten Zeit soll ein Ausgangspin invertiert werden.

Dazu habe ich mir dieses Tutorial angesehen: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#16-Bit_Timer.2FCounter

Wenn ich dies

#define   F_CPU 3686400
#include  <avr\io.h>


main ()
{
  TCCRA |= (1<<COM1A0);  // Das Signal am Pin OC1 wird invertiert 
(Toggle).

  while(true)
  {

  }
}

auf den Controller laden will kommt die Fehlermeldung

error: 'TCCRA' was not declared in this scope


Muss der Timer vorher noch initialisiert werden oder muss eine Header 
Datei eingebunden werden?


Vielen Dank!
Gast
Auf sowas hätt ich auch kommen können. Es hat nur eine 0 gefehlt. Vielen 
Dank schonmal!

So lässt es sich rüberspielen.

#define   F_CPU 3686400
#include  <avr\io.h>


main ()
{
  TCCR1A |= (1<<COM1A0);  // Das Signal am Pin OC1 wird invertiert 
(Toggle).

  while(true)
  {

  }
}


Dieses Programm macht leider noch nicht sonderlich viel. Ich versuche 
hier die ganze Zeit einen einfachen Timer einzustellen, komme aber mit 
den ganzen Registern nicht klar.

Ich würde mich sehr freuen, wenn mir jemand sagen könnte wie ich auf 
einem Pin ein Rechtecksignal mittels Timer ausgeben kann.

Der Toggle Mode ist ja bereits eingeschaltet. Soweit ich weiß muss ich 
ihm jetzt nurnoch sagen wie weit er bis zu einem Neustart zählen soll 
und dass der Timer überhaupt gestartet wird.


Könnte mir vielleicht jemand einen Tip geben um WELCHE Register es sich 
hier handelt die ich ansprechen muss? Was ich in die Register dann 
reinschreiben muss werd ich versuchen selbst rauszufinden.


Vielen Dank!
Gast
Schnellanleitung:

Am besten, Du betreibst den Timer im CTC-Mode, denn dann kannst Du die 
Togglefrequenz auf Deinen Wunschwert einstellen.

Für den CTC-Mode musst Du das Bit WGM12 in TCCR1B einschalten. Ticken 
tut der Timer, sobald Du seinen Prescaler mit den Bits CS12, CS11, CS10 
auf einen Wert ungleich Null setzt, also z. B. 1, 8, 64 etc.

Damit der OC1A-Pin toggelt, muss das COM1A0-Bit in TCCR1A gesetzt und 
der Pin über das DDR als Output konfiguriert sein.

Für den CTC-Modus musst Du zusätzlich noch in das OCR1A-Registerpaar 
(OCR1AH:OCR1AL) einen Wert schreiben, der Dir gefällt. Erreicht der 
Zählerstand des Timers diesen Wert, so wird der Timer sebsttätig 
zurückgesetzt (von der Hardware). Je kleiner der OCR1A-Wert ist, desto 
höher ist die resultierende Togglefrequenz (maximal Systemtakt/2 mit 
Prescaler = 1 und OCR1A = 0).

Viel Erfolg! :-)

Antwort schreiben

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