Jste zde

PIC16F7x lepší než 16C7x

Řada PIC16F7x nabízí periferie stávající řady 16C7x, v provedení FLASH paměti programu. Všechny

obvody z této řady jsou již běžně k dispozici.

Lepší než předtím

Nová řada, jak již bylo uvedeno nabízí oproti starší změnu media programové paměti ze starší EPROM na dnes již standard FLASH. Odpadla tím nutnost programátorů psát programy v simulátoru, mít emulátor, nebo několik "okénkových" EPROM čipů v šuplíčku a neustále je mazat UV mazačkou neúnosných mnoho minut, protože pamět typu flash je smazaná prakticky okamžitě. Daní za toto pohodlí je v sériové výrobě poněkud delší čas pro programování paměti typu FLASH.

Rodina mikrokontrolérů PIC16F7x má v současnosti, stejně jako její maminka 16C7x (3,4,6,7), celkem čtyři zástupce a těmi jsou: PIC16F73, PIC16F74, PIC16F76 a PIC16F77.Tyto se liší velikostí pouzdra, počtem I/O pinů, integrovanými periferiemi a velikostí paměti FLASH a RAM. Obvody v pouzdrech DIL40, PLCC44, TQFP44 a MQFP44, tj. obvody PIC16F74 a PIC16F77, disponují oproti menším bratříčkům 16F73 a 6 paralelním portem navíc ( Slave mód).
Ačkoliv zde uváděná rodina vychází - co se periferií týče ze shodné PIC16C7x - rozebereme si je nyní jednotlivě.
 

Speciální funkce ...

Power Up Timer

Po přivedení napájecího napětí drží procesor v RESET stavu 72ms. Tato doba je určena pro ustálení stabilizátorů napětí. Tuto volbu je většinou možno vypnout.

Oscillator Startup Timer

Časovač zapne po přivedení napájecího napětí RESET při zvolení oscilátoru typu LP, XT nebo HS - tedy krystalových oscilátorů. Počká na prvních 1024 kmitů oscilátoru. Čeká na ustálení oscilátoru a poté RESET uvolní.

Brown-out detector - Detektor poklesu napájecího napětí

Příčiny chybné funkce zařízení bývají různé. Jednou z možných příčin mohou být krátkodobé poklesy napájecího napětí řádů jednotek až desítek ms. Typickým místem, kde tato situace může nastat, jsou bateriová zařízení, kde se vyskytují periferní obvody s velkým odběrem jako jsou např. elektrické motory, velké LED displeje,… Tato situace může být ještě umocněna špatným stavem baterie (velký vnitřní odpor), jenž celé zařízení napájí.
Z výše uvedeného důvodu byl na čip přidán obvod který takovéto krátkodobé výpadky je schopen detekovat a při jejich výskytu pak procesor resetovat a tím uvést procesor do správného stavu. Abychom poznali, že byl výpadek - a tudíž reset rařízení - způsoben právě sníženým napětím, zanechá po sobě Brown-Out podpis ve formě změněného příznaku v univerzálním registru PCON. Tento se doporoučuje po zkontrolování vymazat.

Watch Dog - pohodlí pod střechou

U Microchipů standardně WatchDog na čipu. Dá se při programování zakázat. Pokud tak neučiníte budete muset softwareově mazat speciální registr WDT. K němu se dá softwareově připojit předdělička, která je společná pro TMR0, musíte si tedy vybrat. Pokud WDT včas nevynulujete - například instrukcí přímo k tomu určenou CLRWDT - obvod se vyRESETuje. Stejně jako BronwOut, zanechá po sobě WDT příznak a to v registru STATUS.

RB0/INT - Vnější interrupt

Pomocí pinu 0 na bráně B mikrokontroleru je možné při povolení prostřednictvím INTCON registru možné vyvolat přerušení. Uživatel může zvolit na kterou hranu bude spouštěč reagovat. Nastavení se provádí prostřednictvím speciálního registru OPTION.

RB4..7 Int - Přerušení při změně stavu

Při změně stavu na pinech 4 až 7 brány B se generuje přerušení. Je možné jej povolit nebo zakázat prostřednictvím INTCON registru. Dá se použít například pro aplikaci klávesnice.

Timer 0 - Čítač/časovač 0

Jednoduchý osmibitový čítač, který dle zvoleného režimu může fungovat i jako časovač. Softwareově mu lze přiřadit osmibitovou předděličku, která však jak již bylo výše uvedeno je společná pro WDT, takže si programátor musí vybrat pro kterou periferii si ji vybere. Časovači je možné přidělit vstup z hodin procesoru - režim časovač, nebo z vnějšího zdroje přes bránu procesoru - režim čítač. Přerušení je možné povolit prostřednictvím registru INTCON.

