; ******************************* ; ***** Datei Kopf ***** ; ******************************* ; * Dateiname: Lauflicht mit Picaxe 08M2.bas ; * Datum: 28.12.2018 ; * Datei Version: 1.0 ; * Geschrieben von: Thomas Vetter ; * Funktion: Steuert 8 LEDs mit einem 4094 Schieberegister ; * Letzte Revision: 20.02.2019 ; * Verwendete PICAXE: 08M2 ; ******************************* #picaxe 08m2 ; Picaxe Typ festlegen let dirsC = %11010111 ; Alle Pins Ausgänge symbol SDO = C.1 : symbol PIN_SDO = pinC.1 ; Seriell DATA symbol SCK = C.2 : symbol PIN_SCK = pinC.2 ; Seriell CLOCK symbol INP = C.3 ; Eingang Taster (Lichtmuster wählen) symbol OEN = C.4 ; Output ENable vom Schieberegister symbol Daten = b0 ; enthaelt das Byte zum Schieberegister symbol Zaehler = b1 ; Adresszaehler symbol Verzoegerung = b2 ; dieser Wert bestimmt die Laufgeschwindigkeit symbol Anfang = b3 symbol Ende = b4 symbol Muster = b5 ; enthaelt das aktuelle Laufmuster read 50,Muster ; gemerktes Laufmuster lesen gosub Auswahl ; Und einstellen ; Laufmuster Daten eeprom 0, (129,66,36,24,36,66) ; Anfang = 0 Ende = 5 eeprom 6, (1,2,4,8,16,32,64,128,64,32,16,8,4,2) ; Anfang = 6 Ende = 19 eeprom 20,(24,36,66,129) ; Anfang = 20 Ende = 23 eeprom 24,(129,66,36,24) ; Anfang = 24 Ende = 27 eeprom 50,(1) ; beim aller ersten Start mit Laufmuster "1" starten do ; Hauptschleife for Zaehler = Anfang to Ende ; Daten aus dem EEprom lesen low OEN ; Output ENable auf Low setzen (alle LEDs aus) read Zaehler,Daten ; Datenbyte holen gosub Ausgabe ; und Bitweise ins Schieberegister Ausgeben high OEN ; Output ENable auf High setzen (alle LEDs an) pause Verzoegerung ; etwas warten if PinC.3 = 0 then ; Taster gedrückt ? gosub Taster ; Ja endif ; Nein next Zaehler ; Dann weiter, naechstes Byte loop ; Alles wiederholen ;--------------------------------- Ausgabe: ; Ein Byte aus der Variablen "Daten" über SPI ausgeben, (MSB zuerst) PIN_SDO = Daten / $80 : pulsout SCK, 1 ; Bit 7 ausgeben PIN_SDO = Daten / $40 : pulsout SCK, 1 ; Bit 6 ausgeben PIN_SDO = Daten / $20 : pulsout SCK, 1 ; Bit 5 ausgeben PIN_SDO = Daten / $10 : pulsout SCK, 1 ; Bit 4 ausgeben PIN_SDO = Daten / $08 : pulsout SCK, 1 ; Bit 3 ausgeben PIN_SDO = Daten / $04 : pulsout SCK, 1 ; Bit 2 ausgeben PIN_SDO = Daten / $02 : pulsout SCK, 1 ; Bit 1 ausgeben PIN_SDO = Daten / $01 : pulsout SCK, 1 ; Bit 0 ausgeben return ; Und zurück ;--------------------------------- Taster: low OEN ; Output_ENable auf Low setzen (alle LEDs aus) inc Muster ; Wert von Muster erhöhen if Muster >4 then ; Groesser als 4 ? let Muster = 1 ; Ja, dann auf "1" setzen endif ;Nein, Ende der Abfrage Auswahl: select case Muster case 1 let Muster = 1 let Anfang = 0 let Ende = 5 let Verzoegerung = 140 case 2 let Muster = 2 let Anfang = 6 let Ende = 19 let Verzoegerung = 90 case 3 let Muster = 3 let Anfang = 20 let Ende = 23 let Verzoegerung = 150 case 4 let Muster = 4 let Anfang = 24 let Ende = 27 let Verzoegerung = 150 endselect ; Ende der Abfrage write 50,Muster ; aktuelles Muster merken return ; Und zurück ;--------------------------------- end ; Programmende