mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Timer/Counter


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Björn R. (sushi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

~

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

~

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ruhig Blut Sascha, das ist SinusGeek art. :)

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

~

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.