Ja, das würde gehen.
Allerdings würde
ich es nicht mit Bascom machen.
Da machst da folgendermaßen: Du berechnest die Registerinhalte für den 16-Bit-Timer, sodass du z.B. sehr kleine Frequenzen mit großen Periodendauern bekommst:
Frequenz = Taktfrequenz / (Vorteiler * Vergleichsregister)
Die Periodendauer ist dann der Kehrwert der Formel.
Periodendauer = (Vorteiler * Vergleichsregister) / Taktfrequenz.
Das berechnest du so, dass ein grader Wert rauskommt.
Dann machst du ne statische Variable / globale Variable, die bei jedem Timer_Compary_Match-Interrupt inkrementiert wird. Nach der Inkrementierung wird sie dann mit einem fixen Wert verglichen. Ist dieser Wert erreicht, wurde sie x-mal hochgezählt. Das musst du eben ausrechnen, welchen Wert sie dann haben muss, wenn 16h vergangen sind.
Beispiel:
Vorteiler: 1024
OCR-Register: 0xFFFF
CPU-Takt: 16MHz
größte mögliche Periodendauer:
T=(1024 * 0xFFFF)/16*10^6Hz~~4,19s
Wenn du die Formel umstellst, dass ein grader Wert herauskommt, dann musst du x-mal deine Variable hochzählen, bis x-mal der Timerwert dem Vergleichswert entsprach.
Sry, ich habe grade Formulierungsprobleme ^^
Edit: Angenomme, du erhälst eine Periodendauer von vier Sekunden. Dann muss der Fixvergleichswert: 16h/4s=0xE100 sein.
@Racingsascha:
Es macht absolut keinen Sinn, das mit Verzögerungsschleifen zu machen.
Wenn du das machst, dann ist der µC quasi abgestürzt für 16h. Es würde prinzipiell gehen, wenn man ext. Interrupts nutzt, aber ich würde gerne sehen, wie du eine Schleife rel. exakt berechnest mit einer Periodendauer von 16h.
Möglich ist das natürlich, aber die Formel zur Berechnung will ich nicht sehen.
Einfache Verzögerungen ala
ldi xl, wert_l
ldi xh, wert_h
sbiw xl, 1
brne pc-1
sind leicht. Man kann sie sogar exakt berechnen. Aber wenn man sie kaskadiert, dann lassen viele die Call- und Rücksprungvorgänge außer acht.
Man kann sie auch mit in die Formal packen, habe ich auch schon gemacht, aber irgendwann ist es ziemlich sinnlos. Wozu gibt es denn die Timer
_________________
[ Diese Nachricht wurde geändert von: DonComi am 24 Jun 2007 16:36 ]