PICALIC Lichtcontroller nach ALIC Standard - V. 2.0
Über PICALIC V2.0
Kochbuch
Datenblatt
Implementierter ALIC-Befehlssatz
#defines
LED Treiber-
schaltungen
Kontakt

Allgemeine Hinweise

Zugriff auf Variablen oder Schalter:
Bei Befehlen, die auf einen Steuerschalter oder einen Variablen-Wert zugreifen, kann die Schalter- oder Variablen-Nummer entweder explizit als Parameter angegeben werden, oder der Zugriff erfolgt implizit auf das Steuerelement, das dem jeweiligen Ausgangs-Kanal zugeordnet ist. Die implizite Adressierung ermöglicht kompakteren Programmcode, da die Befehle mit weniger Parametern auskommen und ggf. auch der gleiche Programmcode für verschiedene Ausgangskanäle genutzt werden kann, wobei trotzdem für jeden Kanal jeweils eigene Steuerelemente zur Verfügung stehen.
Das Befehlskürzel (Mnemonic) beinhaltet die Art des jeweils anzusprechenden Steuerelements:
SX: Steuerschalter, explizit (Schalternummer wird als Parameter angegeben), z.B. "HALTSXOFF"
S:  Steuerschalter, implizit (Schalternummer = Kanalnummer oder per DEFSWITCH vorgegeben), z.B. "HALTSOFF"
VX: Variablenwert, explizit (Variablen-Nummer wird als Parameter angegeben), z.B. "JVXB"
V: Variablenwert, implizit (Variablennummer = Kanalnummer oder per DEFVAR vorgegeben), z.B. "JVB"
Ersatz konstanter Parameter-Daten durch Variablen-Wert:
Bei einer Reihe von Befehlen ist es möglich, anstelle eines konstanten Parameter-Wertes eine Variable einzusetzen. Technisch werden dabei die höchsten 16 möglichen Parameter-Werte (Wertebereich: 240 bis 255) als Variablen-Nummer (0..15) interpretiert. Daher ist der Wertebereich der Konstanten für den jeweiligen Parameter auf 0 bis 239 beschränkt. Der Variablen-Zugriff kann nur auf die ersten 16 Variablen (Nummer 0..15) erfolgen.
Parameter, die auf diese Art durch einen Variablen-Wert ersetzt werden können, sind durch den Zusatz "|var" gekenzeichnet (z.B. <delay|var>).
Im Quelltext wird statt der konstanten Zahl ggf. der Ausdruck VAR(x) eingesetzt, z.B. "DELAY VAR(4)".

    
Übersicht über die Befehle (sortiert nach Opcode):
Mnemonic Opcode Parameter Beschreibung Beispiel
(Grafik anklicken!)
LIGHTOFF 0x00 <delay> Turn Light Off for time <delay>
Andere Form von (BRIGHT 0,<delay>)
Beispiel
BRIGHT 0x00
-0xBF
<delay> Output Brightness value for time <delay>
Assembler-Syntax: BRIGHT <value>,<delay>
Stellt die Helligkeit auf den Wert <value> ein. Der nachfolgende Befehl wird nach der Zeit <delay> (in "Ticks") ausgeführt. Der Helligkeitswert wird hierbei im Opcode codiert!
Wertebereich:
value:  0..191 (128 entspricht 100%)
delay: 0..255 
Beispiel
LIGHTON 0x80 <delay> Turn Light On for time <delay>
Andere Form von (BRIGHT 128,<delay>)
Beispiel
DEFTICKLEN 0xC0 <time|var> Define Length of Tick (Header-Befehl)*
Definiert die Länge eines Ticks in Millisekunden.
Wertebereich: Konst. bis 239. Standard-Wert: 10 ms
Die Verwendung einer Variablen erlaubt die dynamische Steuerung der Ausführungsgeschwindigkeit.
Hinweis: funktioniert nur, wenn das Programm mit
"#define COMMTICK 0" assembliert wird!
Beispiel
DEFBRIGHT 0xC1 <value|var> Define Brightness Multiplier (Header-Befehl)*
Definiert einen Helligkeits-Multiplikator für den Ausgangs-Kanal.
Wertebereich: 0..239, Standardwert = 128 = *1.0
Die Verwendung einer Variablen erlaubt die dynamische Steuerung der Helligkeit.
Beispiel
DEFSWITCH 0xC2 <x> Define Channel's Switch (Header-Befehl)*
Definiert einen anderen Steuerschalter, der dem Ausgangs-Kanal zugeordnet ist (= channel switch)
Standardeinstellung: x = Kanalnummer
Beispiel
DEFVAR 0xC3 <x> Define Channel's Variable (Header-Befehl)*
Definiert eine andere Steuervariable, die dem Kanal zugeordnet ist (= channel variable)
Standardeinstellung: x = Kanalnummer
Beispiel
DELAY 0xC8 <delay|var> Delay
Fügt eine Wartezeit von <delay> Ticks ein. Der vor diesem Befehl eingestellte Helligkeitswert wird nicht verändert. Max. Wert für delay als Konstante: 239
Beispiel
JUMP 0xC9 <addr> Jump
Das Programm wird an Speicheradresse <addr> fortgesetzt.
Beispiel
SMOOTHOFF 0xCA
Turn Smooth Mode Off
Helligkeitsänderungen nachfolgender BRIGHT-Anweisungen erfolgen direkt auf den angegebenen neuen Wert, ohne Zwischenwerte. (Standardeinstellung)
Beispiel

