-
-
Erfahrener Benutzer
Roboter Genie
Ja, ich meinte Hardware-PWM. Also Register initialisieren, und einen High-Level übergeben, und er macht dann von selbst eine 1:20ms-PWM. Das wäre schön.
Ich habe gestern mit C ein wenig herumgespielt (bin eigentlich ASM-Freak), und da hab ich dann die fertigen Funktionen _delay_us und _delay_ms genommen. Selbst damit war es noch schwer und die Schritte waren nicht sehr genau, denn ich habe es so programmiert, dass in jedem Schleifendurchlauf der aktuelle Stand per PWM übermittelt wird, und dann alle 100 Durchläufe der Stand verändert wird. Das klappt soweit ganz gut, bis auf zwei Tatsachen:
- Den ersten Wert muss ich mit _delay_ms einstellen (us geht nicht über 786 hinaus) und da brauch ich dann Kommazahlen (z.B. 1.2 ms) und dann kommt die Fließkommaberechnung mit hinein und das Programm wird größer als alle meine ASM-Programme zusammen. (Es geht zwar noch rein, aber für eine Software-PWM für EINEN Servo, über 4% des 32K-Speichers... Und ja, ich habe Optimierung an.)
- Bleibt er in einem Stand, wird jedesmal mit den Warteroutinen eine Warteberechnung durchgeführt, so dass er ETWA so lang wartet, wie angegeben, das merkt man, weil er in jedem Schritt um den Sollwert schwankt, d.h. er zittert, während er stehen sollte. Das geht so weit, dass die Katze auf den Tisch springt, um zu sehen, was da so quitscht.
PS: Wie genau funktioniert das mit dem Vorladen der Interrupts/Timer?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen