Es weinachtet sehr!

Diamond Dust

  • 1
  • 2
  • Page 1 of 2
tbegle
Benutzer
Avatar
Gender: n/a
Age: 64
Posts: 150
Registered: 01 / 2018
Subject:

Es weinachtet sehr!

 · 
Posted: 15.10.2021 - 10:33  ·  #1
Hallo Power User,

da ich ein Generalist bin(weiss von Allem nichts) bräuchte ich von euch Hilfe.

Da für die Ansteuerung(nicht ganz begriffen!) von RGB-LED Streifen (bis 5m mehrere 100 RGB Dioden) mit dem WS2812(B) kurze Pulse nötig sind ist ein Assebler Code, denke ich unumgänglich.

Meine Idee anstelle von teuren Boards(z.B. DIAMEX LED Player2) total konfortabel kann aber nur
512 LED ansteuern(brauche aber für einen Strang nur 100! als 12 DIAMEX!!(viel zu teuer)

möchte ich das Board mit dem ATMEGA 2560 verwenden (9€) dieses hätte ausreichend Flash und
Ausgänge(habe schon damit gearbeitet.

Ich bräuchte wahrscheilich einen Assebbler Code den ich aus einer Procedure anspringen kann.
Parameter(Variablen) LED Streifen(1-16 =PIN Nr. ) - LED(1-100) - Color(R-G-B) - Helligkeit (0-100%)
Das Timing(E-LAB proc) sollte kein Problem sein da die Pausenzeiten zur Einschaltzeit(3-10ms) rel. groß sind.

Die Hilfe möchte ich auch bezahlen und die HW (LED Streifen + Board +) natürlich zur Verfügung stellen
Das Ganze kann sehr vielfälig eingestzt werden - mit Radar Sensor bei Annäherung ON/OFF....
Stromvrbrauch ist minimal!

Gruss
Toni

Anlage pdf File
Attachments
 
Filename: Drucken Weihnacht_21_02.pdf
Filesize: 728.47 KB
Title: es wihnachtet sehr
Information: Diamond Dust
Download counter: 9
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2092
Registered: 03 / 2003
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 16.10.2021 - 09:21  ·  #2
Hallo Toni,

die 2812er LEDs sind von der Ansteuerung recht zeitkritisch, da es keinen Clock-Eingang gibt. Deshalb habe ich den Typ APA102 mit Clock-Eingang verwendet. Da ich dann aber für etwas anderes die 2812er verwenden mußte, habe ich mir ein Interfaceboard besorgt, das einfach via SPI ansteuerbar ist (siehe Anhang).

Das Modul gibts hier:
https://www.led-genial.de/DIGI…-ansteuern

Gruss
Harry
Attachments
 
Filename: Digi-Dot-Booster_DE.pdf
Filesize: 644.88 KB
Title:
Download counter: 5
tbegle
Benutzer
Avatar
Gender: n/a
Age: 64
Posts: 150
Registered: 01 / 2018
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 16.10.2021 - 19:31  ·  #3
Hallo Harry,

danke für deinen Tipp, hast recht, das herum basteln bringt nichts, ausser Frust - werde mir die Schaltung zur Brust nehmen
Meinen geplanten Vorhang (Weihnachts Deco) auf 12 Streifen a 50 LED(30 LED/Meter) = 12 x 1,6m nun festgelegt
Bei Ali gibt es 5m WS2812B NEO (IP65) für ~17€ also 5 Streifen - man gönnt sich ja sonst nichts

Gruss Toni
tbegle
Benutzer
Avatar
Gender: n/a
Age: 64
Posts: 150
Registered: 01 / 2018
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 17.10.2021 - 21:01  ·  #4
Hi Harry,, ich schon wieder,

ich hab den Digi-Dot-Booster bestellt - auch den LED-Player-M (~50€) der hat 8 Ausgänge! und kann je Kanal 512 LED's ansteuern, (max 2048 LED's)
hat auch ein uSD-LW und kann die JINX (Strip & Matrix) SW-Befehle verarbeiten. Vorteil, alles in real Time als Grafik am PC simulieren.

Da ich für 100 LEDS = 2 Streifen(1-50 - 51-100) nur 1 Ausgang benötige, könnte ich sogar 16 Strefen (a 1,6m) ansteuern!
Die Herausforderung, ich muss das Ende(unten) des 1. mit dem Anfang(oben) des 2. per Ltg.(2) ...... 11. mi1 Anf. 12. verbinden. (Nebensprechen....)

Einen Schneefall (leise rieselt der Schnee) zu simulieren wird bei 2 geteilen Streifen (1-50 / 51-100) denke ich, nicht ganz eingfach
Jetzt gehe ich auch in die Vollen, habe ein 5V Netzteil 5/24A ! herumliegen bei 12 Streifen (L=1,6m) besser 16 Streifen auf 3,6m Breite kann man
auch simple Grafiken darstellen! - grünen Weihnachtsbaum mit blinkenden Kerzen(weiss/gelb) ....... rotes Herz auf weissem Hintergrund für meine hübsche Nachbarin! gegenüber .......

Schönen Abend
Toni

PS
Mit dem PWM(fast) 8bit kan man unglaublich kurze Impulse erzeugen - = aber Bastelei! für diese Anwendung
tbegle
Benutzer
Avatar
Gender: n/a
Age: 64
Posts: 150
Registered: 01 / 2018
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 22.10.2021 - 13:48  ·  #5
Hallo Harry,
ich bekomme auf meinem Neoled 64 x WS2812 kein Signal auf meinem DIAMEX-LED-BOOSTER
Import SPIport ,
SPIport = Master;
SPIOrder = MSB; {LSB}
SPICPOL = 0; {0/1} ????
SPICPHA = 0; {0/1} ????
SPIpresc = 3; {0/1/2/3} ???
SPIbuffer = 8, iData;
SPIretry = 30; // ????

Init Booster
write($B1,64,24); ???
write($B2,

Könntest du mir aud die Sprünge helfen???
Danke

Gruss
Toni
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2092
Registered: 03 / 2003
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 22.10.2021 - 20:54  ·  #6
Hallo Toni,

wenn du den Digi-Dot-Booster meinst, hier mal ein kleines Spielprogramm von mir. Es waren aber nur 8 LEDs angeschlossen.
Code

Program A4988_1;
{ Digi-Dot-Driver-Test                                                         }

{$NOSHADOW}
{$WG}                      {global Warnings off}

Device = mega644, VCC=5;
{ $BOOTRST $07000}         {Reset Jump to $07000}

Import SysTick, SPIDriver1;

From System Import;


Define
  ProcClock      = 20000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;

  SPIdriver1     = PortD, 0, 1, 2;  // SCK, MOSI, MISO
  SPIorder1      = MSB;
  SPIcPHA1       = 0;
  SPIcPol1       = 0;
  
Implementation

{$IDATA}

{------------------------------------------------------------------------------}
{ Type Declarations }
Type
{------------------------------------------------------------------------------}
{ Const Declarations }
Const
  DDInit : Array[0..2] of Byte   = ($B1, $08, $18);
  WSData : Array[0..127] of Byte = ($A1, $FF, $00, $00, $A5, $B2, $00, $00,
                                    $A7, $00, $FF, $FF, $FF, $00, $07, $20,
                                    $B2, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00,
                                    $00, $00, $00, $00, $00, $00, $00, $00);
{------------------------------------------------------------------------------}
{ Var Declarations }
Var
  Counter         : Byte;
  C1, C2, C3      : Byte;
  WSData2         : Array[0..28] of Byte;
  CS[@PortD,3]    : Bit;
  Reset[@PortD,4] : Bit;
{$IDATA}
{------------------------------------------------------------------------------}
{ functions }
{------------------------------------------------------------------------------}
Procedure InitPorts;
  Begin
    DDRD:=  %00011011;                      // x x x /Reset /CS MISO MOSI SCK
    PortD:= %00011000;

  End InitPorts;

{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
{------------------------------------------------------------------------------}
Begin
  EnableInts;
  InitPorts;
  CS:=1;
  Reset:=1;                                      // Reset & CS = 1
  mDelay(100);
  Reset:=0;                                      // Reset = 0
  mDelay(100);
  Reset:=1;                                      // Reset & CS = 1
  mDelay(500);
  CS:=0;
  WSData2[0]:= $A1;
  WSData2[1]:= $FF;                               // rot
  WSData2[2]:= $00;                               // grün
  WSData2[3]:= $00;                               // blau
  WSData2[4]:= $A6;                               // Bereich
  WSData2[5]:= $00;                               // von 0
  WSData2[6]:= $01;                               // bis 1
  WSData2[7]:= $A1;
  WSData2[8]:= $FF;                               // rot
  WSData2[9]:= $00;                               // grün
  WSData2[10]:=$00;                               // blau
  WSData2[11]:=$A6;                               // Bereich
  WSData2[12]:=$02;                               // von 2
  WSData2[13]:=$03;                               // bis 3
  WSData2[14]:=$A1;
  WSData2[15]:=$FF;                               // rot
  WSData2[16]:=$00;                               // grün
  WSData2[17]:=$00;                               // blau
  WSData2[18]:=$A6;                               // Bereich
  WSData2[19]:=$04;                               // von 4
  WSData2[20]:=$05;                               // bis 5
  WSData2[21]:=$A1;
  WSData2[22]:=$FF;                               // rot
  WSData2[23]:=$00;                               // grün
  WSData2[24]:=$00;                               // blau
  WSData2[25]:=$A6;                               // Bereich
  WSData2[26]:=$06;                               // von 6
  WSData2[27]:=$07;                               // bis 7
  WSData2[28]:=$B2;
  For Counter:=0 to 2 do
    SPIOutByte1(DDInit[Counter]);
    EndFor;
  //SPIOut1(@DDInit,3);
  CS:=1;
  mDelay(500);
  C1:=0;
  C2:=0;
  C3:=0;
  Loop
    WSData2[1]:=C1;
    WSData2[2]:=255-C1;
    WSData2[3]:=0;
    WSData2[8]:=0;
    WSData2[9]:=C1;
    WSData2[10]:=255-C1;
    WSData2[15]:=255-C1;
    WSData2[16]:=0;
    WSData2[17]:=C1;
    WSData2[22]:=C1;
    WSData2[23]:=C1;
    WSData2[24]:=C1;
    // Ausgabe
      CS:=0;                                       // /CS
      mDelay(1);
    For Counter:=0 to 28 do                      // 0-28
      SPIOutByte1(WSData2[Counter]);
      EndFor;
    //SPIOut1(@WSData,6);
      CS:=1;                                       // /CS
      mDelay(15);

    WSData2[7]:= $A1;
    WSData2[8]:= $00;                               // rot
    WSData2[9]:= $00;                               // grün
    WSData2[10]:=$00;                               // blau
    WSData2[11]:=$A6;                               // Bereich
    WSData2[12]:=$02;                               // von 2
    WSData2[13]:=$03;
    
    CS:=0;
    For Counter:=7 to 13 do                      // 0-28
      SPIOutByte1(WSData2[Counter]);
      EndFor;
    SPIOutByte1(WSData2[28]);
    CS:=1;
    mDelay(1000);
    
    If C1<255
      then
        Inc(C1);
      else
        C1:=0;
      EndIf;
    EndLoop;
End A4988_1.


Gruss
Harry
tbegle
Benutzer
Avatar
Gender: n/a
Age: 64
Posts: 150
Registered: 01 / 2018
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 25.10.2021 - 13:45  ·  #7
Danke Harry!
Ich muss mir die SPI Befehle noch rein ziehen (mehrere (4) Digit DOT Booste an SPI)- hatte noch nie mit SPI gearbeitet
Wahrscheinlich benötige ich für mein Proj. doch 4 Digit Dot Boster a 200 LED für 16 Streifen a 50 LED (~1,7m)-> 800 LED
Einen Schneefall (mit Zuffi) zu prog. wird spannend- der Schnee sollte bei 50% der Streifen nicht nach oben fallen!

Gruss
Toni
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2092
Registered: 03 / 2003
Subject:

Re: Es weinachtet sehr!

 · 
Posted: 25.10.2021 - 17:44  ·  #8
Hi Toni,

das ist doch kein Problem: Daten und Takt aller Module parallel und den CS manuell steuern.

Harry
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 17 · Cache Hits: 15   141   156 · Page-Gen-Time: 0.034277s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI