Hallo,
ich möchte mit dem Counter 3 des ATMEGA2560 ein PWM Signal mit einem
Duty-Cycle von 50% erstellen, um eine LED blinken zu lassen. Der
Controller wird mit einem Quarz (16MHz) getaktet.
Ich habe nun das Problem, dass ich im Register TCCR3B maximal einen
Prescaler von 1024 einstellen kann. Damit ist die Frequenz allerdings
immer noch zu hoch, sodass es kein „schönes“ Blinken ist.
Gibt es eine Möglichkeit, den Takt des Timers 3 noch weiter
herunterzusetzen, ohne den Haupttakt von 16 MHz zu verändern?
Dul schrieb:> Ich habe nun das Problem, dass ich im Register TCCR3B maximal einen> Prescaler von 1024 einstellen kann. Damit ist die Frequenz allerdings> immer noch zu hoch, sodass es kein „schönes“ Blinken ist.
So what? Wenn es zu schnell blinkt, dann schaltet man halt einen
Software-Teiler via TOF-ISR nach. Das bissel Rechenzeit dafür ist doch
überhaupt kein Problem.
> Gibt es eine Möglichkeit, den Takt des Timers 3 noch weiter> herunterzusetzen, ohne den Haupttakt von 16 MHz zu verändern?
Nein, natürlich nicht.
Veit D. schrieb:> die Prescaler sind die Grobeinstellung und die Compare-Match die> Feineinstellung.
Ja, natürlich. Nur kann man leider mit dem Compare-Match nur in Richtung
höherer Frequenzen teilerisch tätig werden. Die Grenze nach unten setzt
der maximale Zählumfang des Timers. Der ist bei Timer3 eines 2560 halt
2^16, womit sich im CTC-Mode bei 16MHz und Prescaler 1024 eine minimale
Blinkfrequenz von ca. 0,12Hz ergibt. Wenn das dem TO zu schnell ist,
geht's nur mit Software-Postscaler langsamer.
Aber ich ahne natürlich, worauf du hinaus willst... ;o)
Ein Blinkintervall von ca. acht Sekunden kann eigentlich garnicht "zu
schnell" sein. Es ist also sehr wahrscheinlich, dass der TO den Timer
falsch benutzt, weil er zu faul ist, das DB zu lesen...
Hallo,
irgendwas wird noch nicht stimmen, offensichtlich.
Ist das ein nackter ATmega2560?
Oder ein Arduino Mega 2560?
Womit programmierst du den?
Welche Blinkfrequenz möchtest du haben?
Das wären die Antworten die mir noch fehlen und der aktuelle Code.
Bei 16MHz dauert ein Takt 62,5ns.
Bei einem Prescaler von 1024 dauert dieser Takt dann:
1024 * 62,5ns = 64us
Der Zaehler kann bis 2^16 - 1 zaehlen, also das Intervall [0, 65535].
Laesst man den Zahler komplett durchlaufen, dann sind wir bei:
64us * 65536 = ~4,2 sek.
Also Grob ~4,2 Sekunden bis der Zaehler ueberlaeuft.
Und das ist dir zum Blinken zu schnell? Dann zaehl mit, wie oft der
Timer uebergelaufen ist, und mache halt nur jedes x-te Mal etwas.
Dul schrieb:> Gibt es eine Möglichkeit, den Takt des Timers 3 noch weiter> herunterzusetzen
Indirekt. Indem du einen Timer Mode auswählst, bei dem du den Topwert
mit dem ICRx- oder OCRxA-Register einstellen kannst.
Kaj G. schrieb:> Der Zaehler kann bis 2^16 - 1 zaehlen, also das Intervall [0, 65535].
Das ist aktuell mein Problem. Ich kann ihn nur bis 1023 zählen lassen,
mit dem 10-bit PWM Modus.
Im Anhang ist ein Bild, in dem alle möglichen Modi dargestellt sind.
Hallo,
mal ganz ernsthaft ohne überheblich zu sein. Uns musst du sicherlich
nicht erzählen was der Timer so kann bzw. was man mit dem anstellen
kann. Du beantwortest keine einzige Frage, zeigst keinen Code. Woher
sollen wir wissen wo es bei dir klemmt und was du eigentlich einstellen
möchtest.
Apropo 10 Bit und kann nur bis 1023 zählen! Siehst du hier keinen
Zusammenhang? Wieviel ist denn laut deiner Meinung nach 2^10?
Ich helfe gern und ausführlich, aber so wird das nichts.
Dulfried W. schrieb:> Ich kann ihn nur bis 1023 zählen lassen,> mit dem 10-bit PWM Modus.
Und wer zwingt Dich denn dazu?
Du hast doch 15 andere Modi zur Auswahl.
Davon ganz abgesehen, nimmt kein einziger Programmiere eine PWM fürs
Blinken und anderweitige schnarchlahme Aufgaben.
Er setzt einen Timerinterrupt auf, z.B. 1ms und läßt darin beliebig
viele Zähler in Software zählen und Aktionen ausführen.
Veit D. schrieb:> Hallo,>> mal ganz ernsthaft ohne überheblich zu sein. Uns musst du sicherlich> nicht erzählen was der Timer so kann bzw. was man mit dem anstellen> kann. Du beantwortest keine einzige Frage, zeigst keinen Code. Woher> sollen wir wissen wo es bei dir klemmt und was du eigentlich einstellen> möchtest.
Och ne. Es steht doch eindeutig da, was das Problem ist: Er hat einen
16MHz-Quarz dran, hat den maximalen Prescaler von 1024 eingestellt und
sein Blinken ist immer noch zu schnell. Der Timer 3 kann auch nur auf
einen maximalen Zählumfang von 1024 eingestellt werden und trotzdem ist
das noch zu schnell.
So, jetzt könnt ihr anfangen zu helfen
Bär Luskoni schrieb:> Der Timer 3 kann auch nur auf> einen maximalen Zählumfang von 1024 eingestellt werden und trotzdem ist> das noch zu schnell.
Der Punkt wurde doch im Thread eindeutig herausgearbeitet: der maximale
Zählumfang kann auf 65536 gestellt werden, denn es handelt sich um einen
16Bit-Timer.
Man muss halt den Timer einfach nur in einem Modus benutzen, in dem das
möglich ist. Es stehen 15 Modi zur Verfügung und sage und schreibe 9
davon erlauben es, den vollen Zählumfang zu nutzen.
Die einzig mögliche und absolut zielführende Hilfe wurde also gegeben,
nämlich: Nutze einen dieser 9 Modi statt der offensichtlich für den
angestrebten Zweck ungeeigneten restlichen 6, bei denen der Zählumfang
halt auf 8..10 Bits begrenzt ist...
> So, jetzt könnt ihr anfangen zu *helfen*
Was erwartest du denn noch an Hilfe, nachdem alles Wesentliche längst
gesagt wurde?