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

Andere PIC Projekte
Datenschutz,
Kontakt

Anpassung der Firmware

Über die Parameter der "#define ..."-Zeilen in der Datei picalic.asm kann die Firmware auf die jeweiligen Erfordernisse angepasst werden.
#define  ALICFILE <File>
Angabe der Datei, die den ALIC-Quelltext für den Lichtsteuercode enthält.
#define CLOCK <4|8>
CPU Taktfrequenz (4 or 8 MHz).
8 MHz ist ohne externen Quarz o.ä. nur bei bestimmten Controllern möglich - siehe Datenblatt.
Die höhere Taktfrequenz ermöglicht eine höhere PWM Auflösung und/oder höhere PWM-Frequenz.
#define NCHAN <1..8>
Anzahl der Ausgangskanäle (1..8)
Bei PICs im 8-Pin Gehäuse sind maximal 5 Kanäle möglich.
#define NVARS <x>
Anzahl der Steuervariablen, die zusätzlich zu den ggf. durch das RC-Interface vorhandenen Variablen verfügbar sein sollen.
#define ACTIVELOW <TRUE|FALSE>
LED-Ausgänge sind invertiert wenn dieser Parameter = TRUE, d.h. der Controller-Ausgang nimmt Low-Pegel (ca. 0V) an, um die LED einzuschalten. Verwendung hauptsächlich für Direktansteuerung der LEDs durch den Controller, da der Ausgang bei "Low" mehr Strom liefern kann.
#define AUXOUTA <Bitmaske>
definiert freie RA-Ports als Ausgang, wenn das entsprechende Bit (0..7) auf "1" gesetzt wird. Diese können dann durch die ALIC-Befehle"SETSX" und "CLRSX" zur Ausgabe von Signalen genutzt werden.
Auf Ports, die bereits durch Ausgangs-Kanäle oder für RC-Eingangsimpulse belegt sind, hat dieser Parameter keinen Einfluss.
Port RA3 kann bei PIC16F630 und PIC16F636 nicht als Ausgang verwendet werden. 
Port RA5 kann bei PIC16F627, PIC16F628 und PIC16F648 nicht als Ausgang verwendet werden.
#define AUXOUTB <Bitmaske>
definiert freie RB-Ports als Ausgang, wenn das entsprechende Bit (0..7) auf "1" gesetzt wird. Diese können dann durch die ALIC-Befehle"SETSX" und "CLRSX" zur Ausgabe von Signalen genutzt werden.
Auf Ports, die bereits durch Ausgangs-Kanäle oder für den RC-Eingang belegt sind, hat dieser Parameter keinen Einfluss.
#define AUXOUTC <Bitmaske>
definiert freie RC-Ports (bzw. GPx bei 8-Pin PICs) als Ausgang, wenn das entsprechende Bit (0..5) auf "1" gesetzt wird. Diese können dann durch die ALIC-Befehle "SETSX" und "CLRSX" zur Ausgabe von Signalen genutzt werden.
Auf Ports, die bereits durch Ausgangs-Kanäle oder für RC-Eingangsimpulse belegt sind, hat dieser Parameter keinen Einfluss.
Port GP3 kann nicht als Ausgang geschaltet werden. 
Anmerkung: "RC" bei der Bezeichnung der Prozessor-Ports hat nichts mit "Radio Control" zu tun!
#define COMMTICK <TRUE|FALSE>
Wenn dieser Parameter auf "TRUE" eingestellt ist, ist die Zeiteinheit (Tick) für alle Ausgangskanäle fest auf 10 ms eingestellt. "DEFTICKLEN"-Befehle werden dann ignoriert (spart etwas RAM im Controller). 
#define PWMTU <Zeit>
definiert die Länge der PWM-Zeiteinheit (Zeitraster) in Mikrosekunden. In Verbindung mit dem Parameter PWMCYC ergibt sich daraus die Länge eines PWM-Zyklus (T) und daraus die PWM-Frequenz (1/T). Empfohlener Wert: 100 bei 4MHz Takt, 50 bei 8 MHz.
#define  PWMCYC <Schritte>
gibt die Anzahl der Schritte (* PWMTU) in einem vollen PWM-Zyklus, und damit auch die Helligkeits-Auflösung, sowie zusammen mit PWMTU die PWM-Frequenz.
Beispiel: mit PWMTU = 120 und PWMCYC = 70 dauert ein PWM-Zyklus 120 * 70 = 8400 µs, d.h. die LED wird mit einer Frequenz von 1s/8400µs = 119 Hz angesteuert und kann in 70 Stufen gedimmt werden.
Parameter für RC-Interface:
#define RCCHAN  <0|1|2>
definiert die Anzahl der vorhandenen RadioControl-Eingangskanäle (0, 1 oder 2 Eingänge für Servo-Impulse). Bei 0 wird das RC-Interface nicht mit eingebunden.
#define RCVAR  <x>
gibt die "Adresse" der ALIC-Variablen vor, die die Geber-Stellung des ersten RC-Eingangs enthält. Die entsprechende Variable für den zweiten RC-Eingang bekommt dann ggf. die Adresse (x+1).
#define RCV1INIT
#define RCV2INIT
Optionale Initialisierungswerte, mit denen die RC-Gebervariablen bei Systemstart vorbelegt werden können. Falls nicht definiert (auskommentiert), behalten die Variablen solange den Wert 0, bis gültige Impulse empfangen wurden.
#define RCHYST  <Wert>
Hysterese bei Auswertung der Servoimpulse (Wert * 8 µs)
#define STARTSW <Bits>
Setzt einen Start-Status für die RC-Memory Schalter (Bits 0..7 = Switch Nummer 8..15)
#define RCPW_HIGH <Schwelle>
RC-Impuls Schwellwert für Betätigung des Memory-Schalters
64 = 1,5ms, 1 Schritt = 8 µs (Standard = 90: ca. 1,7ms)
#define RCPW_LOW <Schwelle>
RC-Impuls Schwellwert für die andere Richtung des Schalters
(Standard = 39: ca. 1,3ms)
#define MS_LONG <Zeit>
min. notwendige Haltezeit des Gebers in der Endstellung zur Betätigung der Memory-Switch Funktionen 3 und 4. Zeit in 1/10 s, max.15 =  1,5s möglich
Parameter für seriellen Dateneingang:
#define SERIAL_IN <TRUE|FALSE>
TRUE führt zum Einbinden des Treibers für den seriellen Eingang  (schließt die Verwendung des RC-Interfaces aus!),
FALSE bindet den seriellen Treiber nicht ein (RC-Interface möglich).
#define BAUDRATE <Bd>
Bd = Geschwindigkeit der seriellen Schnittstelle in Baud (erlaubte Werte: zwischen 100 und 10000)
Normwerte: 300 - 600 - 1200 - 2400 - 4800 - 9600
#define SD_INVERT  <TRUE|FALSE>
TRUE bei invertiertem Eingangssignal (low = 1, high = 0), sonst FALSE (low = 0, high = 1)