Jste zde

AVR Osciloskop s mikroprocesorem ATmega16 a grafickým displejem 128 x 64 bodů s řadičem KS0108

010_07.png

Tato práce rozebírá možnosti návrhu jednoduchého mikroprocesorem řízeného osciloskopu, který využívá minimum externího hardwaru. Zaměřena je hlavně na softwarovou část, která se stará o správné vykreslení průběhu vstupního napětí na grafickém displeji s řadičem KS0108. Jsou zde analyzovány možné softwarové varianty s ohledem na dosažení co nejvyšší možné vzorkovací frekvence vnitřního převodníku ADC, na které závisí i maximální možný kmitočet vstupního signálu, jež osciloskop dokáže zobrazit.

Osciloskop není zrovna levným zařízením na poli laboratorních přístrojů, a proto si jej ne každý nadšenec pořídí domů. Cenově dostupné jsou pouze USB osciloskopy, které pro svou činnost vyžadují připojený počítač, což může být v některých případech značně nepraktické. AVR osciloskop by v tomto případě mohl být vzhledem k ceně pro domácí použití ideálním kandidátem.

OBSAH

Dostupný hardware, obvodové zapojení

Osciloskop byl tvořen na vývojové desce „Development Board ATmega16“, která slouží pro výukové účely v předmětech mikroprocesorové techniky na VUT v Brně. Jak již název napovídá vývojová deska je osazena mikroprocesorem AVR ATmega16. Zdroj hodinového signálu je zajištěn krystalem s frekvencí 16 MHz. Zapojení vývojové desky je dostupné na [1]. K vyvedeným portům mikroprocesoru je možné připojit kit grafického displeje 128 x 64 bodů s řadičem KS0108, který je použit jako zobrazovací jednotka. Vzhledem k zapojení vývojové desky je nutno kit zapojit vzhůru nohama (pootočit jej o 180°), aby byl uvolněn PORTA jakožto vstup integrovaného ADC převodníku. PORTB je pak využit pro řízení komunikace a PORTD pro data.

Mikroprocesor AVR ATmega16 a jeho integrovaný ADC

Hlavním parametrem každého digitálního osciloskopu je samplovací frekvence ADC převodníku. Ta udává, kolik vzorků umí osciloskop za jednotku času nasnímat a samozřejmě i zpracovat. Od samplovací frekvence je pak odvozena i maximální frekvence vstupního signálu, jakou osciloskop dokáže zpracovat a následně zobrazit.

Mikroprocesor ATmega16 má ADC převodník integrován přímo v sobě. Pro jeho správnou funkci je potřeba hodinového signálu o frekvenci 50 – 200 kHz [2]. Má-li hodinový signál vyšší frekvenci, je třeba zapnout interní předděličku, kterou lze nastavit v rozsahu 1 - 128 dle [2]. V případě krystalového oscilátoru s kmitočtem 16MHz je nutné nastavit předděličku na hodnotu 128.

Integrovaný ADC převodník je 10bitový. Vstupní napětí vzorkuje podle jiného referenčního napětí. Jako referenční napětí může být vzato interní referenční napětí, jehož velikost je Uref = 2,56 V nebo jakékoli jiné externí napětí přivedené na příslušný vstupní pin. Převodník potřebuje 25 hodinových cyklů k vygenerování prvního vzorku. Každý další vzorek vyžaduje již jen 13 hodinových cyklů. Samplovací frekvence interního ADC převodníku mikroprocesoru ATmega16 je fsampl = 9615 Hz. Výpočet lze ověřit dle vztahu (1): 

dosadíme-li za foscil = 16 MHz, P = 128 (předdělička) a S = 13 Hz/vzorek.

Podle Nyquist – Shannonova teorému (2) je nutné, aby byla vzorkovací frekvence fsampl 2x vyšší než nejvyšší kmitočet vzorkovaného vstupního signálu. U AVR osciloskopu je tedy možné dosáhnout šířky pásma B = 4807 Hz (0 – 4807 Hz).

Zpracování signálu – časová osa

Přichází v úvahu dvě varianty, jak zpracovávat vstupní signál. První logičtější možností je aktuálně zpracovaný vzorek signálu hned vykreslit na displej. V průběhu vykreslování by ADC převodník zpracovával vzorek následující. K jeho vykreslení by došlo neprodleně po dokončení konverze. Tento děj by se opakoval do doby, než by se dosáhlo konce displeje. Poté by se začalo vykreslovat opět od začátku a postupně by se přepisovaly staré vzorky. Výhodou této varianty je, že by osciloskop reagoval na změnu úrovně vstupního napětí vždy se stejným zpožděním, které by bylo dáno součtem doby konverze a vykreslení jednoho vzorku. Problémem této varianty je fakt, že vykreslování na displej trvá déle jak konverze jednoho vzorku, tudíž by docházelo ke značnému zpomalení celého chodu AVR osciloskopu a podstatě by se nevyužilo už tak dost pomalé samplovací frekvence. Navíc by tento fakt dále značně zkomplikoval ocejchování časové osy.

Další variantou je zpracované vzorky vstupního signálu ukládat do paměti (použito v této práci). Teprve po dosažení určitého počtu vzorků, který odpovídá horizontálnímu rozlišení displeje, dojde zaráz k vykreslení všech vzorků z paměti. Výhodou této varianty je skutečnost, že se plně využije rychlosti ADC převodníku, díky čemuž lze oproti první variantě vzorkovat vstupní signál s vyšší frekvencí. Čas jednoho vzorku je dán samplovací frekvencí, takže je jednoduché určit měřítko časové osy. Nevýhodou této varianty je fakt, že každý vzorek vykreslený na displeji bude opožděn oproti reálnému času více jak následující vykreslený vzorek. Časový rozdíl mezi prvním a posledním vzorkem je roven době konverze druhého až posledního vzorku. Časový posuv každého vzorku oproti reálnému času je dán součtem doby konverze daného vzorku, dobou konverzí následujících vzorků a dobou vykreslení všech vzorků. V době vykreslování vzorků z paměti na displej se vstupní signál nevzorkuje – vzniká okno.

Princip obou popsaných variant je naznačen na obrázku 1. Realizována je však pouze druhá varianta.

Obrázek 1: Metody vzorkování vstupního signálu
Rozlišení osy X
Čas jednoho vzorku je tvz = 100 µs dle vztahu (3):

Použitý displej s horizontálním rozlišením 128 bodů je rozdělen na dvě části. Prvních 100 bodů je vymezeno na zobrazování průběhu vstupního napětí, zbylých 28 bodů je vyhrazeno pro informační údaje (rozlišení os). Každému ze sta bodů na displeji je přidělen jeden vzorek vstupního napětí. Na displeji je tedy zobrazen časový úsek 10 ms.

Synchronizace (funkce TRIGGER)

Synchronizace osciloskopu je provedena na principu vyhledání prvního minima vstupního signálu. ADC převodník běží. Do paměti se uloží 100 vzorků, které se následně vykreslí na displej. Detekce minima proběhne ihned po vykreslení série vzorků z paměti na displej. Následujících série vzorků se začne do paměti ukládat právě od okamžiku, kdy vstupní signál projde lokálním minimem. Synchronizace způsobuje další náhodně dlouhé zpoždění, které zvětšuje prodlevu mezi zobrazenými vzorky na displeji a reálným časem. Toto zpoždění může dosahovat maximálně doby odpovídající jedné periodě vstupního signálu. Tento způsob sice není ideální, na druhou stranu je funkční a jednoduchý.

Možná lepším, ale nevyzkoušeným řešením by bylo detekovat minimum a maximum vstupního signálu a z těchto hodnot spočítat střední hodnotu. V době, kdy by se vstupní napětí přiblížilo této hodnotě zjistit, zdali jde o náběžnou či sestupnou hranu. Při jedné z nich (zvolené) provést synchronizaci.

Zpracování signálu – napěťová osa

Jelikož ADC převodník neumí pracovat se záporným napětím, je nutné vstup AVR osciloskopu vybavit obvodem, který posune vstupní signál do kladných hodnot (přidá DC složku). Náplní této práce však realizace takového obvodu nebyla, pro zkušební účely postačil RC generátor s možností nastavení offsetu.

Jako napěťová reference byl vybrán interním zdroj referenčního napětí Uref = 2,56 V. Vstupní napětí by nemělo překročit tuto hodnotu. Stane-li se tak, dojde k saturaci. Jak již bylo řečeno - ADC převodník je 10bitový a umí tedy rozlišit 1024 hladin. AVR procesory však mají pouze 8bitové pracovní registry a tudíž by bylo obtížné pracovat s tak velkými čísly. A vzhledem k tomu, že použitý displej umožňuje zobrazit „jen“ 64 bodů na výšku, je výhodné poslední dva bity nejmenší váhy zanedbat. Rozlišení osciloskopu je tím pádem sníženo pouze na 256 úrovní.

Rozlišení osy Y (funkce AUTO-SCALE)

Jedné rozlišovací úrovni odpovídá vstupní napětí Urozl = 0,01 V dle vztahu (4):

Použitý displej má vertikální rozlišovací schopnost 64 bodů. Celkový počet úrovní je 256. Jednomu bodu na displeji tedy odpovídají 4 rozlišovací úroveň. Aby nemuselo dojít k další pevné degradaci vertikálního rozlišení AVR osciloskopu zanedbáním dalších dvou bitů (vydělením čtyřmi), je tento problém ošetřen softwarově pomocí automatické volby měřítka. Při vstupním signálu, jehož velikost nepřesáhne 64. úroveň, odpovídá jednomu bodu na displeji jedna úroveň, tedy 0,01 V (rozsah 0 – 640 mV). Teprve až v případě, že vstupní napětí překročí 64. úroveň, sníží se rozlišovací schopnost osciloskopu na polovinu. Jednomu bodu budou odpovídat dvě úrovně, tedy 0,02V (rozsah 0 – 1,28 V). Další dělení dvěma nastane až při překročení 128. úrovně, která odpovídá napětí 1,28 V (rozsah pak bude 0 – 2,56 V). Tento jednoduchý „AUTO-SCALE“ umožní lepší pozorování menších signálů.

Vykreslování na displej

V případě, že by byla navzorkovaná data vykreslena na displej v podobě jednotlivých bodů, jejichž horizontální poloha by odpovídala času a vertikální poloha velikosti vstupního signálu, mohla by vykreslená křivka vypadat nespojitě v případě, že by došlo k rychlé změně vstupního napětí. Vstupní signál však nespojitý není, a proto bylo zvoleno vykreslovaní křivky pomocí úseček, jejichž počátek a konec určují souřadnice dvou sousedních vzorků.

Za účelem zlepšení přehlednosti je zobrazovací část displeje rozdělena sítí bodů. Tyto body vytváří rastr osciloskopu. Vertikální i horizontální rozlišení rastru je 10 bodů. Jednomu dílku rastru v horizontálním směru odpovídá čas 1 ms, ve směru vertikálním 0,1 V, 0,2 V nebo 0,4 V v závislosti na velikosti vstupního signálu. Informace o rozlišení jednotlivých os je uvedena v pravé části displeje, která je pro tato data vymezena. Ilustrační fotografie je možné vidět na obrázcích 2, 3 a 4.

Použitý grafický displej s řadičem KS0108 neobsahuje znakovou sadu ani žádné jiné grafické prvky. Pro vykreslení navzorkovaných dat a vypsání informací na displej byly použity speciální knihovny, které vytvořil v rámci bakalářské práce [3] student VUT v Brně.

Ukázkové fotografie

