Hallo Miteinander
Ich betreiben momentan meinen ATMEGA88 mit einem externen 11.0592MHz
Quarz. Dies aus dem Grund, da ich per UART mit einer Baudrate von 115.2k
kommuniziere und so einen Error von 0% habe.
Nun brauche ich eine genaue Zeitbasis. Ich möchte, dass mein Timer für
einen Schritt genau 1us braucht. Leider ist dies aber mit dem aktuellen
Systemclock und den verfügbaren Prescalern nicht möglich. Ich habe schon
daran gedacht, dem Timer einen externen Clock zur Verfügung zu stellen,
leider habe ich aber nur einen 8MHz und keine 1MHz Quarz zur Hand.
Welche Möglichkeiten hätte ich? Ich möchte den 8MHz Quarztakt nicht mit
externer Hardware runterteilen.
Besteht die Möglichkeit, einen externen und internen Takt zu verwenden,
sprich ich verwende für UART den externen 11.0592 und für den Timer den
internen 8MHz, welcher sich mit dem Vorteiler 8 auf 1MHz teilen lässt.
Grüsse Shean
Würde natürlich gehen. Dafür bräuchte ich aber trotzdem einen externen
Takt. Da ich sowieso zwei Takte brauche, würde ich mir lieber den
mehraufwand beim Programmieren schenken, welcher beim CTC Mode anfallen
würde. Klar ist der Aufwand nicht riesig, aber habs halt lieber
einfach;)
Hab gesehen, dass UART auch mit einem externen Clock betrieben werden
kann am XCK Pin. Sollte eigentlich klappen, wenn ich den uC mit 8MHz und
den UART mit externen 11.0592MHz rennen lasse, oder?
Grüsse
spess53 schrieb:
> Da muss man vielleicht Kompromisse machen:
Wenn ichs schon ganz genau haben kann, dann mach ich dies auch;) Zudem
habe ich diese Quarze nicht zur Hand.
Shean schrieb:
> Würde natürlich gehen. Dafür bräuchte ich aber trotzdem einen externen> Takt. Da ich sowieso zwei Takte brauche, würde ich mir lieber den> mehraufwand beim Programmieren schenken, welcher beim CTC Mode anfallen> würde. Klar ist der Aufwand nicht riesig, aber habs halt lieber> einfach;)
Welcher Mehraufwand?
Ein Bit im Konfigurationsregister setzen und den gewünschten
Overflow-Wert einem Register zuweisen. Fertig.
> Da ich sowieso zwei Takte brauche
Timer 1 kann CTC
Timer 2 kann CTC
> Hab gesehen, dass UART auch mit einem externen Clock betrieben werden> kann am XCK Pin. Sollte eigentlich klappen, wenn ich den uC mit 8MHz und> den UART mit externen 11.0592MHz rennen lasse, oder?
Und das ist kein Mehraufwand :-)
In der Zeit in der du den Quarz aus dem Säckchen auspackst, hast du
beide Timer längst auf CTC umgestellt :-)
Hi
>Würde natürlich gehen. Dafür bräuchte ich aber trotzdem einen externen>Takt.
Wieso? Der Baudratenfehler der Beispiele liegt im grünen Bereich und
dein Zeitsignal stimmt 100%ig. Mit einem Takt.
MfG Spess
Karl heinz Buchegger schrieb:
> Und das ist kein Mehraufwand :-)> In der Zeit in der du den Quarz aus dem Säckchen auspackst, hast du> beide Timer längst auf CTC umgestellt :-)
Hmm muss ja sowieso dem Timer einen zweiten Clock zur Verfügung stellen,
da ich sonst nie auf 1us komme, oder stehe ich da nun auf dem Schlauch?
spess53 schrieb:
> Wieso? Der Baudratenfehler der Beispiele liegt im grünen Bereich und> dein Zeitsignal stimmt 100%ig. Mit einem Takt.
Ja, ist mir klar. Leider habe ich aber keine entsprechenden Quarze in
der Nähe. Nur einen 8MHz und den 11.0592MHz.
Shean schrieb:
> Karl heinz Buchegger schrieb:>> Und das ist kein Mehraufwand :-)>> In der Zeit in der du den Quarz aus dem Säckchen auspackst, hast du>> beide Timer längst auf CTC umgestellt :-)>> Hmm muss ja sowieso dem Timer einen zweiten Clock zur Verfügung stellen,> da ich sonst nie auf 1us komme, oder stehe ich da nun auf dem Schlauch?
Mein Fehler. Hab nicht richtig gelesen.
Ich ging davon aus, dass du alle 1µs etwas tun willst. Du willst ja nur,
dass dein Timer alle 1µs um 1 hochzählt.
Prescaler 1
Modus 4, CTC (WGM12, alle anderen 0)
OCR1A auf 11
und dann sollte der Timer eigentlich seinen Overflow alle 1µs erreichen
(wenn ich mich nicht verrechnet habe)
Hmm.
Wozu brauchst du das eigentlich. Wie man sieht hat der µC gerade mal 11
Prozessortakte Zeit um alle 1µs etwas zu tun (Genau genommen 11.059
Takte. Aber so kleinlich wollen wir nicht sein). Und das wird zu wenig,
als das man da noch einen Softwarezähler implementieren kann.
Karl heinz Buchegger schrieb:
> Prescaler 1> Modus 4, CTC (WGM12, alle anderen 0)> OCR1A auf 11>
Das weiss ich schon, aber so bekomme ich nicht wirklich genau 1us,
sondern 1.085. Und es sollte schon genau eine sein.
> und dann sollte der Timer eigentlich seinen Overflow alle 1µs erreichen> (wenn ich mich nicht verrechnet habe)>> Hmm.> Wozu brauchst du das eigentlich. Wie man sieht hat der µC gerade mal 11> Prozessortakte Zeit um alle 1µs etwas zu tun (Genau genommen 11.059> Takte. Aber so kleinlich wollen wir nicht sein). Und das wird zu wenig,> als das man da noch einen Softwarezähler implementieren kann.
Es ist nicht so, dass ich jede us etwas tun möchte. Vielmehr möchte ich
eine Variable Zeitbasis generieren, indem ich zum Beispiel 500 in eine
Variabel lade und die dann dazu führt, dass alle 500us ein Interrupt
ausgelöst wird. Strebe halt nur eine Auflösung von 1us an, heisst aber
nicht, dass jede us etwas gemacht wird.
Shean schrieb:
> eine Variable Zeitbasis generieren, indem ich zum Beispiel 500 in eine> Variabel lade und die dann dazu führt, dass alle 500us ein Interrupt> ausgelöst wird.
Dann ist doch CTC perfekt für dich.
500 * 11.0592 = 5529.6 also 5529 ins OCR und du hast deinen
Interrupt-Takt
> Strebe halt nur eine Auflösung von 1us an, heisst aber> nicht, dass jede us etwas gemacht wird.
Unter einer gewissen Grenze macht es sowieso keinen Sinn mehr, weil ja
nichts mehr an Taktzyklen übrig bleibt
Und wegen der 0.6
Du glaubst doch nicht im Ernst, dass dein Quarz exakt 11059200 Herz hat
:-) Genausowenig wie ein 8Mhz Quarz exakt 8000000 Schwingungen/Sekunde
macht. Sich wegen einer halben Schwingung, die fälschlich gezählt oder
nicht gezählt wird aufzuregen, bringt nichts. Da ist dein Quarz sowieso
nicht genau genug.
Karl heinz Buchegger schrieb:
> Und wegen der 0.6> Du glaubst doch nicht im Ernst, dass dein Quarz exakt 11059200 Herz hat> :-) Genausowenig wie ein 8Mhz Quarz exakt 8000000 Schwingungen/Sekunde> macht.
Überredet, ist wohl am einfachsten so;)
Wie schade, dass man nicht einfach von idealen Bauteilen ausgehen kann,
würde einem ziemlich viel Ärger ersparen;)
Grüsse & Danke.
@Shean (Gast)
>Überredet, ist wohl am einfachsten so;)>Wie schade, dass man nicht einfach von idealen Bauteilen ausgehen kann,>würde einem ziemlich viel Ärger ersparen;)
Schade dass die Leute ausser plärren und rummosern nix können und immer
in ihren akademischen Luftschlössern schweben . . .