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!
Schau ins Datenblatt von deinem Controller. Vermutlich heisst das Register dort anders. Oliver
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!
TCCR1A und TCCR1B. PS: Datenblatt ab Seite 131. PPS: Mit drei Stunden Herumprobieren kann man sich oft 10 Minuten Datenblattstudium ersparen... ;-)
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! :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.