WS2912B Atmega8 Farben Durch Faden

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

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • WS2912B Atmega8 Farben Durch Faden

      Ich grüße euch Bascom User a_58_b54cfdb4

      Ich habe folgende Komponenten:

      WS2812b LED Stripe 30Stück
      Atmega8 Controller läuft auf 8Mhz
      Bascom-AVR 2.0.8.5

      Ich wollte das alle Led's die einzelenen Farben durch faden.
      Da fand ich dan das hier:
      Faden

      Ich fand auch dies:
      ws2812 Ansteuern

      Ich hab dann das Programm angepasst auf den Atmega8 wie folgt:
      Erst mal mit den angegebenen 8 LED's.

      BASCOM Source Code

      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 = "m8def.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
      Display All

      Mir ist aufgefallen das "Const Numled=8" Grau Dargestellt wird, was auch immer das bedeutet?

      Bei der Check Syntax kamen keine Fehler und beim Brennen des Atmega8 auch nicht.

      Die LED's machen nichts, zeigen nicht mal an das sie gehen.

      Dann hab ich mal ein anderes Programm genommen um zu schauen ob der Atmega8 und die LED's gehen und es funktioniert soweit was die Komponenten betrifft alles.

      Nun meine Frage:
      Ist das ganze Funktionsfähig mit der Bascom Version den LED's und dem Atmega8 mit 8Mhz?
      Wenn ja, was kann da nicht passen?
      Ist das Programm den für das Faden von Farben, den so verstehe ich es das es dafür gedacht ist.

      Vielleicht könnt Ihr mir weiter helfen.

      Gruß Wasi
    • Hab jetzt mal ein Update von Bascom auf 2.0.8.6 gemacht.

      Und jetzt Fadet die LED, jedoch nur die erste.

      Hier mal das Programm für 30 LED's.

      BASCOM Source Code

      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 = "m8def.dat"
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 16
      10. $framesize = 32
      11. Config RAINBOW=1, RB0_LEN=30, 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 29
      23. Waitms 200
      24. Shift MASK , left
      25. Incr MASK
      26. RB_ORColor 0 , MASK
      27. RB_Send
      28. Next
      29. For Fade = 0 to 29
      30. Waitms 200
      31. Shift MASK , right
      32. RB_ANDColor 0 , MASK
      33. RB_Send
      34. Next
      35. Loop
      Display All

      Ich werde jetzt erstmal einiges Probieren.
    • Hallo chw9999
      Das ist auch richtig, da er es noch nicht eingesetzt hat, wäre aber für die Zukunft interessant. angegeben sind ja oben schon rb0_len=30
      zB.
      const Numled = 30
      rb0_len = numled
      For fade = 0 to numled -1
      .....
      next fade
      Das Programm hatte hier schon mal jemand reingestellt, copy paste zum testen.
      MfG
    • chw9999 wrote:

      Wasi wrote:

      Mir ist aufgefallen das "Const Numled=8" Grau Dargestellt wird, was auch immer das bedeutet?
      Wenn Du eine Definition nicht im späteren Code verwendest, wird dies mit "grauem" Text angezeigt. In Deinem Code wird Numled tatsächlich auch nur definiert und nicht verwendet.
      Danke @chw999 für die Info, hatte mir das schon gedacht, da ich sonst nichts im Code fand.


      walter99 wrote:

      Hallo chw9999
      Das ist auch richtig, da er es noch nicht eingesetzt hat, wäre aber für die Zukunft interessant. angegeben sind ja oben schon rb0_len=30
      zB.
      const Numled = 30
      rb0_len = numled
      For fade = 0 to numled -1
      .....
      next fade
      Das Programm hatte hier schon mal jemand reingestellt, copy paste zum testen.
      MfG
      Hab das gnze mal so Umgesetzt.

      BASCOM Source Code

      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 = "m8def.dat"
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 16
      10. $framesize = 32
      11. Config RAINBOW=1, RB0_LEN=Numled, 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=30
      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 Numled - 1
      23. Waitms 20
      24. Shift MASK , left
      25. Incr MASK
      26. RB_ORColor Fade , MASK
      27. RB_Send
      28. Next
      29. For Fade = 0 to Numled - 1
      30. Waitms 20
      31. Shift MASK , right
      32. RB_ANDColor Fade , MASK
      33. RB_Send
      34. Next
      35. Loop
      Display All

      Jetzt ist es so das bei diesem Programm jede LED unterschiedliche Farben Faded.

      Wie Faden alle LED's die gleiche Farbe und das gleichzeitig? Also schon unterschiedliche farben, aber alle LED's Faden z.B. von Rot zu Grün ect.


      Gruß Wasi
    • Hallo Wasi
      So könnte es gehen, aber keine Garantie, besser ist mit einer Farbtabelle zu arbeiten, Bsp wäre mal unter meinen Beiträgen zuschauen oder suchen Spielereien mit ws2812.
      [*]For Fade = 0 to Numled - 1
      [*] Waitms 20
      [*] Shift MASK , left
      [*] Incr MASK
      [*]for n = 0 to Numled-1
      [*] RB_ORColor n , MASK
      [*]next n
      [*] RB_Send
      [*] Next
      [*]MfG
    • Ich persönlich schreib lieber etwas mehr Zeilen Code, wenn er dafür einfacher nachvollziehbar ist ;)

      BASCOM Source Code

      1. ' =====================================================================
      2. ' WS2812b Fading Demo
      3. ' =====================================================================
      4. ' Autor Robert 2025
      5. ' Bascom 2.0.8.6
      6. ' Version 1.0.0
      7. $regfile = "m8def.dat"
      8. $crystal = 8000000
      9. $hwstack = 32
      10. $swstack = 10
      11. $framesize = 40
      12. Const Num_leds = 30 ' Anzahl LEDs
      13. Config Rainbow = 1 , Rb0_len = Num_leds , Rb0_port = Portb , Rb0_pin = 0
      14. Dim Farbe(3) As Byte
      15. Rot Alias Farbe(_base)
      16. Gruen Alias Farbe(_base + 1)
      17. Blau Alias Farbe(_base + 2)
      18. Rb_selectchannel 0
      19. Const Pause = 10 ' Fade-Geschwindigkeit
      20. Do
      21. ' Faden von Rot zu Grün
      22. For Gruen = 0 To 255
      23. Rot = 255 - Gruen
      24. Blau = 0
      25. RB_Fillstripe Farbe(_base) ' Füllt den ganzen Stripe mit der eingestellten Farbe
      26. Waitms Pause
      27. Next
      28. ' Faden von Grün zu Blau
      29. For Blau = 0 To 255
      30. Gruen = 255 - Blau
      31. Rot = 0
      32. RB_Fillstripe Farbe(_base)
      33. Waitms Pause
      34. Next
      35. ' Faden von Blau zu Rot
      36. For Rot = 0 To 255
      37. Blau = 255 - Rot
      38. Gruen = 0
      39. RB_Fillstripe Farbe(_base)
      40. Waitms Pause
      41. Next
      42. Loop
      43. End
      Display All
    • Wasi wrote:

      BASCOM Source Code

      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 = "m8def.dat"
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 16
      10. $framesize = 32
      11. Config RAINBOW=1, RB0_LEN=Numled, 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=30
      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 Numled - 1
      23. Waitms 20
      24. Shift MASK , left
      25. Incr MASK
      26. RB_ORColor Fade , MASK
      27. RB_Send
      28. Next
      29. For Fade = 0 to Numled - 1
      30. Waitms 20
      31. Shift MASK , right
      32. RB_ANDColor Fade , MASK
      33. RB_Send
      34. Next
      35. Loop
      Display All



      Jetzt ist es so das bei diesem Programm jede LED unterschiedliche Farben Faded.

      Wie Faden alle LED's die gleiche Farbe und das gleichzeitig? Also schon unterschiedliche farben, aber alle LED's Faden z.B. von Rot zu Grün ect.

      Guten Abend!

      Wasi, die Iteration der beiden for-Schleifen ist hier nicht dazu gedacht die einzelnen LED zu bedienen, sondern sorgen für den Fade-Effekt. 0 bis 7 und die inkrementierung der Variable Mask sorgen einfach nur für die Zunahme bzw. die Abnahme des Rotanteils. Mehr nicht. Das kann man natürlich auch ganz anders machen.

      Wenn du also möchtest das alle 30 LED dieselbe Farbe zeigen, musst du eben allen LED diese Farbe senden. Dazu musst du nur jeweils die Zeilen im ursprünglichen Programmcode

      Source Code

      1. RB_ANDColor 0 , MASK
      2. RB_Send
      durch

      Source Code

      1. RB_Fill Mask
      ersetzen.


      Viel Spaß!
    • walter99 wrote:

      Hallo Wasi
      So könnte es gehen, aber keine Garantie, besser ist mit einer Farbtabelle zu arbeiten, Bsp wäre mal unter meinen Beiträgen zuschauen oder suchen Spielereien mit ws2812.
      For Fade = 0 to Numled - 1
      Waitms 20
      Shift MASK , left
      Incr MASK
      for n = 0 to Numled-1
      RB_ORColor n , MASK
      next n
      RB_Send
      Next
      MfG
      Danke @walter99


      Galahat wrote:

      Wasi wrote:

      BASCOM Source Code

      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 = "m8def.dat"
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 16
      10. $framesize = 32
      11. Config RAINBOW=1, RB0_LEN=Numled, 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=30
      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 Numled - 1
      23. Waitms 20
      24. Shift MASK , left
      25. Incr MASK
      26. RB_ORColor Fade , MASK
      27. RB_Send
      28. Next
      29. For Fade = 0 to Numled - 1
      30. Waitms 20
      31. Shift MASK , right
      32. RB_ANDColor Fade , MASK
      33. RB_Send
      34. Next
      35. Loop
      Display All


      Jetzt ist es so das bei diesem Programm jede LED unterschiedliche Farben Faded.

      Wie Faden alle LED's die gleiche Farbe und das gleichzeitig? Also schon unterschiedliche farben, aber alle LED's Faden z.B. von Rot zu Grün ect.
      Guten Abend!

      Wasi, die Iteration der beiden for-Schleifen ist hier nicht dazu gedacht die einzelnen LED zu bedienen, sondern sorgen für den Fade-Effekt. 0 bis 7 und die inkrementierung der Variable Mask sorgen einfach nur für die Zunahme bzw. die Abnahme des Rotanteils. Mehr nicht. Das kann man natürlich auch ganz anders machen.

      Wenn du also möchtest das alle 30 LED dieselbe Farbe zeigen, musst du eben allen LED diese Farbe senden. Dazu musst du nur jeweils die Zeilen im ursprünglichen Programmcode

      Source Code

      1. RB_ANDColor 0 , MASK
      2. RB_Send
      durch

      Source Code

      1. RB_Fill Mask
      ersetzen.


      Viel Spaß!
      Danke @Galahat für deine Aufklärung.


      R2D2 Bastler wrote:

      Ich persönlich schreib lieber etwas mehr Zeilen Code, wenn er dafür einfacher nachvollziehbar ist ;)

      BASCOM Source Code

      1. ' =====================================================================
      2. ' WS2812b Fading Demo
      3. ' =====================================================================
      4. ' Autor Robert 2025
      5. ' Bascom 2.0.8.6
      6. ' Version 1.0.0
      7. $regfile = "m8def.dat"
      8. $crystal = 8000000
      9. $hwstack = 32
      10. $swstack = 10
      11. $framesize = 40
      12. Const Num_leds = 30 ' Anzahl LEDs
      13. Config Rainbow = 1 , Rb0_len = Num_leds , Rb0_port = Portb , Rb0_pin = 0
      14. Dim Farbe(3) As Byte
      15. Rot Alias Farbe(_base)
      16. Gruen Alias Farbe(_base + 1)
      17. Blau Alias Farbe(_base + 2)
      18. Rb_selectchannel 0
      19. Const Pause = 10 ' Fade-Geschwindigkeit
      20. Do
      21. ' Faden von Rot zu Grün
      22. For Gruen = 0 To 255
      23. Rot = 255 - Gruen
      24. Blau = 0
      25. RB_Fillstripe Farbe(_base) ' Füllt den ganzen Stripe mit der eingestellten Farbe
      26. Waitms Pause
      27. Next
      28. ' Faden von Grün zu Blau
      29. For Blau = 0 To 255
      30. Gruen = 255 - Blau
      31. Rot = 0
      32. RB_Fillstripe Farbe(_base)
      33. Waitms Pause
      34. Next
      35. ' Faden von Blau zu Rot
      36. For Rot = 0 To 255
      37. Blau = 255 - Rot
      38. Gruen = 0
      39. RB_Fillstripe Farbe(_base)
      40. Waitms Pause
      41. Next
      42. Loop
      43. End
      Display All
      Danke @R2D2 Bastler, mir geht es wie dir.


      Danke an euch und eure Hilfe und auch Aufklärung von @Galahat.

      @R2D2 Bastler Dein Programm ist für mich verständlich und auch Nachvollziehbar, was mir sehr gut gefällt ist auch die Fade Geschwindigkeit.

      Danke nochmals.

      Gruß Wasi