Hallo,
ich würde gern den Timer1 über zwei Taster beeinflussen. Dabei ist mir
beim folgenden Code was aufgefallen was ich mir nicht erklären kann.
1
ldi value, 250
2
out OCR1AH, value
3
ldi temp1, 0xFF
4
out OCR1AL, temp1
Sobald das Programm bei in Zeile 3 ankommt verschwindet der Wert im
OCR1AH. Warum ist das so? Erst schreibt er 250 rein und bei Zeile drei
ist er wieder auf 0.
Der ganze Quelltext sollte so aussehen:
Funktion: Zwei Taster beeinflussen die PWM Zeiten...
Hi
>Sobald das Programm bei in Zeile 3 ankommt verschwindet der Wert im>OCR1AH. Warum ist das so? Erst schreibt er 250 rein und bei Zeile drei>ist er wieder auf 0.
Siehst du das im Simulator? Wenn ja, solltest du beachten, das PWM-Modi
mit variablen Top vom Simulator nicht unterstützt werden.
MfG Spess
Mathias D. schrieb:> Sobald das Programm bei in Zeile 3 ankommt verschwindet der Wert im> OCR1AH. Warum ist das so? Erst schreibt er 250 rein und bei Zeile drei> ist er wieder auf 0.
Weil ein neuer Wert für OCR1A in einem PWM-Modus nicht sofort in das
Register geschrieben wird, sondern erst beim nächsten Timer-Überlauf.
Bis zu diesem Zeitpunkt steht der Wert in einem nicht sichtbaren
Schattenregister.
spess53 schrieb:> Hi>>>Sobald das Programm bei in Zeile 3 ankommt verschwindet der Wert im>>OCR1AH. Warum ist das so? Erst schreibt er 250 rein und bei Zeile drei>>ist er wieder auf 0.>> Siehst du das im Simulator? Wenn ja, solltest du beachten, das PWM-Modi> mit variablen Top vom Simulator nicht unterstützt werden.>> MfG Spess
ja, im Simulator hab ich mir den OCR1AH in ein Watch genommen um zu
sehen ob das so geht wie ich mir das gedacht habe. Aber auch wenn ich es
brenne scheint es so nicht zu klappen wie ich mir das denke.
Hi
>Aber auch wenn ich es>brenne scheint es so nicht zu klappen wie ich mir das denke.
Kommt darauf an, was du erwartest und wie du das misst. Mit deinen
Werten für ICR1 und OCR1A bekommst du eine ON-Zeit von 98% des Taktes.
Ohne Oszi kannst du das nicht messen.
MfG Spess
spess53 schrieb:> Hi>>>Aber auch wenn ich es>>brenne scheint es so nicht zu klappen wie ich mir das denke.>> Kommt darauf an, was du erwartest und wie du das misst. Mit deinen> Werten für ICR1 und OCR1A bekommst du eine ON-Zeit von 98% des Taktes.> Ohne Oszi kannst du das nicht messen.>> MfG Spess
Also Ziel des ganzen war es eigentlich die LED mit PWM zu dimmen. Und
die Einstellungen über zwei Taster vorzunehmen. Ich muss auch zugeben,
das ich den PWM mit dem Timer 1 noch nicht gecheckt habe... :-(
Hi
>Also Ziel des ganzen war es eigentlich die LED mit PWM zu dimmen. Und>die Einstellungen über zwei Taster vorzunehmen. Ich muss auch zugeben,>das ich den PWM mit dem Timer 1 noch nicht gecheckt habe... :-(
Dann bringe doch erst mal deine PWM zum laufen. Mit
1
ldi value,High($8000)
2
out OCR1AH, value
3
ldi temp1, Low($8000)
4
out OCR1AL, temp1
sollte deine LED merklich dunkler leuchten.
mfG Spess
spess53 schrieb:> Hi>>>Also Ziel des ganzen war es eigentlich die LED mit PWM zu dimmen. Und>>die Einstellungen über zwei Taster vorzunehmen. Ich muss auch zugeben,>>das ich den PWM mit dem Timer 1 noch nicht gecheckt habe... :-(>> Dann bringe doch erst mal deine PWM zum laufen. Mit>>
1
> ldi value,High($8000)
2
> out OCR1AH, value
3
> ldi temp1, Low($8000)
4
> out OCR1AL, temp1
5
>
>> sollte deine LED merklich dunkler leuchten.>> mfG Spess
Wo ist der unterschied zu meiner Version mit:
1
ldi value, 0
2
out OCR1AH, value
3
ldi temp1, 0xFF
4
out OCR1AL, temp1
Wenn ich den Wert in Value anpasse und da reinschreibe sollte das doch
klappen oder nicht? Also wenn ich per Hand "0" reinmache ist die LED
fast aus, bei 255 voll an... Also wo ist denn mein Fehler?
Und was genau hat es mit der Schreibweise High($8000) und Low($8000) auf
sich?
Tut mir leid wenn es anstrengend ist, irgendwo muss ich den Anfang
finden ;-) Danke schonmal für die Hilfe!
Hi
>Wenn ich den Wert in Value anpasse und da reinschreibe sollte das doch>klappen oder nicht? Also wenn ich per Hand "0" reinmache ist die LED>fast aus, bei 255 voll an... Also wo ist denn mein Fehler?
Du hattest nicht genau geschrieben, was nicht funktioniert. Aber so
passt das schon.
>Und was genau hat es mit der Schreibweise High($8000) und Low($8000) auf>sich?
Benutzt man um 16-Bit Konstanten aufzuteilen:
High($8000) = $80
Low($8000) = $00
MfG Spess