Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:rgb-controller

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2018:rgb-controller [2019/01/14 23:31]
Lukáš Gerych [Problém se zapojením diod]
2018:rgb-controller [2019/01/15 00:08] (aktuální)
Lukáš Gerych
Řádek 1: Řádek 1:
 ======Řízení digitálních RGB diod====== ======Řízení digitálních RGB diod======
- +---- 
-=====Zadání ​projektu=====+=====Zadání=====
 Naprogramujte řízení digitálních RGB diod WS2812B(SK6812) zapojených za sebou na externí DPS s rozložením 8×4 s využitím desky STM32F4DISCOVERY. V programu nadefinujte vlastní funkce pro překlápění úrovní pro bity 1 a 0 dle standardu v datasheetu. Pro zobrazení určitých barev na jednotlivých diodách využijte dvourozměrné pole s odpovídajícími hodnotami. Naprogramujte řízení digitálních RGB diod WS2812B(SK6812) zapojených za sebou na externí DPS s rozložením 8×4 s využitím desky STM32F4DISCOVERY. V programu nadefinujte vlastní funkce pro překlápění úrovní pro bity 1 a 0 dle standardu v datasheetu. Pro zobrazení určitých barev na jednotlivých diodách využijte dvourozměrné pole s odpovídajícími hodnotami.
  
 =====Úvod===== =====Úvod=====
-RGB diody WS2812B jsou určeny pro inteligentní ovládání LED světelných zdrojů. Mají v sobě zabudovaný čip, který podle vstupního řídícího signálu ovládá barvy a blikání diod.+RGB diody WS2812B jsou určeny pro inteligentní ovládání LED světelných zdrojů. Mají v sobě zabudovaný čip, který podle vstupního řídícího signálu ovládá barvy a blikání diod. Jsou k dostání v typech pouzder 5050, 3535 nebo 4020 a to na pásku nebo samostatně.
    
 Hlavní výhodou těchto diod je, že více než jedna z nich může být řízena jedním signálem. Jsou tedy vyžadovány pouze tři vodiče - 5V, GND a řídící signál. Zapojení je řešeno kaskádním způsobem, jak je znázorněno na obrázku níže. Hlavní výhodou těchto diod je, že více než jedna z nich může být řízena jedním signálem. Jsou tedy vyžadovány pouze tři vodiče - 5V, GND a řídící signál. Zapojení je řešeno kaskádním způsobem, jak je znázorněno na obrázku níže.
Řádek 11: Řádek 11:
 {{ :​2018:​rgb-controller:​cascade.png?​300 }} {{ :​2018:​rgb-controller:​cascade.png?​300 }}
  
-Jedna dioda vyžaduje příjem 24 bitů -  každá ze tří základních barev má 8 bitovou úroveň se kterou dosahuje 256 úrovní jasu. Celkově je tedy možné využít 16,7 milionů barev.+Jedna dioda vyžaduje příjem 24 bitů - každá ze tří základních barev má 8 bitovou úroveň se kterou dosahuje 256 úrovní jasu. Celkově je tedy možné využít 16,7 milionů barev.
  
 Každá dioda provádí změnu a zesílení signálu. To umožňuje dosáhnout větších vzdáleností. Každá dioda provádí změnu a zesílení signálu. To umožňuje dosáhnout větších vzdáleností.
Řádek 23: Řádek 23:
 {{ :​2018:​rgb-controller:​bits_of_colors.jpg?​800 }} {{ :​2018:​rgb-controller:​bits_of_colors.jpg?​800 }}
  
-Čas přenosu jednoho bitu je 1,25 us, to odpovídá frekvenci 800 kHz, přenosová rychlost tím pádem je 800 kbit/s. Během jedné periody se nastaví nejdříve vysoká a pak nízká úroveň. Bit 1 nebo 0 se rozlišuje podle délky nastavení těchto úrovní (viz obrázek a tabulka). Reset je daný nízkou úrovní ​po dobu větší jak 280 us.+Čas přenosu jednoho bitu je 1,25 us, to odpovídá frekvenci 800 kHz, přenosová rychlost tím pádem je 800 kbit/s. Během jedné periody se nastaví nejdříve vysoká a pak nízká úroveň. Bit 1 nebo 0 se rozlišuje podle délky nastavení těchto úrovní (viz obrázek a tabulka). Reset je daný nízkou úrovní.
  
 {{:​2018:​rgb-controller:​code_level.jpg?​250 }} {{ :​2018:​rgb-controller:​level_time_table.jpg?​600}} {{:​2018:​rgb-controller:​code_level.jpg?​250 }} {{ :​2018:​rgb-controller:​level_time_table.jpg?​600}}
