PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SEHR kleine RGB-Leds 2*2mm



Siro
18.08.2019, 19:24
Hallo zusammen,

ich bin auf diese kleinen RGB Leds gestoßen und hab natürlich gleich welche bestellt.

https://www.led-stuebchen.de/de/10x-ws2812C-2020-rgb-led-integriertem-ws2811-led-treiber-ic

Ein bischen stutzig macht mich die Angabe über das "backen" der Leds im Datenblatt.
Ich soll sie 48 Stunden bei 70-75 Grad Celsius backen,
dann in den nächsten 2 Stunden verbrauchen.

Sinn und Zweck ist hier sicherlich, dass sich keine Feuchtigkeit mehr im Gehäuse befindet.
Dies würde bei schneller Erwärmung, während des Lötprozesses, zu rissen "führen können".

Ich kenne aber ehrlich gesagt keinen Bastler der je seine Bauteile vor dem "Verzehr" (löten) jemals gebacken hat.
Schon garnicht 2 Tage lang.

Siro

Moppi
18.08.2019, 20:51
Da steht: "..danach innerhalb von 4 Stunden verarbeitet werden" und 24h bei 60°C (im Datenblatt 70-75°), wenn die feucht wurden oder die Lagerungszeiten überschritten wurden.
Ist aber schon erstaunlich, dass Teile so empfindlich sind.

Manf
18.08.2019, 21:19
Nett ist auch die Beschreibung mit dem double ended solder iron. Es muss wohl in jedem Fall sehr schnell und schonend gehen mit dem Löten

Repairing instruction
Normally, it can’t be repaired after reflow. You need to use double-ended solder iron and make sure that whether it will do damage to the LEDs’ characteristics when repairing is inevitable.
34349

Ceos
19.08.2019, 06:52
ich könnte auch die 2x2 mm APA102 empfehlen

https://www.adafruit.com/product/3341

die nutzen auch ein synchrones Protokoll, was auch wesentlich schneller arbeiten kann als die asynchronen WS2812

ich habe sie zwar selber noch nie verarbeitet, aber sie wirken robuster als dieses WS2812 (scheint so als sei das einfach nur FR4 + Plastik + irgend ein Gel)

PS: vielleicht nicht direkt bei adafruit kaufen, man unterstütz zwar adafruit aber der Preis ist schon "etwas hoch" im Vergleich zu anderen Bezugsquellen

Siro
19.08.2019, 08:33
Der Vorteil bei den APAs scheint, dass sie kein "spezielles" Timing brauchen, die kann man fast statisch betreiben, wenn ich das Datenblatt richtig interpretiere.
Im Umkehrschluss aber auch wesentlich höher getaktet werden können als die WS2812 wie Ceos schon schrieb.

Es gibt einen speziellen Start und ein End Code.
Mit nicht so hoch getakteten Controllern ist das teils ein Problem bei den WS2812 Chips, da kommt man dann vermutlich nicht um die APA Serie drum herum.

Mit dem (Hand) Löten wird vermutlich problematischer, da sich die Lötpads direkt unterhalb des Chips befinden. Aber es sieht so aus, als wenn man an die Lötflächen auch seitlich noch ran kommt.
Ich habe mit den APAs auch noch keine Erfahrung, bisher nur die WS2812 und SK6812 die beide recht ähnlich sind.

Erhältlich sind die APAs auch bei Mouser
https://www.mouser.de/ProductDetail/SparkFun/COM-14608?qs=sGAEpiMZZMve4%2FbfQkoj%252BLVWvBbhmmaia6i TKfvgkLw%3D
und Alibaba
https://www.aliexpress.com/item/32852037593.html

Siro

Ceos
19.08.2019, 08:48
Ich habe nur die 5050 LEDs im Betrieb und es ist schon sehr angenehm, weil ich einfach einen SPI und einen DMA nehme, der über einen Timer gesteuert meinen "Frame" aus dem RAM in den SPI pumpt und cih meine ganze CPU Leistung auf die Berechnung des Inhalts konzentrieren kann.

*öffnet Ali Link* *fällt fast um* 13cent das Stück?!?!?!

*überlegt sich eine billige Heißluft Station zu kaufen*

Siro
19.08.2019, 09:51
Mit SPI via DMA ist auf jeden Fall die eleganteste Lösung überhaupt.

Ich benötige momentan die volle CPU Leistung beim Ausschieben und muss die Interrupts sogar sperren.
Das ist in meinem Anwendungsfall momentan unerheblich, aber ich überlege trotzdem, ob ich nicht auch langsam umsteige.

*Heissluftstation ist schon da*
Modell 858D mehr wird nicht verraten :-) Preise von 15 bis 50 Euro
macht ersteinmal einen wirklich guten Eindruck, hab natürlich auch schon reingeguckt.
Temperatur im Luftstrom gemessen, kann da jetzt erstmal nichts meckern, was ja eher ungewöhnlich ist bei mir....;)

Ceos
19.08.2019, 10:04
Ich muss dazu sagen, dass wir hier auf Arbeit so eine "mobile Station" haben, die eigentlich nichts anderes ist als ein Ständer mit einem Drehknopf, der für 99% der Anwendungen eh auf Stufe 3 steht, mit seichtem Lufthauch aber ordentlich Temperatur für bisher jede Anwendung gereicht hat ... aber wir driften vom Thema ab :P (die feste und schweine teure Station hat eine 3mm Düse als Maximum und pustet selbst dem erfahrendsten Anwender gelegentlich einen 7x7mm Chip auf den Kopf wenn man einen "guten" Winkel erwischt, das Ding ist grausam!)

Siro
20.08.2019, 11:02
Die LEDs sind schon gekommen, das ging echt super schnell beim LED-Stübchen.

Gleich mal 3 Kabel angelötet und ausprobiert.
Ich betreibe sie grade mit 3 Volt. Funktioniert super.

34353

Auch bei 2,7 Volt läuft das Teil noch,
ich muss mal eben die Software umschreiben und gucken ob alle Farben dann auch noch richtig funktionieren.
Ich benutze zur Zeit nur rot und grün. Problematischer wirds vermutlich bei Blau. Werde berichten...

Alle Farben funktionieren. Blau wird mit sinkender Versorgung immer schwächer. Aber auch bei 2,6 Volt noch grade so brauchbar.
Damit bin ich weit ausserhalb der Spezifikation...

Siro

Moppi
20.08.2019, 12:21
Dann mach mal bitte ein Beispiel zur einfachen Ansteuerung (welche Anschlüsse wo am µC und wie die in den Farben zum Leuchten gebracht werden) und eine Artikelnummer oder genaue Bezeichnung für die Teile.


MfG

Siro
20.08.2019, 14:49
Angesteuert wird bei mir mit einen Microchip PIC12F1840
Der PIC benötigt nur 3 Anschlüsse

PIN 1 = VCC
PIN 2 = Datenausgang ==> zu DIN der RGB Led/Kette
PIN 8 = MASSE

Das wars schon an Hardware.

Testleds waren:
SK6812 Side Led 4020 Eckstein Komponete Art.Nr.: LED0006-10
SK6812 Mini 3535 led-stübchen Art.Nr.: SK6812_144strip_x50cm
WS2812 2020 led-stübchen Art.Nr.: WS2812_2020_x10
WS2812 5050 RGB Stripe 5050 irgendwo mal bei ebay bestellt...
Segor LED8 RGB/WS2812B runde LED, wobei hier rot und grün vertauscht ist.
!! Bei Segor gibt es ein ein RGB-Stripe IP67 geschützt, die haben ein Problem:
Der Power On Reset funktioniert nicht, beim Einschalten gehen alle LEDs mit voller Helligkeit an. (2,7 Ampere)
Artikel: PixelLight 1m-144x/IP67w


Hier die "erprobte" Software mit den Grundfunktionen:



// Beispielcode für den Microchip PIC Controller PIC12F1840
// grundlegende Ansteuerung einer RGB Kette:
// Autor: SIRO 20.08.2019
//
// PIN 1 = VCC
// PIN 2 = Datenausgang ==> zu DIN der RGB Led/Kette
// PIN 8 = MASSE
//
// An Pin2 (Port RA5) vom Controller wird die Datenleitung der RGB Kette angeschlossen
//
// PIC12F1840 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock /Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

