Skocz do zawartości

Diody ws2812b sterowane przez UART


Elvis

Pomocna odpowiedź

Może i tak - ale co mam zrobić jak leży mi na półce jakieś 60 sztuk 2812B (kupiłem kiedyś od pewnego skośnookiego przyjaciela po 10 groszy sztuka)? Mam wyrzucić i kupić nowe? Przecież zanim z Ali przyjdą to już będą przestarzałe :(

Link do komentarza
Share on other sites

15 godzin temu, ethanak napisał:

Może i tak - ale co mam zrobić jak leży mi na półce jakieś 60 sztuk 2812B (kupiłem kiedyś od pewnego skośnookiego przyjaciela po 10 groszy sztuka)? Mam wyrzucić i kupić nowe? Przecież zanim z Ali przyjdą to już będą przestarzałe 😞

@ethanak w takim wypadku warto chyba zostać przy posiadanych diodach, ale jeśli ktoś planuje jakieś nowe, komercyjne projekty to warto wiedzieć o nowych diodach 😉

Przy okazji: a testował ktoś z Was rozwiązania od innych firm? Na przykład od LITEONa? Nie testowałem ich w praktyce, ale słyszałem, że ich diody wyposażone są w lepsze sterowniki. Mowa np. o diodach LTST-E563CEGBW. Fajnie byłoby przetestować kiedyś produkty innych firm i porównać wyniki 😉

Link do komentarza
Share on other sites

Odkopię temat bo skorzystałem z biblioteki, a że może się komuś przydać transfer DMA to wklejam kod który to umożliwia jednocześnie zmniejszając tablicę do 16bajtów.
 

static uint8_t ws2812b_buf[16]; 
volatile uint16_t numLedPix;
//static void ws_encode(uint8_t r, uint8_t g, uint8_t b, uint8_t *buf);
static void ws_encode(uint8_t * pixel, uint8_t *buf);

static const uint8_t ws_code[] = {
		  ~0x24, ~0x64, ~0x2c, ~0x6c,
		  ~0x25, ~0x65, ~0x2d, ~0x6d
};




void  ws2812_show(void) {
if (!pixels)
    return;

numLedPix = 3;

 ws_encode(pixels,ws2812b_buf); // wstępne ładowanie bufora
ws_encode(&pixels[numLedPix],&ws2812b_buf[sizeof(ws2812b_buf) / 2]); // pixels + 3 --> przesuniecie wskaznika o rgb

HAL_UART_Transmit_DMA(wsUart, ws2812b_buf,sizeof(ws2812b_buf));
}

//static void ws_encode(uint8_t r, uint8_t g, uint8_t b, uint8_t *buf)

static inline void ws_encode(uint8_t * pixel, uint8_t *buf)
{

	uint32_t value = (pixel[0] << 16) | (pixel[1] << 8) | pixel[2];

	for (int i = 0; i < 8; i++) {
		uint32_t tmp = (value >> 21) & 0x7;
		*buf++ = ws_code[tmp];
		value <<= 3;
	}
}

void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) // polowa transferu ladowanie pierwszej czesci tablicy
{

if(huart->Instance == USART1)
	{
	if(numLedPix == numBytes)
	{
			HAL_UART_DMAStop(wsUart);
		}else{
		    numLedPix+=3; // 3
			ws_encode(&pixels[numLedPix],ws2812b_buf);
		}
	}
}


void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART1)
		{
		if(numLedPix == numBytes){
		HAL_UART_DMAStop(wsUart);
		}else{
			numLedPix+=3; // +=3
			ws_encode(&pixels[numLedPix],&ws2812b_buf[sizeof(ws2812b_buf) / 2]);
		}
	}
}

Program bazuje na bibliotece neopixel od adafruit. Przy okazji dzięki @Elvis za ten post

EDIT: Dodaję ustawienia w cubemx - ustawiamy transfer memory -> peripheral (ustawienia do i2c dotyczą mojego projektu)

stm32cubeide_ZkVNDsVxDc.thumb.png.b1660e2318e0b189403489841cf5b9ec.png
 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.