Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2018:rgb-controller [2019/01/14 23:46] Lukáš Gerych |
2018:rgb-controller [2019/01/15 00:08] (aktuální) Lukáš Gerych |
||
---|---|---|---|
Řá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 54: | Řádek 54: | ||
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. | 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==== | ||
- | V 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 }} |
---- | ---- |