Hallo, hab mal ne Frage zum Betreiben eines Timers als Counter. Wie kann ich den Triggern, damit der Hochzählt? Ich bin grad am Verweifeln ;) Folgende Aufgabenstellung: EIn Blinklich soll mit einer Freuqenz von 2Hz blinken und es sollen Timer benutzt werden. Meine Idee: Da ich die 2 Hz mit einem 16Bit timer nicht mit einem durchlauf erreichen kann, lasse ich Timer0 50.000 mal hochzählen (als Timer) und Trigger im Interrupt des Timers den Timer1, der als Counter läuft (reload modus) und nach 10 "Triggerings" in die Interruptroutine springt und dort das Licht an, bzw ausschaltet. So erreiche ich mein 0,5 ms. Der Timer 1 läuft und die Interrupt-Routine wird auch aufgerufen. Für Hinweise wäre ich dankbar ;)
Das >Wie kann ich den Triggern, damit der Hochzählt? beißt sich mit dieser Aussage: >Der Timer 1 läuft und die Interrupt-Routine wird auch aufgerufen. Also. Nochmal. Was ist dein Problem?
Den Timer als Counter benutzt man, wenn man externe Signale ohne Software-Aufwand zählen will. In deinem Fall lege einfach eine 16bit-variable an und zähle diese in deinem Timer-Interrupt hoch.
> Folgende Aufgabenstellung: EIn Blinklich soll mit einer Freuqenz von 2Hz > blinken und es sollen Timer benutzt werden. Die Formulierung dieser Aussage suggeriert mir, dass hier wieder mal Jemand einen Dummen sucht, der ihm die Hausaufgaben macht. Schau in die Dokumentation des zu verwendenden Systems, da gibt es mit Sicherheit ein Kapitel über den/die Timer/Counter. Dort erfährst Du z.B. was der Zähler (denn mehr ist das erstmal nicht) zählen kann (z.B.CPU-Takte, direkt oder über Vorteiler, extern an einem speziellen Pin anliegende Pegelwechsel) und welche Interrupts der Zähler unter bestimmten Bedingungen auslösen kann (Überlauf, Compare). ~
Hallo, nein, ich suche keinen Dummen der mir eine Hausaufgabe macht - weil es keine Hausaufgabe ist. Die Aufgabenstellungs war eben, dass wir einen Timer benutzen sollen. Die Idee zusätzlich Timer1 als Counter zu benutzen ist nicht Teil der Aufgabe. Ich wollte es so lösen, um die Timer besser kennenzulernen. Also vollkommen freiwillig ;) Wg dem was sich beißt, meinte ich, dass der Timer0 läuft ;) Ok, also kann ich einen Counter nicht manuell takten, indem ich irgendein Bit setze. Das ist alles was ich wissen wollte. Dass ich ihn extern Triggern kann wusste, habe ich auch gelesen, aber das hat mir bei meiner Aufgabenstellung nicht geholfen. Dann ist es wohl wirklich das einfachste eine 16-Bit Variable anzulegen, oder ein Register hochzuzählen und manuell in eine Routine zu springen, wenn diese den Wert 10 erreicht.
> Die Aufgabenstellungs war eben, dass wir einen Timer benutzen sollen. ^^^^^^^^^^^^^^^^ ^^^^^^ Eben das meine ich, Du machst es weil Du es sollst und nicht, weil Du es willst oder möchtest . Dabei ist es irrelevant, ob Du darauf eine Note bekommst oder nicht. Für eine bessere Antwort wäre es vielleicht hilfreich, wenn Du mal das System nennen würdest. Deine Frage könnte nämlich viele verschiedene Einchip-Mikrocontroller betreffen, vielleicht auch Mehrchip-Systeme mit CPU und Peripherie. Ich vermute zwar, dass Du einen AVR meinst, aber auch da gibt es recht große Unterschiede beim Funktionsumfang der Timer. Ich könntwe mir jetzt einen Typ aussuchen (z.B. Mega8), doch dann kommt hinterher vermutlich sowas wie: "April-April, ich habe aber 8051 (oder PIC)...". Das muss ich nicht haben, stelle ordentliche Fragen, dann bekommst Du vielleicht auch ordentliche Antworten. ~
Sascha wrote: > Dann ist es wohl wirklich das einfachste eine 16-Bit Variable anzulegen, > oder ein Register hochzuzählen und manuell in eine Routine zu springen, > wenn diese den Wert 10 erreicht. Ja das ist der übliche Weg, man nimmt im Timerinterrupt ne weitere Zählvariable. Sie muß aber nicht 16 Bit sein, 8 Bit reicht völlig, um bis 10 zu zählen. Peter
@SinusGeek 1. Niemand hat mich gezwungen diese Aufgabe zu lösen, ich hoffe das ist soweit verständlich - Es ist eine alte Prüfungsaufgabe, die ich FREIWILLIG zu Übungszwecken lösen wollte. 2. Es ging nicht darum, dass ich die Aufgabe nicht lösen könnte (mit Zählvariable ist es für mich kein Problem), es ging darum zu erfahren, ob die alternative Möglichkeit über einen Counter besteht sorry, ist ein 8051, habe ich vergessen reinzuschreiben Thema kann geschlossen werden Danke an alle, die nicht gleich mit nem Holzhammer völlig unnötig auf einen losgehen ;)
> ruhig Blut Sascha, das ist SinusGeek art. :)
Musst mich nicht beschützen, ich kann das ab. Wer (mit Humor) austeilt,
der muss auch genug Humor haben, das (unbeschadet) einstecken zu können.
~
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.