RGB-LED WS2812 ansteuern

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • RGB-LED WS2812 ansteuern

      Hallo,
      Habe einige dieser RGB-LED W2812, weis aber nicht wie diese angesteurt werden können.
      Es soll möglich sein verschiedene LED in Serie zu schalten und dabei je mit einer anderen Farbe leuchten lassen.
      Wer hat dazu eine Programm-Idee ?
      Im Anhang habe alles was ich dazu finden konnte zusammen gestellt
    • Hallo liebe Leute
      ich habe die Sachen unter "Config Rainbow" mir angesehen.
      Dort gibt es auch einige Beispiele mit Quellcode.

      Leider ist es für mich sehr schwer alle Zusammenhänge zu verstehen.
      Mir würden einige ganz kleine Programmbeispiele weiterhelfen, in denen ersichtlich wird
      wie z.B. die Farbsteuerung funktioniert und auf was man da sonst noch besonders achten muß.
      Es reicht ja schon für 2 LEDs fürs erste.
      Gruß
    • Die Hilfe ist da schon recht gut mit einem Beispiel.
      Z.B. bei Config Rainbow:


      Source Code

      1. Config RAINBOW=1, RB0_LEN=8, RB0_PORT=PORTB,rb0_pin=0
      2. ' ^ connected to pin 0
      3. ' ^------------ connected to portB
      4. ' ^-------------------------- 8 leds on stripe
      5. ' ^------------------------------------- 1 channel


      Hier legst du die Anzahl Strips fest und wieviel LEDs dran sind (bei dir 2)
      Port und Pin sind der Datenausgang für den Strip.

      Source Code

      1. Dim Color(3) as Byte
      2. R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)

      Die Variablen für die Farbe deklarieren.

      Source Code

      1. RB_SelectChannel 0 ' Kanal wählen
      2. R = 0 : G = 0 : B = 100 ' blau
      3. RB_SetColor 0 , color(1) ' die erste LED
      4. R = 50 : G = 50 : B = 0 ' gelb
      5. RB_SetColor 1 , color(1) ' zweite LED
      6. RB_Send ' und raus senden
      Und dann die einzelnen LEDs einfärben und rausschicken.

      So einfach ist das ;)
    • Hallo Michael,
      Danke für Deine nette Unterweisung. Kann ich gut gebrauchen und verstehe jetzt einiges.
      Manchmal braucht es halt ein wenig anschieben.
      Ich teste weiter damit ich alles verstehen lerne.
      man lernt nie aus, auch wenn man schon 74 ist.

      Gruß und schönes Wochende
    • Hallo,
      ich habe die erste LED an den PortB.0 angeschlossen, aber es tut sich nichts.
      Dann habe ich mal PORTB.1 versuchweise drangelegt, da fingen die LEds mit dem Farbwechsel an.
      Aber so wie Michael die Farbe vorgegeben hat(siehe dort), das funktionierte leider nicht.
      Irgendetwas mache ich verkehrt.
      Und da ist noch was: Beim Schaltplan des ARDUINO habe ich gesehen, daß vor dem "DIN"-Pin der ersten LED ein Widerstand vorgeschaltet war.
      Ich glaube so 300 Ohm, ist das hier auch notwendig?
      Gruß
    • Hallo,
      ich habe einfach eines der Beispiele unter "Config Raibow" kopiert und ausprobiert.
      Dabei fiel mir auf, daß mein ATmega 8 nur mit 3684000 Hz arbeitet.
      Ich habe dem Original-Quellcode meinen Quellcode gegenüber gestellt.
      Vielleicht ligts daran. Schau mal rein
      Siehe Anhang
      Gruß

      BASCOM Source Code: Quellcode Vergleich Rainbow Softblink

      1. '-------------------------------------------------------------------------------
      2. ' rainbow_ws2812_Demo_Softblink.bas
      3. 'This demo show RB_OrColor and RB_AndColor which can be used
      4. 'for a flashing LED with a fade effect.
      5. '-------------------------------------------------------------------------------
      6. $regfile = "m88pdef.dat"
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 16
      10. $framesize = 32
      11. Config Rainbow = 1 , Rb0_len = 8 , Rb0_port = Portb , Rb0_pin = 0
      12. ' ^ connected to pin 0
      13. ' ^------------ connected to portB
      14. ' ^-------------------------- 8 leds on stripe
      15. ' ^------------------------------------- 1 channel
      16. Const Numled = 8
      17. Dim Mask As Dword
      18. Dim Fade As Byte
      19. '----[MAIN]---------------------------------------------------------------------
      20. Rb_selectchannel 0 ' select first channel
      21. Do
      22. For Fade = 0 To 7
      23. Waitms 20
      24. Shift Mask , Left
      25. Incr Mask
      26. Rb_orcolor 0 , Mask
      27. Rb_send
      28. Next
      29. For Fade = 0 To 7
      30. Waitms 20
      31. Shift Mask , Right
      32. Rb_andcolor 0 , Mask
      33. Rb_send
      34. Next
      35. Loop
      36. '-------------------------------------------------------------------------
      37. 'So sieht mein Quellcode aus:
      38. $regfile = "m8adef.dat" 'Prozessor
      39. $crystal = 3684000 'Taktfrequenz
      40. $baud = 19200
      41. $hwstack = 40
      42. $swstack = 16
      43. $framesize = 32
      44. Config Rainbow = 1 , Rb0_len = 2 , Rb0_port = Portb , Rb0_pin = 0
      45. ' ^ connected to pin 0
      46. ' ^------------ connected to portB
      47. ' ^-------------------------- 8 leds on stripe
      48. ' ^------------------------------------- 1 channel
      49. Const Numled = 2
      50. Dim Mask As Dword
      51. Dim Fade As Byte
      52. '----[MAIN]---------------------------------------------------------------------
      53. Rb_selectchannel 0 ' select first channel
      54. Do
      55. For Fade = 0 To 7
      56. Waitms 100
      57. Shift Mask , Left
      58. Incr Mask
      59. Rb_orcolor 4 , Mask
      60. Rb_send
      61. Next
      62. For Fade = 0 To 7
      63. Waitms 100
      64. Shift Mask , Right
      65. Rb_andcolor 5 , Mask
      66. Rb_send
      67. Next
      68. Loop
      Display All
    • djmsc wrote:

      Hast du einen 3,684 MHz Quarz am Mega8 oder wie kommst du auf diese Frequenz?
      Ja, die Frage stellt sich mir auch.
      Die Antwort ist wichtig, vielleicht kannst du mal eine normale LED anschließen und einfach blinken lassen.
      Da siehst du, ob die Frequenz stimmt.

      Dein Programmbeispiel ist etwas, naja, oversized.
      Ich würde in kleineren Schritten gehen, die Konstante Numled benutzt du gar nicht und das shiften kannst du später immernoch machen.

      Hier ein kleines Beispiel, was die LEDs im Sekundentakt blinken lässt:
      Probier das (wenn der Takt stimmt)

      BASCOM Source Code

      1. $regfile = "m8adef.dat" 'Prozessor
      2. $crystal = 3684000 'Taktfrequenz
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. Config Rainbow = 1 , Rb0_len = 2 , Rb0_port = Portb , Rb0_pin = 0
      7. ' ^ connected to pin 0
      8. ' ^-------------- connected to portB
      9. ' ^-------------------------- 2 leds on stripe
      10. ' ^------------------------------------- 1 channel
      11. Dim Color(3) as Byte
      12. R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
      13. Rb_selectchannel 0 ' Kanal wählen
      14. Do
      15. R = 0 : G = 0 : B = 100 ' blau
      16. Rb_setcolor 0 , Color(1) ' die erste LED
      17. R = 50 : G = 50 : B = 0 ' gelb
      18. RB_SetColor 1 , color(1) ' zweite LED
      19. Rb_send ' und raus senden
      20. Waitms 500
      21. R = 0 : G = 100 : B = 0 ' grün
      22. Rb_setcolor 0 , Color(1) ' die erste LED
      23. R = 100 : G = 0 : B = 0 ' rot
      24. Rb_setcolor 1 , Color(1) ' zweite LED
      25. Rb_send
      26. Waitms 500
      27. Loop
      Display All
    • Hallo,
      ich komme ein wenig spät dazu Euch zu berichten.
      ja mein Micro läuft auf dieser Quarzfrequenz mit einem Quarz 3684000.
      Ich habe nun einen neuen ATmega8 auf das Board gesetzt und diesen mit dem Tool "AVR Prog Tool" auf die Interne Frequenz 8Mhz umgestellt.
      Und siehe da die W2812-LEDs leuchten wie gewünscht.
      Es lag an der zu langsamen Frequenz.

      Danke an Euch für Eure Unterstützung und Hilfe
      Gruß