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

Serielle Schnittstelle

Der serielle Eingang ermöglicht die Steuerung der Switches 0 bis 7 über ein einfaches Datenprotokoll. Dank der Adressierungsmöglichkeit können mehrere (bis zu 256) Controller zusammen an nur einer Datenleitung betrieben werden und trotzdem bleibt jeder Controller über seine eingestellte Adresse individuell ansprechbar.

Format

Jedes Datenbyte besteht aus einem Startbit ("0"-Pegel), 8 Datenbits und einem Stopbit ("1"-Pegel). Die Übertragungsgeschwindigkeit wird per "#define BAUDRATE xxx" in der Datei "picalic.asm" eingestellt und kann zwischen 100 und 10 000 Baud liegen. Dort kann auch über "#define SD_INVERS TRUE|FALSE" auch die Polarität eingestellt werden.

Signalverlauf am seriellen Eingang für ein Byte:

SD_INVERS = FALSE: 1 ___      _____ _____ _____ _____ _____ _____ _____ _____ _________
     \____/_____X_____X_____X_____X_____X_____X_____X_____/     \___...
0     Start Bit0  Bit1  Bit2  Bit3  Bit4  Bit5  Bit6  Bit7 Stop

SD_INVERS = TRUE: 0     ____ _____ _____ _____ _____ _____ _____ _____ _____       ___
  ___/    \_____X_____X_____X_____X_____X_____X_____X_____\_____/___...
1     Start Bit0  Bit1  Bit2  Bit3  Bit4  Bit5  Bit6  Bit7 Stop

Protokoll

Jedes Kommando beginnt mit einem '@'-Zeichen (0x40), dem die Adresse des anzusprechenden Controllers folgt. Die Adresse wird hexadezimal als zwei Bytes übertragen (ASCII-codiert, Zeichen 0..9, A..F als Grossbuchstaben!). Wenn die Adresse nicht mit dem im EEPROM des Controllers in Speicherzelle EE_deviceID abgelegten Wert übereinstimmt, wird das Kommando ignoriert.
Dann folgt der Kommandocode und die Daten für das Kommando, letzteres wieder als 2-digit Hexadezimalzahl. Den Abschluss des Kommandos bildet ein [CR]-Zeichen (0x0D).
Das Kommando darf keine Leerzeichen enthalten!
Die Switches werden bitweise angesprochen, d.h. die einzelnen Bits sind jeweils dem Switch entsprechend ihrer Position im Datenwert zugeordnet (Bit 0 = Switch 0, Bit 1 = Switch 1 usw.).

Allgemeines Format der Kommandos:

@ <Adresse> <Kommandocode> <Daten> [CR]

Switch-Daten auf neuen Wert ändern:

@ <Adresse> = <Daten> [CR]

Die Switches (0..7) können hiermit alle gemeinsam und unabhängig von ihrem vorherigen Status auf den gewünschten, neuen Wert eingestellt werden.

Beispiel: @25=1E[CR]
Setzt im Controller mit der Adresse 0x25 (dezimal: 37) die Switches 1 bis 4 auf "on" und die Switches 0, 5,6,7 auf "off". (0x1E = binär 0001 1110, Bitpositionen 0..7 von rechts nach links zählen!)

Einen oder mehrere Switches einschalten

@ <Adresse> S <Daten> [CR]

Hiermit kann ein einzelner Switch oder eine Auswahl der Switches eingeschaltet werden, ohne die anderen Switches zu beeinflussen.
Die in den Daten enthaltenen "1"-Bits schalten die entsprechenden Switches in den "on"-Zustand.
Für "0"-Bits bleibt der aktuelle Zustand der entsprechenden Switches unverändert.

Beispiel: @25S04[CR]
Switch 2 wird eingeschaltet, alle anderen Switches bleiben unverändert. (0x04 = binär 0000 0100)

Einen oder mehrere Switches ausschalten

@ <Adresse> R <Daten> [CR]

Hiermit kann ein einzelner Switch oder eine Auswahl der Switches ausgeschaltet werden, ohne die anderen Switches zu beeinflussen.
Die in den Daten enthaltenen "1"-Bits schalten die entsprechenden Switches in den "off"-Zustand.
Für "0"-Bits bleibt der aktuelle Zustand der entsprechenden Switches unverändert.

Beispiel: @25R14[CR]
Switch 2 und 4 werden ausgeschaltet, alle anderen Switches bleiben unverändert. (0x14 = binär 0001 0100)

Adresse des Controllers ändern

@ <Adresse> PRG <Daten> [CR]

Ändert die Adresse des Controllers auf einen neuen Wert.
Der Datenwert wird in die EEPROM-Speicherzelle EE_deviceID geschrieben. Zur Bestätigung des erfolgreich durchgeführten Programmiervorgangs blinken die LEDs ein paar mal auf.

Beispiel: @FFPRG25[CR]
In der Regel enthält die Speicherzelle EE_deviceID nach der Programmierung des Controllers den Wert 0xFF, so daß über den Befehl "@FFPRG<Adresse>[CR]" bei neuen Controllern die initiale Adresszuweisung durchgeführt werden kann.