logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Feit Electric „Smart Color Chasing Strip Light” z BK7231N i SM16703 SM16704

darconeous 29 Paź 2023 21:37 10104 30
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak ustalić pinout i mapowanie kanałów w pasku LED Feit Electric Smart Color Chasing Strip Light z BK7231N oraz układami SM16703/SM16704?

To urządzenie ma wyjście danych na P16, włączanie zasilania 24 V na P22, a przycisk parowania na P24 [#20804661] Kanały paska są ułożone jako: R, G, B, ciepła biel 1, ciepła biel 2, chłodna biel 1, chłodna biel 2, więc RGB działają w zakresie 0–255, a białe kanały praktycznie do 0–510 [#20804661] Początkowo sterownik SM16703 sprawiał problemy z przesunięciem bitów i buforem, więc potrzebne było wsparcie dla konfigurowalnej liczby kanałów i mapowania [#20804661] P16 jest też opisywany jako sprzętowe wyjście SPI dla danych pikseli; na niezmodyfikowanym CB2S/CB3S nie jest ono od razu dostępne bez odpowiedniej modyfikacji lub użycia CBU [#20803289][#20869629] Później autorzy zgłosili, że błąd SPI DMA został naprawiony i diody SM16703P/WS2812B powinny już działać poprawnie po aktualizacji [#20966214]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 20791392
    darconeous
    Poziom 3  
    Posty: 5
    Ocena: 6
    Cześć. Właśnie wziąłem 20-metrowy pasek ścigacza LED Feit Electric i natychmiast go zerwałem. Wygląda na to, że używam BK7231N. Pasek jest RGBCW, ale jest to trochę dziwne, ponieważ każdy segment ma dwa chipy: SM16703 i SM16704. Oznacza to, że w każdym segmencie jest... 7 kanałów, ale widzę, że tylko 5 jest używanych. Nie próbowałem jeszcze tym jeździć, więc nie jestem pewien, jaka jest jeszcze kolejność kanałów.

    Co ciekawe, złącze paska LED jest takie samo jak USB-C, mimo że wyraźnie NIE jest to USB-C. Wysyłają przez niego tylko trzy sygnały: +24 V, DOUT i GND. Nie jestem jeszcze pewien, jak mapują je do pinów USB-C, więc nie jestem pewien, czy coś by to usmażyło, gdyby ktoś zdecydował się spróbować podłączyć to do swojego komputera. Bardzo dziwna decyzja.

    W każdym razie nie próbowałem jeszcze zmieniać oprogramowania, ale wygląda na to, że wszystkie ważne piny mają ładnie oznaczone punkty testowe.

    W Costco było to około 25 dolarów.

    Opakowanie inteligentnej taśmy LED Feit Electric. Opakowanie taśmy LED Feit Electric z funkcjami. Zbliżenie na płytę drukowaną z różnymi komponentami elektronicznymi i złączem USB-C. Zbliżenie złącza LED z końcówką przypominającą USB-C. Złącze paska LED wyglądające jak USB-C z trzema pinami oznaczonymi jako G, ID, V+. Złącze LED przypominające USB-C na zielonej płytce. Zbliżenie na układ scalony BK7231N na płytce drukowanej. Płytka drukowana paska LED Feit Electric z widocznymi chipami SM16703 i SM16704. Zbliżenie na chip SM16703 z tekstem AZYVA23 na powierzchni. Widok zbliżony na czip SM16704PE z oznaczeniami AZSFAB25. Zbliżenie na zieloną płytkę drukowaną z widocznymi ścieżkami i oznaczeniami pinów. Zbliżenie zielonej płytki drukowanej z oznaczeniami 24V i GND2 na tle dłoni.
  • REKLAMA
  • #2 20791759
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Myślę, że mamy SM16703, więc może po prostu wykonaj kopię zapasową flash 2MB i spróbuj? Mogę spróbować poprowadzić Cię przez to krok po kroku.
    Pomogłem? Kup mi kawę.
  • #3 20792424
    darconeous
    Poziom 3  
    Posty: 5
    Ocena: 6

    Zrobię. Może w weekend, zanim będę mógł spróbować. Pierwotnie planowałem po prostu wyrzucić kontroler i zastąpić go PicoW, ale zobaczenie twojego oprogramowania skłoniło mnie do ponownego rozważenia.

    SM16703 jest taki sam jak SM16704, z tą różnicą, że ma dodatkowy kanał. Oczekuję więc, że protokół powinien być taki sam, z wyjątkiem 7 kanałów zamiast 3 lub 4.

    Może każdy segment może kontrolować dwa zestawy W i C, ale tylko jeden RGB? W takim przypadku kolejność kanałów będzie mniej więcej taka jak RGBWCWC lub RGBWWCC... Myślę, że dowiemy się tego w ten weekend!

    Swoją drogą, świetna robota. Nie mogę się doczekać, aby zagłębić się w szczegóły oprogramowania sprzętowego.

    BTW: Czy BK7231N jest oparty na RISC-V? Próbowałem ostatecznie wbić łuk, ale nie mogłem znaleźć przyzwoitego arkusza danych.
  • #4 20803236
    darconeous
    Poziom 3  
    Posty: 5
    Ocena: 6

    Ok, udało mi się go sflashować za pomocą narzędzia wiersza poleceń python na moim Macu. Mogę teraz uzyskać dostęp do interfejsu sieciowego bez większych problemów. Zrobiłem kopię zapasową firmware'u, ale nie jestem pewien, czy udało mi się go poprawnie wyodrębnić, ponieważ ciągle pojawiały się błędy CRC.

    Teraz jestem w punkcie, w którym muszę dowiedzieć się, jakie są GPIO dla przycisku i linii danych. Miałem nadzieję, że w oprogramowaniu OpenBK jest polecenie, które pozwoli mi zrzucić istniejący stan pinów, dzięki czemu będę miał przynajmniej prostą ścieżkę do identyfikacji przycisku.

    Jakieś sugestie lub wskazówki / sztuczki, jak najlepiej zidentyfikować właściwe piny?

    Dodano po 18 [minutach]:

    Ah, udało mi się znaleźć wyszukiwarkę GPIO. Pin 24 to przycisk. Wkrótce poszukam pozostałych pinów. Myślę, że jest tam MOSFET do określania, czy zasilanie powinno iść do paska, czy nie, a także rzeczywisty pin danych.
  • #5 20803289
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Przepraszam za późną odpowiedź. Jeśli to urządzenie wykorzystuje indywidualnie adresowalne diody LED, wówczas dane są zawsze P16. Dzieje się tak, ponieważ używają SPI do wypychania pikseli z prawidłowym taktowaniem. Czy próbowałeś sterownika SM16703?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #6 20804661
    darconeous
    Poziom 3  
    Posty: 5
    Ocena: 6
    W porządku, oto pinout:

    P16: DOUT (do DIN na pasku)
    P22: 24v Power Enable (kontroluje pin +24v do paska LED)
    P24: Przycisk (niski po naciśnięciu, wysoki, gdy nie jest naciśnięty)

    Wypróbowałem sterownik SM16703 i wygląda na to, że z jakiegoś powodu występuje przesunięcie bitowe, które powoduje, że kanały nie są prawidłowo ustawione. Ale z tego, co wiem, kolejność kanałów jest następująca:

    Kanał 1: Czerwony
    Kanał 2: Zielony
    Kanał 3: Niebieski
    Kanał 4: Ciepła biel 1
    Kanał 5: Ciepła biel 2 (ta sama dioda LED co kanał 4, ale tylko dodatkowa jasność)
    Kanał 6: Chłodna biel 1
    Kanał 7: Chłodna biel 2 (Ta sama dioda LED co kanał 6, ale tylko dodatkowa jasność)

    Wygląda więc na to, że kanały RGB mogą działać w zakresie 0-255, ale kanały bieli mogą efektywnie działać w zakresie 0-510.

    Sterownik SM16703 zdecydowanie wydaje się błędny, nawet biorąc pod uwagę, że jest przeznaczony tylko dla 3 kanałów zamiast 7. Wydaje się, że nie czyści bufora podczas inicjalizacji, więc wszystko zaczyna się od losowych wartości, chyba że zainicjujesz je wszystkie jawnie. Wydaje się również, że nie zapobiega ustawianiu wartości LED, które są większe niż inicjalizacja, co prowadzi do uszkodzenia pamięci, co powoduje, że urządzenie przechodzi w zły stan. Wydaje się również, że występuje dziwny problem z przesunięciem bitów, w którym kanały nie są do końca zgodne bit po bicie, więc ustawienie jednego kanału na 255 wydaje się powodować ustawienie niektórych z tych bitów na poprzednim kanale. Nie jestem pewien, dlaczego tak się dzieje.

    Ale przynajmniej mogę kontrolować światła!

    Dla ogólnego sterownika myślę, że chciałbyś mieć następujące opcje konfiguracji:

    1. Liczba kanałów.
    2. Mapowanie kanałów. (RGB, BGR, WWRGBCC, itp.)
    3. Może informacje o taktowaniu, aby mógł być również kompatybilny z neopikselami?

    UPDATE: Jeszcze tego nie testowałem, ale myślę, że rodzaj zmian, które chcielibyśmy wprowadzić w sterowniku, wygląda mniej więcej tak:

    
    diff --git a/src/driver/drv_sm16703P.c b/src/driver/drv_sm16703P.c
    index e0e011ce..0593dbd6 100644
    --- a/src/driver/drv_sm16703P.c
    +++ b/src/driver/drv_sm16703P.c
    @@ -22,12 +22,16 @@
     
     #include "drv_spidma.h"
     
    +#define SM16703P_MAX_CHANNELS		(8)
    +
     static uint8_t data_translate[4] = {0b10001000, 0b10001110, 0b11101000, 0b11101110};
     
    -UINT8 *send_buf;
    -struct spi_message *spi_msg;
    +UINT8 *send_buf = NULL;
    +struct spi_message *spi_msg = NULL;
     BOOLEAN initialized = false;
     uint32_t pixel_count = 0;
    +uint8_t channel_count = 3;
    +uint8_t channel_map[SM16703P_MAX_CHANNELS];
     
     static uint8_t translate_2bit(uint8_t input) {
     	//ADDLOG_INFO(LOG_FEATURE_CMD, "Translate 0x%02x to 0x%02x", (input & 0b00000011), data_translate[(input & 0b00000011)]);
    @@ -58,7 +62,7 @@ static void SM16703P_setMultiplePixel(uint32_t pixel, UINT8 *data) {
     
     	// Iterate over pixel
     	uint8_t *dst = spi_msg->send_buf + 2;
    -	for (uint32_t i = 0; i < pixel * 3; i++) {
    +	for (uint32_t i = 0; i < pixel * channel_count; i++) {
     		uint8_t input = *data++;
     		*dst++ = translate_2bit((input >> 6));
     		*dst++ = translate_2bit((input >> 4));
    @@ -66,14 +70,21 @@ static void SM16703P_setMultiplePixel(uint32_t pixel, UINT8 *data) {
     		*dst++ = translate_2bit(input);
     	}
     }
    -void SM16703P_setPixel(int pixel, int r, int g, int b) {
    -	translate_byte(r, spi_msg->send_buf + (2 + 0 + (pixel * 3 * 4)));
    -	translate_byte(g, spi_msg->send_buf + (2 + 4 + (pixel * 3 * 4)));
    -	translate_byte(b, spi_msg->send_buf + (2 + 8 + (pixel * 3 * 4)));
    +void SM16703P_setPixel(int pixel, int r, int g, int b, int w, int c) {
    +	translate_byte(r, spi_msg->send_buf + (2 + channel_map[0]*4 + (pixel * channel_count * 4)));
    +	translate_byte(g, spi_msg->send_buf + (2 + channel_map[1]*4 + (pixel * channel_count * 4)));
    +	translate_byte(b, spi_msg->send_buf + (2 + channel_map[2]*4 + (pixel * channel_count * 4)));
    +
    +	if (channel_count >= 4) {
    +		translate_byte(w, spi_msg->send_buf + (2 + channel_map[3]*4 + (pixel * channel_count * 4)));
    +	}
    +	if (channel_count >= 5) {
    +		translate_byte(c, spi_msg->send_buf + (2 + channel_map[4]*4 + (pixel * channel_count * 4)));
    +	}
     }
     
     commandResult_t SM16703P_CMD_setPixel(const void *context, const char *cmd, const char *args, int flags) {
    -	int pixel, i, r, g, b;
    +	int pixel, i, r, g, b, w, c;
     	Tokenizer_TokenizeString(args, 0);
     
     	if (Tokenizer_GetArgsCount() != 4) {
    @@ -86,32 +97,43 @@ commandResult_t SM16703P_CMD_setPixel(const void *context, const char *cmd, cons
     	g = Tokenizer_GetArgIntegerRange(2, 0, 255);
     	b = Tokenizer_GetArgIntegerRange(3, 0, 255);
     
    -	ADDLOG_INFO(LOG_FEATURE_CMD, "Set Pixel %i to R %i G %i B %i", pixel, r, g, b);
    +	if (channel_count >= 4) {
    +		w = Tokenizer_GetArgIntegerRange(4, 0, 255);
    +	}
    +
    +	if (channel_count >= 5) {
    +		c = Tokenizer_GetArgIntegerRange(5, 0, 255);
    +	}
    +
    +	if (channel_count send_buf[2 + 1 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 2 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 3 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 4 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 5 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 6 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 7 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 8 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 9 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 10 + (pixel * 3 * 4)],
    -			spi_msg->send_buf[2 + 11 + (pixel * 3 * 4)]);
    +	else if (pixel < pixel_count) {
    +		SM16703P_setPixel(pixel, r, g, b, w, c);
    +
    +		for (i = 0; i < channel_count; i++) {
    +			ADDLOG_INFO(LOG_FEATURE_CMD, "Raw Data CH%i 0x%02x 0x%02x 0x%02x 0x%02x",
    +				i,
    +				spi_msg->send_buf[2 + 0 + i*4 + (pixel * channel_count * 4)],
    +				spi_msg->send_buf[2 + 1 + i*4 + (pixel * channel_count * 4)],
    +				spi_msg->send_buf[2 + 2 + i*4 + (pixel * channel_count * 4)],
    +				spi_msg->send_buf[2 + 3 + i*4 + (pixel * channel_count * 4)]);
    +		}
    +	} else {
    +		ADDLOG_INFO(LOG_FEATURE_CMD, "Bad pixel index %i", pixel);
    +		return CMD_RES_BAD_ARGUMENT;
     	}
     
    -
     	return CMD_RES_OK;
     }
     
    @@ -120,30 +142,64 @@ static void SM16703P_Send(byte *data, int dataSize) {
     }
     
     commandResult_t SM16703P_Start(const void *context, const char *cmd, const char *args, int flags) {
    -
    +	int i;
     	Tokenizer_TokenizeString(args, 0);
     
     	if (Tokenizer_GetArgsCount() == 0) {
    -		ADDLOG_INFO(LOG_FEATURE_CMD, "Not Enough Arguments for init SM16703P: Amount of LEDs missing");
    +		ADDLOG_INFO(LOG_FEATURE_CMD, "Not Enough Arguments for init SM16703P: Pixel count is missing");
     		return CMD_RES_NOT_ENOUGH_ARGUMENTS;
     	}
     
     	pixel_count = Tokenizer_GetArgIntegerRange(0, 0, 255);
     
    +	if (Tokenizer_GetArgsCount() >= 2) {
    +		channel_count = Tokenizer_GetArgIntegerRange(1, 0, SM16703P_MAX_CHANNELS);
    +	} else {
    +		channel_count = 3;
    +	}
    +
    +	if (Tokenizer_GetArgsCount() >= 3) {
    +		for (i = 0; i < channel_count; i++) {
    +			channel_map[i] = Tokenizer_GetArgIntegerRange(2+i, 0, 8);
    +			if (channel_map[i] >= channel_count) {
    +				ADDLOG_INFO(LOG_FEATURE_CMD, "Bad channel index %i for channel %i", channel_map[i], i);
    +				return CMD_RES_BAD_ARGUMENT;
    +			}
    +		}
    +	} else {
    +		for (i = 0; i < channel_count; i++) {
    +			channel_map[i] = i;
    +		}
    +	}
    +
     	ADDLOG_INFO(LOG_FEATURE_CMD, "Register driver with %i LEDs", pixel_count);
     
    +	// Free the old buffer if one was allocated.
    +	if (initialized) {
    +		os_free(send_buf);
    +	}
    +
     	// Prepare buffer
    -	uint32_t buffer_size = 2 + (pixel_count * 3 * 4);			  //Add two bytes for "Reset"
    +	uint32_t buffer_size = 2 + (pixel_count * channel_count * 4);			  //Add two bytes for "Reset"
     	send_buf = (UINT8 *)os_malloc(sizeof(UINT8) * (buffer_size)); //18LEDs x RGB x 4Bytes
    -	int i;
     
     	send_buf[0] = 0;
     	send_buf[1] = 0;
     
    +	// Turn on all channels on all pixels at maximum brightness.
    +	// TODO: Is this REALLY what we want to do? Shouldn't we be
    +	//       be setting the initial value to be encoded zero bits
    +	//       instead of encoded 1 bits? Consider changing to
    +	//       0b10001000 after discussion.
     	for (i = 2; i < buffer_size; i++) {
     		send_buf[i] = 0b11101110;
     	}
     
    +	// Free the old buffer if one was allocated.
    +	if (initialized) {
    +		os_free(spi_msg);
    +	}
    +
     	spi_msg = os_malloc(sizeof(struct spi_message));
     	spi_msg->send_buf = send_buf;
     	spi_msg->send_len = buffer_size;
    


    Pozwoliłoby to na inicjalizację z niestandardową liczbą kanałów, takich jak ten (7 kanałów, RGBWxCx)

    
    SM16703P_Init 10 7 0 1 2 3 5
    

    Ale jeśli nie określisz liczby kanałów, przyjmie "3 0 1 2" (3 kanały, kolejność RGB).

    Ponownie, nie testowałem powyższego kodu (nie jestem nawet pewien, czy jeszcze się kompiluje), ale to powinien być dobry początek.
    Dodano po 11 [godzinach] 22 [minutach]:
    Argh.... Wygląda na to, że coś jest bardzo dziwnego ze sterownikiem SPI. Ciągle dostaję bardzo dziwne przesunięcie / zapętlenie na wyjściu SPI, takie rzeczy jak kanały są wyłączone o dwa lub więcej, ale nadal faktycznie owijają się w taki sposób, że jeśli wypełnisz wszystkie piksele, wszystkie piksele nadal będą oświetlone. Przesunięcie wydaje się zmieniać w zależności od rozmiaru bufora.

    Mój mózg boli zbyt mocno, aby kontynuować pracę nad tym dziś wieczorem.

    AKTUALIZACJA:

    Tak, wyjście SPI nie pasuje do danych w buforze:
    Zdjęcie ekranu oscyloskopu pokazujące sygnał testowy SPI DMA.

    Możesz zobaczyć tę lukę w środku: To jest impuls "reset" (rozszerzony do 7 bajtów w moim kodzie), który powinien być na początku transmisji. Innymi słowy, cała transmisja powinna być wyświetlana jako duży blok, a nie dwa bloki. Z jakiegoś powodu impuls "reset" znajduje się w środku!

    Jeśli zmniejszę całkowitą liczbę świateł do 2 (po 7 kanałów każdy), mogę niezawodnie uzyskać impuls resetowania na początku. Jestem naprawdę zdezorientowany, dlaczego wyjście SPI nie jest zgodne z kolejnością w pamięci. Jakieś pomysły?
  • #7 20807690
    darconeous
    Poziom 3  
    Posty: 5
    Ocena: 6
    Cóż, z frustracji związanej z SPI DMA, próbowałem bitbangować bity... Ale najkrótszy impuls, jaki mogłem uzyskać, wynosił 2 µs - znacznie dłużej niż wymagane 0,3 µs. Mógłbym być w stanie znacznie poprawić ten czas, uderzając bezpośrednio w rejestry GPIO, co jest podejściem, które bitstream bit-banging method from Micropython robi i udaje mu się to z wariantem RISC-V ESP32.

    Czy jest coś, co powinienem wiedzieć o tym, jak zwiększyć szybkość bitów, czy też istnieje jakiś podstawowy limit, na który będę musiał się natknąć?
  • #8 20807800
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Przepraszam za spóźnioną odpowiedź, @darconeous . Zgodnie z moją najlepszą wiedzą, nie jest możliwe wykonanie bit bang na tej platformie, ze względu na system pamięci podręcznej instrukcji flash, który jest praktycznie losowy. Próbowałem tego podejścia i zawiodłem w przeszłości. Próbowałem nawet z operatorami nop . Jedynym sposobem, aby to zadziałało, byłoby użycie ramfunc , która jest funkcją rezydującą w pamięci RAM i wykonywaną bezpośrednio z pamięci RAM, ale znowu, znalazłem problem z tworzeniem własnego ramfunc również....
    https://github.com/openshwprojects/OpenBK7231T_App/issues/497

    Czy naprawdę jesteś pewien, że robisz wszystko dobrze z SPI? Sam jeszcze tego nie próbowałem, z wyjątkiem kilku testów z WS2812B, ale nadal wydawało się, że działa.... Muszę wyjąć mój zakres, aby to sprawdzić, lub możemy poprosić @DeDaMrAz, aby również to sprawdził i pokazał tutaj przebiegi.
    Pomogłem? Kup mi kawę.
  • #9 20808053
    DeDaMrAz
    Poziom 23  
    Posty: 620
    Pomógł: 34
    Ocena: 130

    @darconeous

    Mógłbyś udostępnić oryginalny zrzut FW?

    Znalazłem ten sam pasek na eBayu, więc zdobędę go w ciągu kilku tygodni, abyśmy mogli go w pełni przetestować i wesprzeć.
  • #10 20808173
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    @DeDaMrAz moglibyśmy po prostu sflashować jego kopię zapasową na naszym CB3S i wykonać scoping z oryginalnym firmware.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #11 20810671
    paulcarhuff
    Poziom 1  
    Posty: 1

    Chciałbym tylko podziękować za to, że w ogóle spróbowaliście. Doceniam te światła za cenę, ale programowalność z aplikacji Feita pozostawia trochę do życzenia. (Nawet jeśli tylko trochę)

    W niedalekiej przyszłości planuję programowanie Neopixeli, ale jestem dzieckiem, jeśli chodzi o kodowanie w tym momencie. Używałem VB i JavaScript w szkole, ale to było ponad 20 lat temu!

    JAKIEGOKOLWIEK...
    Mam nadzieję, że pewnego dnia będę w stanie "na piksel" kontrolować te światła. Moim skromnym zdaniem przyzwoita cena za pasek, kontroler, zasilacz i w większości funkcjonalną aplikację. Aplikacja spełnia prawie wszystkie moje oczekiwania, ale nie w 100%

    Sprzęt już jest!

    Dodano po 31 [minutach]:

    Hej, IDK czy to ma znaczenie, ale większość scen w aplikacji Feit wydaje się zakładać, że dwa paski są ze sobą połączone. Doprowadzało mnie to do szału całą noc, dopóki tego nie rozgryzłem. Ale tam, gdzie rzeczy powinny być symetryczne, nawet biorąc to pod uwagę, nie zawsze są. Jakby było przesunięcie... nie wiem, ale kiedy zdałem sobie z tego sprawę, pomyślałem, że ktoś inny może to wykorzystać.

    Dzięki jeszcze raz!
  • REKLAMA
  • #12 20843831
    missoulapc
    Poziom 1  
    Posty: 1

    Jeszcze jakieś szczęście? Kupiłem kilka z nich w Costco. Błysnął bez problemu. Zastanawiam się tylko, jak wydobyć z nich trochę światła.
  • #13 20844769
    DeDaMrAz
    Poziom 23  
    Posty: 620
    Pomógł: 34
    Ocena: 130

    @missoulapc

    Nie mamy takiego urządzenia pod ręką, więc trudno w tej chwili coś z tym zrobić. Jeśli ktoś będzie chciał go sprzedać i nam przesłać, chętnie spróbujemy go włączyć i wesprzeć.
  • #14 20851058
    CliffBraun
    Poziom 1  
    Posty: 1

    Mam dodatkowe, które mogę gdzieś wysłać, jeśli to pomoże.
  • #15 20851080
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Skąd jesteś? W zależności od lokalizacji, wysyłka do Polski może być kosztowna. Wyślij mi PM, jeśli jesteś zainteresowany pomocą.
    Pomogłem? Kup mi kawę.
  • #16 20868940
    kevdel
    Poziom 4  
    Posty: 4
    Ocena: 4

    >>20808053

    Dostałeś kopię FW? Mam taki z urządzenia, które kupiłem w ostatni weekend.
  • #18 20869022
    kevdel
    Poziom 4  
    Posty: 4
    Ocena: 4

    >>20804661
    Czy przypadkiem próbowałeś sterownika ESPHome?
    https://esphome.io/components/light/fastled.html

    Wydaje się, że są one ograniczone do 3 kanałów dla RGB... więc może to początek liczby, którą znalazłeś

    Dodano po 2 [minutach]:

    >>20868971
    Załączniki:
    • readResult_BK7231N_QIO_feitflasheroriginalfw_2023-18-12-14-03-35.bin (2 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #19 20869547
    kevdel
    Poziom 4  
    Posty: 4
    Ocena: 4

    >>20868971

    Jeśli kiedykolwiek będziesz potrzebować pracy domowej do przetestowania, chętnie skorzystam z mojej, aby załadować rozwiązania deweloperskie.
  • #20 20869549
    DeDaMrAz
    Poziom 23  
    Posty: 620
    Pomógł: 34
    Ocena: 130
    kevdel napisał:
    >>20868971

    jeśli kiedykolwiek będziesz potrzebował sprzętu do przetestowania, chętnie użyję mojego do załadowania rozwiązań deweloperskich.


    Dziękujemy za zaangażowanie, niestety musimy przeprowadzić testy lokalnie, aby zapewnić rozwiązanie. Bardzo doceniliśmy dostarczoną przez Ciebie kopię zapasową. Będziemy z nią pracować i dostarczać tutaj aktualizacje.


    Widok ekranu aplikacji na smartfonie pokazujący ustawienia oświetlenia LED Chasing Tape Light. Mikrokontroler połączony z urządzeniem mobilnym, na ekranie którego widoczna jest aplikacja do dodawania urządzeń.

    P24 to przełącznik na urządzeniu, służący do parowania.

    @p.kaczmarek2 chyba powinniśmy użyć naszych zmodyfikowanych modułów do testów, prawda?

    Dziękuję.
  • #21 20869629
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    P16 to wyjście SPI służące do przesyłania danych pikseli, zmodyfikowaliśmy w tym celu moduły:
    Jak uzyskać dostęp do sprzętowego portu SPI w CB2S? P16 (MOSI) Metoda przerwania GPIO
    Nie jest dostępny w niezmodyfikowanym CB2S i nie w CB3S. Potrzebujesz do tego modyfikacji z powyższego linku lub CBU
    Pomogłem? Kup mi kawę.
  • #22 20869633
    DeDaMrAz
    Poziom 23  
    Posty: 620
    Pomógł: 34
    Ocena: 130
    p.kaczmarek2 napisał:
    P16 to wyjście SPI służące do przesyłania danych pikseli, zmodyfikowaliśmy w tym celu moduły:
    Jak uzyskać dostęp do sprzętowego portu SPI w CB2S? P16 (MOSI) Metoda przerwania GPIO
    Nie jest dostępny w niezmodyfikowanym CB2S i nie w CB3S. Potrzebujesz do tego modyfikacji z powyższego linku lub CBU


    Mam to gotowe.
  • #23 20890614
    kevdel
    Poziom 4  
    Posty: 4
    Ocena: 4
    Przypadkiem @DeDaMrAz , jakieś informacje na temat śledztwa? Jeśli mogę jakoś pomóc, daj mi znać! Dzięki!
  • #24 20931119
    Sarain
    Poziom 4  
    Posty: 3

    Z zainteresowaniem śledzę ten wątek i też jestem ciekaw, czy są jakieś aktualizacje na temat wsparcia.

    W nadziei, że w końcu będą one wspierane, podjąłem niewielkie ryzyko, kupując kilka z nich w okresie świąt Bożego Narodzenia.

    Wiem, że to praca wolontariacka, więc całkowicie rozumiem, jeśli nie jest jeszcze gotowy. Chciałem tylko sprawdzić, ponieważ od jakiegoś czasu nie było żadnych aktualizacji statusu.

    Z wyrazami szacunku!
  • #25 20937193
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    darconeous napisał:

    AKTUALIZACJA:

    Tak, wyjście SPI nie pasuje do danych w buforze:

    Zdjęcie ekranu oscyloskopu pokazujące sygnał testowy SPI DMA.

    Widać tę przerwę pośrodku: jest to impuls „resetujący” (w moim kodzie rozszerzony do 7 bajtów), który powinien znajdować się na początku transmisji. Innymi słowy, cała transmisja powinna wyglądać jak duży blok, a nie dwa bloki. Z jakiegoś powodu impuls „resetowania” jest pośrodku!

    Jeśli zmniejszę całkowitą liczbę świateł do 2 (7 kanałów każdy), wówczas będę mógł niezawodnie uzyskać impuls resetujący na początku. Naprawdę jestem zdezorientowany, dlaczego wyjście SPI nie jest zgodne z kolejnością w pamięci. Jakieś pomysły?

    Mogę tylko potwierdzić, że spędziłem dzień testując SPI DMA i doszedłem do tego samego wniosku.

    Istnieje pewna dziwna niestabilność, która powoduje, że a losowy opóźnienie w transferze.

    Próbowałem to naprawić, na przykład wykonując pętlę NOP, aż SPI DMA wyśle wszystko, ale nadal się to dzieje.

    Zobacz test WS2812B poniżej, prawidłowe wyświetlanie:
    Taśma LED WS2812B podłączona do oscyloskopu, z widoczną nieprawidłowością w wyświetlaniu.
    Losowo wyświetlacz SPI DMA jest uszkodzony:
    Oscyloskop Rigol DS1054Z z wyświetlaczem przedstawiającym sygnał oraz pasek LED WS2812B.
    Nie wiem obecnie, co jest przyczyną tego problemu. Potrzebujemy więcej informacji, potrzebna jest każda pomoc.
    Pomogłem? Kup mi kawę.
  • #26 20966214
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Naprawiono błąd sterownika SPI DMA. Diody LED SM16703P/WS2812B/etc powinny teraz działać dobrze. Zaktualizuj swoje urządzenia. Aby zapoznać się z konfiguracją skryptów, zobacz:
    Sterownik OpenBeken WS2812B (kompatybilny z SM16703P itp.) - krótka prezentacja skryptów
    Tam możemy kontynuować dyskusję. Bardziej zaawansowana animacja zostanie dodana wkrótce, bądź na bieżąco!
    Pomogłem? Kup mi kawę.
  • #27 21315554
    sasipraveen39
    Poziom 1  
    Posty: 1
    Mam te same światła LED z Costco i mam wiele pociętych nadmiarowych pasków, które próbuję przylutować razem, aby utworzyć jeden długi pasek światła. Próbuję przylutować pasek światła bezpośrednio do kontrolera. Czy ktoś wie, które piny na złączu USB-C SMD na kontrolerze odpowiadają GND, 24V i Dout? Z góry dziękuję.

    Zbliżenie na płytkę drukowaną z portem USB-C i paskiem LED z oznaczeniami GND, 24V i Dout.
  • #28 21315812
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Czy masz multimetr? Powinno to być bardzo łatwe do sprawdzenia.
    Dout to P16, sprzętowe wyjście SPI.
    Sprawdź ten temat, aby zobaczyć, gdzie znajduje się P16 na obudowie QFN:
    BK7231 datasheet, pinout, programowanie, specyfikacja, wiki (BK7231T, BK7231N)
    Należy pamiętać, że pierwszy pin jest oznaczony kropką. Ponadto można to sprawdzić, patrząc na piny oscylatora kwarcowego.
    Pomogłem? Kup mi kawę.
  • #29 21539283
    Sarain
    Poziom 4  
    Posty: 3
    Zdaję sobie sprawę, że ten wątek jest dość stary, ale wydaje się, że jest to główny wątek do dyskusji na temat tej konkretnej taśmy LED marki Feit Electric. Chętnie założę nowy wątek, jeśli tak będzie lepiej.

    Dziękuję wszystkim zaangażowanym w uruchomienie sterownika SM16703 na BK7231N!
    W końcu wracam do wypróbowania tego z nową wersją OpenBK (1.18.94) na tych taśmach LED. Mam wszystko skonfigurowane i w większości działa w tym sensie, że mogę użyć serii poleceń SM16703P_SetPixel, aby przewidywalnie kontrolować, które diody LED się włączają.

    Problem, który wciąż mam, polega na tym, że ten pasek używa zarówno SM16703, jak i SM16704, więc 7 kanałów na segment, we wzorze R G B WW WW CW CW. Normalna komenda SM16703P_SetPixel oczekuje 3 kanałów (dla RGB).

    Mogę więc uruchomić następujące polecenie, aby ustawić pierwsze dwa segmenty na pełną zieleń (jako przykład):
    SM16703P_Init 4
    SM16703P_SetPixel 0 0 255 0
    SM16703P_SetPixel 1 0 0 0
    SM16703P_SetPixel 2 0 0 255
    SM16703P_SetPixel 3 0 0 0
    SM16703P_Start


    Jest to jednak trochę irytujące, ponieważ nieparzysta liczba kanałów utrudnia śledzenie pozycji każdego koloru w dowolnych punktach paska.

    Wygląda na to, że @darconeous wykonał trochę pracy w kierunku obsługi dowolnej liczby kanałów i mapowania kanałów w drv_sm16703P.c z jego postu powyżej. Nie ma tego jednak w głównych kompilacjach repo. Czy ktoś, kto nadal używa tych pasków, znalazł dobry/lepszy sposób na ich kontrolowanie? Jeśli scalanie zmian @darconeous do najnowszej wersji i budowanie jej samodzielnie jest odpowiedzią, mogę pójść tą drogą. Jeśli istnieje prostsza droga (lub plany wsparcia czegoś podobnego), mogę poczekać i/lub potencjalnie pomóc.

    Moim ostatecznym celem jest wykorzystanie nowego sterownika PixelAnim do animowania tego paska i kontrolowania go z Home Assistant.
  • #30 21540498
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14755
    Pomógł: 659
    Ocena: 12881
    Chciałbym również rozszerzyć sterownik PixelAnim, aby obejmował więcej typów pasków. Niedawno zamówiłem kilka pasków RGBW z Chin, ale nie miałem jeszcze czasu, aby się nimi pobawić, ale może moglibyśmy wspólnie nad tym popracować. Czy znasz programowanie w języku C?

    Mogę zaakceptować drv_sm16703P.c PR, o ile nie łamie żadnych funkcji i jest skonstruowany w taki sposób, że nie będzie utrudniał dalszego rozwoju...
    Pomogłem? Kup mi kawę.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy 20-metrowego paska LED Feit Electric „Smart Color Chasing Strip Light” wykorzystującego mikrokontroler BK7231N oraz układy sterujące SM16703 i SM16704. Pasek jest typu RGBCW z siedmioma kanałami na segment (RGB, dwie ciepłe biele i dwie chłodne biele), jednak standardowy sterownik SM16703 obsługuje tylko 3 kanały, co powoduje problemy z poprawnym mapowaniem i przesunięciami bitowymi. Złącze paska przypomina USB-C, ale przesyła tylko trzy sygnały: +24 V, DOUT (P16, wyjście SPI) i GND, co budzi wątpliwości co do bezpieczeństwa podłączenia do standardowych portów USB-C. Użytkownicy wykonali kopie zapasowe firmware’u, zidentyfikowali piny GPIO (P16 – DOUT, P22 – włączanie zasilania 24V, P24 – przycisk parowania) i testują modyfikacje oprogramowania OpenBK, w tym poprawki sterownika SPI DMA, który wcześniej wykazywał niestabilności i błędy transmisji. Próby bitbangingu sygnału SPI napotkały ograniczenia sprzętowe BK7231N związane z pamięcią podręczną flash. Trwają prace nad rozszerzeniem sterowników (np. PixelAnim) do obsługi 7-kanałowych pasków oraz integracją z platformami takimi jak ESPHome, choć obecnie ograniczonymi do 3 kanałów RGB. Społeczność wymienia się kopią firmware’u i planuje dalsze testy sprzętowe i programowe, aby umożliwić precyzyjną kontrolę poszczególnych diod LED na pasku Feit Electric.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA