Difference between revisions of "U23 2005/Firmware-Makros"
(→MACRO_FADE_CHANNEL) |
(→MACRO_FADE_CHANNEL) |
||
Line 28: | Line 28: | ||
Die Helligkeit der grünen LEDs wird pro Timertakt um vier Stufen erhöht. Bei Helligkeitsstufe 160 ist das Faden beendet. Das ist nach 160:4=40 Takten, also 40×1/120=1/3 Sekunde der Fall. | Die Helligkeit der grünen LEDs wird pro Timertakt um vier Stufen erhöht. Bei Helligkeitsstufe 160 ist das Faden beendet. Das ist nach 160:4=40 Takten, also 40×1/120=1/3 Sekunde der Fall. | ||
− | MACRO_FADE_CHANNEL ChannelB, | + | MACRO_FADE_CHANNEL ChannelB, 32, 4, 0 |
− | + | Ein Überlauf findet immer statt, wenn das LowByte 256 erreicht. Dies ist hier der Fall nach 256/4=64 PWM-Zyklen. Der Überlauf bewirkt, dass bei der aktuellen Helligkeit 1 dazuaddiert wird. Wir benötigen also 64 PWM-Zyklen pro Helligkeitsstufe. Die Endhelligkeit 32 wird demnach nach 64*32=2048 PWM-Zyklen erreicht. Dies dauert genau 2048*1/120=17,1 Sekunden. | |
'''Tipp:''' Linksshiften von Highbyte,LowByte verdoppelt, Rechtsshiften halbiert die Fade-Geschwindigkeit. | '''Tipp:''' Linksshiften von Highbyte,LowByte verdoppelt, Rechtsshiften halbiert die Fade-Geschwindigkeit. |
Revision as of 21:41, 10 November 2005
Die Datei script_macros.inc enthält einige Makros mit denen sehr schnell statische Skripts für die Firmware erstellt werden können.
Contents
MACRO_NOP
Argumente: (keine)
Funktion: Bricht die Ausführung des Scripts im aktuellen Zyklus ab.
MACRO_FADE_CHANNEL
Argumente: Channel TargetBrightness LowByte HighByte
- Channel: Gibt den Farbkanal an. Mögliche Werte sind ChannelR (Rot), ChannelG (Grün) und ChannelB (Blau).
- TargetBrightness: Gibt die Helligkeit des Kanals an. Wertebereich 0 (aus) bis 255 (volle Helligkeit).
- HighByte, LowByte: Fixkommazahl (Achtung: HighByte vor dem Komma - LowByte hinter dem Komma), die zur aktuellen Helligkeit dazuaddiert wird. Von der Größe der Zahl hängt die Geschwindigkeit des Fadens ab.
Funktion: Fadet einen gegebenen Farbkanal mit einer gegebenen Geschwindigkeit auf eine gegebene Helligkeit. Die Werte sind immer positiv, es wird aber automatisch erkannt, ob addiert oder subtrahiert werden muss, um die TargetBrightness zu erreichen. Danach wird direkt mit der nächsten Instruktion weitergemacht.
Beispiel:
MACRO_FADE_CHANNEL ChannelR, 120, 0, 1
Die Helligkeit der roten LEDs wird pro 1/120 Sekunde (Timertakt) um eine Stufe erhöht (weil HighByte=1, LowByte=0 == 1,0). Bei Helligkeitsstufe 120 ist das Faden beendet. Dies ist nach genau einer Sekunde der Fall, wenn der Rotkanal vorher die Helligkeit 0 hatte.
MACRO_SET_CHANNEL ChannelG, 0 MACRO_FADE_CHANNEL ChannelG, 160, 0, 4
Die Helligkeit der grünen LEDs wird pro Timertakt um vier Stufen erhöht. Bei Helligkeitsstufe 160 ist das Faden beendet. Das ist nach 160:4=40 Takten, also 40×1/120=1/3 Sekunde der Fall.
MACRO_FADE_CHANNEL ChannelB, 32, 4, 0
Ein Überlauf findet immer statt, wenn das LowByte 256 erreicht. Dies ist hier der Fall nach 256/4=64 PWM-Zyklen. Der Überlauf bewirkt, dass bei der aktuellen Helligkeit 1 dazuaddiert wird. Wir benötigen also 64 PWM-Zyklen pro Helligkeitsstufe. Die Endhelligkeit 32 wird demnach nach 64*32=2048 PWM-Zyklen erreicht. Dies dauert genau 2048*1/120=17,1 Sekunden.
Tipp: Linksshiften von Highbyte,LowByte verdoppelt, Rechtsshiften halbiert die Fade-Geschwindigkeit.
MACRO_FADE_CHANNELS
Argumente: BrightnessR BrightnessG BrightnessB
- Brightness{R,G,B}: Die Helligkeit des {roten, grünen, blauen} Channels (0-255).
Funktion: Fadet alle Farbkanäle auf die jeweils angegebenen Helligkeitswerte. Die Geschwindigkeit wird dabei von einer vorherigen MACRO_FADE_CHANNEL-Routine übernommen.
MACRO_JUMP
Argumente: RelativeInstructionCount
- RelativeInstructionCount: Anzahl der Instruktionen.
Funktion: Springt um eine gewisse Anzahl an Instruktionen zurück. Zu beachten: Die JUMP-Instruktion muss auch übersprungen werden! Beispiel:
1: MACRO_NOP 2: MACRO_JUMP -2 ; springt zu Zeile 1
MACRO_SET_CHANNEL
Argumente: Channel TargetBrightness
- Channel: Gibt den Farbkanal an. Mögliche Werte sind ChannelR (Rot), ChannelG (Grün) und ChannelB (Blau).
- TargetBrightness: Die Helligkeit (0-255).
Funktion: Setzt den angegebenen Channel auf die angegebene Helligkeit und macht direkt mit der nächsten Instruktion weiter.
Beispiel:
MACRO_SET_CHANNEL ChannelR, 5
MACRO_SLEEP
Argumente: Delay
- Delay: Verzögerung in 1/120 sec als 16bit-Zahl (also max. 65535).
Funktion: Wartet die angegebene Zeit.
Kleines Rechenbeispiel zum Zeitgefühl: Die maximal mögliche Verzögerung beträgt 65535 (Takt) × 1/120 (Sekunde/Takt) = 546.125 (Sekunden) == 9 Minuten und 6 Sekunden.
MACRO_WAIT
Argumente: Bitmask
- Bitmask: Bitmaske des Kanals.
- Rot: (1<<ChannelR)
- Grün: (1<<ChannelG)
- Blau: (1<<ChannelB)
Funktion: Wartet, bis ein Kanal die gewünschte Helligkeit erreicht hat.
1: MACRO_FADE_CHANNEL ChannelR, 255, 35, 0 2: MACRO_WAIT (1<<ChannelR)
MACRO_CLEAR
Argumente: (keine)
Funktion: Setzt alle Kanäle auf Helligkeit 0 zurück.
-- manuke & Diozaka