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
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.
@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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.