Hab das "Dim Pattern As Byte" vergessen.
Jetzt funktioniert alles einwandfrei. Vielen Dank für die Tatkräftige Unterstützung.
Hätte das so nie herausgefunden.
Finaler Code:
Code:$regfile = "attiny13.dat" $crystal = 1200000 $hwstack = 34 '### hwstack vergrößern. Wichtig bei Verwendung von Interrupts $swstack = 10 $framesize = 10 Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Config Portb.4 = Output Config Pinb.0 = Input Dim Anzahlmodi As Byte Dim Modus As Byte Dim Anzahlphasen as Byte Dim Phase As Byte Dim Pattern As Byte Modus = 1 Anzahlmodi = 3 '### 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 Enable Compare0a Enable Interrupts '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
Hab mal meinen Verwendungszweck gefilmt...
https://www.dropbox.com/s/9huyg7qzqg...94432.mp4?dl=0
So, die eine Baustelle ist fertig, jetzt kommt die Nächste...
https://www.roboternetz.de/community...trom-An-Aus%29







Zitieren

Lesezeichen