SMOOTHON 0xCB
Turn Smooth Mode On
Änderungen zwischen den Helligkeitswerten nachfolgender BRIGHT-Anweisungen erfolgen kontinuierlich durch lineare Interpolation.
Implementation: jedes Steuerkommando mit Opcode >= 0xC0 unterbricht ggf. den Smooth-Modus an dieser Programmstelle. SMOOTH bleibt aktiviert, aber es entsteht ggf. ein Helligkeits-Sprung.
RNDJMP 0xCC <chance|var>,<addr> Random Jump
Das Programm wird mit der Wahrscheinlichkeit <chance> an Addresse <addr> fortgesetzt.
<chance> = 0..128 für nie bis immer.

Beispiel

RNDDLY 0xCD <maxticks> Random Delay
Das Programm wird nach einer zufällig erzeugten Wartezeit zwischen 0 und <maxticks> fortgesetzt.
RNDBRT 0xCE <min|var>,<max|var>,<delay> Output Random Brightness
Der Helligkeitswert wird zufällig im Bereich <min> bis <max> eingestellt und liegt für die Dauer <delay> dort an.
Hinweis: funktioniert nicht im Smooth-Modus!
HALTSOFF 0xD0
Halt while Channel's Switch is Off
Hält bei ausgeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter eingeschaltet wird.

Beispiel
HALTSXOFF 0xD1 <x> Halt while Switch <x>  is Off
Hält bei ausgeschaltetem Steuerschalter <x> die Programmausführung an dieser Stelle an, bis der Schalter eingeschaltet wird.
HALTSON 0xD2
Halt while Channel's Switch is On
Hält bei eingeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter ausgeschaltet wird.
HALTSXON 0xD3 <x> Halt while Switch <x> is On
Hält bei eingeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter ausgeschaltet wird.
JSOFF 0xD4 <addr> Jump if Channel's Switch is Off
Wenn der dem eigenen Kanal zugeordnete Steuerschalter ausgeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
Beispiel



JSXOFF 0xD5 <x>,<addr> Jump if Switch <x>  is Off
Wenn der Steuerschalter <x> ausgeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JSON 0xD6 <addr> Jump if Channel's Switch is On
Wenn der dem eigenen Kanal zugeordnete Steuerschalter eingeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JSXON 0xD7 <x>,<addr> Jump if Switch <x> is On
Wenn der Steuerschalter <x> eingeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JVB 0xD8 <val>,<addr> Jump if Channel's Variable is Below <val>
Wenn der Inhalt der dem Kanal zugeordneten Variablen kleiner ist als <val>, wird das Programm an Adresse <addr> fortgesetzt.

Beispiel


JVXB 0xD9 <x>,<val>,<addr> Jump if Variable X is Below <val>
Wenn der Inhalt Variablen <x> kleiner ist als <val>, wird das Programm an Adresse <addr> fortgesetzt.
JVAE 0xDA <val>,<addr> Jump if Channel's Variable is Above or Equal <val>
Wenn der inhalt der dem Kanal zugeordneten Variablen größer oder gleich <val> ist, wird das Programm an Adresse <addr> fortgesetzt.
JVXAE 0xDB <x>,<val>,<addr> Jump if Variable X is Above or Equal <val>
Wenn der inhalt der Variablen <x> größer oder gleich <val> ist, wird das Programm an Adresse <addr> fortgesetzt.
CLRS 0xDC
Clear Channel's Switch
Schaltet den dem eigenen Kanal zugeordneten Steuerschalter auf "aus".
Beispiel
CLRSX 0xDD <x> Clear Switch X
Der Steuerschalter <x> wird ausgeschaltet
SETS 0xDE
Set Channel's Switch
Schaltet den dem eigenen Kanal zugeordneten Steuerschalter auf "ein".
Beispiel
SETSX 0xDF <x> Set Switch X
Der Steuerschalter <x> wird eingeschaltet
BRIGHTV 0xE0 <delay> Output Brightness from Channel's Variable
Setzt die Helligkeit auf den Wert aus der Variablen, die dem Ausgangskanal zugeordnet ist  
Beispiel
BRIGHTVX 0xE1 <vx>, <delay> Output Brightness from Variable <vx>
Setzt die Helligkeit auf den Wert aus der Variablen <vx>  
SETV 0xE2 <value> Set Channel's Variable  to given value
Setzt die Variable, die dem Ausgangskanal zugeordnet ist, auf den Wert <value>
Beispiel
SETVX 0xE3 <value>, <vx> Set Variable <vx> to given value
Setzt die Variable <vx> auf den Wert <value>
COPYV 0xE4 <src> Copy contents of variable <src> into channel's variable
Der Inhalt der Variablen <src> wird in die Variable kopiert, die dem Ausgangskanal zugeordnet ist  
Beispiel
COPYVX 0xE5 <src>, <dest> Copy contents of variable <src> into variable <dest>
Der Inhalt der Variablen <src> wird in die Variable <dest> kopiert
ADDCV 0xE6 <const> Add constant value to channel's variable
Addiert den Wert <const> zum Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist
Wertebereich für <const>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
Beispiel

ADDCVX 0xE7 <const>, <vx> Add constant value to variable <vx>
Addiert den Wert <const> zum Inhalt der Variablen <vx>
Wertebereich für <const>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
ADDV 0xE8 <src> Add contents of variable <src>  to channel's variable
Addiert den Inhalt der Variablen <src> zum Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist
Wertebereich für Inhalt von <src>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
Beispiel

ADDVX 0xE9 <src>, <dest> Add contents of variable <src> to variable <dest>
Addiert den Inhalt der Variablen <src> zum Inhalt der Variablen <dest> und speichert das Ergebnis in <dest>
Wertebereich für Inhalt von <src>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
MULV 0xEA <src> Multiply channel's variable by contents of <src>
Der Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, wird mit dem Inhalt der Variablen <src> multipliziert.
(Multiplikator: 0..255, Festkomma, 128 entspricht dem Wert 1,0)

Beispiel
MULVX 0xEB <src>, <dest> Multiply contents of variable <dest> by contents of <src>
Der Inhalt der Variablen <dest> wird mit dem Inhalt der Variablen <src> multipliziert und in <dest> gespeichert.
(Multiplikator: 0..255, Festkomma, 128 entspricht dem Wert 1,0)
SCLUPV 0xEC <c1|var>, <c2|var>,
Scale Up channel's variable >> Details
Skaliert den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, von Eingangs-Wertebereich <c1>..<c2> auf vollen Ausgangs-Wertebereich (0 bis 128)

Beispiel
SCLUPVX 0xED <c1|var>, <c2|var>, <vx>
Scale Up variable <vx> >> Details
Skaliert den Inhalt der Variablen <vx> von Eingangs-Wertebereich <c1>..<c2> auf den vollen Ausgangs-Wertebereich (0 bis 128)
SCLDWNV 0xEE <c1|var>, <c2|var>,
Scale Down channel's variable >> Details
Skaliert den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, von vollen Eingangs-Wertebereich (0..128) herunter auf Ausgangs-Wertebereich <c1> bis <c2> 

Beispiel
SCLDWNVX 0xEF <c1|var>, <c2|var>, <vx>
Scale Down variable <vx> >> Details
Skaliert den Inhalt der Variablen <vx> vom vollen Eingangs-Wertebereich (0..128) herunter auf Ausgangs-Wertebereich <c1> bis <c2> 
RNDV 0xF0 <min|var>, <max|var> Load channel's variable with random value
Lädt die Variable, die dem Ausgangskanal zugeordnet ist, mit einem Zufallswert zwischen <min> und <max>

Beispiel
RNDVX 0xF1 <min|var>, <max|var>, <vx> Load variable <vx> with random value
Lädt die Variable <vx>  mit einem Zufallswert zwischen <min> und <max>
CLIPV 0xF2 <min|var>, <max|var>
Clip channel's variable to min/max value >> Details
Begrenzt den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, auf <min>...<max>
Beispiel
CLIPVX 0xF3 <min|var>, <max|var>, <vx>
Clip variable <vx> to min/max >> Details
Begrenzt den Inhalt der Variablen <vx> auf <min>...<max>
P_RESET 0xFF
Program Reset
Setzt für den aktuellen Kanal den Programmzähler auf die Einsprungadresse zurück und aktiviert die folgenden Werte:
  • Ausgangs-Helligkeit: 0 (Licht aus)
  • Smooth-Modus: aus
  • Ticklänge: Default (10ms)
Schalterstellungen, Variablen und deren Zuordnungen bleiben unverändert.

Anmerkungen:

*Header Befehle: diese Anweisungen müssen am Programmanfang stehen, d.h. unmittelbar nach Einsprungadresse und vor allen anderen Befehlen. Jeder andere Befehl, als vom Typ "Header", macht Header-Befehle im nachfolgenden Programmablauf unwirksam.