Timer 1 - Čítač/časovač 1

Blokové schéma tohoto modulu čítače můžeme vidět na obr.1



Uvedený modul TIMER1 může pracovat v celkem třech různých režimech.
Základním režimem je režim časovače (timeru), kdy čítač čítá čtvrtinu frekvence vnitřního oscilátoru, kterým je řízen vlastní procesor. Tato frekvence může být ještě před vlastním čítáním snížena na potřebnou frekvenci předděličem, který je schopen propustit kmitočet beze změny nebo podělit 2, 4 nebo 8.  Čítání tohoto kmitočtu je pak možno povolit či zakázat pomocí signálu (bit v konfiguračním byte čítače T1CON) TMR1ON.  Vlastní čítač je tvořen dvěma osmibitovými čítači, jenž jsou zapojeny jako jeden 16ti bitový. Při přetečení čítače, tj. přechodu ze stavu 0FFFFHEX do stavu 00000HEX je generováno přerušení, které může být opět povoleno/zakázáno příslušným bitem (bit0) ve stavovém byte PIE1.
Druhým režimem je čítání externího kmitočtu v synchronním módu, kdy je inkrementace vlastního čítače synchronizována kmitočtem vnitřního oscilátoru. Další možnosti nastavení jsou shodné s předešlým módem.
Třetím režimem (módem) je čítání externího kmitočtu v asynchronním módu, tj. inkrementace čítače TMR1 není synchronizována s vnitřním kmitočtem. Tohoto módu lze využít ke „vzbuzení“ mikroprocesoru ze SLEEP módu, neboť při přetečení čítače je standardním způsobem generováno přerušení. Jako zdroj externího kmitočtu je možné použít oscilátor přístupný na pinech RB6 a RB7 s externím krystalem např. 32kHz. Při tomto režimu bude perioda „probouzení“ mikroprocesoru 0.5sec, 1.0sec, 2.0sec nebo 4sec.

V tomto režimu je schopen čítač čítat vnější frekvenci s periodou vyšší než 60ns, tj. čítač je schopen zpracovat kmitočet nižší než 16.67MHz.

Maximální frekvence, jakou je oscilátor T1OSC schopen kmitat je dle výrobce cca 200kHz, což je stejně jako u hlavního oscilátoru v módu LP.
U této periferie je možné využít možnosti harwareového přerušení prostřednictvím speciálních registrů INTCON a PIE1.

Timer 2 - Časovač 2

Jeho blokové schéma můžeme vidět na obr.2.

I když tento, pouze 8mi bitový čítač, nemůže čítat externí kmitočet (pouze čtvrtinu frekvence vnitřního oscilátoru Fosc/4), tj. nedisponuje režimem časovače, jsou možnosti  jeho využití široké díky jednotce komparátoru, která umožňuje zkrátit cyklus čítače na hodnotu, která je nastavena v 8mi bitovém registru PR2. Výstupní signál z komparátoru je možné využít pro generování přerušení. Díky programovatelnému děliči (postscaler) připojeného na výstup komparátoru je možné nastavit generování přerušení po jednom až 16ti cyklech čítače.

U této periferie je možné využít možnosti harwareového přerušení prostřednictvím speciálních registrů INTCON a PIE1.

A/D convertor – Analogově digitální převodník

Vlastnímu A/D převodníku je předřazen analogový multiplexer, který, v případě obvodů zapouzdřených v 28vývodovém pouzdru, má 5 vstupů, u obvodů ve 40ti vývodovém pouzdru je vstupů celkem 8. Vlastnímu A/D převodníku je ještě předřazen S/H obvod (Sample/Hold), který „podrží“ příslušnou hodnotu vstupního napětí konstantní po celou dobu převodu A/D převodníku. Tento obvod je nutný vzhledem k použitému principu A/D převodu.  Aby bylo možné využít plné přesnosti tohoto A/D převodníku je nutné dodržet doporučení výrobce. Mezi tato doporučení patří zejména nízká impedance měřeného místa, která by neměla překročit 10kOhmů a dostatečně dlouhá doba vzorkování.


Obr.3

Další informace nutné pro používání A/D převodníku s podrobným vysvětlením můžeme najít v referenčním manuálu popisující všechny periferie všech členů rodiny PIC16C „PICmicroTM  Mid-Range MCU Family“ nebo v příslušných katalogových listech.
Je možné využít možnosti harwareového přerušení  při ukončení převodu prostřednictvím speciálních registrů INTCON a PIE1.

