Skip to content

08 Příkladové programy

Jindra fucik edited this page Mar 22, 2022 · 1 revision

Vytvořil jsem několik příkladových programů, které mají zjednodušit začátek práce. Programy je potřeba chápat jako příklady, určené k dalšímu rozvoji a nikoli jako konečný výčet programů.

Modul LED s vlastním efektem

Pro tento modul jsem jen přizpůsobil program imitující sváření. Program je možné najít i v jiných mých konstrukcích. Je navržen pro procesor PIC10F20x. Program je možné přeložit pro většinu procesorů z této řady, vždy používám takový procesor, jaký je aktuálně dostupný na trhu, rozdíl ceny mezi nejzákladnějším PIC10F200 a nejvybavenějším PIC10F206 je v řádu haléřů. Program není příliš složitý a nepřináší nic nečekaného. Je to jen ukázka, jak může takový program vypadat. Program nepotřebuje nikam komunikovat, takže je velice přímočarý.

Modul LED řízený protokolem

Tento modul se dá též nazvat dekodér pro LED. Program je vytvořený pro procesor PIC10F32x, který je pinově kompatibilní s předchozím PIC10F20x. Je to však mnohem modernější a vybavenější procesor. Program má dvě hlavní části. První část je čtení dat vlastního DCC protokolu. Tato část využívá přerušení při změně vstupního pinu (RA2), zároveň využívá časovač TMR0 pro měření času od poslední změny. Čtení probíhá pomocí jednoduchého stavového automatu, jehož stavy v podstatě odpovídají bitům v jednom paketu. Pokud dojde k přečtení celého paketu, program nastaví příznak pro hlavní smyčku, že je potřeba paket vyhodnotit.

Hlavní smyčka jen čeká na příznak pro vyhodnocení paketu. Pokud jej zaznamená, zkontroluje platnost paketu (XOR všech bajtů je nula) a provede vyhodnocení paketu. Pokud paket obsahuje informace o intenzitě pro adresu, kterou dekodér obsluhuje, pak vezme hodnotu intenzity a použije jí pro nastavení hardwarového PWM. Samotné PWM se pak stará o svícení LED. Zase jsem se snažil o co nejjednodušší program, aby bylo možné jej použít jako základ pro další rozvoj.

Rozšířený napájecí modul – světelný efekt

Tento modul je také možné nazvat centrálou. Program řeší tři části. První je vytváření vlastního signálu. K tomu se využívá přerušení od časovače TMR0 s periodou 55 μs. Logická jednička je tedy jedna perioda (55 μs), logická nula jsou dvě periody (110 μs). Pro vytváření signálu se používá předpřipravený paket v paměti. Rutina sama paket nevytváří. Pokud nastane situace, že v paměti není žádný připravený, rutina odešle paket NOP.

O vytváření paketů se stará druhá část programu. Je volána z hlavní programové smyčky vždy, když si odesílací část odebere připravený paket a začne jej odesílat. Náš efekt obsluhuje 8 led, ale do jednoho paketu je možné odeslat pouze čtyři hodnoty intenzity. Proto se vytváří pakety střídavě pro první 4 led a následně pro druhé 4.

Třetí část programu vytváří vlastní světelný efekt. Efekt je inspirovaný filmem Knight Rider, respektive autem KITT, kterému podobný efekt blikal na čelní masce. Efekt je krokován časovačem TMR2 s frekvencí přibližně 64 Hz. Efekt je velmi jednoduchý, při každém průchodu se sníží intenzita světla LED, která svítí o 13%. Intenzita LED, která je aktuálně chápána jako první se nemění. Každých 8 průchodů se první LED o jednu posune. Při posunu se používá třetí bit jako znaménko, takže efekt cestuje tam a zpět v rozsahu osmi led (bity 0-2).

Tento program nemá žádnou interakci s okolím a nevyužívá kódový přepínač. Není proto nutné jej osazovat. Dokonce je možné tuto část desky odstřihnout.
Ukázkové video

Rozšířený napájecí modul – nastavení (programování) adresy

Tento program je z hlediska efektů málo užitečný, používá se „pouze“ pro nastavení adresy po modul řízený protokolem. Tato činnost je důležitá proto, aby moduly mohly být vytvořeny univerzálně a uživatel si je mohl nastavit podle vlastní potřeby.

Program je jen zjednodušenou variantou předchozího programu. Na začátku si přečte polohu kódového přepínače (nastavené číslo) a neustále odesílá pouze paket pro nastavení adresy na tuto hodnotu. Je proto důležité, aby při nastavování byl připojen pouze jeden modul pro LED řízený protokolem (jinak dojde k nastavení stejné adresy všem připojeným modulům). Jelikož se poloha přepínače čte pouze při zapnutí, je nutné při změně adresy modul vypínat.