Hallo Bow-Hunter,
ich habe mal versucht bisherige Vorschläge in einem ungetesteten Entwurf für direkte Reaktion auf Tastendruck und Vermeidung von WAITs unterzubringen. Das Debounce Kommando fragt die Taste ab und entprellt auch gleich.
Gruß
Searcher
Code:'### hwstack vergrößern. Wichtig bei Verwendung von Interrupts $hwstack = 34 '### Alle Variablen können als Byte deklariert werden (spart Speicher im kleinen Tiny13) '### Der Timer0 wird für die Blink- bzw. Schaltfrequenz konfiguriert Compare0a = 116 '99,84ms Interruptperiode bei 1,2MHz µC-Takt Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 'Timer0 im Clear Timer on Comparematch On Compare0a Isr_blink 'ISR wird bei Compare Match A aufgerufen '### In der Haupschleife steht nur die Tastenabfrage inclusive Tastenentprellung Do 'Beginn Hauptschleife Debounce Pinb.0 , 1 , Changemodus , Sub 'Führt Unterprogramm aus, wenn Pinb.0 auf 1 wechselt Loop 'Ende Hauptschleife '### Nach Tastendruck wird dieses Unterprogramm ausgeführt, daß den Lichteffekt weiterschaltet und '### die nötigen Parameter für die Interruptserviceroutine setzt. Changemodus: 'Unterprogramm setzt Werte für Lichteffekt nach Tastendruck Disable Compare0a 'Vermeidet Inkonsistenzen in der ISR If Modus < Anzahlmodi Then Incr Modus Else Modus = 1 Select Case Modus Case 1 : Anzahlphasen = 0 'Muß Anzahl der Daten in den DATA-Zeilen entsprechen Case 2 : Anzahlphasen = 5 'Wert von 0 = ein Eintrag, 5 = sechs Einträge bei DATA Case 3 : Anzahlphasen = 1 '. End Select Phase = 0 Enable Compare0a Return '### In der Interruptserviceroutine wird alle 100ms das neue Schaltmuster für die LEDs gelesen und '### die LEDs geschaltet. Isr_blink: 'wird alle ca. 100ms aufgerufen und schaltet die LEDs If Phase < Anzahlphasen Then Incr Phase Else Phase = 0 'setzt die nächste Effektphase Select Case Modus 'entsprechend dem Modus wird das Bitmuster für LEDs geholt Case 1 : Pattern = Lookup(phase , Lichteffekt1) Case 2 : Pattern = Lookup(phase , Lichteffekt2) Case 3 : Pattern = Lookup(phase , Lichteffekt3) End Select Portb.1 = Pattern.3 'LED wird geschaltet Portb.2 = Pattern.2 'LED wird geschaltet Portb.3 = Pattern.1 'LED wird geschaltet Portb.4 = Pattern.0 'LED wird geschaltet Return End 'end program '### Hier sind die Schaltmuster abgelegt. Lichteffekt1: Data &B0000 Lichteffekt2: Data &B1010 , &B1001 , &B1010 , &B0101 , &B0110 , &B0101 Lichteffekt3: Data &B1111 , &B0000







Hoffentlich liegt das Ziel auch am Weg
Zitieren

Lesezeichen