closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Es weinachtet sehr!

Diamond Dust

tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Es weinachtet sehr!  -  Posted: 15.10.2021 - 10:33   -  
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
You must be logged in or your permissions are to low to see this Attachment(s).
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 56
Posts: 1863
Registered: 03 / 2003
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 16.10.2021 - 09:21   -  
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
You must be logged in or your permissions are to low to see this Attachment(s).
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 2-times. Last edit: 16.10.2021 - 09:32 by Harry.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 16.10.2021 - 19:31   -  
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
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 17.10.2021 - 21:01   -  
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
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 22.10.2021 - 13:48   -  
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
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 56
Posts: 1863
Registered: 03 / 2003
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 22.10.2021 - 20:54   -  
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
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 24.10.2021 - 08:09 by Harry.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 25.10.2021 - 13:45   -  
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
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 56
Posts: 1863
Registered: 03 / 2003
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 25.10.2021 - 17:44   -  
Hi Toni,

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

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 29.10.2021 - 20:54   -  
Guten Abend Harry,

ich bekomme kein Signal aus meinem Booster auch nicht nach 3 Stunden!
Die LED blinkt nur unregelmässig ISP Signale sind ok! (Scope)
Könnte der Fehler in der Clock Freq liegen? TEILER 0-1-2
Ich möchte mein Band 200LED rot leuchten lassen (set all)
Oder habe ich bei den Befehlen was übersehen CS und Reset erzeuge ich selbst 4 Booster a 200 LED 16 LED Streifen a 50 LED

Könntest du mir kurz drüber schauen

Gruss
Toni

Nano Board 328p 16MHz
// D07 10 PD7 (CS6)
// D06 09 PD6 (CS5)
// D05 08 PD5 CS4 NODE 4 600-799
// D04 07 PD4 CS3 NODE 3 400-599
// D03 06 PD3 CS2 NOFE 2 200-399
// D02 05 PD2 CS1 NODE 1 000-199 LED
---------------------------------------------------------------------------------------
SPIpresc = 0; // 0=2,8MHz 1=940kHz – 2=480kHz ??????
SPIOrder = MSB;
SPICPOL = 0;
SPICPHA = 0;
SPI_SS = false; // SS entfällt! (CS1 - CS4)
------------------------------------------------------------------------------
Implementation
{$IDATA}
var
// ------------------------------------------------------------------------
LED [@PortB,1] : bit; // LED Board D09
Sig [@PortB,2] : bit; // MINI Buzzer D10
CS1 [@PortD,2] : bit; // CS Booster 1-4 D02 16 Streifen a 50LED (30Led/m) ~1,6m/strip
CS2 [@PortD,3] : bit; // D03
CS3 [@PortD,4] : bit; // D04
CS4 [@PortD,5] : bit; // D05
Reset [@PortB,0] : bit; // D08

DDRB := %00101111; // LED(1)-Signal(2)-MOSI(3)-MISO(4)-SCK(5) -
DDRC := %00000000; //
DDRD := %00111100; // CS(2-3-4-5) Booster 1-4

EEprom[10]:= $C7; // LED Count 0- 199($C7) (200 LED's)
EEprom[11]:= $18; // Bit(R-G-B 3 x 8 bit) 24 ($18)Bit
L_count & RGB aus EEprom!

procedure NEOL_INIT;
begin //
CS1:=false;Reset:=false;mdelay(100);Reset:=true; // Reset= L =false
SPIoutByte($B1);SPIoutByte(L_count);SPIoutByte(RGB); // max LED 0-199 = 200($C7)
CS1:=true; // Übername ins Booster Reg
mdelay(100); //
end;
-----------------------------------------------------------------------------------------
procedure red; //
begin
CS1:=false;
SPIoutByte($A1);SPIoutByte($ff);SPIoutByte($00);SPIoutByte($00);SPIoutByte($A5); // Set all!
// CS1:=true; //
SPIoutByte($B2); // Booster show Ausgabe an strip (200LED)
mdelay(6);
CS1:=true; //
// write(serout,'RED');CR;
end;
--------------------------------------------------------------------------------------------------------------------
loop
mdelay(100);
red;
endloop;
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 56
Posts: 1863
Registered: 03 / 2003
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 30.10.2021 - 18:16   -  
Hallo Toni,

du hast echt 200 2812 aktuell angeschlossen? Dann probier mal das:
Code

