PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom ATMEGA8 Timer1 Berechnung für 1 sek



x-ryder
30.08.2004, 09:42
Hi Leutz,
Ich hab so meine Probleme mit Timern!

Kann mir jemand sagen, wie man einen Reloadwert an dem Beispiel:

Quarz: 7.273800 MHz
Zeit: 1 sek
Am besten Timer1

erklären.

Ich kanns auch selbst rechnen, aber ich weiß eben nicht wie... 8-[

Vielen Dank für eure Hilfe im Vorraus

Martin

30.08.2004, 09:50
Ist zwar C und nicht Bascom, aber das Prinzip sollte dasselbe sein:
https://roboternetz.de/phpBB2/viewtopic.php?p=28310#28310

Hättest du aber auch leicht finden könne, weil der Thread ganz oben steht ...

30.08.2004, 10:11
Hallo,

Ich bin leider nicht ganz so gut im Einheitenrechnen....

Könntest du mir das auch nochmal für mein Beispiel rechnen?

Ich habe mich überigens vertan, ich möchte 1 ms Takt haben nicht 1 sek.

Martin

30.08.2004, 11:19
Inwiefern?

Kannst du nicht mit Zehnerpotenzen umgehen oder weißt du nicht, dass die Einheit Hertz einfach der Kehrwert der Sekunde ist? Dann schau mal in dein Tafelwerk (zu meiner Zeit hatte man sowas in der Schule), da stehen viele nützliche Sachen drin.
Dir den Kram vorzurechnen macht relativ wenig Sinn, weil so der Lerneffekt quasi gleich Null ist. Und wenn du nichts lernen willst, dann lass den Kram einfach bleiben, es gibt soundso viel schönere Sachen im Leben.

E-Fan
31.08.2004, 11:14
Den letzten Post streichen wir mal. Dieses "machs ganz oder gar nicht" Gesülze kann ich auf den Tod nicht ausstehen!
@x-ryder:
Der Quarz schwingt 7 273 800 mal pro sekunde.
Der Controller demnach auch weil der Takt nicht vorgeteilt wird.
Nach Adam Riese ist ein Taktzyklus 1/7 273 800s (0,1347µs) sekunden lang.
Nun muß man den Prescaler (Vorteiler) in "Config Timer1...." so einstellen, das der Timer1 maximal 65535mal zählt und innerhalb dieses Vorgangs 1Sekunde verstreicht.
Gültige Werte sin 1,8,64,256 und 1024.
Jetzt kommt die kleine Rechnerei:
Man multipliziert die Zykluszeit mit dem Wert für den Prescaler. (ich nehm einfach ma 256 als Wert an)

0,1347µs * 256 = 35,1988µs.

Nun dividiert man 1 durch dieses Ergebniss.

1/0,0000351988s = 28413,28125

Der Controller kann nur Ganze Zahlen verarbeiten, also rundet man hier ab und es dauert etwas weniger als eine Sekunde, oder man rundet auf und es dauert etwas länger als eine Sekunde bis das Timeroverflowflag die Interruptroutine einleitet.
Dazu muss man aber dem Timer sagen wo er beginnen soll zu zählen.
Dazu subtrahiert man den oben errechneten Wert von 65535.

65535 - 28413 = 37122

Der erste Befehl in der Interruptroutine muss dann

Timer1 = 37122

lauten, und diese Routine wird dann in dem oben ausgerechneten festen Zeitintervall durchgeführt.

mfG aus P
der E-Fan

31.08.2004, 11:30
Wenn ich versuche eine Applikation zu entwerfen und keinerlei Eigeninitiative zeige, dann muss er mit so einer Reaktion rechnen. Hätte er mir gesagt, wo es genau bei ihm hängt oder was er nicht vestanden hat, hätte er natürlich auch Hilfe erhalten.
Von machs ganz oder garnicht war nie die Rede. Ich habe nur die Frage gestellt: "Warum etwas machen, wozu man eh keine Lust hat?".
Das du ihm das verlinkte Beispiel mit vertauschten Zahlen nochmal verkaust zeigt mir aber wenigstens, dass du es verstanden hast :)
Da er jedoch immer noch einen Takt von 1ms benötigt (nicht 1s !!!), wird ihm dein Beispiel wohl auch nichts nützen ...

31.08.2004, 13:35
Okey... ist von uns beiden etwas krass ausgedrückt worden. Meiner Meinung nach sollte man sich - der eigenen Nerven wegen - solche Posts sparen (einfach drüber hinwegsehen) oder effektiv zur Lösung beitragen.
Ich hab in einem anderen Forum auch sowas erlebt weil ich es wagte meine Frage als blutiger Bascomanfänger versehentlich im falschen Thread und im falschen Forum zu stellen. Anstatt mir zu sagen wo ich eine Lösung finden könnte weil ich an der falschen Stelle gelandet sei hackten zig selbsternannte AVR-GCC-"Profis" mit Sprüchen wie "...falsches Forum..." "...was willste den mit dem Scheiß..." oder "...lern lieber was richtiges..." auf mir rum. Seit dem reagier ich mit allergisch auf solche Kommentare und meide dieses Forum in dem sich das Szenario abspielte.
Klar... wenn einer ganze Progs haben will schalte ich auch auf stur. Aber Wenns um die Benutzung einzelner Befehle geht und der gleiche Foriker nicht ständig andere Anweisungen erklärt haben will anstatt in der Hilfe nachzuschauen ist das in meinen Augen was anderes.

mfG aus P
der E-Fan

Frank
31.08.2004, 14:06
Hi,

ja es wäre schön wenn man mit Anfängern etwas gedultiger ist. Ich denke das ist bislang auch eine Eigenschaft die das Roboternetz auszeichnet.
Forum in denen jeder zweite Satz "lies im Datenblatt nach" oder noch grassere Sätze formuliert werden gibt es genug. Jeder sollte bedenken das man mal ähnlich angefangen hat.

Dennoch sollten natürlich Neulinge als erstes mal einige Thread lesen und die Suchfunktion nutzen um die Frage zu lösen. Das wiederholende Antworten nicht sonderlich Spaß machen, sollte man auch bedenken. Manchmal ist daher ein Link auf einen Thread mit passender Antwort auch sehr hilfreich.
Also wenn sich Fragesteller und Experten genauso Mühe geben, dann macht das Forum beiden noch mehr Spaß.

Gruß Frank

Frank
01.09.2004, 00:46
Hallo x-ryder,

da öfters nach Timer-EInstellungen gefragt wird, hab ich mal ein hilfreiches Tool dafür geschrieben. Es berechnet nicht nur die Timerwerte sondern erzeugt auch dokumentierten Quelltext. Ich denke das hilft Einsteigern auch wieder ein Stück weiter.

Schaus Dir mal an. Es kann für fast alle AVR´s benutzt werden
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169