Guten Abend Forum:-)
Bin leider überfordert.
Also wenn der Timer laufen beginnt, dann soll ein Ausgang (Portb) auf
high gehen. Bei dem 200sten Takt soll er dann auf low gehen.
Dann soll er weiter auf 2000 Takte hochzählen, damit er dann in den
timer overflow springt.
Ist das mit dem Timer 2 oder generel mit dem AVR möglich?
Programmiere in asm mit dem Mega8
Danke für eure Hilfe
LG Stefan
Timer2 ist nur 8 Bit breit. Deine Aufgabe erfordert also etwas mehr
Software...
Man könnte ihn im CTC-Mode (TOP =199 setzen) betreiben und in der
zugehörigen ISR dann mit einer weiteren Variablen die Durchläufe zählen.
Sollte also eigentlich kein Problem sein.
Dein "timer overflow" musst du dann aber per Hand "auslösen".
"Also eigentlich will ich folgendes machen..."
Tipp: Nicht zulange damit warten. Wenn die Leute ihr Interesse an einem
Thread verloren haben, ist es meist vorbei.
Hi
>ausgang setzen, 200 nop's und optimierung aus ;-)
Besonders der Teil mit der Optimierung in ASM ist interessant.
>Also wenn der Timer laufen beginnt, dann soll ein Ausgang (Portb) auf>high gehen.
Der Timer läuft los, wenn eines der CS2x-Bits in TCCR2 gesetzt wird.
Also hast du das selbst in der Hand.
>Dann soll er weiter auf 2000 Takte hochzählen, damit er dann in den>timer overflow springt.
Das ist ein 8-Bit-Timer. Und der kann nur von 0..255 zählen.
>Ist das mit dem Timer 2 oder generel mit dem AVR möglich?
Ja, aber nicht in einem Rutsch. Solltest OCRx auf z.B. 200 setzen und
die Anzahl der Interrupts in einer Variable zählen. Beim Erreichen von
2000 die Aktion auslösen.
MfG Spess
Also ich möchte mit dem mega 8 einen Servo ansteuern.
Laut Datenblatt sollen alle 20ms das Signal neu gesendet werden. Also
alle 20000 Takte @ 1MhZ. (Sorry, nicht 2000).
Und um die Stellung des Servos anzufahren muss am Anfang ein high Signal
zwischen 1 und 2ms gesendet werden. 1ms ist ja dann links 1,5ms die
Mitte und 2ms ist dann rechts.
So und um die Stellungen anzufahren z.B. die Mitte, dann sollte die pwm
0 bis 1500 Takte auf high sein und die restlichen 18500 Takte auf low.
nach 20000 Takte dann wieder neustart des Timers 1 mitPin Bauf high.
Könnte das so funktionieren oder macht man sowas anders?
Stefan V. schrieb:
> Also ich möchte mit dem mega 8 einen Servo ansteuern.>> Laut Datenblatt sollen alle 20ms das Signal neu gesendet werden. Also> alle 20000 Takte @ 1MhZ. (Sorry, nicht 2000).
Vergiss die 20ms, die sind nicht wichtig.
Wichtig ist einzig und alleine der 1ms bis 2ms Puls. In diesem Puls
steckt die Positionsinformation. Die Pause bis zum nächsten Puls
ignoriert das Servo sowieso. Diese Pause hat Ursachen, die nichts mit
dem Servo selbst zu tun haben.
> Und um die Stellung des Servos anzufahren muss am Anfang ein high Signal> zwischen 1 und 2ms gesendet werden. 1ms ist ja dann links 1,5ms die> Mitte und 2ms ist dann rechts.
Genau. Das ist der für dich wichtige Teil.
> So und um die Stellungen anzufahren z.B. die Mitte, dann sollte die pwm> 0 bis 1500 Takte auf high sein und die restlichen 18500 Takte auf low.> nach 20000 Takte dann wieder neustart des Timers 1 mitPin Bauf high.>
Wie kommst du auf 1500 Takte?
Oder anders ausgedrückt: Woher nimmst du die Erkentnis, das 1500
Timertakte genau 1.5ms entsprechen?
Stefan V. schrieb:
> Also ich dachte mir:>> 1 MhZ - 1sec> 1000000 Hz - 1000ms> 1000 Takte - 1ms> 1500 Takte - 1,5ms> 2000 Takte - 2ms>> Ist das so nicht in Ordnung?
OK. Du willst also den Timer mit der CPU-Frequenz betreiben. Kann man
machen. Damit hast du schon mal die erste Zutat identifziert.
Da du weiter als bis 255 zählen willst, brauchst du den 16 Bit Timer.
Zweite Zutat identifiziert.
Jetzt schnappst du dir das Datenblatt zu deinem Prozessor und siehst
erst mal nach, welche Modi der Timer 1 kann. Dann überlegst du dir,
welcher Modus, zumindest dem Prinzip nach, schon fast das macht, was du
willst. Hinweis: es ist einer der PWM Modi
>Jetzt schnappst du dir das Datenblatt zu deinem Prozessor und siehst>erst mal nach, welche Modi der Timer 1 kann. Dann überlegst du dir,>welcher Modus, zumindest dem Prinzip nach, schon fast das macht, was du>willst. Hinweis: es ist einer der PWM Modi
Man könnte auch bei Hannes Lux vorbeigucken...
http://www.hanneslux.de/