-
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo mare_crisium,
erst einmal wieder ein grosses DANKE.
Den Fehler mit den nichtbeachteten Comparemodus habe ich gestern morgen auch endeckt.
Der im Code stehende Wert von "155" kam durch das Probieren bzw. Fehlersuchen.
Der eigentliche Wert von "-24999" ist aber, wie Du schon angemerkt hast, auch falsch und haette "24999" fuer den Comparemodus heissen muessen.
Bei der Fehlersuche habe ich erst die Hardware ausgeschlossen, in dem ich ein reines Timerprogramm geschrieben hatte.
Dabei ist mir dann der Fehler aufgefallen.
Mit den veralteten Kommentaren hast Du vollkommen Recht. >>>Kopieren, >>>verbessern und dann doch >>>anders realisiert - dabei die Kommentare vergessen.
Hierzu braeuchte ich noch ein wenig Hilfe:
#####
"Gute Idee, die Flankenbits gleich mundgerecht fürs Togglen auszulagern
! Du kannst das
noch eleganter hinkriegen, indem Du die Tasten in umgekehrter Reihenfolge auswertest und
das Flankenbit immer von rechts in rTastFlanken einschiebst (mit „lsl“-Anweisung). Ich würde
den ganzen Vorgang direkt nach dem Aufruf von „NEXT0_TAST_ZST“ verschieben, dann erwischst
Du die Flanke sofort nachdem sie erkannt wurde."
#####
meinst Du es so?:
clc
sbrc r16,3
sec
lsl rTastFlanken
clc - loesche das CaryFlag "0"
sbrc r16,3 - ist das Bit3 von r16(FlankenBit) nicht gesetzt Ueberspringe das >>>
sec - setzen des CaryFlag "1"
lsl rTastFlanken - schiebt dann, in Abhaengigkeit vom FlankenBit, das gesetzte bzw. nicht gesetzte CaryFlag ins Register rTastFlanken.
xxxx xxxx ; xxxx xxx0 ; xxxx xx01 ; xxxx x011 ; xxxx 0111 ; xxx0 1111 ; xx01 1110 ; x011 1100 ; 0111 1001
// Frage: Warum nicht "lsr"? - Dann kann die bisherige Reihenfolge bestehen bleiben.
xxxx xxxx ; 0xxx xxxx ; 10xx xxxx ; 110x xxxx ; 1110 xxxx ; 1111 0xxx ; 0111 10xx ; 0011 110x ; 1001 1110
Das mit den macro ist ne tolle Sache.
Hatte ich auch noch nie verwendet. Und hier nun ein sinnvolles, praktisches Bsp.
>>> wiederkehrende Prozesse sollte man ausgliedern <<< 
Habe noch einen weiteren Fehler gefunden. Auch der hat sich mir erst in der Praxis geboten.
Nachdem ich ja das Problem mit dem Timer nicht gleich gefunden hatte, probierte ich unterschiedliche Einstellungen aus ( der Wert "155") z.B.
Meine Programm hat nur sehr schlecht, das gemacht was es sollte.
Das Druecken der Taste bewirkte zwar ein Einschalten und Ausschalten der LED ... aber nur wenn der ISR Abstand gross gewaehlt war
und auch nicht immer...
Mein Fehler ist, dass eine Flanke nur das FlankenBit auswerte. Dabei ausser Betracht lasse, wo diese herkommt.
Bit 3 von "F" oder von "8"... boeser Denkfehler
Eine Moeglichkeit ware nun zwei Register r0TastFlanken und r1TastFlanken mit der Auswertung von "F" und "8" anstatt von Bit 3 zu befuellen.
Ueber eine weitere Moeglichkeit denke ich noch nach....
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen