Hallo zusammen,
ich stehe auf dem Schlauch und weiss echt nicht mehr weiter. Ich habe
ein kleines ASM Programm für einen Attiny10 geschrieben. Soll einfach
bei Tastendruck den PWM ändern. Der erste Tastendruck funktioniert auch.
Erster Wert wird gesetzt. Jetzt kommt der Fehler, wiederholtes Drücken
führt zu keiner Änderung. Hab schon überprüft ob in den Interrupt
gesprungen wird und in die SetzFunktion, wird alles korrekt ausgeführt.
Ich habe dann festgestellt das pstate durch wiederholtes Aufrufen nicht
geändert wird, es hat immer den Anfrangswert. Im AVR Studio mit
Simulator funktioniert das ganze, nur auf dem Tiny selber nicht. Ich
weiss echt nicht mehr was es sein könnte.
Jemand einen Ahnung woran das liegen kann?
Matthias schrieb:> Der Taster ist soweit schon hardwareseitig entprellt.
Wie?
> Aber das ist> schließlich nicht mein Problem.
dass kann man so nicht sagen, prellt der Taster, so wird pstate in
kurzer Zeit mehrmals erhöht. Mach doch testweise mal eine delay-Scheife
rein.
UND
1) Ein cli am Anfang einer ISR, und ein sei vorm Ende kannst du dir
sparen, mit dem Eintritt in die ISR sind weitere INT's sowiso gesperrt.
2) Wenn du nur die PWM verstellen willst, dann schalte sie nicht erst
jedesmal vorher aus.
Sascha
@ Sascha:
hab deinen Tipp gerade ausprobiert, leider geht das scheinbar nicht mit
dem AVR Studio Simulator. Das geht dort nur wenn ich vor dem Setzen
ausschalte und danach wieder einschalte.
mfg Matthias
Sascha Weber schrieb:> 2) Wenn du nur die PWM verstellen willst, dann schalte sie nicht erst> jedesmal vorher aus.
Deine ISR ist ein klassisches Beispiel dafür wie man es nicht machen
soll.
Nicht nur, dass man keine Tasten in einer ISR abfragen soll. Auch kann
es in 99,994% bis 100% aller Fälle nicht schaden, das eine oder andere
Register zu sichern. Und wenn's nur der aktuelle Status ist.