// CS des Moduls aktivieren
SPIoutByte($B1);
SPIoutByte(200);
SPIoutByte(24);
mDelay(500);
SPIoutByte($A1);
SPIoutByte($FF);
SPIoutByte($00);
SPIoutByte($00);
mDelay(100);
SPIoutByte($A5);
SPIoutByte($B2);

Dann sollten alle LEDs rot leuchten. Wenn nicht stimmt was mit den Anschlüssen nicht.

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 30.10.2021 - 18:16 by Harry.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 30.10.2021 - 21:41   -  
Hallo Harry,

ich habe den Fehler gefunden!!
INIT war nicht korrekt!
Vieken, vielen Dank für die tolle und zeitnahe Unterstützung!

Jetzt möchte ich die Sache auf speed trimmen ISP (Clock) und delay nur wo unbedingt nötig!
DIAMEX LED Booster 4 Strip a 200 LED (30LED/m = 1,6m) -> 4 DIAMEX 800 LED (16 strip's) - das wird ein Wheinachts Zauber auf meinem Balkon!
Bei ALI nicht teuer - hier das 3-4fache!! - was die Händler hier drauf schlagen grenz fast schon an ......
ISP ist optimal vom Speed & (CS1.....CSn) - schade das der DIAMEX LED Booster kein Return gibt (MISO)

Ein schönes (hoffentlich kein gruseliges) WE
Toni

procedure NEOL_INIT; // LED max(200/DIAMEX) + RGB(3x8bit($18)
begin
Reset:=false;mdelay(10);Reset:=true;mdelay(10);CS1:=false; // Reset= L =false
SPIoutByte($B1);SPIoutByte(L_count);SPIoutByte(RGB); // max LED 0-199(200LED=$C7) RGB 3x8(24- $18)
mdelay(6);
CS1:=true; // Übername ins Booster Reg //
end;
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 56
Posts: 1863
Registered: 03 / 2003
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 01.11.2021 - 13:46   -  
Hallo Toni,

mal ne Frage nebenbei: Hast du keine Probleme mit Zoll? Oder importierst du offiziell?

Gruss
Harry

PS: Kein grusliges WE, ganz im Gegenteil, meine neue Schaltung funktioniert und läuft :). Touch proggen mit Entprellen ist grausam :D .... ohne speziellen Touch-Controller natürlich.
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 61
Posts: 115
Registered: 01 / 2018
Private message
Subject: Re: Es weinachtet sehr!  -  Posted: 01.11.2021 - 17:54   -  
HI Harry,,

nein bisher nicht! - meine Päckchen seit 3J gingen immer durch den Zoll(Aufkleber)
bis vor 6M waren alle Waren(>90%) PORTOFREI! d.h. der Postbote(in) brachten die Päckchen sogar bis zur Wohnungstüre!!
Ein krasses Beispiel - 10 nano Boards(komplett bestückt & getestet) a 1,8€ ohne Porto!
Seit etwa 3 Monate kommt sogar kein Zollaufkleber mehr drauf!! und wird immer mehr auch durch Hermes ergänzt!
Seit etwa einem halben Jahr schlagen sie immer mehr an Porto drauf! - also bei der Bestellung auf das Porto achten!!
Im warenkorb kannst du dann sehen welcher Anbieter den günstigsten Preis (+Porto) für deine Ware anbietet..

Vor kurzem hatte ich 6 Bänder(Neoled) a 5m IP67 30 LED/m a ~17€ bestellt (schau was die Händler bei uns verlangen die sie auch aus China beziehen!) ansonsten die meiste Ware zw. 10 und 90€ seit > 3J ohne Proleme.
Seit 3M auch per Paypal geht fix! (keine Wartezeiten bis die Bank....) Lieferzeiten zwischen ~1W- max 3W (per PayPal)

Meine Theorie ist, dass China der Reg. gedroht hat keinen Handelskrieg anzuzetteln ansonsten gehen in Europa die Lichter aus!
BMW Daimler nach Hause schicken? ........ keine Antibiotika oder Magnesium oder ................................ mehr liefern
Mit der Qualität der Waren war ich bis jetzt (sehr)zufrieden, es gab seltene Ausreisser LM35 war faek aber 10 Stück zu 90Cent kann man verkraften

Einen schönen Abend
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 07.12.2021 - 22:13