Řádek 52: Řádek 52:
  
 ====Kód==== ​ ====Kód==== ​
-Způsob řešení pro rozsvícení diod, je založen na využití pole se zadanými 24 bitovými hodnotami ​odpovídajícím barvám. Podle těchto vstupních dat se bude každou periodu určovat hodnota střídy PWM signálu, tedy zda má být generován bit 1 nebo 0.+Způsob řešení pro rozsvícení diod o určitých barvách, je založen na využití pole se zadanými 24 bitovými hodnotami. Podle těchto vstupních dat se bude každou periodu určovat hodnota střídy PWM signálu, tedy zda má být generován bit 1 nebo 0.
  
-Pro nastavení střídy PWM signálu se vytvořila funkce set_duty(). Parametry pro funkci jsou hodnota barvy a pořadí bitu, který má být přečten.+Pro nastavení střídy PWM signálu se vytvořila funkce ​//set_duty()//. Parametry pro funkci jsou hodnota barvy a pořadí bitu, který má být přečten.
  
  
Řádek 76: Řádek 76:
  
 V hlavním kódu jsou v nekonečné smyčce dvě podmínky pro přečtení všech bitů ze zadaného pole. V opačném případě je nastaven reset a cyklus se pak opakuje. V hlavním kódu jsou v nekonečné smyčce dvě podmínky pro přečtení všech bitů ze zadaného pole. V opačném případě je nastaven reset a cyklus se pak opakuje.
-Pro časování změny střídy a nastavení resetu je využita funkce pro zpoždění v mikrosekundách DWT_Delay_us() ​ převzatá [[https://​www.youtube.com/​watch?​v=iq6j1hGTVR8|zde]].+Pro časování změny střídy a nastavení resetu je využita funkce pro zpoždění v mikrosekundách ​//DWT_Delay_us()//  ​převzatá [[https://​www.youtube.com/​watch?​v=iq6j1hGTVR8|zde]].
 Aby se diodám měnila barva jsou na konci smyčky přidány další dvě podmínky, které způsobují změnu v pořadí čtení pole. Aby se diodám měnila barva jsou na konci smyčky přidány další dvě podmínky, které způsobují změnu v pořadí čtení pole.
  
Řádek 138: Řádek 138:
 </​code>​ </​code>​
  
-Hodnota u funkce DWT_Delay_us() se musela korigovat tak, aby zadané barvy přibližně odpovídali zobrazeným. S přibývajícím kódem se totiž rychlost procesoru snižuje a časování pak není přesné. V ukázce jde vidět, že jedna dioda problikává,​ což znamená, že se střída mění tam kde by neměla.  ​+Hodnota u funkce ​//DWT_Delay_us()// se musela korigovat tak, aby zadané barvy přibližně odpovídali zobrazeným. S přibývajícím kódem se totiž rychlost procesoru snižuje a časování pak není přesné. V ukázce jde vidět, že jedna dioda problikává,​ což znamená, že se střída mění tam kde by neměla.  ​
 Pro více zapojených diod by tento způsob nebyl dostačující. ​ Pro více zapojených diod by tento způsob nebyl dostačující. ​
 Lepším způsobem by bylo využití jiného časovače se stejnou periodou, ve kterém by se v každém cyklu střída signálu měnila. Ideálně při každé náběžné hraně PWM signálu, jak je zřejmě naznačeno [[https://​electronics.stackexchange.com/​questions/​367294/​how-to-count-the-number-of-the-generated-pwm-pulse-on-stm32|zde]]. Bohužel se tohoto nepodařilo docílit. Lepším způsobem by bylo využití jiného časovače se stejnou periodou, ve kterém by se v každém cyklu střída signálu měnila. Ideálně při každé náběžné hraně PWM signálu, jak je zřejmě naznačeno [[https://​electronics.stackexchange.com/​questions/​367294/​how-to-count-the-number-of-the-generated-pwm-pulse-on-stm32|zde]]. Bohužel se tohoto nepodařilo docílit.
  
 ====Ukázka==== ====Ukázka====
-ukázce je v horním zapojení desky přidaná jedna dioda typu WS2812B a ve spodním jsou SK6812. +V horním zapojení desky je přidaná jedna dioda typu WS2812B a ve spodním jsou SK6812. 
-{{youtube>​77tzE8z8MQc?​medium}}+{{ youtube>​77tzE8z8MQc?​medium }}
  
 ---- ----
2018/rgb-controller.1547505084.txt.gz · Poslední úprava: 2019/01/14 23:31 autor: Lukáš Gerych