Mit Timer 2 zwei Dinge gleichzeitig tun

Gast #1463237
Lesenswert?

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
Gast #1463259
Lesenswert?

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".
Gast #1463289
Lesenswert?

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
Gast #1463309
Lesenswert?

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?
#1463315
Lesenswert?

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?
#1463332
Lesenswert?

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
Gast #1463342
Lesenswert?

>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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren