mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mit Timer 2 zwei Dinge gleichzeitig tun


Autor: Stefan V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ephraim Hahn (ephi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ausgang setzen, 200 nop's und optimierung aus ;-)

Autor: Stefan V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr hilfreich danke....

und im ernst?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verzögerung im Interrupt???

Das geht mal überhaupt nich.
Ich würd im Interrupt nen Teiler in sw Programmieren
div--;

if(!div) {
   //tu was
   div = 200;
}
so z.b.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre das mit dem Timer 1 besser realisierbar?

Wäre echt froh, wenn nicht der ISR 9mal umsonst ausgelöst wird.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wäre echt froh, wenn nicht der ISR 9mal umsonst ausgelöst wird.

Wo ist das Problem?

>Wäre das mit dem Timer 1 besser realisierbar?

Ja.

Autor: Stefan V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also ich möchte mit dem mega 8 einen Servo ansteuern.


Da bist du (hier im Forum) der allererste, der sowas machen will.
Benutz die Suche!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei sich Hannes mehr mit der Decodierung der Signals befasst hat...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.