hat wer eine idee wie ich eine von 10 sekunden abwärts zählend linear fortschreitende blinkfrequenz für eine led umsetzen kann ? also 10 sekunden langsames blinken bis 0 sekunden schnellstes blinken nen sekunden timer hab ich ja schon. hab ein sekündliches update von dem vergleichswert probiert also jede sekunde minus einen standard wert bei einem timer der in CTC läuft ich denke irgendwie hängt sich er dann bei dem rechnen auf (subtrahieren) weil die led nicht gleichmäßig bei einer sekunde schneller blinkt, sondern auch mal ausbleibt. bin für jeden tipp dankbar :-)
chris __ schrieb: > hab ein sekündliches update von dem vergleichswert probiert also jede > sekunde minus einen standard wert bei einem timer der in CTC läuft klingt doch erst mal nicht schlecht > ich denke "ich denke" ist ganz schlecht. Das taugt bei der Fehlersuche bestenfalls für eine Hypothese. Anschliessend überlegt man sich, wie man das abtesten könnte um aus "Ich denke" ein "Ich weiß" zu machen. > irgendwie hängt sich er dann bei dem rechnen auf > (subtrahieren) Das kann ich mir kaum vorstellen. > weil die led nicht > gleichmäßig bei einer sekunde schneller blinkt, sondern auch mal > ausbleibt. Daraus kann man aber erst mal nur schliessen, dass du höchst wahrscheinlich einen Programmfehler hast > bin für jeden tipp dankbar :-) Psst. Nicht weiter sagen - zeig deinen Code!
PS: du hast berücksichtigt, dass im CTC Modus der Update des OCR Register sofort erfolgt? Das bedeutet zb, dass wenn dein OCR Register auf 200 steht, der Timer gerade bei 150 rumrödelt und du den OCR Wert auf 100 setzt, der Timer einmal rundum zählen muss, bis er die 100 das erste mal sieht. Du hast ihm sozusagen die Obergrenze zu einem Zeitpunkt gesetzt, so dass er in diesem Zähldurchgang die Grenze nicht sehen wird. Der Fast-PWM Modus macht das anders und kann anstelle des CTC benutzt werden, wenn man dieses Problem hat.
ich denke [;-)] es ist aber so wie du gesagt hast, dass der timer rumtrödelt, meinst du ich soll beim update ein clear timer einfügen ? code ist angehängt
chris __ schrieb: > ich denke [;-)] es ist aber so wie du gesagt hast, dass der timer > rumtrödelt, meinst du ich soll beim update ein clear timer einfügen ? Benutz einfach den Fast-PWM Modus, der auf deinem µC das OCR1A Register als Obergrenze nimmt. Dann kümmert sich der Timer selbst darum, dass dir das nicht passiert, weil er den eigentlichen Register Update zum richtigen Zeitpunkt selbst macht. Da du nicht gesagt hast, welchen µC du benutzt, kann ich dir nicht sagen, welcher Timer Modus das auf deinem µC ist. Auf einem Mega8 wäre es der Modus 15 vom Timer 1. Lass dich nicht von PWM irre machen. Nur weil der Modus PWM heißt, bedeutet das ja nicht, dass du da die OCR Pins freischalten musst. Einfach den Modus von CTC auf "Fast-PWM mit Overgrenze in OCR1A" umstellen und dann sollte das schon flutschen.
Schade hier
1 | ldi r16,high(43200) ;STARTWERT -> ~0,75 Sekunden |
2 | out OCR1AH,r16 |
3 | ldi r16,low (43200) ; |
4 | out OCR1AL,r16 |
hast du die Sachlage mit der Dezimalzahl und den high/low Makros so schön geschrieben. Und hier
1 | ldi r19,0xE0;LOW BYTE für subtraktion |
2 | ldi r20,0x10;HIGH BYTE für subtraktion ->10er schritte subtrahieren (-4320) |
fällst du wieder in eine der unbrauchbareren Schreibweisen zurück. Warum nicht gleiche Schreibweise?
1 | ldi r19, low(4320) |
2 | ldi r20, high(4320) |
und schon braucht kein Mensch mehr den Kommentar. Und was noch wichtiger ist: Kein Mensch muss lang umtun, um sich zu vergewissern, dass deine Hex-Zahlen tatsächlich dem entsprechen, was im Kommentar behauptet wird.
> fällst du wieder in eine der unbrauchbareren Schreibweisen zurück.
sind doch nur schreibweisen ^^
beim fast pwm setzt sich der timer dann auch beim erreichen des OCR
wertes zurück ?
mich verwirrt es ein bisschen weil CTC heißt ja clear timer on compare
chris __ schrieb: >> fällst du wieder in eine der unbrauchbareren Schreibweisen zurück. > sind doch nur schreibweisen ^^ Schon. Aber such mal in einem 3000 Zeilen Programm Fehler, wenn du bei jeder dritten Anweisung den Taschenrechner zücken musst um etwas auszurechnen, was du mit der richtigen Schreibweise im Code sehen könntest. > > beim fast pwm setzt sich der timer dann auch beim erreichen des OCR > wertes zurück ? Jep. In diesem Modus, in dem du dem Timer in OCR1A eine Obergrenze vorgeben kannst, passiert in dieser Hinsicht genau das gleiche. > mich verwirrt es ein bisschen weil CTC heißt ja clear timer on compare Ja, macht ja nichts. Sieh diesen Fast-PWM Modus als einen "Spezial-CTC-Modus" an, bei dem zusätzlich noch die Möglichkeit besteht, dass du einen Portpin an die PWM koppeln kannst. .... kannst, aber nicht musst.
Hi >bei dem >zusätzlich noch die Möglichkeit besteht, dass du einen Portpin an die >PWM koppeln kannst. .... kannst, aber nicht musst. Ist bei CTC genau so. MfG Spess
Spess53 schrieb: > Hi > >>bei dem >>zusätzlich noch die Möglichkeit besteht, dass du einen Portpin an die >>PWM koppeln kannst. .... kannst, aber nicht musst. > > Ist bei CTC genau so. Äh, ja. Danke Bin schon ganz verwirrt. @TO Ändert aber nix daran, dass dieser PWM Modus deine Lösung ist. Du musst ja die PWM Funktionalität nicht nutzen.
>meinst du ich soll beim update ein clear timer einfügen ?
Bringt nichts!
Wenn Du Karl Heinz Beispiel zugrunde legst, zählst Du zwar nicht einmal
"hinten rum" aber ... 150 - 0 - 100 ergibt auch eine Spanne von 250 beim
Umschalten. Deine Beleuchtung bekommt also auch 'nen 'Schluckauf'.
verstehe ich das jetzt richtig der unterschied zwischen CTC und fast PWM Timer bei CTC: wenn das OCR register beschrieben wird findet der update von OCR SOFORT statt egal wo der counter TCNT steht Timer bei Fast PWM: wenn das OCR register beschrieben wird findet der update von OCR erst statt wenn TCNT OCR erreicht hat
chris __ schrieb: > verstehe ich das jetzt richtig der unterschied zwischen CTC und fast PWM > > Timer bei CTC: > wenn das OCR register beschrieben wird findet der update > von OCR SOFORT statt egal wo der counter TCNT steht > > Timer bei Fast PWM: > wenn das OCR register beschrieben wird findet der update > von OCR erst statt wenn TCNT OCR erreicht hat Genau. (Das ist natürlich noch nicht alles, aber es ist der für dich relevante Unterschied)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.