CCP – Modul Capture/Compare/PWM

Jak už ze samotného názvu vyplývá, jednotka může pracovat v jednom ze tří režimů. Tyto režimy si v následujících odstavcích stručně popíšeme.

Prvním režimem, nebo chcete-li stavem, v kterém může jednotka CCP pracovat,  je režim Capture. 
Blokové schéma jednotky v tomto režimu je vidět na obr.4

Jako reference je zde použita jednotka Timer 1 (16ti bitový čítač/časovač), jejíž stav je zachycován na základě vnějšího podnětu, přivedeného z pinu RB3, do registru CCPR1. Zajímavostí je možnost nastavení určitého dělícího poměru pro vstupní signál, což znamená, že jednotka bude reagovat až po určitém počtu period vstupního signálu a to buď každou periodu, každou čtvrtou nebo každou 16. V případě použití dělícího poměru 1, tj. předdělič pouze propouští signál, si můžeme vybrat aktivní hranu signálu na kterou bude jednotka reagovat. Při použití jiného dělícího poměru než 1, bude jednotka reagovat vždy na vzestupnou hranu. Aby program nebyl zatížen neustálým dotazováním na stav jednotky Capture, je jednotka schopna generovat přerušení v okamžiku zachycení stavu čítače TMR1. Použijeme-li jako „časovou základnu“ čítač TMR1 v asynchroním režimu, jsme schopni pomocí této jednotky určit dobu příchodu aktivní hrany s přesností 60ns.
Druhým režimem v kterém se jednotka CCP může nacházet je  režim Compare. Blokové schéma jednotky v tomto režimu je vidět na obr.5. 

Činnost jednotky CCP v tomto režimu je hodně podobná funkci  časovače Timer 2. Na rozdíl od tohoto časovače je však čítač TMR1 16ti bitový a komparace probíhá samozřejmě 16ti bitově. Druhým rozdílem je, že signál o dosažení shody mezi TMR1 a údajem v registru CCPR1, není použit ke zkrácení cyklu čítače jako tomu bylo v případě časovače TIMER2, ale je použit k nastavení předvolené log. úrovně na výstupním pinu RB3, tj. uživatel si může nastavit, jaká logická úroveň se má objevit na pinu RB3 v momentu dosažení shody. Samozřejmě je zde možnost ponechat výstup nezměněn a použít signál pouze ke generování přerušení.


Obr.6

Třetím režimem v kterém se může jednotka nacházet, je režim PWM. Blokové schéma jednotky CCP v režimu PWM je vidět na obr.6. Díky dobře navržené konstrukci jednotky PWM je možné možné  generovat PWM signál s 10bitovým rozlišením a opakovací frekvencí až 19.53kHz a nebo dokonce s opakovací frekvencí 78.12kHz  při 8bitovém rozlišení. Tyto hodnoty jsou platné při maximální hodinové frekvenci procesoru 20MHz. Popišme si krátce princip PWM jednotky. Opakovací frekvence, tj. perioda výstupního signálu je dána hodnotou v registru PR2, neboť v momentu dosažení shody mezi zmíněným registrem a čítačem  TMR2 je čítač inicializován na hodnotu 0, tj. začne znovu čítat od začátku a výstup, signál na pinu RB3, je nastaven na log. 1. Tato část tedy pracuje téměř shodně jak bylo popsáno v části věnované časovači TIMER2. Píši téměř shodně, neboť, pokud si dobře prohlédneme obr.6 zjistíme, že ač je registr PR2 jen 8mi bitový, skutečná hodnota se kterou počítáme při výpočtech opakovací doby je 4x větší, neboť se v podstatě jedná o vrchních 8 bitů desetibitového slova!!!
Doba, po kterou se výstupní signál na pinu RB3 nachází v log. 1, je určen hodnotou v registru CCPR1H. Tato hodnota je opět porovnávána s hodnotou registru časovače TMR2. V tomto případě je porovnání celkem 10ti bitové. Jelikož je však registr časovače TMR2 pouze 8mi bitový, scházející 2 nejnižší bity jsou doplněny buď dvěma bity z předděliče (viz popis Timer2-časovač2), nebo dvěma bity interního čítače generujícího takt pro jádro mikroprocesoru. Aby návrháři obvodu předešli problémům při zápisu hodnot do registru CCPR1H, je zápis do tohoto registru prováděn synchronně s inicializací registru TMR2. Příslušná hodnota se kopíruje z bufferu, registru CCPR1L, do kterého může uživatel zapisovat kdykoliv. Jelikož je registr CCPR1L opět jen 8mi bitový, je doplněn na 10bitů pomocí dvou bitů z konfiguračního registru CCP1CON. 
I tato součást mikrokontroleru má přiřazené hardwareové přerušení, které lze povolit prostřednictvím speciálních registrů INTCON a PIE1.

