Ergebnis 1 bis 7 von 7

Thema: rainbow.lib

  1. #1
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60

    Beitrag rainbow.lib




    *********************************
    NEWS:

    15.11.2016: neue OnlineHilfe
    23.01.2016: Version 1.21 Bugfix
    17.01.2015: V1.2
    15.01.2015: V 1.2 BETA
    31.12.2014: Neue Version 1.12 - aufgrund einer Fehlerbehebung.
    31.12.2014: Eine Beschreibung findet sich von nun an im WIKI.
    Geändert von Galahat (12.12.2016 um 09:25 Uhr)

  2. #2
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60

    Die hier beschriebene Library soll den BASCOM Programmierer bei der Ansteuerung von RGB-Led Streifen auf Basis des Typs WS2812(b) unterstützen und liefert dazu die grundlegenden Elemente und noch mehr. Dazu gehören insbesondere die Generierung des erforderlichen Datenstroms sowie einfach anzuwendende Routinen bezüglich der Farbgebung einzelner LED oder einer Musterbildung.
    Eine geschickte Kopplung dieser Routinen ermöglicht eine hohe Vielfalt an Möglichkeiten.
    Die Library vereinfacht die Verwendung von LED-Streifen. Dazu dimensioniert, verwaltet und bedient die Library die nötigen Speicherräume.
    Seit der Version 2.0.7.9 ist die Rainbow-Library in Gestalt der RainbowBSC.Lib, Bestandteil von BASCOM-AVR, siehe RAINBOWBSC
    Zur Implementierung der Rainbow-Funktionen in die BASCOM-Umgebung und um Namenskonflikte mit bestehenden BASCOM-Befehlen auch in Zukunft auszuschließen, wurde die Rainbow-Library entsprechend angepasst. Ferner ist nach heutigem Stand nicht geplant, die ursprüngliche Lib weiter zu entwickeln, eventuelle Korrekturen sind davon natürlich ausgenommen.

    Datenblatt
    WS2812(b


    Chips vom Typ WS2812 und WS2812b basieren auf der Technik des IC WS2811 - ein RGB-LED Treiber mit Pulsweitenmodellierung und Ein-Drahtschnittstelle.
    In einem WS2812er sind bereits eine RGB-LED und die Funktionalität eines WS2811 in einem Gehäuse kombiniert.
    Diese Bauteile gibt es einzeln oder bereits als Lichterkette fertig montiert, in unterschiedlichen Längen erhältlich. Auch gibt es Angebote, bei denen diese LED-Typen in Ringform auf einer Leiterkarte aufgebracht sind und vieles mehr.

    Eine wirklich angenehme Eigenschaft dieses IC ist sein Konzept der DaisyChain Topologie. Obendrein, wird außer der Spannungsversorgung nur ein Pin vom Mikroprozessor in Anspuch genommen. Damit sind diese LED's gegenüber einer LED-Matrix eine echte Alternative, was die Prozessorlast und auch die Belegung von IO-Pins anbelangt.



    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	WS8212bCircuit.png 
Hits:	63 
Größe:	89,5 KB 
ID:	164

    Quelle: Datenblatt
    Angehängte Dateien Angehängte Dateien
    Geändert von Galahat (18.11.2016 um 15:21 Uhr)

  3. #3
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60

    Um die Library in einem BASCOM-Programm verwenden zu können, sind die folgenden Zeilen in den Programmcode zu integrieren:
    Code:
     $Lib "Rainbow.lib"
     $external WS2812b
    Damit ist die Basisimplementierung abgeschlossen.

    Zu dieser Basis gehören drei Routinen:
    Code:
     Declare Sub Select_Rainbow (byval Channel As Byte)
     Declare Sub SetColor (byval LedNr As Word , Color() as Byte)
     Declare Sub Send()
    Alle weiteren zur Verfügung stehenden Routinen sind, wie im Folgenden gezeigt zu implementieren:
    Code:
     Declare Sub Fill(Color() as Byte):$external USE_FILL
     Declare Sub Fill_Colors(Color() as Byte) : $external USE_FILL                                    ' new v1.2
     Declare Sub Fill_Stripe(Color() as Byte) : $external USE_FILL_Stripe                             ' new v1.2
     Declare Sub Clear_Stripe() : $external Use_Clear_Stripe
     Declare Sub Clear_Colors() : $external Use_Clear_Colors
     Declare Sub Swap_Color (byval LedNr1 As Word , Byval LedNr2 As Word):$external USE_SWap_Color
     Declare Sub Rotate_Left (byval Left_index As Word , Byval Width As Word):$external USE_Rotate_Left
     Declare Sub Rotate_Right (byval Left_index As Word , Byval Width As Word) :$external USE_Rotate_Right
     Declare Sub Shift_Right (byval Left_index As Word , Byval Width As Word) :$external USE_Shift_Right
     Declare Sub Shift_Left (byval Left_index As Word , Byval Width As Word) :$external USE_Shift_Left
     Declare Sub AND_Color (byval LedNr As Word , Color() as Byte) :$external USE_AND_Color
     Declare Sub OR_Color (byval LedNr As Word , Color() as Byte) :$external USE_OR_Color
     Declare Sub ADD_Color (byval LedNr As Word , Color() as Byte) :$external USE_ADD_Color
     Declare Sub SUB_Color (byval LedNr As Word , Color() as Byte) :$external USE_SUB_Color
     Declare Sub Change_Pin (Byval Port as Byte , Byval Pin as Byte) :$external USE_Change_Pin
     Declare Sub SetTableColor (byval LedNr As Word , Byval index As Byte):$external USE_SetTableColor
     Declare Function GetColor (byval LedNr As Word)as Byte:$external USE_GetColor
     Declare Function LookUp_Color(Byval index As Byte) as Byte : $external USE_LookUp_Color            'new v1.2
    Wird eine Routine oder Funktion nicht benötigt, kann die entsprechende Zeile auskommentiert oder gelöscht werden, um den ansonsten benötigten Programmspeicherplatz freizugeben. Davon ausgenommen sind die drei Routinen Select_Rainbow(), SetColor() und Send(), deren Deklaration vorausgesetzt wird.

    Mit dieser Library können bis zu 8 LED-Streifen unabhängig voneinander bedient werden. Dazu verwaltet die Rainbow.Lib eben so viele Farbdatenspeicher und Konfigurationsdaten, die zusammen jeweils einen Rainbow oder Kanal bilden.
    Um die Routinen der Library auf einen LED-Streifen anwenden zu können, muss mindestens ein Kanal implementiert werden.

    So wird ein Kanal erzeugt:
    Code:
    '#Rainbow0
     Const Rainbow0_Len = 8
     Const Rainbow0_Port = PORTB
     Const Rainbow0_Pin = PB0
    Und so ein weiterer:
    Code:
    '#Rainbow1
     Const Rainbow1_Len = 16
     Const Rainbow1_Port = PORTC
     Const Rainbow1_Pin = PC3

    Die Konstantennamen sind fest vorgegeben und beginnen „Rainbow“, gefolgt von einer Kanalnummer, z.B. 0 ,1 ,2 usw. bis 7 und mit der durch einen Unterstrich getrennten Zweckbindung, z.B. „Port“.

    • Rainbow1_Len : Die Anzahl der LED die der Kanal verwalten soll, bzw. die Länge des LED-Streifens.
    • Rainbow1_Port : Der Port der dem der Kanal zugeordnet werden sollen
    • Rainbow1_Pin : Der Portpin, von 0 bis 7 oder in der Form P[A..][0..7]



    Es ist durchaus möglich gleich mehrere Kanäle auf denselben Pin anzuwenden, oder den Pin bei Bedarf zur Laufzeit zu wechseln. Ein explizites Konfigurieren eines Pins als Ausgang ist nicht erforderlich, - das erledigt der folgende Befehl gleich mit.
    Code:
     Call Select_Rainbow(ChannelNr)

    Hinweis: Alle Indizes wie ChannelNr oder LedNr sind Nullbasierend
    Solange der Kanal nicht gewechselt werden soll, oder es wird nur ein Kanal verwendet, genügt es, diesen Befehl nur einmal auszuführen. Als Parameter erhält dieser Befehl die Kanalnummer.

    Das folgende Beispiel fasst die obigen Ausführungen zusammen:
    Code:
    $Lib "Rainbow.lib"
    $external WS2812b
    
     Declare Sub Select_Rainbow(byval Channel As Byte)
     Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
     Declare Sub Send()
    
     '#Rainbow0
     Const Rainbow0_Len = 8
     Const Rainbow0_Port = PORTB
     Const Rainbow0_Pin = PB0
    
     Call Select_Rainbow(0)
    
     '   Das Programm
     '           ....
    
     End


    zurück zum Inhaltsverzeichnis



    3.1 Einfaches Beispiel


    Die einfachste Methode um einer LED eine Farbe zuzuordnen stellt die Routine ]SetColor dar.
    Als Parameter wird ein 0-basierender LED-Index und ein Array der Länge 3 des Typs Byte erwartet.
    Zuvor muss also ein Array beliebigen namens erstellt werden, das die RGB Farbanteile aufnimmt und ]SetColor übergeben werden kann.

    Code:
    Dim Farbe(3) as Byte
    Byte1 des Array repräsentiert dabei den Rot-, Byte 2 den Grün und Byte 3 den Blau-Anteil.
    Für die einfachere Handhabung empfiehlt es sich Verweise auf die einzelnen Elemente anzulegen.
    Code:
     ROT alias Farbe (_Base)
     GRN alias Farbe (_Base +1)
     BLU alias Farbe (_Base +2)
    Soll nun die erste LED einer Kette in einer bestimmten Farbe, zB. Orange erstrahlen, kann man so vorgehen:
    Code:
     ROT = 200 : GRN = 100 : BLU = 0
     Call SetColor(0, Farbe())
    Bis hierhin wurde allerdings nur die Farbinformation an den Farbspeicher des Kanal übertragen, eine Ausgabe an die LED-Kette erfolgt dann noch mit Send()
    Wir fassen wieder zusammen:
    Code:
    $Lib "Rainbow.lib"
     $external WS2812b
    
     Declare Sub Select_Rainbow(byval Channel As Byte)
     Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
     Declare Sub Send()
    
    
      '#Rainbow0
      Const Rainbow0_Len = 8
      Const Rainbow0_Port = PORTB
      Const Rainbow0_Pin = PB0
      
    
      Dim Farbe(3) as Byte
    
      ROT alias Farbe (_Base)
      GRN alias Farbe (_Base +1)
      BLU alias Farbe (_Base +2)
    
    
      Call Select_Rainbow(0)
    
      ROT = 200 : GRN = 200 : BLU = 0
    
      Call SetColor(0, Farbe())
      
      Call Send()
       
     End


    zurück zum Inhaltsverzeichnis
    Geändert von Galahat (22.11.2016 um 12:28 Uhr)

  4. #4
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60
    4 Weitere Beispiele

    4.1 Blinken

    Ein einfaches Programmbeispiel das eine LED rot blinken lässt.

    Code:
    'PROGRAMM:    RAINBOW_EXPL_Blink_I
     'DESCRIPTION: Blinking Red
    
    
    $Regfile = "m88def.dat"
    $Crystal = 16000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    
    
     '----[IMPLEMENT RAINBOW]--------------------------------------------------------
    
    $Lib "Rainbow.lib"
    $external WS2812b
    
    Declare Sub Select_Rainbow(byval Channel As Byte)
    Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
    Declare Sub Send()
    
    '#Rainbow0
    Const Rainbow0_Len = 1           'just 1 Led
    Const Rainbow0_Port = PORTB
    Const Rainbow0_Pin = PB0
    
    'Global Color-variables 
    Dim Color(3) as Byte
    R alias Color(_base) : G alias Color(_base+1) : B alias Color(_base+2)
    
    
    
    
     '----[MAIN]---------------------------------------------------------------------
    
    Call Select_Rainbow(0)          'select Rainbow 
    
    Do
    
        R = not R                    'alternately red and dark
         Call SetColor(0 , color())
         Call Send()
         Waitms 500
    
    Loop
    
    
    End
    zurück zum Inhaltsverzeichnis


    4.2 Knight-Rider

    Dieses Beispiel erzeugt mittels Shift-Befehlen den bekannten Knight-Rider Effekt.
    Code:
    'PROGRAMM:    RAINBOW_EXPL_Shift
     'DESCRIPTION: Knight-Rider effect
    
     $Regfile = "m88def.dat"
     $Crystal = 16000000
     $hwstack = 40
     $swstack = 16
     $framesize = 32
     '_______________________________________________________________________________
     '----[IMPLEMENT RAINBOW]--------------------------------------------------------
    
    $Lib "Rainbow.lib"
     $external WS2812b
    
     Declare Sub Select_Rainbow(byval Channel As Byte)
     Declare Sub SetColor(byval LedNr As Word , Color() as Byte)
     Declare Sub Send()
     Declare Sub Shift_Left(byval Left_index As Word , Byval Width As Word) : $external USE_Shift_Left
     Declare Sub Shift_Right(byval Left_index As Word , Byval Width As Word) : $external USE_Shift_Right
    
     '#Rainbow0
     Const Rainbow0_Len = 10
     Const Rainbow0_Port = PORTB
     Const Rainbow0_Pin = PB0
    
     'Gloabal Color-variables
     Dim Color(3) as Byte
     R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
    
     '_______________________________________________________________________________
     '----[MAIN]---------------------------------------------------------------------
    
    Dim n as Byte
    
     Call Select_Rainbow(0)       'select Rainbow
    
     R = 50 : G = 0 : B = 100       'define a color
    
     Call SetColor(0 , color())
     Call Send()
    
     Do
        For n = 1 to 9
           Call Shift_right(0 , 10)
           Waitms 100
           Call Send()
        Next
    
        For n = 1 to 9
           Call Shift_left(0 , 10)
           Waitms 100
           Call Send()
        Next
     Loop
    
     End
    zurück zum Inhaltsverzeichnis
    Geändert von Galahat (18.11.2016 um 22:31 Uhr)

  5. #5
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60
    5 Befehlsreferenz


    5.1 Select_Rainbow()

    Wählt den Kanal auf den alle Routinen wirken und initialisiert den Ausgabepin gemäß der Konfiguration des angegebenen Kanals.

    Deklaration:

    declare sub
    Select_Rainbow(byval Channel As byte)


    Parameter:
    Die Kanalnummer vom Typ Byte, 0-7.

    <<

    5.2 SetColor()

    Setzt die Farbe einer LED

    Deklaration:


    declare sub SetColor(byval LedNr As word, Color() as byte)


    Parameter:


    LedNr
    .......Wordvariable oder Konstante die dem Index einer LED entspricht
    Color()......Bytearray der Länge 3 das die RGB Fabinformation übergibt.


    Beispiel:
    Code:
     Dim Farbe(3) as Byte
        ROT alias Farbe (_Base)
        GRN alias Farbe (_Base +1)
        BLU alias Farbe (_Base +2)
    
        ROT = 200 : GRN = 100 : BLU = 0
    
     Call SetColor(0, Farbe())
     Call Send()
    <<


    5.3 Send()

    Gibt die Farbinformation des aktiven Kanals an einen Pin aus

    Deklaration:


    declare sub Send()

    <<

    5.4 Clear_Stripe()

    Löscht die LED-Kette am Ausgangspin den aktiven Kanals.
    Die Farbinformationen im Speicher bleiben erhalten. Die Ausführung dieses Befehls hat direkte Auswirkungen, ein Aufruf von Send() ist also nicht nötig.

    Deklaration


    declare sub Clear_Stripe() :$external Use_Clear_Stripe

    <<

    5.5 Clear_Colors()

    Löscht die Farbinformationen im Speicher des aktiven Kanals.

    Deklaration


    declare sub Clear_Colors() :$external Use_Clear_Colors

    <<

    5.6 Fill()

    Diese Routine arbeitet wie Clear_Colors(), belegt jedoch den gesamten Farbspeicher des aktiven Kanals mit einer Farbe.
    Die Ausführung dieses Befehls hat direkte Auswirkungen, ein Aufruf von Send() ist also nicht nötig.

    Deklaration


    declare sub Fill(Color() as byte) :$external USE_FILL

    Parameter


    Color()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.7 Fill_Colors()

    Diese Routine belegt den gesamten Farbspeicher des aktiven Kanals mit einer Farbe.

    Deklaration

    declare sub Fill_Colors(Color() as byte) :$external USE_FILL

    Parameter


    Color()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.8 Fill_Stripe()

    Diese Routine belegt den Stripe des aktiven Kanals mit einer Farbe, der Farbspeicher bleibt jedoch davon unberührt.

    Deklaration

    declare sub Fill_Stripe(Color() as byte) :$external USE_FILL_Stripe


    Parameter


    Color()....Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.9 Swap_Color()

    Tauscht die Farbinformationen zweier LED gegeneinander aus.

    Deklaration


    declare sub Swap_Color(byval LedNr1 as word, byval LedNr2 as word) :$external USE_Swap_Color


    Parameter


    LedNr1...Wordvariable oder Konstante
    LedNr2...Wordvariable oder Konstante

    <<


    5.10 Rotate_Left


    Mit diesem Befehl können alle Farben eines Abschnittes einer LED-Kette nach links bewegt werden. Nach links heraus geschobene Farben werden rechts wieder eingeschoben.

    Deklaration


    declare sub Rotate_Left(byval Left_index As word, byval Width as word) :$external USE_Rotate_Left


    Parameter


    Left_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.
    Width..........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.

    <<

    5.11 Rotate_Right


    Mit diesem Befehl können alle Farben eines Abschnittes einer LED-Kette nach rechts bewegt werden. Nach rechts heraus geschobene Farben werden links wieder eingeschoben.

    Deklaration


    declare Sub Rotate_Right(byval Left_index as word, byval Width as word) :$external USE_Rotate_Right


    Parameter


    Left_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.
    Width..........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Rotationsverschiebung unterzogen werden sollen.

    <<

    5.12 Shift_Right


    Mit diesem Befehl können alle Farben oder auch nur Farben einzelner Abschnitte einer LED-Kette nach rechts bewegt werden.

    Deklaration


    declare Sub Shift_Right(byval Left_index as word, byval Width as word) :$external USE_Shift_Right


    Parameter


    Left_Index...Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.
    Width...........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.

    <<

    5.13 Shift_Left


    Mit diesem Befehl können alle Farben oder auch nur Farben einzelner Abschnitte einer LED-Kette nach links bewegt werden.

    Deklaration


    declare sub Shift_Left(byval Left_index as word, byval Width as word) :$external USE_Shift_Left


    Parameter

    Left_Index....Wordvariable oder Konstante die die erste LED des Bereiches angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.
    Width...........Wordvariable oder Konstante die die Anzahl der LED angibt, dessen Farben einer Positionsverschiebung unterzogen werden sollen.

    <<

    5.14 AND_Color


    Führt eine AND-Operation mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch.

    Deklaration


    declare Sub AND_Color(byval LedNr as word, Color() as byte) :$external USE_AND_Color


    Parameter


    LedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.
    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.15 OR_Color


    Führt eine OR-Operation mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch.

    Deklaration


    declare sub OR_Color(byval LedNr as word, Color()as Byte) :$external USE_OR_Color


    Parameter

    LedNr
    ....Wordvariable oder Konstante die dem Index einer LED entspricht.
    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.16 ADD_Color


    Führt eine Addition mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch. Überläufe von Farbanteilen werden unterbunden.

    Deklaration


    Declare Sub ADD_Color(byval LedNr as word, Color() as byte) :$external USE_ADD_Color


    Parameter

    LedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.
    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.17 SUB_Color


    Führt eine Subtraktion mit der Farbinformation einer angegebenen LED und der übergebenen Farbinformation durch. Unterläufe von Farbanteilen werden unterbunden.

    Deklaration

    Declare Sub SUB_Color(byval LedNr as word, Color() as byte) :$external USE_SUB_Color


    Parameter

    LedNr....Wordvariable oder Konstante die dem Index einer LED entspricht.
    Color().......Bytearray der Länge 3 das die RGB Fabinformation übergibt.

    <<

    5.18 Change_Pin


    Ändert den Ausgabepin eines Kanals zur Laufzeit.
    Bedingt dadurch, dass die Port-Pin Kombination beim selektieren eines Kanals in das SRAM, bzw. in Variablen geladen wird, ist es möglich die Ausgabe eines Kanals zur Laufzeit auf einen anderen Pin umzuleiten.

    Hinweis:
    Durch Ausführung des Befehls Select_Rainbow() wird der Ausgabepin gemäß der Konfiguration des angegebenen Kanals wieder hergestellt. D.h es wird wieder der Urzustand, wie er bei der Initialisierung zugrunde lag, hergestellt.

    Deklaration

    Declare Sub Change_Pin(byval Port as byte, byval Pin as byte) :$external USE_Change_Pin


    Parameter

    Port....Bytevariable oder Konstante mit der IO-Adresse des Ports
    Pin......Bytevariable oder Konstante mit Angabe der Pinnummer (0-7)



    Beispiel

    Code:
     Const PORTneu = PORTB + &H20  
    
       Call Change_Pin(PORTneu , 5)     ' Ausgabepin PORTB.5

    <<

    5.19 SetTableColor


    RGB-Daten können in einer Tabelle angelegt werden. Die Library stellt für den einfachen Zugriff einen Befehl zum Auslesen der 3 Byte langen RGB-Daten bereit. Die Daten sind unter dem Label Rainbow_Colors: aufzuführen, siehe Beispiel.

    Deklaration


    declare sub SetTableColor(byval LedNr as word, byval index as byte) :$external USE_SetTableColor


    Parameter

    LedNr.....Wordvariable oder Konstante die dem Index einer LED entspricht.
    Index.....Bytevariable oder Konstante mit dem Index der Farbe.


    Beispiel


    Code:
    '...
    
      Call SetTableColor(0, 4)   'LED 1 wird gelb 
    
       '...
    
       End
    
    
      Rainbow_Colors: 
          '       R  ,  G  ,  B                    index    
          Data &HFF , &H00 , &H00       'Red         0 
          Data &H00 , &HFF , &H00       'Green       1   
          Data &H00 , &H00 , &HFF       'Blue        2 
          Data &HFF , &HA5 , &H00       'Orange      3 
          Data &HFF , &HFF , &H00       'Yellow      4 
          Data &HFF , &H69 , &HB4       'HotPink     5


    Hinweis:
    Wird die Deklaration in den Programmtext eingefügt (nicht auskommentiert), erwartet der Compiler das Label Rainbow_Colors: !

    <<

    5.20 GetColor()


    Mit dieser Funktion kann die Farbinformation einer LED des aktiven Kanal in Form eines 3 Byte langen Arrays aus dem Farbspeicher zurück gelesen werden.

    Deklaration

    declare function GetColor(byval LedNr as word)as byte :$external USE_GetColor


    Parameter

    LedNr.......Wordvariable oder Konstante die dem Index einer LED entspricht

    Beispiel

    Code:
     Dim Farbe(3) as Byte 
    
       Farbe(1) = GetColor(0) 'Farbe der ersten LED zurück lesen

    <<

    5.21 LookUp_Color()


    Diese Funktion gibt ein RGB Array aus dem Programmspeicher zurück. Es wird keine Manipulationen am Farbspeicher oder am Stripe durchgeführt. Diese Funktion dient lediglich als Hilfsfunktion.

    Deklaration

    declare function LookUp_Color(byval index as byte) as byte :$external USE_LookUp_Color


    Parameter


    index.......Bytevariable oder Konstante, als Index zu den Daten einer Farbe im Programmspeicher


    Beispiel

    Code:
     Dim Farbe(3) as Byte 
    
       Farbe() = LookUp_Color(4) 'Farbe gelb
    
    
       Rainbow_Colors:
              '       R  ,  G  ,  B                    index    
         Data &HFF , &H00 , &H00       'Red         0 
         Data &H00 , &HFF , &H00       'Green       1   
         Data &H00 , &H00 , &HFF       'Blue        2 
         Data &HFF , &HA5 , &H00       'Orange      3 
         Data &HFF , &HFF , &H00       'Yellow      4 
         Data &HFF , &H69 , &HB4       'HotPink     5

    <<
    Geändert von Galahat (27.11.2016 um 19:45 Uhr)

  6. #6
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60


    • Welche Befehle haben direkt sichtbare Auswirkungen ohne einen expliziten Aufruf von Send()?

    Das sind neben Send() die Befehle Clear_Stripe() , Fill() und Fill_Stripe()..

    • Wie wirken sich Interrupts aus?

    In dem Augenblick in dem ein Datenstrom an einen Stripe ausgegeben wird, sind Interrupts gesperrt um das erforderliche Timing nicht zu beeinträchtigen.

    • Worauf muss ich achten?

    Zwischen Befehlskombinationen wie z.B. Fill() gefolgt von Send() einen zeitlichen Abstand von mindesten 50µs zu gewährleisten.
    Angehängte Dateien Angehängte Dateien
    Geändert von Galahat (22.11.2016 um 12:35 Uhr)

  7. #7
    Platinenputzer Avatar von Galahat
    Registriert seit
    09.08.2008
    Ort
    Sauerland
    Beiträge
    60
    Für Fragen oder Ähnliches, bitte HIER ein neues Thema erstellen !


    zum Inhaltsverzeichnis
    Geändert von Galahat (18.11.2016 um 15:29 Uhr)

Stichworte

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •