PIC 16f84A časovač

Pokud chceš řešit program, musíš řešit výše uvedené. Pokud to řešit nechceš, nemůžeš programovat. Jak chceš zrealizovat refresh 4-místného displeje, když nebudeš řešit časovač, přerušení a výstupy procesoru? Navíc mu dáš na práci čekat 1 vteřinu. Jak jsem tu už mockrát zmiňoval - čekací smyčky v testovací verzi budiž, ale v ostrém programu maximálně v délce jednotek ms. Při 4-místném displeji musíš jednotlivé číslice přepínat cca 400x za vteřinu. Tím dostaneš refresh celého displeje 100Hz (to aby to viditelně neblikalo). Postup je takový, že deaktivuješ všechny (nebo aspoň poslední aktivní) číslice, pošleš data pro 1. číslici a aktivuješ jí. Po vypršení času deaktivuješ displeje, pošleš data pro 2. číslici a aktivuješ jí. Takhle střídáš všechny číslice cca každých 2,5ms (= 400Hz). Každá číslice tedy blikne 100x za vteřinu (na 2,5ms svítí, 3x2,5ms = 7,5ms je zhasnutá) a displej pak vypadá, že svítí celý. Můžeš samozřejmě použít i vyšší obnovovací frekvenci. Refresh displeje se v drtivé většině řeší v přerušení časovače.

Druhou možností je pak použít statické řízení displeje. Tedy, že každá číslice má své vlastní datové piny buď přímo na procesoru nebo je můžeš “posadit” například na posuvné registry (74595 nebo 74594) a data pro jednotlivé číslice posílat po SPI. Pak můžeš na 3 piny procesoru připojit libovolné množství číslic. Jejich počet je pak jenom záležitostí počtu odeslaných dat na SPI port.

Další věcí je časování sekund. Když víš, že celý displej obnovíš 100x za sekundu, pak v přerušení počítáš od 100 do 0 (pro procesor je to vhodnější, než počítat od 0 do 100 a kontrolovat hodnotu na 100) a při dosažení 0 přičteš vteřinu a nastavíš počítadlo zpět na 100. Rozhodně nemůžeš používat vteřinovou čekací smyčku. Mimochodem, pro měření času je lepší použít jako zdroj kmitočtu pro procesor krystal. Jednak kvůli stabilitě kmitočtu a jednak kvůli jeho přesnosti. Pokud čítáš třeba jenom hodinu (například u kuchyňský minutky), tak tam se dá použít i interní RC oscilátor. Je třeba ale počítat i s několikavteřinovou odchylkou.