PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage zu Timern (Atmega 8) und Delay



Grottenolm
27.09.2010, 12:32
Hallo zusammen.
Es ist eine weile her das ich mich mit µC beschäftigt habe und es hat sich so manches aus dem Gedächtnis verabschieded.
Zum Thema: Ich habe(oder werde haben) einen Atmega 8 der bei 16Mhz vor sich hin laufen soll. Wenn ich das der dokumentation richtig entnehme kann man bei den Timern mit einem Prescaler z.B. jeden 64. Takt auf den Pin ausgeben der diese Nummer trägt (D4, B6, B7?) ohne das man das im laufenden Programm nocheinmal anweisen muss.
Jetzt möchte ich verschiedene Frequenzen ausgeben die leicht versetzt sind.
z.B. 200kHz an PB6 und PB7, wobei PB7 z.B. die positive Flanke 1µs später hat. Wie würde man so was am dümmsten einstellen? Ich hätte jetzt mal vermutet das ich bein initialisieren des Timers PB7 20 CPU-Takte später einschalte als PB6?
Ich würde mir dafür wohl eine Timer-funktion schreiben müssen mit der ich einzelne CPU-Takte abwarten kann?
Danke schonmal für alle Anregungen

walterk
28.11.2010, 08:44
Hallo Grottenolm,

einige Möglichkeiten von vielen:

16 MHz + Prescaler 8 ergibt 2 MHz
Für 200 kHz lässt du den Timer bis 10 zählen

oder

16 MHz + Prescaler 1
Für 200 kHz lässt du den Timer bis 80 zählen

danach entweder Normal Mode mit vorladen des Counterregisters oder CTC Modus mit Auslösen einer ISR, wenn 10 oder 80 erreicht.

In der ISR:
- wackle mit beliebigem Portpin
oder
-setze Jobflag
oder
-tue was auch immer
warte 1µs mit delay oder nop (grundsätzlich in einer ISR nicht empfehlenswert!)
-tue das, was du 1µs später tun willst

mfg
Walter