Obrázek 2: Ukázkové foto – pilovitý průběh vstupního napětí

Obrázek 3: Ukázkové foto – obdélníkovitý průběh vstupního napětí s úrovní nepřesahující 640 mV

Obrázek 4: Ukázkové foto – obdélníkovitý průběh vstupního napětí s úrovní přesahujících 640 mV

ZÁVĚR

V rámci tohoto projektu byly detailně analyzovány schopnosti mikroprocesoru AVR ATmega16 v roli jednoduchého osciloskopu. Důkladně bylo rozebráno hlavně získávání dat vzorkováním a samotné zpracování dat v podobě správného zobrazení.

Samplovací frekvence fsampl = 9615 Hz integrovaného ADC převodníku je pro použití v osciloskopu poměrně nízká. Na druhou stranu, ne vždy potřebujeme zobrazovat signály s frekvencí přesahující tyto možnosti. Takový osciloskop by uplatnění jistě našel například pro zobrazení signálu z různých čidel (seizmických) nebo pro zobrazení srdeční činnosti.

Vykreslování dat na grafickém displeji s řadičem KS0108 není pro mikroprocesor také zrovna jednoduchá záležitost. Tato činnost vyžaduje mnoho strojových cyklů. Je-li po mikroprocesoru požadováno, aby se zároveň věnoval i jiným činnostem, které nesnesou odklad, může nastat problém.

Další krok, jak tento jednoduchý osciloskop posunout blíže k ideálu, spočívá v připojení ovládacích prvků. Těmto prvkům se pak dají přiřazovat různé funkce, jako jsou kurzory, vyhledání minima/maxima, zobrazení frekvence/periody vstupního signálu, změna měřítka horizontální či vertikální osy, funkce „freeze“ nebo „auto-scale“. Jedná se pouze o matematické operace s navzorkovanými daty.

Součástí této práce je přiložený obslužný program mikroprocesoru včetně použitých knihoven. Detailní popis funkce programu je uveden formou komentářů přímo ve zdrojovém kódu. Funkce jednotlivých grafických knihoven je možné vyhledat v [3].

 

Projekt vznikl jako součást výuky předmětu MMIA - mikropočítače pro přístrojové aplikace na Ústavu radioelektroniky VUT v Brně

Odkazy

  • [1] FRÝZA, T. FEDRA, Z. ŠEBESTA, J. Mikroprocesorová technika: Skriptum pro laboratorní cvičení předmětu Mikroprocesorová technika. Brno: FEKT VUT v Brně, [cit. 22. Května 2009]. 50 s.
  • [2] ATMEL CORPORATION. AVR 8-Bit ATmega16A: Datasheet [online]. 06/2008. 352 stran, zde
  • [3] SKOPAL, M. Knihovna grafických prvků pro mikrokontroléry Atmel AVR a grafické displeje. Brno: Vysoké učení technické v Brně, Fakulta elektrotechniky a komunikačních technologií, 2008. 47 s.
PřílohaVelikost
Soubor Zdrojový kód 3.47 KB
Hodnocení článku: 

Komentáře

nesuhlasim s : "V rámci tohoto projektu byly detailně analyzovány schopnosti mikroprocesoru AVR ATmega16 v roli jednoduchého osciloskopu" -

1. sirka pasma by bola lepsia ak by ADC v tomto pripade pracoval na max. freq. - 200kHz a nie ako v tomto pripade 125kHz

2. z datasheetu: "If a lower resolution than 10bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate" - ak je vyzadovane nizsie rozlisenie ako 10bit (ako v tomto pripade), hodinovy signal moze byt dokonca vyssi ako 200kHz na dosiahnutie sirsieho pasma

To je sice asi fakt, ale když se to píše do školy, musí se tam nějaké tyhle bláboly nakydat. Obzvláště pak je nutné napsat o všem, že to bylo analyzováno. :))

No jo zase nějaký chytrák že :-) nemyslím autora ale komentátora