ýeské vysoké uþení technické v Praze Fakulta elektrotechnická Katedra mČĜení
TESTOVACÍ MODUL
Vedoucí práce: Ing. Jan Fischer, CSc.
Praha 2009
Autor: Peter Palaj
Prohlášení Prohlašuji, že jsem svou bakaláĜskou práci vypracoval samostatnČ a použil jsem pouze podklady (literaturu, projekty, SW atd.) uvedené v pĜiloženém seznamu. Nemám závažný dĤvod proti užití tohoto školního díla ve smyslu §60 Zákona þ.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zmČnČ nČkterých zákonĤ (autorský zákon).
V Praze dne ................................... podpis
PodČkování DČkuji Ing. Janu Fischerovi, CSc., Ing. ZdeĖkovi Rozehnalovi za cenné a podnČtné pĜipomínky a informace k této bakaláĜské práci a Ing. Ondrejovi Pribulovi za poskytnutí a pĜizpĤsobení programu zobrazovaþe pĜímo k Testovacímu modulu. DČkuji Ing. KateĜinČ Daníþkové a panu Pavlovi Kandrikovi za gramatické korektury této bakaláĜské práce.
Anotace Výsledkem této práce je v assembleru naprogramovaný mikroprocesor, který umožĖuje mČĜit logické a napČĢové úrovnČ, generovat frekvenci, logické úrovnČ a specielní signály. PĜípravek komunikuje s obsluhou pomocí sériového portu, pĜiþemž obsluha pĜes poþítaþ mĤže z klávesnice nastavit požadované parametry a na monitoru sledovat namČĜené a nastavené údaje. Cílem pĜípravku je usnadnČní práce na cviþeních se zamČĜením na mikroprocesorovou techniku.
Annotation The result of this work is a microprocessor programmed in assembler, allowing to measure logical and voltage levels and to generate frequencies, logical levels and special signals. The microprocessor communicates with operator via serial port, while the values can be set directly from PC. The input and output data are displayed on the PC monitor. The purpose of this appliance is to ease work during practical lessons focusing on microprocessor technology.
OBSAH 1
Úvod
………………………………………………………………….............
1
2
Problematika a její Ĝešení
3
Popis pĜípravku
4
Software „TESTOVACÍ MODUL“
4.1
Metoda programování Testovacího modulu
4.2
Inicializace mikroprocesoru
…………………………………………………. 10
4.3
Hlavní programová smyþka
…………………………………………………. 11
4.4
Podprogramy
4.4.1
Podprogramy pracující se þtyĜ-bitovými statickými úrovnČmi
4.4.1.1
Inkrementace
………………………………………………………………… 15
4.4.1.2
Dekrementace
……………………………………………………….………. 16
4.4.1.3
Nastavení logického stavu
4.4.2
Logický analyzátor
4.4.3
Generátor pulsĤ
4.4.3.1
Simulace „inkrementálního snímaþe“
4.4.3.2
ěízení krokového motoru
4.4.4
Voltmetr
4.4.5
Osciloskop
4.4.6
Rychlý logický analyzátor
4.5
Zobrazovaþ „NRM Display“
5
Hardware „Testovací modul“
5.1
Mikroprocesor ATmega8
5.2
Napálení programu do mikroprocesoru
5.3
Popis nastavených pojistek
5.4
Oživení pĜípravku a pĜipojení k poþítaþi
5.5
Nastavení programu Hyperterminál
6
Klávesové zkratky používané v Testovacím modulu
7
ZávČr
…………………………………………………..
2
……………………………………………………………..
6
………………………………………... ………………………………….
8 8
………………………………………………………………… 13 ……………... 13
…………………………………………………… 17
…………………………………………………………... 19
……………………………………………………………… 20 ……………………………………….. 22
……………………………………………………. 24
……………………………………………………………………… 26 …………………………………………………………………… 29 …………………………………………………… 31 ………………………………………………… 32 ……………………………………………... 34
…………………………………………….……… 34 ……………………………………… 35
………………………………………………….. 37 …………………………………….. 38
………………………………................. 41 …………………….. 42
………………………………………………………………………… 43
Seznam obrázkĤ
Obr. 2.1
Blokové znázornČní testování pomocí Testovacího modulu ………………….
2
Obr. 2.2
Zapojení tlaþítka s pull-up rezistorem ………………………………………...
3
Obr. 2.3
Blokové schéma generátoru frekvence ……………………………………….
3
Obr. 2.4
Blokové schéma zapojení pro Ĝízení krokového motoru ……………………..
4
Obr. 2.5
Zapojení LED diody (a) s pĜímím buzením (b) se spínacím tranzistorem …...
4
Obr. 2.6
Blokové schéma logického analyzátoru ………………………………………
5
Obr. 2.7
Blokové schéma mČĜení voltmetrem a osciloskopem ………………………...
5
Obr. 3.1
Popis pinĤ Testovacího modulu u mikroprocesoru ATmega8 (poslední verze) ……………………………………………………………….
7
Obr. 3.2
Ukázka bČhu Testovacího modulu v programu Hyperterminál ………………
7
Obr. 4.1
Blokové schéma (vývojový diagram) hlavní programové smyþky …………..
12
Obr. 4.2
Blokové schéma zapojení výstupního portu ………………………………….
13
Obr. 4.3
Jednoduchý test funkcí pracujících s výstupnými piny mikroprocesoru ……..
14
Obr. 4.4
Tabulka stavĤ výstupních pinĤ mikroprocesoru pĜi inkrementaci …………… 15
Obr. 4.5
Tabulka stavĤ výstupních pinĤ mikroprocesoru pĜi dekrementaci …………...
16
Obr. 4.6
Oznaþení výstupních pinĤ Testovacího modulu ……………………………...
17
Obr. 4.7
Tabulka znázorĖující možné zadávání pĜíkazĤ pro funkci nastavení logického stavu ……………………………………………………………….. 18
Obr. 4.8
Blokové schéma zapojení vstupního portu …………………………………… 19
Obr. 4.9
Ukázka principu funkce jednoduchého generování pulsĤ ……………………. 20
Obr. 4.10 PrĤbČh generovaného signálu Testovacím modulem ………………………… 21 Obr. 4.11 Ukázky pĜípravkĤ pro funkci inkrementálního snímaþe ……………………... 22 Obr. 4.12 Signály inkrementálního snímaþe (a) rotace doprava (b) rotace doleva …………………………………………………………………………
22
Obr. 4.13 Stavy výstupĤ pĜi osmitaktním Ĝízení krokového motoru ……………………. 25 Obr. 4.14 Zapojení vynutí krokového motoru …………………………………………... 25 Obr. 4.15 Oznaþení pinĤ potĜebných pro správný bČh voltmetru ……………………….
26
Obr. 4.16 PotĜebné vstupy pro mČĜení osciloskopem ….....................…………………..
30
Obr. 4.17 Ukázka námČru osciloskopu v programu „NRM Display“ …………………... 31 Obr. 4.18 Ukázka programu NRM Display v režimu „Oscilloscope“ …………………..
33
Obr. 4.19 Ukázka programu NRM Display v režimu „Logic Analyzer“ ……………….. 33 Obr. 5.1
Rozložení vývodĤ mikroprocesoru ATmega8 (PDIP 28) ……………………. 35
Obr. 5.2
Blokové schéma programování Testovacího modulu ………………………... 35
Obr. 5.3
PĜipojení programátoru PRESTO k programované souþástce ………………
Obr. 5.4
Ukázka nastavení pojistek pĜed naprogramováním mikroprocesoru
36
ATmega8 ……………………………………………………………………... 36 Obr. 5.5
Zapojení integrovaného obvodu ADM232 …………………………………...
39
Obr. 5.6
Ukázka možného zapojení Testovacího modulu (verze1) pĜi oživování ……..
40
Obr. 5.7
Ukázka nastavení programu Hyperterminál ………………………………….. 41
1 Úvod Cílem ýeského vysokého uþení technického v Praze, oboru Kybernetika a mČĜení, není studenty jenom nauþit teoretické znalosti oboru, ale taky snaha prakticky studenty seznámit s danou problematikou. „Mikroprocesory v pĜístrojové technice (MIP)“ a „Návrh Ĝídící þásti mikroprocesorĤ (NRM)“ jsou pĜedmČty, které studenta nauþí teoretické znalosti z mikroprocesorové techniky a logických obvodĤ. Navíc si studenti na cviþeních s tČmito obvody mohou prakticky vyzkoušet zapojení rĤzných funkþních celkĤ, kdy mikroprocesorem Ĝídí další obvody, nebo zapojit mČĜící pĜístroje, napĜíklad ohmmetr nebo voltmetr. Cílem této bakaláĜské práce je vytvoĜit univerzální modul, který by ulehþil práci na cviþeních pĜedmČtu MIP a NRM. PĜi práci studenti þasto potĜebují rĤzné generátory, pomocné signály, mČĜení logických úrovní, napČĢových úrovní a podobnČ. Testovací modul, který je výsledkem této bakaláĜské práce, umožní studentĤm všechno zmínČné použít jednoduchým pĜipojením naprogramovaného mikroprocesoru ke své aplikaci. Navíc po pĜipojení k poþítaþi mohou sledovat výpis mČĜených hodnot v programu hyperterminálu, který je souþástí všech operaþních systémĤ Windows, nebo v zobrazovaþi, který pĜímo ukáže namČĜené dČje graficky.
-1-
2
Problematika a její Ĝešení
Jak již bylo zmínČno v úvodu, cílem této bakaláĜské práce je vytvoĜit pĜípravek, který by ulehþil studentĤm práci na cviþeních se zamČĜením na „mikroprocesorovou techniku“ a „programovatelné logické obvody“. PĜed samotným zaþátkem Ĝešení problematiky vývoje tohoto pĜípravku, bylo nezbytné se zamyslet nad možnostmi pro samotný použitý hardware a následnČ vyvinout a pĜizpĤsobit potĜebné funkce tak, aby výsledkem byl pĜípravek, jehož použití by bylo co nejjednodušší z hlediska jeho zapojení k testované aplikaci a jeho ovládání bylo co nejintuitivnČjší. PĜi zamyšlení se nad prvnČ zmínČným problémem, tj. „jaký hardware použít“ se po krátkých úvahách a zhodnocení možností dospČlo k závČru, že nejvhodnČjší pro tuto práci je použití samotného mikroprocesoru. Pro mnohé funkce, které byly navrženy, by z možných Ĝešení mohlo být i použití kombinaþních þi sekvenþních logických obvodĤ. Pro jiné funkce by ale toto Ĝešení bućto nebylo možné, nebo by bylo komplikované. Taky pro požadavek komunikace s nadĜazeným PC by tato metoda nebyla vhodná. MikroprocesorĤ rĤzných typĤ a výrobcĤ je v dnešní dobČ na trhu mnoho. Vybrány byly mikroprocesory Ĝady Atmel – ATmega, konkrétnČ ATmega8, kterého pomČr cena/výkon je vynikající. Mikroprocesor ATmega8 se vyrábí v provedení SMD (32 vývodĤ) a v provedení PDIP28. Z hlediska využití pro tuto práci je ideální použít provedení PDIP, protože odpadá nutnost pájet mikroprocesor do plošného spoje. Zamáþknutím mikroprocesoru do kontaktního pole mohou k nČmu následnČ studenti pĜivádČt potĜebné pĜívody. Další výhodou je, že pĜi poškození mikroprocesoru se jeho výmČna provede vytažením z kontaktního pole.
Obr. 2.1
Blokové znázornČní testování pomocí Testovacího modulu
Dalším zmínČným problémem bylo vymyšlení samotných funkcí použitých v testovacím modulu. Inspirace pro použité funkce vycházely ze samotných studijních plánĤ pĜedmČtĤ MIP a NRM. Jako pĜíklad uvećme úkol, kdy studenti mají pomocí GAL-u navrhnout sekvenþní
-2-
þítaþ. Aby jej studenti mohli otestovat, musí na vstup þítaþe pĜivést pulsy, zpĤsobující þítání þítaþe. Nejjednodušší varianta se nabízí použití tlaþítka. Tlaþítko z dĤvodĤ mechanických odskokĤ pĜi stlaþení, kdy místo jednoho žádaného pulsu vygeneruje pulsĤ více, pro použití v pĜístrojích, u kterých je snímání vstupĤ rychlé není vhodné. JeštČ horší variantou je pĜivádČt na vstup pĜímo logické úrovnČ pomocí kabelu.
Obr. 2.2
Zapojení tlaþítka s pull-up rezistorem
Ideální možností je pĜivádČt na þítaþ pulsy, které bude generovat pĜíslušná funkce v mikroprocesoru. VyĜešit takový problém bylo jednoduché, staþí když na výstupním pinu mikroprocesoru mČníme logickou úroveĖ, pĜiþemž se mezi samotnými zmČnami úrovní udČlá þasová mezera. Tím získáme jednoduchý „GENERÁTOR PULSģ“. Požadavky pro rychlosti pulsĤ, jsou za rĤzných situací jiné. Proto bylo ve funkci generátoru vyvedeno více vývodĤ s rĤznými frekvencemi generovaných pulsĤ. Tyto vývody jsou oznaþeny zkratkou „GEN“ a hodnota za ní udává frekvenci generovaných pulsĤ.
Obr. 2.3
Blokové schéma generátoru frekvence
MČjme situaci, že potĜebujeme zjistit, zda-li nám þítaþ þítá pĜivádČné impulsy správnČ. SamozĜejmČ se to dá zjistit vícenásobným stláþením tlaþítka, což je ale nepohodlné. Ano, Ĝekneme si, že pro takový test mĤže postaþovat zmáþknout tlaþítko pouze dvakrát a mĤžeme dojít k závČru, že þítaþ poþítá. Co když je ale naprogramován špatnČ a pĜi naplnČní registrĤ pĜeteþe a pĜitom neudČlá potĜebné opatĜení? V pĜípadČ osmi-bitového registru by jsme již museli tlaþítko zmáþknout minimálnČ 256 krát. Proto byla navržená funkce „BURST“, která po zadání požadovaného poþtĤ pulsĤ tyto pulsy vygeneruje. Výstupem þítaþe lze vhodným zapojením Ĝídit napĜ. pĜepínání výstupĤ multiplexorĤ. Takové Ĝízení mĤže být v praxi užiteþné, proto byly pro testovací modul navrženy funkce, -3-
simulující þítání þítaþe vpĜed i vzad, a to funkce „INKREMENTACE“ a funkce „DEKREMENTACE“, kterých hodnota se požadavkem z klávesnice poþítaþe zvýší, pĜípadnČ sníží o jedna. Dalším úkolem pro studenty je vytvoĜení pĜípravku, který by umožĖoval dekódování výstupĤ inkrementálního snímaþe. Takový snímaþ se nachází napĜíklad ve starších myších k poþítaþi. K samotnému zjištČní, zda-li je dekodér naprogramován studentem správnČ je potĜeba daný signál pĜivést na vstupy dekodéru. Funkce generující tento signál je naprogramována
v pĜípravku
testovacího
modulu
a
jmenuje
se
„SIMULÁTOR
INKREMENTÁLNÍHO SNÍMAýE“, ve schématech dále oznaþována jako „MOU“. Podobnou problematikou je Ĝízení krokového motoru. Student navrhne a sestrojí Ĝídící þást, kterou následnČ pĜipojí k samotnému motoru. MĤže se stát, že se motor nerozebČhne. Chyba je v navrženém Ĝízení, nebo je poškozen motor, nebo výkonová elektronika pĜivedená na jeho vynutí? Pro testy tohoto typu mĤže být použita funkce testovacího modulu nazvaná „ěÍZENÍ KROKOVÉHO MOTORU“, u které se z klávesnice poþítaþe ovládá smČr rotace motoru v osmitaktním režimu.
Obr. 2.4
Blokové schéma zapojení pro Ĝízení krokového motoru
Ke zjištČní stavu þítaþe, aktuálního stavu Ĝízení krokového motoru apod., musíme naþíst stav daných výstupĤ. K tomu mohou sloužit pĜipojené LED diody s pĜedĜazenými rezistory.
(a) Obr. 2.5
(b)
Zapojení LED diody (a) s pĜímím buzením (b) se spínacím tranzistorem
-4-
Když máme mČĜených výstupĤ více, nenastává pouze problém s nutností zapojování více LED + rezistorĤ. Každá souþástka, tedy také mikroprocesor, má definovaný maximální zatČžovací proud, z þehož plyne, že zapojení více LED dle obr. 2.5(a) nemusí být bezpeþné, proto by se muselo použít zapojení uvedené na obr. 2.5(b). Aby se studenti nemuseli trápit se zapojováním hodnČ souþástek, pro testovací modul byla navržena funkce „LOGICKÝ ANALYZÁTOR“, která snímá logické úrovnČ na svých vstupech a námČr zobrazí v nadĜazeném PC.
Obr. 2.6
Blokové schéma logického analyzátoru
V zaþátcích programování této práce byla vypracována funkce logického analyzátoru, která vykonávala mČĜení na vstupech pouze rychlostí, danou výpisem Ĝádku obsahujícího námČry do nadĜazeného PC (rychlost pĜepisování tČchto hodnot je 30krát za sekundu). PozdČji byla tato funkce vylepšena o možnost rychlého snímání, s ukládáním námČrĤ do vnitĜní pamČti mikroprocesoru. Testovacímu modulu byla naprogramována taky funkce „VOLTMETR“. ýasto se pĜi zapojování nebo testování rĤzných aplikací, mĤže vyskytnout nutnost zjistit pĜipojované napČĢové úrovnČ a zamezit tak situacím, kdy nesprávné pĜipojení by mohlo z dĤvodĤ nedostateþného napájení fungovat nesprávnČ, nebo naopak vČtším napČtím poškodit zapojené obvody. Tuto funkci lze taky použít napĜíklad po otestování naprogramovaného Ĝízení pomocí PWM, kdy je potĜeba zjišĢovat napČĢový stav za filtraþním þlenem v závislosti na Ĝízené šíĜce impulsĤ. V pĜípadČ potĜeby mČĜení napČĢových úrovní mČnících se v þase, má testovací modul v sobČ naprogramovanou funkci „OSCILOSKOP“.
Obr. 2.7
Blokové schéma mČĜení voltmetrem a osciloskopem -5-
3 Popis pĜípravku
V prĤbČhu programování „Testovacího modulu“ vzniklo postupnČ více verzí programu. V první verzi se jednalo pouze o jednoduché využití vstupnČ/výstupních portĤ pro funkce logického analyzátoru, logického generátoru a generátoru frekvence. Již tahle první verze byla používána na cviþeních pĜedmČtu NRM. V dalších verzích programu byly dopracovány funkce voltmetru, rychlého logického generátoru s ukládáním do vnitĜní pamČti, osciloskopu a funkce pro generaci signálĤ zadaných obsluhou.
Modul má tyto funkce: -
poskytuje þtyĜ-bitové statické úrovnČ logických signálu podle nastavení z PC
-
generátor obdélníkového signálu logických úrovní o frekvencích : 0,5Hz, 1Hz, 2Hz a taky „rychlý gen“ (3kHz nebo 17kHz podle verze použitého software)
-
jednorázová nebo kontinuální simulace inkrementálního snímaþe
-
generace pulsĤ pro Ĝízení krokového motoru
-
rychlý generátor frekvence (až 4MHz) s možností nastavení generované frekvence a funkcí
pro
kontinuální
generaci,
nebo
generaci
zadaného
poþtu
pulsĤ
(je naprogramován a napálen v samostatném mikroprocesoru) -
4 bitový logický analyzátor s výpisem námČrĤ v hyperterminálu
-
rychlý logický analyzátor s ukládáním námČrĤ do vnitĜní pamČti
-
dvoukanálový þíslicový voltmetr
-
digitální osciloskop
PĜípravek je naprogramován a napálen do mikroprocesoru ATmega8. Rozložení použitých vstupĤ a výstupĤ je možno vidČt na obr. 3.1 .
-6-
Obr. 3.1
Popis pinĤ Testovacího modulu mikroprocesoru ATmega8 (poslední verze)
Výpis hlavního menu a namČĜených výsledkĤ a taky komunikaci s uživatelem zabezpeþuje program Hyperterminál, který byl vybrán zámČrnČ, protože jej obsahují všechny verze Windows. Tím nejsou kladeny žádné velké podmínky pro použitý poþítaþ a jeho software. Komunikace mezi poþítaþem a Testovacím modulem probíhá pĜes sériový port RS232.
Obr. 3.2
Ukázka bČhu Testovacího modulu v programu Hyperterminál -7-
4
Software „TESTOVACÍ MODUL“
Program „Testovacího modulu“ byl napsán v ASSEMBLERU AVR STUDIA a pĜímo pĜizpĤsoben pro mikroprocesor ATmega8. AVR Studio je software firmy ATMEL. Jedná se o freeware, který je možné volnČ stáhnout ze stránek www.atmel.com
4.1
Metoda programování Testovacího modulu
VČtšina
funkcí
Testovacího
modulu
byla
naprogramována
metodou
Stavového programování. Tato metoda programování se v pĜedmČtech MIP a NRM nepoužívá. Princip spoþívá v tom, že všechny procesy naprogramované touto metodou musí mít ve svých pro to definovaných promČnných uložené þíslo stavu, ve kterém se aktuálnČ nachází a ze kterého pak pĜechází na další stav. V praxi to znamená, že program obsahující své podprogramy bČží ve smyþce. Každý jednotlivý podprogram se podle své stavové promČnné buć vykoná nebo nikoli. Žádný podprogram se nesmí zacyklit. V prĤbČhu jedné smyþky se prochází všemi podprogramy a tím je zaruþená funkce všech podprogramĤ, které jsou touto metodou naprogramovány. Jako názorná ukázka stylu programování této metody je, když si pĜedstavíme, že ve vyšším programovacím jazyce neumožníme pĜíkazy zpČtných skokĤ a pĜerušení. Tím mĤže program bČžet ve smyþce pouze jedním smČrem. V prvních verzích Testovacího modulu ještČ tato metoda nebyla použita. PĜíjem znakĤ byl vyĜešen pomocí pĜerušení, kdy mikroprocesor po zjištČní pĜíjmu znaku udČlal skok v programu na obsluhu pĜerušení pĜíjmu znaku. PĜi bČžném používání se program jevil jako plnČ funkþní, avšak v pĜípadČ extrémních podmínek docházelo k neoþekávanému bČhu programu. Extrémní podmínka se dala nasimulovat napĜíklad velice rychlým zadáváním znakĤ z klávesnice poþítaþe. PĜerušení mikroprocesoru je výhodné použít v pĜípadech, kdy se vstupní podmínka pĜerušení neoþekává a je velice náhodná a málo þastá. To není ale pĜípad Testovacího modulu, který pĜímo komunikuje s uživatelem pomocí pĜíkazĤ z poþítaþe. Metodou využívající pĜerušení po zjištČní pĜíjmu znaku sice mikroprocesor reagoval rychleji na obsluhu pĜijatého znaku, ale kvĤli možnému chybnému bČhu programu byla ve finálních verzích programu použitá metoda stavového programování. Z hlediska mČĜení je žádoucí, aby programová smyþka probČhla co nejrychleji a tím byla zaruþená co nejvyšší možná vzorkovací frekvence pro mČĜení. Z toho vyplývá, že nesmí -8-
docházet k žádnému zacyklení v nČkterém z podprogramĤ, ani ke zpČtným skokĤm v programu. Výjimkou jsou podprogramy osciloskopu a rychlého analyzátoru, které jsou zacykleny. V prĤbČhu hlavní programové smyþky se hlídá, zda-li nebyl zadán požadavek pro bČh nČkteré z funkcí a poté se provádí jejich volání. V programu jsou pro potĜeby dČlení použity externí aritmetické knihovny, které nesplĖují bez-cyklový bČh podprogramu a za rĤzných vstupních podmínek netrvají stejnČ dlouhou dobu. Proto musí být na konci hlavní programové smyþky vložen podprogram, který dopoþítá bČh hlavní programové smyþky vždy na konstantní hodnotu. Tato hodnota musí být vČtší, než maximální možná hodnota bČhu smyþky bez použití podprogramu dopoþtu. Touto hodnotou je možné nastavit požadovanou dobu bČhu hlavní programové smyþky a tím danou vzorkovací frekvenci. Po dosažení nastavené hodnoty þítaþe se podprogram dopoþtu ukonþí, þítaþ se vynuluje a skoþí se na zaþátek hlavní programové smyþky. Tím je zaruþená vždy stejná vzorkovací frekvence. ýas pro výpis jednoho desetibitového znaku (1x start bit, 8x data, 1x stop bit) pĜes sériový port do programu Hyperterminálu se vypoþte dle vztahu: 1 tzn = ————— x 10 BAUD
(4.1)
To znamená, že pĜi nastavené rychlosti 9600Bd (viz kap. 4.2 - nastavení parametrĤ USART) je þas potĜebný pro vyslání jednoho znaku na sériový port tzn = 10x(1/9600) = 1,04ms. Jeden takt mikroprocesoru pracujícího na hodinovém kmitoþtu 8MHz je 125ns. Pro vyslání jednoho znaku je v tomto pĜípadČ potĜeba 8333 taktĤ mikroprocesoru. Kdyby mČl být znak vysílán v zacyklené smyþce, bylo by to z hlediska rychlosti bČhu programu neefektivní. Vysílání znaku je v mikroprocesoru Ĝešeno hardwarovČ a tím je možnost plynulého bČhu programu i bČhem vysílání znaku. Vysílání celé vČty, obsahující vČtší poþet znakĤ je vyĜešeno metodou stavového programování. To znamená, že v jednom prĤbČhu hlavní programové smyþky je vysílán pouze jeden znak. Nato je inkrementována pomocná promČnná. V dalším bČhu hlavní programové smyþky je nejdĜíve otestováno, zda-li již byl vysílaný znak úspČšnČ odeslán. Když ano, dle pomocné promČnné je zjištČno, který znak byl vysílán naposled, a následnČ je vyslán znak následující. To se opakuje, až jsou vypsány všechny potĜebné znaky. To umožĖuje þasové nezatížení smyþky. Vyslání všech znakĤ najednou je použito pouze pĜi vypisování hlavního menu po zapnutí mikroprocesoru, kdy nejsou ještČ funkce mČĜení a generování Testovacího modulu aktivní. Podprogram voltmetru, u kterého je pro získání výsledku namČĜeného napČtí potĜeba vícenásobného dČlení, využívá podobnČ jako u vysílání více znakĤ toho, že v jednom prĤbČhu
-9-
hlavní programové smyþky je uskuteþnČno pouze jedno dČlení. Tím není programová smyþka v dobČ, kdy je funkce voltmetru aktivní extrémnČ zatČžována. PĜípravek obsahuje dvoukanálové mČĜení napČtí. KvĤli rychlosti je mČĜení kanálĤ stĜídáno, vždy je mČĜen pouze jediný kanál, mČĜení dalšího kanálu je zapoþato až po dokonþení mČĜení kanálu pĜedchozího. Funkci osciloskopu a funkci rychlého analyzátoru zabezpeþují podprogramy, které se spustí za pĜedpokladu splnČní všech jejich vstupních podmínek startu. Tyto podprogramy jsou zacykleny a pĜi jejich bČhu jsou odpojeny všechny ostatní funkce Testovacího modulu. Zacyklený bČh je podmínkou pro získání maximální možné vzorkovací frekvence tČchto funkcí. Následná aktivace možností bČhu všech funkcí je umožnČna až po ukonþení podprogramĤ osciloskopu nebo rychlého analyzátoru. Další funkcí testovacího modulu je generátor. V hlavní programové smyþce se nacházejí podprogramy, umožĖující generaci rĤzných frekvencí a prĤbČhĤ. Maximální frekvence pro tyto generátory je dána rychlostí bČhu hlavní programové smyþky. Proto byl pĜidČlán další program, umožĖující generaci frekvencí až 4MHz. Tento program není souþástí hlavní programové smyþky Testovacího modulu a je naprogramován v jiném mikroprocesoru.
4.2
Inicializace mikroprocesoru
Samotný software „Testovacího modulu“ zaþíná inicializací mikroprocesoru. V první ĜadČ je zde potĜeba nastavit typ mikroprocesoru, na kterém program pobČží. Dále pak nastavit potĜebné parametry, nezbytné k správnému bČhu programu. Nastavení „STACK POINTER-u“ Stack pointer je ukazatel vrcholu zásobníku. Mikroprocesor jej využívá pro ukládání návratových adres pĜi skocích do jiných þástí programu. Pracuje jako pamČĢ typu LIFO, tj. poslední uložená informace se z pamČti vybírá jako první. Nastavení parametrĤ „USART“ (Universal Synchronous and Asynchronous serial Receiver and Transmitter) a povolení vysílaþe a pĜijímaþe Tady je potĜebné nastavit pĜenosovou rychlost. V našem pĜípadČ se jedná o pĜenosovou rychlost 9600 Bd. V pĜípadČ potĜeby pĜeprogramování pĜenosové rychlosti USART-u je nutné zmČnit hodnotu konstanty „speed“, dle vztahu : fosc speed = ————— - 1 16 . BAUD
(4.2)
- 10 -
kde fosc
= 8.000.000 Hz je taktovací frekvence mikroprocesoru a BAUD = 9600 je
požadovaná hodnota pĜenosové rychlosti. Pro pĜenosovou rychlost 9600Bd je tedy konstanta speed = 51 . Nastavení „TIMER“ Mikroprocesor ATmega8 obsahuje 3 þítaþe-þasovaþe, dva jsou osmi-bitové a jeden je šestnácti-bitový. U þítaþĤ je potĜeba nastavit dČlící pomČry cyklĤ þítání, vĤþi taktovací frekvenci mikroprocesoru. K dispozici jsou dČlící pomČry 8, 64, 256 a 1024. Dále jsou na zaþátku programu v sekci inicializace nastaveny konstanty vyskytující se v programu. ZmČna tČchto konstant je nutná pĜi pĜepisování programu pro jiný typ mikroprocesoru, nebo pro pouhou zmČnu nČkteré z funkcí. Pak není nutné pĜepisovat tyto konstanty v celém kódu programu, ale jenom pĜepsat konstantu v sekci inicializace. Je to velmi výhodné, jelikož délkou se stává program ménČ pĜehledný a pĜi pĜepisování by mohlo snadno dojít k chybČ, která by pĜi pĜekladu programu pĜekladaþem nebyla vyhodnocena jako chyba programu, protože by se jednalo o chybu logickou. Následkem toho by docházelo k neoþekávanému bČhu programu, pĜiþemž hledání takové chyby je hodnČ nároþné. Konstantami jsou nadefinované taky vstupnČ/výstupní porty. Tím je docíleno, že pro zapojení mikroprocesoru do nČjaké aplikace, lze snadno pĜizpĤsobit vstupnČ/výstupní piny tak, aby to co nejlépe vyhovovalo pro rozložení ostatních souþástek a usnadĖovalo práci obsluze.
4.3 Hlavní programová smyþka
Všechna nastavení provedena v sekci inicializace Testovacího modulu jsou nastaveny až do doby resetování mikroprocesoru. Po skoku do hlavní programové smyþky se totiž z této smyþky již nevyskoþí a vykonávají se cyklicky všechny funkce hlavní programové smyþky. Na zaþátku hlavní programové smyþky je vynulována promČnná definující pĜijatý znak z klávesnice poþítaþe a následnČ se zkoumá, zda-li nebyl pĜijat nový znak. Když ano, je uložen do promČnné, kterou vyhodnocují podprogramy a na základČ ní se rozhodují, zda-li mají vykonat svou þinnost, nebo nikoli. Po zjištČní pĜíjmu znaku se volají jednotlivé podprogramy funkcí „rcall“. Funkce „rcall“ zavolá podprogram, který se provede a následnČ funkcí „ret“ se vrátí pomocí návratové adresy - 11 -
stack pointeru za místo, ze kterého byl volán. Tento typ programování má velkou výhodu v tom, že samotná hlavní smyþka programu je složena jenom z volání jednotlivých podprogramĤ, je tedy pĜehledná. Navíc, v pĜípadČ potĜeby pĜidání nebo odebrání nČjaké funkce, staþí dopsat, popĜípadČ smazat, volání dalšího podprogramu, aniž by se porušily funkce již naprogramované. Po ukonþení volání všech potĜebných podprogramĤ, hlavní smyþka programu skoþí na svĤj zaþátek a vše se opakuje. Situaci znázorĖuje obr 4.1 . ýasová délka bČhu hlavní programové smyþky (bez použití podprogramu dopoþtu) je závislá na tom, které a kolik podprogramĤ jsou aktuálnČ aktivní. NejvČtší þasové zpoždČní zapĜíþiĖuje volání 32bitové knihovny pro dČlení v podprogramu voltmetru. V tomto pĜípadČ trvá prĤbČh hlavní smyþkou pĜibližnČ 1250 hodinových taktĤ mikroprocesoru. SouþasnČ mohou být aktivní také jiné podprogramy, proto je pĜedimenzován podprogram dopoþtu na vČtší hodnotu, konkrétnČ 1333 hodinových taktĤ, což dává frekvenci pro prĤbČh hlavní programové smyþky 6 kHz. PĜi negaci výstupního pinu „rychlý gen“ po každém prĤbČhu smyþkou, je tedy perioda generované frekvence 3kHz. V pĜípadČ pĜidání další funkce bČžící v hlavní programové smyþce se zvýši poþet hodinových taktĤ potĜebných pro její prĤbČh. V podprogramu dopoþtu pak staþí zmČnit hodnotu þítaþe, ve které þítání ukonþí.
Obr. 4.1 Blokové schéma (vývojový diagram) hlavní programové smyþky - 12 -
4.4
Podprogramy
4.4.1 Podprogramy pracující se þtyĜ-bitovými statickými úrovnČmi
Podprogramy pro statické þtyĜ-bitové úrovnČ používají þtyĜi bity vstupnČ/výstupních portĤ. Tyto bity lze v programu nastavit na kterékoli volné piny mikroprocesoru a kdykoli pĜi pĜeprogramování mČnit pomocí konstant „gen0, gen1, gen2, gen3“ a tím pĜizpĤsobit tyto výstupní bity Testovacího modulu pro nejefektivnČjší využití v dané aplikaci, pro kterou bude Testovací modul použit. PĜi zmČnČ tČchto výstupních bitĤ v rámci jiného portu je potĜeba navíc nastavit, o který jiný port se bude jednat. Aktuální stav vstupĤ a výstupĤ je možné sledovat v oknČ hyperterminálu, nebo pĜímo pomocí logické sondy na pinech mikroprocesoru. SamozĜejmČ je taky možné pĜipojit LED diody a zkoumat stav všech þtyĜ bitĤ najednou. K LED diodám je potĜeba pĜipojit rezistor takový, aby nedošlo k poškození LED, nebo k poškození mikroprocesoru samotného. Mikroprocesor má výrobcem stanoven maximální možný zatČžovací proud pro jednotlivé vstupnČ-výstupní porty a taky celkový možný proud tekoucí mikroprocesorem [3]. V pĜípadČ pĜekroþení tČchto hodnot mĤže dojít k nevratnému poškození mikroprocesoru. VýhodnČjší z hlediska jednoduššího zapojení je sledovat vstupy a výstupy pomocí okna hyperterminálu.
Obr. 4.2 Blokové schéma zapojení výstupního portu
PĜednastavená hodnota þtyĜ-bitového výstupu OUT0 – OUT3 je „0000“. Tato hodnota je nastavena po zapnutí nebo po resetování mikroprocesoru. PĜed samotnou operací nČkterých z funkcí pro práci se 4-bitovými statickými úrovnČmi musí dojít k získání aktuálních hodnot þtyĜ-bitového výstupu. Testovací modul tuto informaci získává nasnímáním hodnot, které si mikroprocesor pĜeþte rovnou ze vstupnČ/výstupních portĤ. Je taky možnost, aby byla tato - 13 -
informace pĜeþtena pĜímo z registrĤ vstupnČ/výstupních portĤ. PĜi správné funkci Testovacího modulu a správném zapojení je z hlediska pozorovaných výsledkĤ jedno, kterou metodou je získání informace o stavu výstupĤ udČláno. K rozdílným výsledkĤm pĜi snímání výstupĤ by ale mohlo náhle dojít v pĜípadČ zkratu na nČkterém z výstupních pinĤ mikroprocesoru pĜi metodČ snímání vstupnČ/výstupních registrĤ. Naprogramováním Testovacího modulu výše uvedenou metodou dokáže obsluha situaci zkratu na výstupním pinu odhalit, popĜípadČ zjistit nefunkþnost kteréhokoli ze zobrazovaných výstupních pinĤ mikroprocesoru. Funkce podprogramĤ pracujících se þtyĜ-bitovými statickými úrovnČmi se o svoje výstupní piny mikroprocesoru OUT0-OUT3 dČlí s funkcí „Ĝízení krokového motoru“. V pĜípadČ bČhu této funkce jsou funkce podprogramĤ pracujících se þtyĜ-bitovými statickými úrovnČmi zablokovány. VysvČtlení proþ tomu tak musí být je vysvČtleno v þl. 4.4.3.2 . Výstup funkcí inkrementace a dekrementace se chová podobnČ jako jednoduchý þtyĜ-bitový þítaþ s þítáním vpĜed nebo vzad. Tím je možné tyto funkce využít pro simulaci þtyĜ-bitového þítaþe. Taky je možné využití výstupĤ tČchto funkcí napĜíklad k Ĝízení multiplexorĤ a demultiplexorĤ. Otestovat funkce ovlivĖující výstupní piny mikroprocesoru lze pĜímo jednoduchým zapojením tČchto pinĤ k vstupním pinĤm logického analyzátoru (popis logického analyzátoru viz þl. 4.4.2). Zapojení je možno vidČt na obr. 4.3 .
OUT3 – pin 28 OUT2 – pin 27 OUT1 – pin 26 OUT0 – pin 25
IN3 – pin 18 IN2 – pin 17 IN1 – pin 16 IN0 – pin 15
Obr. 4.3 Jednoduchý test funkcí pracujících s výstupními piny mikroprocesoru
- 14 -
4.4.1.1 Inkrementace
Po volání „rcall increment“ se nejdĜíve zjistí, zda-li je provádČní funkce inkrementace možné, což znamená, jestli nejsou zrovna obsazeny výstupy OUT0-OUT3 pro funkci Ĝízení krokového motoru. V pĜípadČ, že Ĝízení krokového motoru je zablokováno se zjistí, zda-li pĜijatý znak z klávesnice vyhovuje podmínce pro bČh podprogramu inkrementace. KonkrétnČ se jedná o znaky „i“ a „I“. V pĜípadČ splnČní pĜíjmu tČchto znakĤ se prozkoumá aktuální stav In na výstupním portu urþeném pro tuto funkci a následnČ se provede inkrementace daného stavu. V opaþném pĜípadČ se z podprogramu inkrementace vyskoþí. Jelikož funkce inkrementace používá pro svĤj výstup þtyĜi bity, v pĜípadČ stavu 1111 se výstup neinkrementuje klasicky osmi-bitovČ, ale nastaví se na nČm hodnota 0000, která je následující po pĜeteþení þtyĜbitového þísla 1111.
In+1 =In + 1 In 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OUT3 OUT2 OUT1 OUT0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
Obr. 4.4 Tabulka stavĤ výstupních pinĤ mikroprocesoru pĜi inkrementaci
- 15 -
4.4.1.2 Dekrementace StejnČ jako u podprogramu inkrementace se nejdĜíve zjistí stav zapnutí Ĝízení krokového motoru a podle toho se z podprogramu dekrementace bućto vyskoþí, nebo bČží dál. Na rozdíl od podprogramu inkrementace se po volání „rcall decrement“ ovČĜí vstupní podmínka pĜíjmu znakĤ „d“ a „D“. PĜi nesplnČní této podmínky se z podprogramu dekrementace vyskoþí. Podprogram dekrementace pracuje stejnČ jako podprogram inkrementace s rozdílem, že se nejedná o inkrementaci aktuálního stavu na výstupním portu, ale o jeho dekrementaci. V pĜípadČ zjištČní hodnoty 0000 se jako následující hodnota po dekrementaci nastaví hodnota 1111.
In+1 =In + 1 In 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OUT3 OUT2 OUT1 OUT0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0 0 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0
Obr. 4.5 Tabulka stavĤ výstupních pinĤ mikroprocesoru pĜi dekrementaci
- 16 -
4.4.1.3 Nastavení logického stavu
Je možné na kterémkoli ze þtyĜ-bitových výstupĤ nastavit požadovanou logickou úroveĖ. Uživatel si nejdĜíve zvolí, zda-li bude nastavovat úroveĖ logické nuly (klávesou „l“,“L“), nebo úroveĖ logické jedniþky (klávesou „h“,“H“). Poté þíslicí 0 až 3 zvolí požadovaný bit, který se následnČ pĜeklopí do požadované logické úrovnČ. PĜi nastavování stejné logické úrovnČ na vícero bitech, není nutno pokaždé zadávat logickou úroveĖ. Mikroprocesor si pamatuje poslednČ zadanou, staþí pak zadávat hodnoty jednotlivých bitĤ (þíslicemi 0 až 3). Ukázku možného zadávání pĜíkazĤ pro funkci nastavení logického stavu ukazuje tabulka na obr.4.7. Po vykonání zmČny se podprogram nastavení logického stavu ukonþí a vrátí se zpČt za místo, odkud byl volán. Po zapnutí nebo po resetování mikroprocesoru je pĜíznak pro zadávání stavu logické úrovnČ pĜednastaven pro nastavení hodnoty logické nuly. Taky u této funkce je pro její vykonání nutné, aby zrovna nebyla aktivní funkce Ĝízení krokového motoru.
Klávesy pro nastavení logického stavu „L“
nastaví pĜíznak pro zadávání stavu logické nuly (pĜednastavená hodnota po zapnutí)
„H“
nastaví pĜíznak pro zadávání stavu logické jedniþky
„0“
na pinu OUT0 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„1“
na pinu OUT1 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„2“
na pinu OUT2 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„3“
na pinu OUT3 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
OUT3 – pin 28 OUT2 – pin 27 OUT1 – pin 26 OUT0 – pin 25
Obr. 4.6
Oznaþení výstupních pinĤ Testovacího modulu - 17 -
Zadaný pĜíkaz z klávesnice
Aktuální stav - poþáteþní stav - nastaven bit 1
H1 H30
- k bitu 1 nastaven taky bit 0 a 3
L13
- vynulovány bity 1 a 3
0
- vynulován bit 0
H
- nastavení pĜíznaku logické 1 - nastaveny bity 1,2,3 (na poĜadí
132
nezáleží)
0
- nastaven bit 0
L
- nastavení pĜíznaku logické 0 - nulování bitĤ 0,1,3 - nulování bitĤ 0,1,2,3 (nulování
031 3021
nulového bitu je možné) - dĤležité je, který pĜíznak je nastaven jako poslední, v tomto pĜípadČ log.1
LH23 L3H1
- nulování bitu 3 a nastavení bitu 1 - nulování bitĤ 0,1,2,3 (zadané þísla
L015342
neoznaþující žádný bit jsou ignorovány)
- znázorĖuje hodnotu log.0 na výstupu
- znázorĖuje hodnotu log.1 na výstupu
Obr. 4.7
Tabulka znázorĖující možné zadávání pĜíkazĤ pro funkci nastavení logického stavu
- 18 -
4.4.2 Logický analyzátor Možnost mČĜit logické úrovnČ þtyĜ-bitovČ a následnČ je zobrazit v programu Hyperterminálu umožĖuje funkce logický analyzátor. Ta provádí jednoduché snímání logických hodnot na þtyĜech vstupních pinech mikroprocesoru „IN0 - IN3“. Tyto þtyĜi bity lze naprogramovat, popĜípadČ pĜeprogramovat libovolnČ na kterékoli volné piny mikroprocesoru
dle
požadavkĤ
obsluhy.
V programu
Testovacího
modulu
jsou
naprogramované vstupy logického analyzátoru oznaþené konstantami „ana0, ana1, ana2, ana3“. PĜi pĜeprogramování tČchto vstupních bitĤ v rámci jiného portu je potĜeba navíc nastavit, o který jiný port se bude jednat.
Obr. 4.8
Blokové schéma zapojení vstupního portu
NamČĜené hodnoty logického analyzátoru jsou vypisovány v Ĝádku aktuálních hodnot v programu Hyperterminálu. Výpis namČĜeného Ĝádku se dČje pĜibližnČ 30krát za vteĜinu. Bylo by proto neefektivní z hlediska pomalého vypisování namČĜených hodnot, mČĜit tyto hodnoty rychleji. Proto je vzorkovací frekvence logického analyzátoru dána rychlostí pĜepisování Ĝádku aktuálních hodnot do programu Hyperterminál. K nasnímání nových hodnot vstupĤ totiž dochází jednou za výpis Ĝádku aktuálních namČĜených hodnot. Taková snímací rychlost je pro mnohé aplikace dostaþující. V pĜípadČ potĜeby vyšší rychlosti snímání, se musí použít funkce „rychlého logického analyzátoru“, který má samostatnČ bČžící smyþku, podobnČ jako má samostatnČ bČžící smyþku funkce osciloskopu. Mikroprocesory použité pro pĜípravek Testovacího modulu využívají technologii CMOS. Z hlediska snímání vstupĤ je dĤležité, aby byl snímaný vstup pĜipojen na nČkterou z logických úrovní. PĜi nezapojení nČkteré z logických úrovní na pinu nakonfigurovaném jako vstupní totiž dochází k náhodné a neoþekávané mČĜené vstupní hodnotČ, zpĤsobené vnČjším šumem z prostĜedí. Pouhé mávnutí rukou mĤže zpĤsobit pĜeklopení logického stavu. Je proto dĤležité pĜi programování ošetĜit vstupní piny mikroprocesoru vnitĜními pull-up rezistory. Tím jsou vstupní piny pĜes rezistory pĜipojeny k napájecímu napČtí a jsou pĜeklopeny do - 19 -
stavu logické jedniþky i pĜi nepĜipojeném vstupu. PĜi testování byl použit hardware, kterým byly mČĜené vstupy logického analyzátoru pĜipojeny k pĜepínaþĤm, které dodávaly na svých výstupech hodnotu logické nuly nebo logické jedniþky. Tím byla závada zpĤsobená nepĜipojenými pull-up rezistory objevena až pĜi používaní jedné z prvních verzí na cviþeních pĜedmČtu NRM a následnČ poté opravena. Pro bČh logického analyzátoru není potĜeba ze strany obsluhy zadávat žádné pĜíkazy z klávesnice. Po zapnutí mikroprocesoru se po výpisu menu a následnČ po skoþení do hlavní programové smyþky zapoþne mČĜení logickým analyzátorem automaticky. Funkci logického analyzátoru nelze za bČhu programu zrušit, neaktivní se doþasnČ stane pouze pĜi skoku do podprogramĤ funkcí osciloskopu nebo rychlého logického analyzátoru.
4.4.3 Generátor pulsĤ
Hlavní programová smyþka obsahuje ve svém konci dopoþet pro konstantní þasovou délku svého bČhu. Když po této funkci budeme pokaždé negovat výstup jednoho bitu na nČkterém portu mikroprocesoru, získáme generátor impulsĤ s maximální možnou frekvenci pro danou smyþku. Ten je vyveden na výstupním pinu mikroprocesoru a je možné ho využít pro aplikace vyžadující rychlé vstupní pulsy.
Obr. 4.9
Ukázka principu funkce jednoduchého generování pulsĤ - 20 -
Když dále pomocí þítaþe vezmeme jenom každý n-tý puls generátoru, vznikne nám velice jednoduchým zpĤsobem generátor pulsĤ s n-násobnČ menším kmitoþtem vĤþi hlavnímu kmitoþtu. Ten lze nastavit a zabudovat natvrdo na stálou hodnotu, nebo umožnit obsluze pomocí kláves poþítaþe zvolit požadovanou hodnotu, kterou bude následnČ mikroprocesor generovat na nČkterém ze svých výstupĤ. Podmínkou je, že se musí jednat o celoþíselný pomČr k nejvyšší generované frekvenci. Je možnost pĜímo pĜednastavit nČkolik hodnot a pĜiĜadit jim klávesové zkratky, které by bylo možné najít po výpisu „help“, nebo požádat obsluhu o zadání þíselné hodnoty pro následující generovanou frekvenci. Generovanou frekvenci je možné použít jako hodinový signál pro rĤzné testované aplikace. Generovaný signál je možné vidČt na následujícím obrázku, kde je taky vidČt þasové zmČny hran závislých na bČhu hlavní programové smyþky.
Obr. 4.10 PrĤbČh generovaného signálu Testovacím modulem
tsm
þas jednoho prĤbČhu hlavní programové smyþky
tper
þas jedné periody generovaného signálu = 2 prĤbČhy hlavní programové smyþky
NČkteré aplikace, nebo požadovaná mČĜení, vyžadují þasto mnohem složitČjší generované signály, než jen pouhý hodinový kmitoþet. Testovací modul v sobČ obsahuje funkce pro generaci speciálních signálĤ, které jsou popsány v následujících kapitolách.
- 21 -
4.4.3.1 Simulace „inkrementálního snímaþe“
PĜi mČĜení otáþek, když po obvodu hĜídele je vyznaþen daný poþet svČtlých a tmavých míst pro vyhodnocení optickým snímaþem, je velice snadné zjistit, kolikrát se hĜídel otoþí za pĜedpokladu otáþení stále jedním smČrem. Simulování tohoto pĜípadu je velice snadné, v tomto pĜípadČ staþí pouhý generátor hodinových signálĤ. V pĜípadČ, že dochází ke zmČnám otáþení, je potĜeba vhodným zpĤsobem zajistit možnost detekce tČchto zmČn. K možné ukázce této problematiky staþí použití dvou, od sebe o polovinu štČrbiny pootoþených snímacích ploch, pĜiþemž obČ snímací plochy vyhodnocují optické snímaþe, umístČny v jedné rovinČ (viz obr. 4.11a). PĜesná konstrukce takového pĜípravku by ale v praxi byla velice obtížná, proto se používá pouze jedna snímací plocha, kterou snímají dva optické snímaþe posunuty vĤþi sobČ. Situaci znázorĖuje obr. 4.11b .
(a) Obr. 4.11
(b) Ukázky pĜípravkĤ pro funkci inkrementálního snímaþe
(a) Obr. 4.12
(b) Signály inkrementálního snímaþe (a) rotace doprava (b) rotace doleva - 22 -
Po zapnutí, nebo po resetu „Testovacího modulu“, je funkce simulátoru inkrementálního snímaþe neaktivní a jeho výstupy jsou ve stavu logické nuly. Do chodu jej obsluha uvede až zvolením požadovaného smČru otáþení. Pro oba smČry otáþení má obsluha na výbČr dva režimy. Režim „single mode“ vykoná po jednom stisku klávesy „q“ nebo „w“ pĜeklopení výstupu do následujícího stavu. Tento stav zĤstane na daném výstupu až do doby, dokud obsluha neaktivuje následující stav, neukonþí generování klávesou „e“ nebo „E“, nebo nedojde k resetu mikroprocesoru. Každým dalším stiskem klávesy „q“ nebo „w“ se provede pĜeklopení výstupu do následujícího stavu. Druhý režim umožĖuje kontinuální bČh simulátoru inkrementálního snímaþe, který se aktivuje po stisku klávesy „Q“ nebo „W“. Kdykoli je možná zmČna smČru kontinuálního bČhu. Simulátor inkrementálního snímaþe nacházející se v režimu kontinuálního bČhu generuje ve svých výstupech pulsy až do doby, dokud jej obsluha nezastaví ukonþením generování, a to klávesou „x“ nebo „X“, zmČnou na „single mode“, nebo pokud nedojde k resetu mikroprocesoru. Rychlost zmČny na následující stav v režimu kontinuálního bČhu je dána rychlostí bČhu hlavní programové smyþky. Výstupy funkce
simulujícího inkrementální snímaþ jsou vyvedeny na
pinech
mikroprocesoru „4, 5“ s oznaþením „MOU0, MOU1“.
Klávesy pro ovládání generátoru simulujícího inkrementální snímaþ :
„q“
–
rotace doleva jednorázová - „single mode“
„Q“
–
rotace doleva kontinuální - „continual mode“
„w “
–
rotace doprava jednorázová - „single mode“
„W“
–
rotace doprava kontinuální - „continual mode“
„e“, „E“
–
ukonþení generování a vynulování výstupĤ
Funkci simulátoru inkrementálního snímaþe mohou studenti využít pro „umČlé zavedení rotace“ pĜi testování své aplikace, která má dekódovat signály skuteþného inkrementálního snímaþe.
- 23 -
4.4.3.2 ěízení krokového motoru Mezi specielní generované signály, které poskytují funkce testovacího modulu, patĜí i signály pro Ĝízení rotace krokového motoru. KonkrétnČ se jedná o Ĝízení krokového motoru v osmitaktním režimu. Pro výstupní signály této funkce jsou použity výstupy „OUT0OUT3“, které jsou sdíleny spoleþnČ s funkcemi pracujícími se þtyĜ-bitovými statickými úrovnČmi. PĜi Ĝízení krokového motoru jsou pĜesnČ definovány signály (viz obr. 4.13), které se pĜivádí na výkonovou þást krokového motoru (viz obr. 4.14). V pĜípadČ nedodržení posloupností tČchto signálĤ by docházelo k špatnému Ĝízení motoru. Proto je potĜeba softwarovČ oddČlit Ĝízení krokového motoru od funkcí pracujících se þtyĜ-bitovými statickými úrovnČmi, aby nenarušovaly plynulé Ĝízení krokového motoru. Kdyby tomu tak nebylo, obsluha by kromČ ovládání motoru pro to urþenými klávesami, mohla taky klávesami pro zmČnu statických úrovní na výstupu úplnČ zmČnit stav pulsĤ pro krokový motor. Využití tohoto opatĜení v pĜípadČ bČhu krokového motoru znemožĖuje bČh ostatních funkcí pracujících se stejnými výstupy, které jsou využívány pro Ĝízení krokového motoru a naopak. Po zapnutí nebo restartu mikroprocesoru je hodnota pro rozhodování pĜidČlení výstupních pinĤ OUT0-OUT3 pĜednastavena pro použití funkcí pracujících se þtyĜ-bitovými statickými úrovnČmi. Ty se stlaþením klávesy „u“ nebo „U“ deaktivují, stavová promČnná se prohodí ve prospČch Ĝízení krokového motoru a na výstupech OUT0-OUT3 se nastaví hodnota odpovídající prvnímu stavu z osmistavové množiny Ĝídících pulsĤ. Poté je možné klávesami „p“ nebo „P“ a „o“ nebo „O“ ovládat smČr otáþení krokového motoru doprava nebo doleva. PĜi deaktivaci Ĝízení krokového motoru stlaþením klávesy „z“ nebo „Z“ se výstupy vynulují a umožní se bČh funkcí pracujících se þtyĜ-bitovými statickými úrovnČmi.
Klávesy urþené k Ĝízení krokového motoru : „p“, „P“
-
rotace krokového motoru doprava
„o“, „O“
-
rotace krokového motoru doleva
„u“, „U“
-
uvolnČní výstupních pinĤ krokovému motoru a jeho aktivace
„z“, „Z“
-
deaktivace krokového motoru
- 24 -
krok
OUT0 OUT1 OUT2 OUT3
0
1
0
0
0
1
1
0
1
0
2
0
0
1
0
3
0
1
1
0
4
0
1
0
0
5
0
1
0
1
6
0
0
0
1
7
1
0
0
1
Obr. 4.13
Stavy výstupĤ pĜi osmitaktním Ĝízení krokového motoru
Výstupy mikroprocesoru nelze pĜímo pĜipojit na vinutí krokového motoru, protože na to není výkonovČ stavČný. Je potĜeba použít výkonové þleny, napĜíklad tranzistory, na jejichž vstupy se pĜivedou signály z mikroprocesoru. Možné zapojení krokového motoru ukazuje následující obrázek.
Obr. 4.14
Zapojení vynutí krokového motoru - 25 -
4.4.4 Voltmetr
Mikroprocesor ATmega8 má v sobČ zabudovaný analogovČ digitální pĜevodník (dále jen AD pĜevodník). Jedná se o deseti-bitový AD pĜevodník, pracující metodou postupné aproximace. AD pĜevodník je hardwarovČ pĜipojen na analogový multiplexor, který je u mikroprocesoru ATmega8 šesti-vstupový. U AD pĜevodníku je možnost využít zabudovanou vnitĜní napČĢovou referenci, nebo pĜipojit externí napČĢovou referenci na pro to vyhrazených pinech mikroprocesoru. PĜípravek Testovacího modulu využívá ve funkci voltmetru externí napČĢovou referenci, které hodnota pro získání správného výsledku musí být +5V. Tu je nezbytné pĜipojit na pin „AREF“ mikroprocesoru (viz obr. 4.15). Výsledek AD pĜevodu (ADvysl) se vypoþte podle vztahu : UVST ADvysl = 1024 x ————— UREF
(4.3)
kde „UVST“ je vstupní mČĜené napČtí a „UREF“ je referenþní napČtí pĜivedeno na pinu AREF. V Testovacím modulu jsou pro mČĜení napČtí použity dva kanály. MČĜené napČtí se pĜivádí na vstupy „V1“ a „V2“. V pĜípadČ potĜeby je možné Testovací modul doplnit o více než dvoukanálové
mČĜení
napČtí,
ale
nastává
problém
s nedostatkem
volných
pinĤ
mikroprocesoru. ýtyĜi ze šesti pinĤ možných pro zapojení vstupĤ AD pĜevodníku, jsou totiž obsazeny funkcemi pracujícími se þtyĜ-bitovými statickými úrovnČmi.
V2 V1
Obr. 4.15
-
pin 24 pin 23
GND AREF AVCC -
pin 22 pin 21 pin 20
Oznaþení pinĤ potĜebných pro správný bČh voltmetru
- 26 -
Rychlost mČĜení napČtí je dána rychlostí AD pĜevodníku. Ten pro dosažení maximální pĜesnosti, potĜebuje hodinové pulsy mikroprocesoru pomocí vlastní pĜeddČliþky AD pĜevodníku snížit pro svoje úþely na ménČ než 200 kHz. PĜevod AD pĜevodníku trvá 13 hodinových cyklĤ. (Poznámka : pĜi prvém zapnutí AD pĜevodníku udČlá mikroprocesor tzv. rozšíĜený pĜevod, který je nutný pro inicializaci a minimalizování chyby offsetu. RozšíĜený pĜevod trvá 25 hodinových cyklĤ). Rychlost mČĜení pĜi maximální pĜesnosti je tedy pĜibližnČ 15 000 vzorkĤ za sekundu. Funkce voltmetru ale kvĤli potĜebČ vypisování namČĜeného výsledku v terminálu rychlostí 30krát za sekundu tak rychlé mČĜení nevyužívá. Aby použití vícekanálového mČĜení napČtí þasovČ moc nezatČžovalo rychlost prĤbČhu hlavní smyþky, je v rámci bČhu jedné smyþky AD pĜevodníkem zpracováván pouze jeden kanál voltmetru. V bČhu programu se kanály voltmetru stĜídají. PĜepínání kanálu je zabezpeþeno softwarovČ, kdy mČĜení druhého kanálu je zapoþato až po úspČšném odmČĜení a uložení prvního kanálu. Multiplexor AD pĜevodníku je pĜepínán, kdy za pomocí na to urþené promČnné si pamatuje, který kanál byl mČĜen naposled a v dalším cyklu se posune. Po odmČĜení všech, v našem pĜípadČ dvou kanálĤ, se až do doby vypsání hodnot v programu Hyperterminál zablokuje funkce voltmetru. Je to velice potĜebné opatĜení. MČjme pro pĜíklad pĜípad, kdy voltmetr namČĜí „4,000“ V. PĜi vypisování hodnot se nejdĜíve vypíše þíslo „4“. PĜi nezablokování mČĜení voltmetru se udČlá nový námČr napĜ. „3,995“ V. V následujícím bČhu smyþky by se v tomhle pĜípadČ nevypsala „0“ ale „9“. To by znamenalo, že místo vypsání hodnoty „4,0xx“ V by se vypsala hodnota „4,9xx“ V. Desetibitové mČĜení AD pĜevodníku, tj. hodnoty v desítkové soustavČ od 0 do 1023, se musejí pĜepoþíst dle konstanty, která je urþena z referenþního napČtí na þíslo, které bude prezentováno ve výpisu jako výsledek mČĜení ve voltech. Výsledné napČtí se urþí dle vztahu : ADvysl Uvysl = UREF x ————— 1024
(4.4)
Pro potĜebné dČlení program Testovacího modulu využívá dvČ externí knihovny, z nichž jedna umožĖuje šestnácti-bitové a druhá tĜicetidvou-bitové dČlení. Tyto podprogramy knihoven jsou hodnČ zacyklené a netrvají vždy stejnČ dlouhou dobu. Doba jednoho dČlení se u šestnácti-bitové knihovny pohybuje od 235 do 251 cyklĤ a u tĜicetidvou-bitové knihovny od 528 do 688 cyklĤ. Samotný výsledek namČĜeného napČtí se vypoþte následovnČ:
- 27 -
1.
deseti-bitový námČr AD pĜevodníku se vynásobí hodnotou 5000 (v pĜípadČ maximálnČ namČĜené hodnoty AD pĜevodníku, tj. hodnoty 1023, se získá hodnota 1023x5000=5115000, která je po pĜepoþtu do šestnáctkové soustavy rovná 4E.0C.78)
2.
výsledek kroku 1. se vydČlí hodnotou 1023 - v tomto kroku je potĜeba využití tĜicetidvou-bitové knihovny pro dČlení (jinde v programu již použitá není)
3.
výsledek kroku 2. se vydČlí hodnotou 10 a zbytek po dČlení se uloží do pamČti jako „TISÍCINA“
4.
výsledek kroku 3. se vydČlí hodnotou 10 a zbytek po dČlení se uloží do pamČti jako „SETINA“
5.
výsledek kroku 4. se vydČlí hodnotou 10, výsledek po dČlení se uloží do pamČti jako „VÝSLEDEK“ a zbytek po dČlení jako „DESETINA“
PĜed samotným zobrazením výsledku zmČĜeného napČtí, vypoþteném ve výše zmínČných krocích, je nutno vypoþtené þísla „0“-„9“ transformovat na hodnoty znakĤ „0“-„9“ v ASCII. Mezi hodnotami „výsledek“ a „desetina, setina, tisícina“ se musí vložit znak desetinné þárky. Podprogram voltmetru je z celého software Testovacího modulu z hlediska potĜebného þasu ke zpracování výsledkĤ nejvíce nároþný. Aby þasovČ nezatČžoval hlavní programovou smyþku celou dobou svého trvání, je softwarovČ ošetĜen tak, aby v prĤbČhu jedné hlavní programové smyþky vykonával pouze jeden z pČti výše oznaþených krokĤ. Tento problém je vyĜešen inkrementací pomocné promČnné zabezpeþující postupné pĜepínání tČchto krokĤ, kdy každý krok hlídá aktuální stav této promČnné a v pĜípadČ rovnosti s ní se provede. Po ukonþení odmČru a pĜepoþtu námČru, na výsledek reprezentující namČĜené napČtí ve voltech, se tento výsledek uloží to pamČti pod hodnotou výsledku aktuálnČ bČžícího kanálu voltmetru. ÚplnČ stejnČ se provede mČĜení, pĜepoþet a uložení výsledku druhého kanálu voltmetru. Tyto namČĜené hodnoty jsou v dobČ výpisu Ĝádku namČĜených hodnot vysílány na sériový port. PĜi využití deseti-bitového rozlišení AD pĜevodníku a referenþního napČtí +5V je chyba mČĜení pĜibližnČ 5mV. PĜesnost samotného námČru je závislá na pĜesností referenþního napČtí, kterého hodnota mĤže být negativnČ ovlivĖována vnČjším rušením. K mikroprocesoru je proto potĜeba pĜipojovat blokovací kondenzátory!
- 28 -
4.4.5 Osciloskop
Funkci osciloskopu zabezpeþuje podprogram, který je zacyklen. Z toho vyplívá, že ostatní funkce jsou po dobu bČhu osciloskopu neaktivní. Aby došlo k samotnému spuštČní podprogramu osciloskopu, je potĜeba splnit dvČ podmínky. První podmínkou je nastavení stavové promČnné pro rozhodování mezi aktivací funkce osciloskopu, nebo rychlého logického analyzátoru, kterou zadává obsluha z klávesnice poþítaþe stiskem klávesy „s“ nebo „S“ ve prospČch osciloskopu. Stavová promČnná pro toto rozhodování je po zapnutí, nebo restartu testovacího modulu, pĜednastavena pro bČh podprogramu osciloskopu. Rozhodování mezi bČhem funkcí osciloskopu, nebo funkcí rychlého logického analyzátoru je nutné z dĤvodu, protože samotné spouštČní obou tČchto funkcí je shodné a to pĜíjmem znaku „0x03“ USART-em, což je druhou nutnou podmínkou pro bČh osciloskopu. Funkce osciloskopu, podobnČ jako funkce voltmetru, využívá pro své námČry zabudovaný AD pĜevodník. Na rozdíl od voltmetru, využívá osciloskop pouze osmi-bitové rozlišení AD pĜevodníku. Deseti-bitové rozlišení AD pĜevodníku totiž potĜebuje pro svoje mČĜení za pomocí pĜeddČliþky snížit rychlost hodinového signálu na ménČ než 200 kHz. Osmi-bitové rozlišení, pro svĤj bČh využívající rychlosti hodinového signálu až do frekvence 1MHz, tak mĤže své námČry mČĜit pČtinásobnČ rychleji. Je to ale na úkor pĜesnosti. NámČr osciloskopu je kvĤli menšímu rozlišení zatížen þtyĜikrát vČtší chybou vĤþi námČru voltmetru. Pro mČĜení AD pĜevodníkem funkce osciloskopu využívá napČĢovou referenci pĜímo od napájení AD pĜevodníku (pin AVCC). Na rozdíl od všech ostatních funkcí testovacího modulu je u osciloskopu použito pĜerušení (konkrétnČ pĜerušení po ukonþení AD pĜevodu). V pĜípadČ zjištČní ukonþení námČru AD pĜevodníku se bČh podprogramu osciloskopu pĜeruší a skoþí se do obslužné rutiny pĜerušení, kde se námČr AD pĜevodníku uloží do vnitĜní pamČti a ukazatel na místo v pamČti se inkrementuje. Poté se zaþne provádČt nový námČr. To se opakuje až do doby, kdy je softwarovČ zjištČno naplnČní poslední buĖky vnitĜní pamČti. Velikost pamČti mikroprocesoru ATmega8 je 1kByte, což v ideálním pĜípadČ umožní osciloskopu uložit 1024 námČrĤ. NČkteré Byty datové pamČti jsou ale využity pro pomocné promČnné, proto je poþet možných námČru nižší, konkrétnČ Testovací modul provádí „900“ námČrĤ. Po ukonþení mČĜení se všechny námČry vyšlou po sériové lince do poþítaþe, kde se námČr zobrazí graficky v programu zobrazovaþe „NRM Display“ (viz kap. 4.5). Z dĤvodu šetĜení pinĤ mikroprocesoru, je pro funkci osciloskopu použit stejný pin, jako pro funkci voltmetru (kanál 0 – pin23). Osciloskop je naprogramován pouze jednokanálovČ. - 29 -
NámČry uložené ve vnitĜní datové pamČti mikroprocesoru neodpovídají skuteþné namČĜené hodnotČ. Kdyby tomu tak mČlo být, musela by se použít aritmetika pro pĜepoþet námČru (þísla od 0 do 255) na þíslo odpovídající napČtí mČĜeného signálu. To by ale zpĤsobilo pĜíliš velké zdržení smyþky osciloskopu. Navíc, mČĜení jednoho vzorku je osmi-bitové. Aby se po pĜepoþtu nesnížila pĜesnost ukládaného námČru, musel by se námČr násobit konstantou vČtší než 1, þímž by se z nČj stal více než osmi-bitový námČr. To by se ale negativnČ projevilo v poþtu uložených námČru do vnitĜní pamČti, protože jeden námČr by už nezabíral pouze jeden bajt pamČti, ale dva. Do vnitĜní pamČti by se tedy mohlo uložit maximálnČ 512 námČrĤ. PĜepoþet na správnou hodnotu napČtí se tedy neprovádí, v programu zobrazovaþe je námČr kvantován od hodnoty 0qnt do hodnoty 255qnt. Po pĜipojení Testovacího modulu k poþítaþi má tedy obsluha na výbČr komunikaci v programu „Hyperterminál“, nebo pomocí zobrazovaþe „NRM Display“. Souþasné pĜipojení obou tČchto programĤ na stejný COM-port ale není možné. SouþasnČ mĤže komunikovat s daným COM-portem pouze jediný program. PĜepínání mezi programy s pĜipojením na daný COM-port je komplikované. PĜed zmČnou je totiž potĜeba zrušit volání daného COM-portu v aktuálnČ využívaném programu a zavolat COM-port druhým programem. Pro tyto požadavky byl program zobrazovaþe, který ve své první verzi ještČ nemČl funkci terminálu, pĜepracován Ing. Ondrejom Pribulou na verzi, která již v sobČ funkci terminálu má. Tím se stává program zobrazovaþe ideální pro použití k testovacímu modulu.
Obr. 4.16
V1/OSC
-
pin 23
GND AREF AVCC
-
pin 22 pin 21 pin 20
PotĜebné vstupy pro mČĜení osciloskopem
- 30 -
Obr. 4.17
4.4.6
Ukázka námČru osciloskopu v programu „NRM Display“
Rychlý logický analyzátor
Funkce logického analyzátoru má na svém zaþátku stejnČ jako funkce osciloskopu zjištČní stavové promČnné pro rozhodování mezi aktivací funkce osciloskopu, nebo rychlého logického analyzátoru. Obsluha umožní mČĜení rychlého logického analyzátoru zmáþknutím kláves „a“ nebo „A“. NáslednČ se zkoumá pĜijetí bajtu 0x03, což je druhá nezbytná podmínka ke startu této funkce. Poté se již cyklicky zaþne provádČt samotné mČĜení logických stavĤ na vstupech „IN0 - IN3“. Funkce rychlého logického analyzátoru má ze všech funkcí testovacího modulu nejrychlejší vzorkovací frekvenci, která je dána rychlostí prĤbČhu vnitĜní zacyklené smyþky. V této smyþce se odeþte stav na vstupech IN0-IN3, uloží se do vnitĜní datové pamČti a inkrementuje se ukazatel místa pamČti. Další þinností je zjištČní, zda-li námČr není ukládán do posledního místa v pamČti. Protože adresace je šestnácti-bitová, musí se test dČlat nadvakrát. V pĜípadČ rovnosti vyššího adresovacího bajtu pamČti s konstantou danou vyšším - 31 -
bajtem adresy poslední pamČĢové buĖky, se zaþne provádČt také kontrola nižšího bajtu adresace. Tím se ale zpomalí prĤbČh smyþkou o tuto kontrolu. Proto je potĜeba zabezpeþit, aby i v pĜípadČ, kdy není provádČn test nižšího bajtu adresace, byla navíc držena smyþka o dobu trvání testu nižšího bajtu, která se vícekrát provede instrukcí, mající za úkol pouze pozdržení jednoho hodinového taktu. Tím se zabezpeþí, že vzorkovací kmitoþet rychlého logického analyzátoru bude za každé vstupní podmínky související s adresovací hodnotou pamČti stejnČ dlouhý. Z hlediska funkþnosti mČĜení by již zmínČné kroky po zacyklení postaþovaly k samotnému mČĜení. Výhodná je ale taky funkce zmČny vzorkovacího kmitoþtu, proto se ve smyþce nachází další smyþka, která vzorkovací kmitoþet umožĖuje zpomalit. Konstanta
pro
zpomalení smyþky je pĜednastavena na minimální hodnotu zdržení. Jeden získaný odmČr, tj. jeden prĤbČh smyþkou analyzátoru, trvá 14 hodinových taktĤ. Nejrychlejší vzorkovací frekvence rychlého logického analyzátoru je tedy pĜibližnČ 570kHz. Po namČĜení možného poþtu námČrĤ se smyþka mČĜení ukonþí a program skoþí do smyþky vyslání dat. První vyslaný bajt musí být hodnota 0x03, aby se splnila komunikaþní podmínka zobrazovaþe pro odbČr dat, které mají být zobrazeny v grafickém oknČ. Poté se postupnČ vysílají namČĜené data z pamČti, pĜiþemž pĜed samotným vysláním dat se vhodnČ upraví tak, aby ve svých osmi bitech obsahovaly pouze informaci ze vstupĤ IN0-IN3 a ostatní bity byly nastaveny do úrovnČ logické nuly. Po ukonþení vysílání namČĜených dat se z podprogramu rychlého analyzátoru vyskoþí.
4.5
Zobrazovaþ „NRM Display“
Program „Zobrazovaþ“ je software, který vytvoĜil Ing. Ondrej Pribula. „Tento program umožĖuje data, pĜijaté sériovou linkou, zobrazovat graficky. Taky umožĖuje jednoduchou terminálovou komunikaci s pĜipojeným zaĜízením. Pokud program zobrazovaþe zaregistruje pĜíjem zobrazitelného znaku, nebo znaku CR nebo LF, vypíše ho v terminálovém oknČ. V pĜípadČ pĜíjmu nezobrazitelného znaku jiného než CR, LF nebo bajtu 0x03, zmČní se podkladová barva terminálu na þervenou, což informuje uživatele, že pravdČpodobnČ není nČco s komunikaci v poĜádku. Pokud je vybráno terminálové okno, znaky pĜijímané z klávesnice se odešlou sériovou linkou. Po pĜijetí znaku „03“ program pĜedpokládá, že tento bajt bude následován dalšími bajty, jejichž hodnota se má zobrazit graficky. Program pĜedpokládá, že poþet tČchto dat se rovná hodnotČ zadané v editaþním poli „Samples“. Pokud není splnČna podmínka pĜijetí definovaného poþtu bajtĤ do þasu nastaveného v menu - 32 -
„Interface / TimeOut“, program upozorní obsluhu na nekonzistenci dat a pĜejde do definovaného poþáteþního stavu, tedy do stavu textových dat pro terminál. Stlaþením tlaþítka „Measure“ pĜi souþasné volbČ „Single“ program odešle bajt s hodnotou „03“ na sériový port. Pokud je zvolena možnost „Continual“, po každém správném balíku dat pro zobrazovaþ (bajt 0x03 + poþet bajtĤ definovaný v „Samples“) program znovu vysílá bajt 0x03. “
Obr. 4.18
Ukázka programu NRM Display v režimu „Oscilloscope“
Obr. 4.19
Ukázka programu NRM Display v režimu „Logic Analyzer“ - 33 -
5
Hardware „Testovací modul“
5.1
Mikroprocesor ATmega8
Jak již bylo zmínČno v kap. 2, zabývající se problematikou Ĝešení pĜípravku Testovacího modulu, byl pro tuto práci vybrán mikroprocesor ATmega8 firmy Atmel. ATmega8 je nízkopĜíkonový osmi-bitový mikroprocesor, který provádí své instrukce v jednom až tĜí hodinových cyklech.
Základní vlastnosti mikroprocesoru ATmega8 : -
instrukþní soubor obsahuje 130 instrukcí
-
obsahuje 32 registrĤ délky 8 bitĤ
-
hodinový kmitoþet až 16MHz, zabudovaný RC oscilátor až 8MHz
-
tĜi vstupnČ/výstupní porty, z toho dva jsou osmi-bitové a jeden sedmi-bitový, celkem tedy 23 programovatelných vstupĤ/výstupĤ
-
pamČĢ programu je tvoĜena zabudovanou Flash, které kapacita je 8KB a poþet pĜeprogramování je 10 000 cyklĤ
-
512 bajtĤ EEPROM, které poþet možných pĜeprogramování je 100 000 cyklĤ
-
datová pamČĢ SRAM kapacity 1KB
-
dva osmi-bitové a jeden šestnácti-bitový þítaþ/þasovaþ
-
tĜi PWM kanály
-
šesti-kanálový deseti-bitový AD pĜevodník
-
jednotky USART, TWI, SPI
-
jednotka Watchdog Timer
-
napájecí napČtí 2,7-5,5 V (ATmega8L) nebo 4,5-5,5 V (ATmega8)
- 34 -
Obr. 5.1 Rozložení vývodĤ mikroprocesoru ATmega8 (PDIP 28)
5.2
Napálení programu do mikroprocesoru
Mikroprocesory ATmega8 je možné programovat paralelnČ, nebo pomocí SPI rozhraní, tj. sériovČ. V dnešní dobČ je na trhu znaþné množství rĤzných programátorĤ a emulátorĤ, které jsou univerzální pro programování více druhĤ mikroprocesorĤ. Ukázkový
pĜípravek
Testovacího
modulu byl
naprogramován
sériovČ,
pomocí
programátoru „PRESTO“, k nČmuž je dodáván software „UP“. Vstup programátoru PRESTO se pĜes USB pĜipojí k PC a výstup pĜes konektor ISP (In-System Programming) k programované souþástce(viz obr. 5.2).
Obr. 5.2 Blokové schéma programování Testovacího modulu
- 35 -
K programovanému mikroprocesoru se musí pĜipojit nČkolik málo souþástek podle schématu uvedeném ve firemním návodu (viz obr. 5.3). PĜi programování není možné využívat vnitĜní RC-oscilátor, k mikroprocesoru se musí pĜipojit externí krystal.
Obr. 5.3
PĜipojení programátoru PRESTO k programované souþástce
PĜed samotným naprogramováním je potĜeba pro konkrétní mikroprocesor nastavit nČkolik parametrĤ, oznaþovaných jako „pojistky“ (viz kap. 5.3). Ukázku nastavení pojistek je možné vidČt na obr. 5.4 .
Obr. 5.4 Ukázka nastavení pojistek pĜed naprogramováním mikroprocesoru ATmega8
- 36 -
5.3
Popis nastavených pojistek
Lock bits : Nastavení „Lock bits“ umožĖuje tĜi typy ochrany pamČti : 1: není aktivována žádna ochrana 2: zákaz programování Flash a EEPROM 3: zákaz programování a þtení Flash a EEPROM – nastavení této ochrany zamezuje možnosti zpČtné verifikace programu, brání tedy neoprávnČnému kopírování navrženého programu. Testovací modul nemá pojistkou „Lock bits“ aktivovanou žádnou ochranu ! Boot Lock bits 0 : UmožĖují nastavit omezení aplikaþní sekci Flash pro instrukce SMP (zápis do pamČti programu) a LPM (þtení pamČti programu). Boot Lock bits 1 : UmožĖují nastavit omezení boot sekci Flash pro instrukce SMP (zápis do pamČti programu) a LPM (þtení pamČti programu). Testovací modul nemá pojistkami „Lock bits 0, Lock bits 1“ aktivovanou žádnou ochranu ! BODLEVEL : Umožní nastavit úroveĖ detektoru výpadku napájení. Na výbČr jsou hodnoty „2,7V“a „4V“ BODEN : Ovládá detektor výpadku napájení. Detektor mĤže být aktivován nebo deaktivován CKOPT : Nastavení oscilátoru – pomocná volba spojená se synchronizaþním zdrojem CKSEL : Volí zdroj synchronizace. Na výbČr jsou vnČjší krystal nebo rezonátor, vnČjší nízkofrekvenþní krystal, vnČjší RC oscilátor, kalibrovaný vnitĜní RC oscilátor nebo vnČjší hodiny. SUT : UmožĖuje nastavit volbu startovací prodlevy pĜi probuzení mikroprocesoru - 37 -
RSTDISBL : Umožní nastavit, zda-li se bude pin1 mikroprocesoru ATmega8 používat pro RESET, nebo bude používán jako vstupnČ/výstupní pin WDTON : UmožĖuje nastavení povolení funkce Watchdog Timer EESAVE : Je-li tato propojka naprogramována, je obsah EEPROM pamČti zachován i po vykonání instrukce smazání þipu BOOTRST : Je-li tato propojka naprogramována, jsou vektory pĜerušení a resetu umístČny do boot loader sekce a ne do aplikaþní sekce Flash BOOTSZ : UmožĖuje nastavení velikosti boot loader sekce. Na výbČr jsou hodnoty {128, 256, 512 a 1024}
5.4
Oživení pĜípravku a pĜipojení k poþítaþi
PĜípravek Testovací modul ke své správné funkci potĜebuje pĜipojení napájecího napČtí „+5V a 0V“ ze stabilizovaného zdroje (viz obr. 5.6). Podle nastavených pojistek „SUT, CKSEL“ (viz kap. 5.3) mĤže pĜípravek pro generaci své taktovací frekvence využívat vnitĜní RC oscilátor, nebo se mĤže na vstupy mikroprocesoru „XTAL1, XTAL2“ pĜipojit externí krystal se dvČma kondenzátory. Správné splnČní zmínČných podmínek je plnČ dostaþující k oživení pĜípravku. Zadání Testovacího modulu pĜedpokládá co nejjednodušší zapojení mikroprocesoru. Byla proto využita možnost nastavení pojistek pro využití vnitĜního RC oscilátoru, kde není potĜeba pro bČh mikroprocesoru použít žádné externí souþástky. Je však vhodné, dokonce žádoucí, co nejblíže k vývodĤm mikroprocesoru pro napájecí napČtí pĜipojit vnČjší blokovací kondenzátor. Použití blokovacího kondenzátoru je nutné kvĤli mikroprocesorem odebíraným proudovým špiþkám. Doporuþená hodnota blokovacího kondenzátoru je ĜádovČ v jednotkách až desítkách µF.
- 38 -
Rozhodnutí mezi použitím externího krystalu, nebo použitím vnitĜního RC oscilátoru pĜed naprogramováním je na samotném uživateli . PĜi použití externího krystalu je mnohem pĜesnČjší generace hodinového kmitoþtu a mikroprocesory ATmega8 umožĖují pracovat s vnČjším pĜipojeným krystalem až na frekvenci 16MHz. Použití vnitĜního RC oscilátoru je výhodné z hlediska jednoduššího zapojení pĜípravku. To ale pĜináší nevýhodu ménČ pĜesné generace hodinového kmitoþtu (výrobce udává nepĜesnost ±3%) a také možnost maximální možné generace hodinového kmitoþtu pouze 8MHz. RC oscilátor je ale výrobcem nakalibrován a nepĜesnost ±3% pĜi používání nastaveného USART-u není pĜekážkou. Použít externí krystal je tedy nutné pouze v pĜípadČ, že uživatel požaduje pĜesnou generaci frekvence mikroprocesorem. Testovací modul komunikuje s poþítaþem pĜes sériový port. Aby byla komunikace možná, je potĜebné zapojit vývody USART-u „RXD, TXD“ na vstup integrovaného obvodu ADM232 nebo MAX232 a jeho výstup pĜipojit pomocí sériové linky k poþítaþi (viz obr. 5.5). Integrovaný obvod ADM232 (MAX232) plní funkci nábojové pumpy využívající pĜipojených kondenzátorĤ. Mikroprocesor využívá pro svĤj bČh pouze +5V a 0V. Sériová linka je standardem definovaná na úrovnČ „+3V až +15V“ pro logickou nulu a „-3V až -15V“ pro logickou jedniþku. Tyto hodnoty nám správnČ zabezpeþí jíž zmínČný integrovaný obvod ADM232 (MAX232). PĜi oživování je zde možnost toto, relativnČ nároþnČjší zapojení, obejít jednodušším zapojením CMOS logického obvodu NAND (viz obr. 5.6). Není to ale z hlediska normy pro sériový port správné zapojení. Také nemusí ve všech pĜípadech fungovat správnČ.
Obr. 5.5
Zapojení integrovaného obvodu ADM232
- 39 -
Obr. 5.6
Ukázka možného zapojení Testovacího modulu (verze1) pĜi oživování
Komunikaci Testovacího modulu s poþítaþem zabezpeþuje program Hyperterminál. V programu Hyperterminál je potĜeba nastavit nČkteré parametry, aby byla komunikace mezi poþítaþem a Testovacím modulem úspČšná. Ty se nastaví po prvém spuštČní, kdy se program Hyperterminál dotáže na název nového pĜipojení. Poté je potĜeba nastavit „PĜipojit pomocí“, kde se zadá COM-port, na kterém bude komunikace probíhat. NáslednČ se nastaví „komunikaþní rychlost“, „poþet datových bitĤ“, „parita“, „poþet stop bitĤ“ a „Ĝízení toku“. Pod zadaným názvem se komunikaþní nastavení uloží.
- 40 -
5.5
Nastavení programu Hyperterminál
Program Hyperterminál se spouští v operaþním systému Windows následovnČ: „Start – všechny programy – pĜíslušenství – komunikace – Hyperterminál“ Jak již bylo zmínČno, pĜípravek komunikuje s poþítaþem pomocí sériového portu. Uživatel pĜi nastavování „PĜipojit pomocí“ zvolí COM-port, na který v poþítaþi pĜipojí sériový kabel. NovČjší poþítaþe v dnešní dobČ zpravidla sériový port neobsahují, nicménČ se bČžnČ dají sehnat pĜevodníky USB-RS232. Po pĜipojení pĜevodníku k USB v poþítaþi, je pĜiĜazeno pĜevodníku þíslo COM-portu. Aby uživatel toto þíslo zjistil, staþí když v ovládacích panelech Windows, podsložce „Systém – hardware - správce zaĜízení – porty(COM a LPT)“ vyhledá, který COM-port je pĜiĜazen pĜevodníku a v programu Hyperterminálu se daný COM-port nastaví pro komunikaci s Testovacím modulem. Dále je potĜeba nastavit : - pĜenosová rychlost = 9600Bd - poþet datových bitĤ = 8 - parita = žádná - stop bit = 1 - Ĝízení toku = žádná
Obr. 5.7
Ukázka nastavení programu Hyperterminál - 41 -
6
Klávesové zkratky používané v Testovacím modulu
Podprogramy pracující s výstupy OUT0-OUT3
„i, I“
-
inkrementace
„d, D“ -
dekrementace
„L“
-
nastaví pĜíznak pro zadávání stavu logické nuly (pĜednastavená hodnota po zapnutí)
„H“
-
nastaví pĜíznak pro zadávání stavu logické jedniþky
„0“
-
na pinu OUT0 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„1“
-
na pinu OUT1 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„2“
-
na pinu OUT2 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„3“
-
na pinu OUT3 se nastaví poslednČ zadaný pĜíznak logické úrovnČ
„p, P“
-
rotace krokového motoru doprava
„o, O“ -
rotace krokového motoru doleva
„u, U“ -
uvolnČní výstupních pinĤ krokovému motoru a jeho aktivace
„z, Z“
deaktivace krokového motoru
-
Simulace inkrementálního snímaþe – výstupy MOU0,MOU1
„q“
–
rotace doleva jednorázová - „single mode“
„Q“
–
rotace doleva kontinuální - „continual mode“
„w“
–
rotace doprava jednorázová - „single mode“
„W“
–
rotace doprava kontinuální - „continual mode“
„e, E“
–
ukonþení generování a vynulování výstupĤ
Osciloskop / rychlý logický analyzátor
„s, S“
–
povolení funkce osciloskopu (pĜednastaveno po zapnutí nebo restartu)
„a, A“
–
povolení funkce rychlého logického analyzátoru
- 42 -
7
ZávČr Po zhodnocení funkþnosti pĜípravku „Testovacího modulu“ lze konstatovat, že pĜípravek
funguje správnČ. SplnČní cílĤ bakaláĜské práce, kromČ programu pro nadĜazené PC, bylo tedy úspČšnČ zvládnuto. Program „Zobrazovaþ“ v prĤbČhu vypracování této bakaláĜské práce již vyvinul Ing. Ondrej Pribula. Proto byla snaha místo programování jiného zobrazovacího programu zamČĜena na dopracování více rĤzných generátorĤ pro Testovací modul. Výsledkem této práce není nalezení nČþeho, co ještČ vymyšleno nebylo. Na trhu je velké množství mČĜících pĜístrojĤ a generátorĤ frekvence, pracujících navíc s mnohem vČtší pĜesností. V praxi se ale ukazuje, že þasto je potĜeba k otestování své aplikace použít napĜíklad pouze jediný puls, nebo naopak specielní posloupnost pulsĤ, což ani mnohé profesionální generátory nedokáží. Testovací modul kromČ rĤzných generátorĤ umí mČĜit logické úrovnČ a napČtí, což jej po jednoduchém pĜipojení do testované aplikace dČlá univerzálním testovacím pĜípravkem. V dnešní dobČ je cena mikroprocesoru ATmega8 použitého pro tuto práci hodnČ nízká, pohybuje se ĜádovČ v desetikorunách, což se nedá porovnávat s cenou originálních mČĜících pĜístrojĤ a generátorĤ. Snažil jsem se udČlat pĜípravek Testovacího modulu takový, aby jeho použití a pĜipojení k testovaným aplikacím bylo co nejjednodušší a ovládání intuitivní. Mnohdy se ale až v praxi ukáží rĤzné nedostatky, nevhodné nebo nedostaþující parametry funkcí, které je potĜeba doladit þi pĜedČlat, proto jsem pĜislíbil vedoucímu mé bakaláĜské práce Ing. Janu Fischerovi, že po zjištČní nedostatkĤ se je budu snažit odstranit. Doufám, že tento pĜípravek bude mít na cviþeních s mikroprocesorovou technikou pozitivní uplatnČní a pro studenty bude pĜínosem spoþívajícím v ulehþení práce pĜi oživování a testování svých aplikací. MĤj zájem o mikroprocesorovou techniku se projevil již pĜed léty, pĜesto jsem se s ní prakticky seznámil až pĜi tvorbČ bakaláĜské práce a osvojil jsem si ji natolik, že kromČ aplikace v bakaláĜské práci, jsem ji použil také ve vlastních návrzích a v zamČstnání. ýeština není mĤj rodní jazyk, ale jelikož studuji na þeské univerzitČ a v ýeské republice jsem už pČt let, napsal jsem tuto bakaláĜskou práci v þeském jazyce. JeštČ jednou dČkuji všem, kteĜí mi pomohli se zvládnutím þeské gramatiky pĜi psaní této práce.
- 43 -
Seznam použité literatury : [1] [2] [3] [4] [5]
Vedral J., Fischer J.: Elektronické obvody pro mČĜící techniku, Vydavatelství ýVUT, Praha 2004, ISBN 80-01-02966-2 Matoušek D.: Práce s mikrokontroléry ATMEL ATmega16, Nakladatelství BEN, Praha 2006, ISBN 80-7300-174-8 Atmel: data sheet ATmega8 (http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf) Atmel: 8-bit AVR Instruction set (http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF) stránky katedry mČĜení ýVUT, FEL, NRM Display (http://measure.feld.cvut.cz/cs/vyuka/predmety/x38nrp/NRMDisplay)
Použitý software : [a] [b] [c]
Atmel AVR Studio 4 Asix UP PRESTO zobrazovaþ NRM Display vytvoĜený Ing. Onrejom Pribulou
Seznam pĜíloh na CD: Program Testovacího modulu ve tvaru assembler source „testModul.asm“ a v pĜeloženém hexadecimálním tvaru „testModul.hex“ Program generátoru ve tvaru assembler source „generator.asm“ a v pĜeloženém hexadecimálním tvaru „generator.hex“
- 44 -