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