PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer im Atmega8



RomeoAdrian
30.05.2007, 10:17
Hallo ich versuche seit 1 woche timer zu programmieren ich schaffe es nicht.
Die timer soll so programmiert,dass bei alle unter angegebenen frequenzen entsprechen 20us(bei 16Mhz und vorteiler 64) oder alle angegebenen frequenzen über 160 us soll dass programm nicht laufen aber mit der Frequenze da zwischen soll es laufen:
--Nur laufen bei 20 us<= freq<=160 us.

Kann mir jemand helfen, mit assembler. AVR studio?
danke

wkrug
30.05.2007, 20:39
Ich weiß nicht ob ich deine Frage zu 100% verstanden habe.

Dü möchtest also eine Schaltung entwerden, bei der nur mit Quarzen bestimmter Frequenz läuft (6...50kHz).

Solange Du nur mit der internen Taktfrequenz mit Vorteiler arbeitest wird das nicht funktionieren.
Da alle internen Abläufe des Controllers aus der selben Taktquelle gespeist werden, kann der Controller nicht erkennen wie hoch dieser Takt ist.
Um so etwas zu realisieren brauchst Du eine Referenztaktquelle.
Die könnte man durch eine Einspeisung einer sich nicht ändernden Frequenz auf dem T0 bzw. T1 Pin erreichen.
Dieser Eingang steuert einen weiteren Timer an, der periodisch den anderen Timer ausliest und errechnet wie "schnell" dieser läuft.
Ist dieser Wert innerhalb der von Dir vorgegebenen Grenzen wird ein Flag gesetzt, das deine Routine freigibt. Ansonsten wird das Flag nicht gesetzt und die Routine nicht ausgeführt.
Eine Trickserei mit dem Watchdog Timer wäre auch denkbar, da dieser mit einer eigenen Taktquelle läuft. Allerdings ist dieser Timer sehr ungenau und der Controller wird dabei immer wieder neu gestartet (RESET).


Falls Du es andersrum brauchst !
Wenn es darum geht eine externe Frequenz von 6...50 khz zu erkennen, kannst Du natürlich auch die Quarzfrequenz des Controllers als Referenz verwenden.
Die externe Frequenz zählt dabei einen Timer hoch, der dann Zyklisch durch einen anderen Timer, der dann vom Controller Quarz gesteuert wird, abfragt.