Forum: Mikrocontroller und Digitale Elektronik Reload Value für Timer berechnen??


von Scott (Gast)


Lesenswert?

Hallo,

Wie berechne ich richtig den Nachlade-Wert (reload value) für den 8 Bit
Timer0 im 90s2313? (Betrieb mit 4 Mhz prescaler 256 gewünschte zeit
384us)

4Mhz/256=15625Hz

1/15625Hz=64µs

384µs/64µs=6

==>> der reload value ist 0xfa  (er zählt von 250 bis 255 bei 256
erfolg der overflow)

Jetzt die eigentlche Frage, warum bekommt das Program AvrCalc
eine Zeit von 416,67µs herraus???? Und nicht wie ich 384µs??

vielen Dank!!!

von Quark (Gast)


Lesenswert?

Hallo Scott,
wenn ich bei AVRCalc 384us eingebe, bekomme ich genau
deinen Wert raus (mit Prescaler 256).
Mal andersrum:

      5*64us = 320us  --->  3125,0  Hz
      7*64us = 448us  --->  2232,1x Hz

also für 416,x us ist 6 auch der beste Wert, wieso
AVRCalc dann diesen wählt, weiss ich auch nicht.
Ich kann nur die us vorgeben, aber nicht andersrum.
Wie hast du das gemacht? (AVRCalc 2.0)
Quark

wo finde ich das richtige u = my = mü Zeichen? Danke

von Scott (Gast)


Lesenswert?

Hallo,

also ich stelle AvrCalc 2.0 mit: 4 MHz und 256 Prescaler ein.

Jetzt möchte ich den reload Wert von folgenden Zeiten haben:

384µS -> reload value (TCNT0): 0xaf -> Zeit laut AvrCalc : 384µs

400µS -> reload value (TCNT0): 0xaf -> Zeit laut AvrCalc : 416µs

416µS -> reload value (TCNT0): 0xaf -> Zeit laut AvrCalc : 450,6µs

Wie kann das überhaubt möglich sein, dass ich für ein und denselben
reload value 3 verschiedene Zeiten rausbekomme. Mir ist das halt nur
mal irgendwann aufgefallen!

@Quark für das 'µ' Zeichen einfach:  alt Gr+m  ,drücken.

Vielen Dank,
Scott

von Scott (Gast)


Lesenswert?

Ups, da hat sich der Fehlerteufel eingeschlichen, die reload values
stimmen oben nicht. Es muss wie folgt heißen:


also ich stelle AvrCalc 2.0 mit: 4 MHz und 256 Prescaler ein.

Jetzt möchte ich den reload Wert von folgenden Zeiten haben:

384µS -> reload value (TCNT0): 0xfa -> Zeit laut AvrCalc : 384µs

400µS -> reload value (TCNT0): 0xfa -> Zeit laut AvrCalc : 416µs

416µS -> reload value (TCNT0): 0xfa -> Zeit laut AvrCalc : 450,6µs

Wie kann das überhaubt möglich sein, dass ich für ein und denselben
reload value 3 verschiedene Zeiten rausbekomme. Mir ist das halt nur
mal irgendwann aufgefallen!

@Quark für das 'µ' Zeichen einfach:  alt Gr+m  ,drücken.

Vielen Dank,
Scott

von anfänger (Gast)


Lesenswert?

hallo!

ich möchte meinem avr eine frequenz vorgeben und dieser soll dann
automatisch den richtigen prescale und den reload-wert einstellen. mit
was für ner formel kann ich das ausrechnen? über ein beispiel würd ich
mich sehr freuen! ps: ich progge in bascom und es geht um den
16bit-timer eines mega16.

mfg, anfänger.

von anfänger (Gast)


Lesenswert?

???

von anfänger (Gast)


Lesenswert?

jetzt sagt doch mal was leute!

ich weiß, is vielleicht ne blöde frage, aber ich komm einfach nicht
drauf.

von Profi (Gast)


Angehängte Dateien:

Lesenswert?

Kommt darauf an, in welchem Bereich sie liegen soll und wie genau Du die
Frequenz treffen willst.
Versuche, den Prescale-Wert möglichst klein und den Reload-Wert
möglichst groß zu wählen, damit Du eine feine Frequenzauflösung
erreichst.

min.Prescale-Wert berechnen:
Fclk  Fout  65535     auf die nächste 2er-Potenz aufrunden.
Reload-Wert berechnen:
Fclk  Pres  Fout

Wenns noch genauer gehen soll:
synthetisch erzeugen, hab ich gerade mit dem 68hc908 gemacht, geht
wunderbar.
Frequenzbereich hier z.B. 0,4394 .. 14400 auf 0,4394 Hz genau.
Motorola Application Notes AN1222 (Einton) und AN1771 (Zweiton).
http://www.mikrocontroller.net/forum/read-1-110222.html#110533
http://www.mikrocontroller.net/forum/read-1-17095.html#17103
http://www.freescale.com/files/microcontrollers/doc/app_note/AN1222.pdf
http://www.freescale.com/files/microcontrollers/doc/app_note/AN1771.pdf
Im Anhang eine quick&dirty Testversion (überarbeitete Version der AN).

von anfänger (Gast)


Lesenswert?

oh cool. danke!

also die frequenz soll so zwischen 0.25Hz und 10Hz liegen.

leider versteh ich nicht wirklich assemblerisch, sondern nur bascomisch
oder vielleicht noch ein wenig cisch :-)

hm, irgendwie stimmt die formel für den reloadwert nicht. oder ich bin
zu blöd.
beispiel:

16.000.000/1024/0,25 = 62500 (also ich will auf 0,25Hz kommen)

der timer-berechner von rnAVR gibt mir da 3036 als relaodwert aus.

von anfänger (Gast)


Lesenswert?

ah, bin schon selbst drauf gekommen. es muss heissen:

65536-(Fclk/Pre/Fout)

dann kommt auch das selbe wie bei rnAVR raus. danke nochmal für deine
hilfe!

greetz, anfänger

von Andi (Gast)


Lesenswert?

Und was für ein Counter ist das?
Ein AUFWÄRTSZÄHLER!
Wie viele mögliche Zahlen gibt es bei 16 Bit?
65536!
Also, 65536, bzw. nach 65535 + 1 gibs einen Überlauf (Overflow), also
geht er danach auf 0.
Bei 65536 - 3036 kommst Du auf die errechneten 62500 die Du einsetzen
mußt.
Oder Du machst ein - (minus) davor und setzt dann -3036 ein:

 ldi r16,low(-3036)
 out TCNT1L,r16
 ldi r16,high(-3036)
 out TCNT1H,r16

Der Assembler mach aus den -3036 dann 62500.

Gruß
Andi

von Andi (Gast)


Lesenswert?

Sorry, Du warst wohl doch schneller als gedacht!

Gruß
Andi

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
Noch kein Account? Hier anmelden.