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
Lesezeichen