/* !!!!!!!!!!!!! B O E S E F A L L E */
/* !!!!!!!!!!! LVP muss off sein, sonst kann MCLRE NICHT OFF sein ??????*/
/* Der PIC reagiert dann immer auf den MCLR Pin mit einem RESET */

/* wahelt selbst den richtigen Header aus pic12F1840.h */
/* xc.h includiert htc.h pic.h pic_chip_select.h pic12f1840.h */
#include <xc.h>

// wird für die von Microchip zur Verfügung gestellten delays benötigt
#define _XTAL_FREQ 32000000
/*----------------------------------------------------------------------*/
/* hier habe ich meine eigenen Datentypen definiert:
ein "U" bedeutet unsigned, also ohne Vorzeichen
ein "S" bedeutet signed, also mit Vorzeichen
ein U8 ist ein 8 Bit Wert ohne Vorzeichen Wertebereich 0..255
ein S8 ist ein 8 Bit Wert mit Vorzeichen Wertebereich -127..+128
*/

typedef unsigned char U8; /* 8 Bit ohne Vorzeichen */
typedef signed char S8; /* 8 Bit mit Vorzeichen */

/*----------------------------------------------------------------------*/
/* im INTCON Register gibt es ein globales Interrupt Einschaltbit GIE */
/* wird dieses Bit auf High (1) gesetzt, sind Interrupts erlaubt */
/* wird dieses Bit auf Low (0) gesetzt, sind ALLE Interrupt gesperrt */
#define ENABLE (GIE=1) /* global interrupt enable */
#define DISABLE (GIE=0) /* global interrupt disable */

/*----------------------------------------------------------------------*/
// so viele LEDs sollen in der Kette angesteuert werden
#define LED_COUNT 16

/* Jede LED hat 3 Bytes, also 24 Bits fuer die Daten */
typedef struct // __pack ? weil wir keinen Speicher verschwenden wollen
{
U8 green; /* 8 Bit fuer die Helligkeit */
U8 red; /* 8 Bit fuer die Helligkeit */
U8 blue; /* 8 Bit fuer die Helligkeit */
} TLed; /* Type Bezeichner ist TLed */

TLed LedArray[LED_COUNT]; // Das komplette LED Array (Datenstrom)

/*----------------------------------------------------------------------------*/
// schiebt die gesamte Ledkette aus
// Das Timing wurde mit NOPs angepasst
void LedShiftOut(void)
{ U8* leds = (U8*)LedArray;
U8 count = LED_COUNT;
U8 one_byte;
S8 bit_count;

// damit keine Multiplikation verwendet wird:
count = (count << 1) + count; // 3 Bytes pro Led RGB
DISABLE; // alle Interrupts sperren
while (count) {
CLRWDT(); // den Watchdog bedienen, falls erforderlich
one_byte = *leds++; // aktuelles Datenbyte laden
// 8 Bits durchlaufen:
for (bit_count = 0; bit_count < 8; bit_count++) {
if (one_byte & 0x80) // wenn das oberste Bit 7 gesetzt ist dann
{
LATA5 = 1; // lange High Phase einleiten
NOP(); // Signal verlängern
NOP();
NOP();
LATA5 = 0; // High Phase beenden

} else // Kurze High Phase weil das Datenbit Low ist
{
LATA5 = 1; // kurze High Phase einleiten
NOP(); // Signal verlängern
LATA5 = 0; // High Phase beenden
}
one_byte <<= 1; // Das Datenbyte 1 mal links verschieben
}
count--; // Anzahl auszugebener Datenbytes -1
}
ENABLE; // Interrupt wieder einschaalten

// Das Ende des Datenstroms wird mit einem "längerem" Low signalisiert
// Die Länge ist unterschiedlich bei verschiedenen LEDs. Siehe Datenblatt
__delay_us(280); // Das Ende der Datenübertragung erreicht wenn die Leitung länger als xxx Low bleibt.
}

