Ich habe jetzt nicht gerade viel Zeit um genau nachzusehen, aber hast du nicht einen Konflikt zwischen PWM-Compare-Match und Timer-Overflow. Du wirst da zwei getrennte Timer verwenden müssen.
Verwendest du einen Mega8?
Druckbare Version
Ich habe jetzt nicht gerade viel Zeit um genau nachzusehen, aber hast du nicht einen Konflikt zwischen PWM-Compare-Match und Timer-Overflow. Du wirst da zwei getrennte Timer verwenden müssen.
Verwendest du einen Mega8?
Ich verwende einen Mega32. Warum meinst du das es einen Konflikt gibt? Kommt es bei dem Timer in der Verwendungsart vielleicht gar nicht zum Overflow? Timer/Counter0 und Timer/Counter2 wollt ich für die Motorsteuerung nehmen, weil das beides 8-Bit Timer sind.
MfG Jan
Du arbeitest im PWM-Mode, da kommt es zu keinem Überlauf.
hi, hier mal ein link in meine hp, wie ich solche timing-aufgaben löse
http://www.gjlay.de/pub/index.html#c-code und dann "Countdown"
bei fragen fragen :-)
ist natürlich nur 1 ansatz von vielen
Oh man!
Jetzt hab ich wieder was dazugelernt... Aber klingt logisch, das es zu keinem Überlauf kommt.
Das is alles so umständlich!!!
Ich hab schon versucht irgendwelche Interrupt-Flags zu benutzen oder so. Mit den normalen Interrups funktioniert das auch nicht. Es muss doch irgend ein Ereigniss geben, was ich nehmen kann, damit eine Variable hoch bzw. runtergezählt wird, damit mein blöder Servo sich hin- und herdreht ](*,) Die Zeit is mir auch fast egal. Aber Top oder Bottom würde denke ich echt gut passen mit ca. 16ms periodendauer.
MfG Jan
PS.: @SprinterSB: Deine Seite is echt gut! Hab sie mir erstmal in die Favoriten gepackt.
Hat echt keiner mehr einen Tipp für mich?
Würde mich echt freuen.
MfG Jan
Nen Hinweis ... hmm ....
Versuch mal das folgende:
- nimm einen Timer um sämtliche Zeiten darüber laufen zu lassen (kleinsten gemeinsamen Nenner suchen - danach die Zeit bis zum Überlauf wählen - entsprechende Variablen eins hochzählen lassen - und diese Auswerten und ggf nen Flag setzen)
- nimm nen weiteren Timer für die Erzeugung der PWM für den Servo (am besten nen 16 Bit Timer und Hardware PWM)
- werte die Flags deines Zeit Timers im Hauptprogramm aus und starte danach weitere Aktionen ... z.B. das Auslesen deines Sensors ...
der Rest ergibt sich dann von alleine ...
Grpße,
Hanni
Das Problem ist leider das ich dann 4 Seperate Timer bräuchte. Hab aber nur 3. (Timer0, Timer1, wo man 2 wo man 2 PWMs mit erzeugen kann und Timer2)
Ich will ja nachher auch noch meine Antriebs-Motoren über PWM steuern.
zu 1.:
Kleinsten gemeinsamen Nenner? Das versteh ich nicht so ganz.Zitat:
kleinsten gemeinsamen Nenner suchen - danach die Zeit bis zum Überlauf wählen - entsprechende Variablen eins hochzählen lassen - und diese Auswerten und ggf nen Flag setzen
zu 2.:
über Hardware PWM muss ich mich mal informieren...Zitat:
(am besten nen 16 Bit Timer und Hardware PWM)
MfG Jan
Okay, nehmen wir mal an, du hast 4 verschiedene Aufgaben die periodisch erledigt werden müssen. Natürlich jede in einem anderem Intervall.Zitat:
Zitat von Spongebob85
Ich nehme einfach mal die folgenden Intervalle:
Aufgabe 1: 40ms
Aufgabe 2: 50ms
Aufgabe 3: 80ms
Aufgabe 4: 20ms
Möchte man diese Zeiten nun mit nur einem Timer realisieren, muss man schauen, welche Zeit bei diesen Aufgaben nun den kleinsten gemeinsamen Nenner darstellt.
In diesem Fall sind das klar 10 ms aus denen du alle anderen Zeiten errechnen kannst.
Zur PWM:
Bei Servos bietet es sich vielleicht in der Tat an, das via Software PWM zu lösen, allerdings brauchst du dann gerade bei vielen Servos eine recht ausgeklügelte Programmlogik. Nicht zu vergessen dabei ist, das Software PWM immer sehr viel Rechenzeit benötigt.
Allerdings hättest du dann immer noch die Hardware PWM für deine Motoren zur Verfügung.
Grüße,
Hanni
Hallo
Scheinbar boomen die Servos grad, sind ja auch geile Teile. Mit einem 8bit-Timer im CTC-Mode steuert mein 8Mhz-ATMega32 zur Zeit 3 Servos:
https://www.roboternetz.de/phpBB2/ze...=322236#322236
https://www.roboternetz.de/phpBB2/vi...=322293#322293
Gruß
mic