Forum: Mikrocontroller und Digitale Elektronik 16bit Timer 1 decementieren


von Christian B. (Gast)


Lesenswert?

Hallo Leute,

ich habe gerade alle möglichen Codebeispiele hier im forum
durchforstet, doch bei der Masse an Beispielen, kann ich mir nicht das
rechte zusammenreimen.

Ich möchte folgendes tun:

 - eine Spannung mit dem internen ADC eines Mega32 einlesen
 - der ADC wert soll in den Timer geladen werden
 - der Timerwert soll herunterzählen
 - während ich das TOV1-Flag polle
    - nachdem TOV1 == 1
    - soll mein Programm weiterlaufen/ (es soll wirklich für die Zeit
      des Timers stoppen)


Was ich bis hierhin schon in Erfahrung gebracht habe, ist:

1. globale Interrupts einschalten
2. Timer-Interrupt einschalten
3. Prescaler setzen
4. High und Low-Register laden

Was ich nicht weis/ gern wissen möchte.

Was ich nicht weis, wie ich den Timer im Normalbetrieb herunterzählen
lassen kann. Denn, da meine Anwendung sehr schnell ablaufen muss, denke
ich, dass es einfacher ist für den Timer auf NULL zu vergleichen, statt
auf irgend einen bestimmten wert.

Welche Betriebsart muss ich einsetzen, für den Fall des
herunterzählens? Ich denke mir schon, dass es eine Capture betriebsart
sein muss. Am besten wäre es aber für mich, den T1 einen wert und
Prescaler zu geben und das TOV1 abzufragen.
Wenn das geht wärs schön, wenn mir einer sagen könnte wie, wenns geht
würde ich mcih über ein kurzen C-Beispiel-code freuen.

best regards
littlecb

von crazy horse (Gast)


Lesenswert?

Normalerweise zählen die Timer immer aufwärts (ausser in diversen
PWM-Modi). Ist aber kein Problem: Das/die Zählregister mit dem Wert
65536-Sollwert laden.

von Christian B. (Gast)


Lesenswert?

@horse

danke für deine hilfe, doch ich glaube meine Threadbezeichnung hab ich
etwas dumm gewählt. du dachtest nämlich ich möchte den Timer mit genau
dem wert EINS laden. das stimmt nur bedingtvon 1 bis 65T soll alles
drin sein, je nach dem welche spannung eben anliegt.

Für mich ist die Aufgabe die, den Timer erstmal in die richtige
Betriebsart für meine Anwendung zu bekommen(korrekt zu
initialisieren).
Und dann möchte ich ihn auch korrekt betreiben... wann startet er mit
zählen, Welche Flags werden wann gesetzt und so weiter. Da ich aber
nicht nur diese eine Aufgabe zu bewältigen habe kam ich auch noch nicht
dazu das Tutorial hier im Forum ernsthaft zu durchforsten, obwohl es
schon in Verbindung mit dem Datenblatt eine Menge hergibt.

cu later
littlecb

von crazy horse (Gast)


Lesenswert?

nö, habe ich schon richtig verstanden, glaub ich zumindest.
Angenommen, du willst exakt 4000 abwärts zählen, also einen abwärts
laufenden Zähler mit 4000 laden und bei 0 eben fertig. Geht aber nicht,
da der Zähler nun mal aufwärts zählt.
Die Alternative: Den Zähler mit 65536-4000=61536 laden, bei Überlauf
sind dann auch 4000 Zählertakte vergangen - wo ist dein Problem?

von Karsten (Gast)


Lesenswert?

dein adc spuckt dir doch maximal eh nur 10Bit raus..also kannst du
zahlen bis 65T sowieso nicht laden....
entweder so wie mein vorredner das beschreibt machen
(sind schliesslich nur 2 befehle mehr für die subtraktion) oder
alternativ ein comparematch nutzen

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.