/*----------------------------------------------------------------------------*/
// fuellt die gesamte Ledkette mit den übergebenen Werten
void FillLeds(U8 r,U8 g,U8 b)
{ U8 i;

for (i=0; i < LED_COUNT; i++)
{
LedArray[i].red = r;
LedArray[i].green = g;
LedArray[i].blue = b;
}
LedShiftOut();
}
/*----------------------------------------------------------------------------*/
void init_system(void)
{
/* internal oszillator block 32 MHz / 4 stage pipeline = 8 MHz ==> 125ns Instruction cycle */
SCS0 = 0; /* OSCON register */
SCS1 = 0;

SPLLEN = 1; /* is ignored if config enables the PLL */

/* MF 500 KHz default on reset */
/* set to 8MHz value ==> 32Mhz clock with PLL */
IRCF0 = 0; /* OSCON register */
IRCF1 = 1;
IRCF2 = 1;
IRCF3 = 1;

/* !!!! alle ports stehen auf ADU input nach einem reset */
/* wir stellen sie um auf normale input/output funktion */
ANSELA = 0; /* 0 ==> normal Digital IO */

/* Pin Direction */
TRISA5 = 0; /* Datenausgang fuer die RGB LED 0=output */
}

/*---------------------------------------------------------------*/
// wird nicht unbedingt benötigt
// alle LEDs ausschalten
void LedInit(void)
{ U8 i;

for (i = 0; i < LED_COUNT; i++)
{
LedArray[i].green = 0x00;
LedArray[i].red = 0x00;
LedArray[i].blue = 0x00;
}
}

/*----------------------------------------------------------------------------*/
void main(void)
{

init_system();
while (1)
{
// die gesamte LED Kette mit einer Farbe füllen
FillLeds(0x00,0x00,0xFF);
__delay_ms(1000);
FillLeds(0x00,0xFF,0x00);
__delay_ms(1000);
FillLeds(0xFF,0x00,0x00);
__delay_ms(1000);

FillLeds(0x00,0xFF,0xFF);
__delay_ms(1000);

FillLeds(0xFF,0xFF,0x00);
__delay_ms(1000);

FillLeds(0xFF,0x00,0xFF);
__delay_ms(1000);

FillLeds(0xFF,0xFF,0xFF);
__delay_ms(1000);

// so kann man auf jede einzelne LED und der entsprechenden Farbe zugreifen:
// wir stellen hier die RGB Werte für erste LED in der Kette ein:
// Zählung der LEDs von 0..x

LedArray[0].red = 127; // halbe Helligkeit für rot
LedArray[0].green = 64; // viertel Helligkeit fuer grün
LedArray[0].blue = 0xFF; // volle Helligkeit für blau
LedShiftOut(); // es werden immer ALLE LED Daten ausgeschoben
__delay_ms(5000); // warte 5 Sekunden

}

}



Die Software lief mit allen Optimierungsstufen 0,1,2 und 3 des Compilers: XC8 V2.05


Siro

Moppi
20.08.2019, 16:05
Danke Dir!

Ich habe mich über die 3V und weniger gewundert. Ich habe mal versucht, 2.7 oder 3V-LEDs zu bekommen, das ist irgendwie nicht so einfach. Ich habe da noch keine Alternative, kann bisher LEDs nur mit mehr als 3V zu voller Leuchtkraft bewegen.
Ich habe noch mal ins Datenblatt (WS2812-2020_V1.1_EN.pdf) geschaut. Dort steht Versorgungsspannung >3.7V. Ich dachte mal an eine Versorgung mit 3 bis 3.3V. Muss ich mal schauen....


MfG

Siro
20.08.2019, 16:25
Zwischen 3 und 5 Volt kann ich keine Helligkeitsunterschiede erkennen, zumindest nicht bei dieser kleinen LED.
Sind ja auch intern "Konstantströme"
Das Datenblatt sagt >3,7V das ist richtig. Funktionieren tuts aber auch noch bei 2,7 bei mir. Da kann man sich natürlich nicht unbedingt drauf verlassen,
aber da sie auch bei 2,6 Volt noch funktioniert sehe ich da eher kein Problem.

Bei der Side Led erkennt man aber schon bei Blau einen erheblichen Helligkeitsunterschied zwischen 3 und 4 Volt.
Bei den WS2812B 5050 LEDs auch bei blau.

Also sagen wir mal:
Funktional aber nicht Optimal bei kleineren Spannungen ;)