Forum: Mikrocontroller und Digitale Elektronik Frage zu Timer/Counter


von Sascha (Gast)


Lesenswert?

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 ;)

von Matthias L. (Gast)


Lesenswert?

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?

von Björn R. (sushi)


Lesenswert?

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.

von Sinusgeek (Gast)


Lesenswert?

> 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).

~

von Sascha (Gast)


Lesenswert?

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.

von Sinusgeek (Gast)


Lesenswert?

> 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.

~

von Peter D. (peda)


Lesenswert?

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

von Sascha (Gast)


Lesenswert?

@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 ;)

von Gast2 (Gast)


Lesenswert?

ruhig Blut Sascha, das ist SinusGeek art. :)

von Sinusgeek (Gast)


Lesenswert?

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