PIC10F delay rutiny
Jindrich Fucik
fulda na seznam.cz
Pondělí Srpen 12 09:25:53 CEST 2019
úplně přesně si nejsem jistý, jestli chápu dotaz. Zdá se mi příliš jednoduchý na to, aby v něm nebyl nějaký zakopaný pes.
Předně, jak takový program funguje - na PICech trvý jeden instrukční cyklus 4+4 hodinové. PICy mají proudové zpracování a zpracovávají dvě instrukce současně.
Zjednodušeně a nepřesně každá instrukce se rozdělí na:
1) načtení instrukce
2) identifikace parametrů
3) načtení parametrů
4) modifikace parametrů
5) zápis parametrů
6) zápis atributů
7) nevím
8) nevím
(jedno nevím je práce s interruptem)
Finta je, že procesor má jakoby dvě výkonné jednotky a jede dvě po sobě jdoucí instrukce paralelně. první 4 takty první a po 4 přidá druhou. Pokud ta první instrukce provede něco, co znemožní vykonání té druhé, tak se druhá zahodí (například skok).
(pro PIC10 je docela použitelný popis v kapitole 3.1 + 3.2 v datasheetu pro PIC10F200)
Proto se počítá instrukce jako Fosc/4 (v kapitole 10.2 je tabulka s tím, které instrukce trvají 1 a které 2 instrukční cykly)
Takže, počítání je takové, že vezmeš kmitočet v Hz (třeba 2000000 pro 2 MHz), vynásobíš ho časem v sec (třeba 3 sec) a pak celé ještě vydělíš 4.
2000000*3=6000000
6000000/4=1500000
Tolik instrukčních cylků potřebuješ čekat. Pak to obaluješ odprostřed okolo.
napíšeš si instrukci a za ní jak dlouho trvá:
Základní cyklus je tedy:
Delay_0:
clrwdt ;1
decfsz d1, f ;1 (2 se nepotřebuje, protože je zahrnuto v následujícím kroku)
goto ;2
Jeho trvání je 1+1+2=4 instrukční cykly krát d1 pokud to není dostatečné, je potřeba ho zvenku ještě obalit dalším a dalším cyklem.
Tolik teorie. Pokud se nepletu, tak ty používáš PIC10F320.
Ten má k dispozici NCO (NUMERICALLY CONTROLLED OSCILLATOR). Ten se dá k takovým akcím báječně použít a nastavit ho, aby za tebe to čekání vyřešil. Pak stačí natáhnout budík a čekat až přijde čas vstávat.
Je dobré si k tomu přečíst používání stavových automatů:
http://robodoupe.cz/2019/obvod-ktery-zije/
---------- Původní e-mail ----------
Od: cizek.milan na seznam.cz
Komu: 'HW-news' <hw-list na list.hw.cz>
Datum: 11. 8. 2019 21:45:18
Předmět: PIC10F delay rutiny
Ahoj,
chci se zeptat... pro generování delších prodlev používám online generator
(http://www.piclist.com/techref/piclist/codegen/delay.htm).
Bohužel jsem nenašel žádný, který by uměl zakomponovat instrukci clrwdt, tak
nulování provádím v jednom z timerů (přerušení), což asi není úplně
nejlepší.
Je to sice jen 1 instrukční cyklus, ale přidáním v tom počtu opakování se mi
celkový čas natáhne. Existuje nějaký podobný generátor, kde by se dalo
zatrhnout a vložit tuto instrukci? Nebo nějaké jiné řešení?
Dotaz č.2. Když mám několik vnořených cyklů, třeba to zpoždění, je možné
něčím změřit počet instrukčních cyklů a tedy čas trvání dle FOSC/4?
Viz třeba ty zpožďovací rutiny. Potřebuji nic nedělat nějakých 12/24h a
čekat/ověřovat délku prodlevy je poněkud zdlouhavé.
Děkuji.
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list