www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16bit Timer 1 decementieren


Autor: Christian B. (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Christian B. (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

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.