Tato konstrukce do procesoru PIC (spíše prográmek než konstrukce) je odpovědí na dotaz jednoho známého :
Cituji: "Chcel som sa ta spytať či by sa dalo do PIC urobiť takéto niečo : Jedná sa o to, že keď privediem na vstup log.1 len kratko, aby na vstupe bola log.1 natvrdo o dlžke 5 sec., a keď privedieš na vstup signál log.1 nekonečně dlhý, tak stále vyvolá na výstupe len 5 sec. impulz. a keď ten signál zanikne a znovu sa vyskytne tak to iste stále na výstupe len 5 sec. Je to možné ? Neviem, či som to správně napísal pre "programátora" :-)
a potreboval by som takých 6 vstupov a 6 výstupov s tou istou logikou nezávisle.......důfam ze to nebude zložité....."
Požadovaný výstupní průběh
Tolik k zadání. Pro Ty z Vás, kteří neovládají slovenštinu - požadavek zní: vytvořit 6x nezávislý monostabilní klopný obvod. Funkce bude taková, že pokud přijde krátký "jedničkový" impuls (log. 1) na jeden ze vstupů, odpovídající výstup se "překlopí" do stavu log. H na dobu 5 sekund.
Pokud bude impuls na vstupu trvat déle, než 5 sekund, bude výsledkem pouze jeden impuls na výstupu. Další nový impuls bude následovat po dočasování, ale až po přechodu vstupu zpět do log. úrovně L a novém impulsu do úrovně H (viz Obr.1). Navíc, pokud se v době log. úrovně H na výstupu bude nějak měnit (impulsy ap.) úroveň na vstupu, nemá to mít vliv na právě probíhající časový impuls (viz Obr.2).
Obr. 1 - Různé stavy vstupu a výstupu - delší impuls na vstupu
Obr. 2 - Různé stavy vstupu a výstupu - několik impulsů během časování
Popis programu:
Po mé první odpovědi, že tento požadavek splní celkem "za levný peníz" časovač 555 v klasickém zapojení, jsem zjistil, že by pro požadovanou funkci muselo být těchto časovačů šest, samozřejmě každý s nezbytnou "bižuterií" kolem (kondenzátor, rezistory atd.).
Pokud zvolíme procesor, a budeme na něj pohlížet pouze jako na programovatelnou součástku, zjistíme, že se zapojení rapidně zjednoduší (jen a pouze procesor), časy budou neporovnatelně přesnější a stabilnější, a hlavně, nebude problém časy nezávisle na sobě kdykoliv programově změnit. Navíc si časy v programu snadno spočítáme a nebudeme muset pracně nastavovat a měřit se
stopkami v ruce u časovače s 555.
Program zde nebudu pro jeho jednoduchost zbytečně moc rozebírat, v podstatě se neustále skenují jednotlivé vstupy a porovnávají se s uloženým stavem pro zjištění kladného impulsu. Pokud je impuls zjištěn, dojde k uložení předvolby do softwarového časovače odpovídajícího MKO, je nastaven výstupní bit do log. H a je nastaven příznak, řídící dekrementaci (snižování) softwarového časovače tohoto MKO.
Vlastní dekrementaci softwarových časovačů (registrů) zajišťuje časovač 1, který vyvolá přerušení každých 20 msec. V obsluze tohoto přerušení se zjišťuje podle nastavených příznaků, který MKO je aktivní, a podle toho se sníží stav odpovídajícího softwarového časovače o 1. Pokud je dočasováno (samozřejmě opět se rozlišuje u kterého MKO) je výstup přestaven zpět do úrovně log. L.
Je možné si s minimálními znalostmi programování ve zdrojovém souboru nastavit různé časy, samozřejmě pro každý MKO zvlášť. Hardwarová konfigurace procesoru je opravdu velmi jednoduchá, procesor má vnitřní taktování a vnitřní reset po připojení napájení. Prostě pouze připojíme napájení +5V, a zapojení je plně funkční, bez dalších součástek (kromě ošetřovacích rezistorů na vstupech).
Schéma zapojení
Známé nedostatky zapojení:
Možná časová nepřesnost +/- 20 msec (0,02 sec.) při časování - dáno řešením software, a možná mírná časová nepřesnost daná interním generátorem vnitřního taktování procesoru. Protože byla ale preferována maximální jednoduchost zapojení, nebyly tyto drobné chyby na závadu. Procesor i s těmito
známými nedostatky předčí přesností časovač 555 o několik řádů (u časovače jde hlavně o stabilitu kapacity v komparátoru).
Napěťové úrovně odpovídající logickým úrovním log. H a log. L, max. 5V, takže z toho vyplívající ne naprosto univerzálnhí použití, opět poznamenávám, že toto zapojení bylo "šito namíru" do konkrétní aplikace, kde tato omezení nevadila.
Zveřejňuji toto zapojení a program (i ve zdrojovém kódu pro možné úpravy), neboť si myslím, že by mohl (i přes svoji jednoduchost) přijít leckomu vhod.
Ke stažení jsou tyto soubory:
Archiv ZIP, obsahující schéma (*.bmp), zdrojový kód (*.asm) a přeložený (*.hex) soubor.