USART – Univerzální Synchronní/Asynchronní sériový kanál

USART implementovaný v této rodině mikroprocesorů, může pracovat v jednom ze tří módů; asynchronním, synchronním jako master, synchronním jako slave. Následujíce stručný popis zaměřený pouze nazajímavé vlastnosti tohoto rozhraní. První dobrou „charakterovou vlastností“ tohoto rozhraní je vlastní „baud rate generator“, tj. čítač, který generuje systémový takt pro tento kanál, takže uživatel nepřichází o jeden „drahocenný“ čítač/časovač jako např. u mikroprocesorů 80C5x. Díky tomuto dedikovanému generátoru taktu zvládá asynchronní sériový port přenosové rychlosti až 1.25MBd. Taktéž je zde podpora 9ti bitové komunikace (tzv. multiprocesorová komunikace), kdy je 9. bit používán jako příznak adresy oslovovaného zařízení (začátek povelu) a pouze při příchodu znaku s nastaveným 9. bitem je vygenerována žádost o obsluhu přijatého znaku (interrupt).  Snad jedinou drobnou vadou na kráse je neexistence FIFO bufferu, neboť zvlášte při vysokých komunikačních rychlostech má programátor těžkou pozici, neboť program musí „uklidit“znak z registru přijímače během několika us (1.25MBd -> 8us/znak !!! tj. při 20MHz kmitočtu jen 40 instrukčních cyklů..). V synchronním provozu je maximální komunikační rychlost dokonce 5Mbaud (1.6us/znak !!!).

SSP – Synchronní sériový kanál

Podporovanými módy jsou: SPI/slave, SPI/master, I2C/slave a I2C/master mód. U rozhraní I2C je podporován mód se 7mi bitovou i 10ti bitovou adresou. Díky implementaci detekce kolizí na sběrnici I2C je možné provozovat toto rozhraní i v režimu multi-master.
Problematika sériového přenosu, zvláště pak protokol sběrnice I2C, je natolik rozsáhlý, že v manuálech procesorů je mu věnováno 30-40 stran, což je nad možnosti tohoto článku. Pro detailní popis tohoto rozhraní odkazuji tedy laskavé čtenáře na tyto manuály , případně lze nastudovat problematiku I2C sběrnice z manuálů firmy Philips, která je autorem tohoto rozhraní.

UART

Jak již bylo výše uvedeno má BaudRateGenerator nezávislý na ostatních časovačích, čímž se liší od rodiny Atmelů. Má volitelnou možnost osmi nebo devítibitového přenosu. Jedná se o naprosto hardwareově nezávislou periferii s jednobytovým bufferem.

USART jednotce jsou přiřazena dvě harwareová přerušení a sice jedno po odeslání byte a jedno po přijetí byte do bufferu. Přerušení nemusí programátor použít, správná funkce USARTu se dá zajistit i bez využití přerušení pomocí speciálních registrů. O případnou identifikaci chyb při přenosu se starají taktéž speciální registry. Hardware USARTu je schopen identifikovat a programu předat informace o přetečení bufferu i ostatních chybách, které mohou při přenosu nastat.

PSP – Parallel Slave Port

Dalším prvkem, který najdeme u rodiny mikroprocesorů PIC16F7x je Paralelní Slave Port. Tento port najdeme vzhledem k potřebnému počtu vývodů však pouze u obvodů ve 40/44 vývodových pouzdrech. Blokové schéma tohoto portu můžeme vidět na obr.7.


Obr.7

Umožnuje rychlý přenos dat např. mezi procesory, či procesorem a periferií. V principu se jedná o dva 8mi bitové registry, přičemž zápis a čtení z těchto registrů lze ovládat z vně mikroprocesoru pomocí  řídicích signálů RD, WR a CS a také zevnitř procesoru. Oba registry vytváří tedy vyrovnávací buffery pro jeden byte. 
Jako všechny i tato periferie má samozřejmě přiřazené přerušení. Povolit i zakázat lze klasicky prostřednictvím INTCON a PIE1

Závěr

Nová řada vyniká nesporně v rychlosti přeprogramování obvodu. Velikým plus je možnost opětovného ICSP v již osazeném výrobku. V praxi to znamená možnost update firmwareu bez dalšího zásahu do HW. Tato možnost u mateřské řady chyběla.

Petr Agulár
Hodnocení článku: