logoAD7864-1                                                                     
Martin Samek                                                                             
SamekMar@seznam.cz                                                                     

Obsah:  
    1. Úvod
    2. AD7864-1
    3. Knihovna
        AD7864.h

        AD7864.c
    4. Zkouška rychlosti převodníku
    5. Závěr
    6. Přílohy
    7. Použitá literatura

 1. Úvod
   
Cílem tohoto projektu je vytvořit univerzální knihovnu pro procesory Atmel, které využívají externí analologově číslicový převodník AD7864-1, dále vytvořit krátký program demonstrující použití vytvořené knihovny a změřit možnou periodu vzorkování.
   

 2. AD7864-1
   
   
Obvod AD7864-1 je vysokorychlostní čtyřkanálový 12-bitový analogově číslicový převodník umožňující měřit napětí v rozsahu -5V až +5V nebo -10V až +10V. Rozsah měření může být pro každý kanál jiný. V jakém rozsahu bude možné na kanálu měřit, určuje propojení vstupních pinů jednotlivých kanálů. Na obr.1 je blokové schéma jednoho ze čtyř měřících kanálů obvodu AD7864-1.  Pro měření v rozsahu -5V až +5V je nutné piny VINA a VINB propojit a přivést měřené napětí na oba piny současně. Pro měření v rozsahu -10V až +10V se pin VINB připojí k zemi a měřené napětí se přivádí na pin VINA.


vstupni cast

Obr.1: Blokové schéma měřícího kanálu [1]

    Výběr kanálů, které budou převedeny, je možné provést dvěma způsoby a to buď softwarově nebo hardwarově. Blokové schéma části obvodu AD7864-1 pro výběr kanálů je na obr.2. Pro softwarový výběr kanálů je nutné na pin H/S SEL obvodu AD7864-1 přivést +5V a pro hardwarový výběr je nutné tento pin připojit k zemi. Je-li použit hardwarový výběr kanálu, pak to jaké kanály budou měřeny určuje úroveň napětí přivedená na piny SL1 až SL4 obvodu AD7864-1. Je-li pin připojen k +5V, bude daný kanál měřen, a naopak je-li pin připojen k zemi, daný kanál měřen nebude. Pokud je použit hardwarový výběr kanálu, musí být stav každého pinu SL1 až SL4 definován, tedy každý pin musí být připojen buď k +5V nebo k zemi. Je-li použit softwarový výběr kanálu, tak to které kanály budou měřeny, je odesíláno po paralelním rozhraní na bitech DB0 až DB3.


vyber

Obr.2: Vnitřní blokové schéma A/D převodníku pro výběr kanálů [1]

    Příklad připojení obvodu AD7864-1 k mikroprocesoru ATmega16 je na obr3. Naměřená 12-bitová data jsou do mikroprocesoru přenášena pomocí paralelního rozhraní DB0 - DB11. K řízení komunikace mezi mikroprocesorem a A/D převodníkem slouží signály ­/CS, ­/RD a /WR. Všechny tři signály mají klidovou úroveň v +5V tedy v logické úrovni 1. Stažením signálu /CS k nule dojde k výběru obvodu. Pokud je obvod vybrán a signál /RD je v nízké úrovni, dojde k zápisu naměřených dat na paralelním rozhraní A/D převodníku. Naopak pokud je obvod vybrán a signál /WR je v nízké úrovni, pak je obvod připraven na zápis dat. Zápis dat do převodníku je využit jen pro odeslání informace, které kanály mají být měřeny.


zapojeni

Obr.3: Propojení A/D převodníku s mikroprocesorem ATmega16


    Naměřená data je možné z obvodu AD7864-1 číst dvěma způsoby. Jeden ze způsobů jak číst data spočívá v tom, že výsledek převodu je čten po dokončení převodu daného kanálu a mezi tím je převáděn kanál další. Tento proces se opakuje, dokud nejsou převedeny všechny vybrané kanály. O ukončení převodu daného kanálu informuje signál /EOC, který je vhodné připojit na externí přerušení mikroprocesoru.
     Dle dokumentace výrobce trvá převod jednoho kanálů 1,65uS. Tedy při převodu všech čtyř kanálů budou vyvolána čtyři přerušení přibližně po 1,65uS. To je krátká doba na přijetí a uložení naměřených dat. Například mikroprocesor ATmega16 s krystalem 16MHz zvládne mezi jednotlivými přerušeními vykonat přibližně 26 instrukčních cyklů. Je třeba si uvědomit, že po vyvolání přerušení potřebuje mikroprocesor několik instrukčních cyklů k dokončení právě prováděné instrukce a k uložení návratové adresy. Dalších pár instrukčních cyklů zabere obsluha přerušení, v tomto případě přečtení a uložení naměřených dat. Po dokončení obsluhy přerušení je v několika instrukčních cyklech obnovena návratová adresa. Z předešlého je zřejmé, že pokud mikroprocesor stihne vykonat obsluhu přerušení, tedy přečíst a uložit naměřená data a nepromešká mezi tím další přerušení, tak nezbývá mnoho času na provedení dalších instrukcí mimo přerušení. Proto mi tento způsob čtení naměřených dat nepřipadá příliš vhodný pro mikroprocesory s malým výpočetním výkonem.
    Druhý způsob čtení dat z A/D převodníku je založen na čtení dat po dokončení převodu všech zvolených kanálů. O ukončení převodu všech kanálů informuje signál BUSY, který je vhodné připojit na externí přerušení mikroprocesoru. Tento způsob čtení je využit ve vytvořené knihovně pro A/D převodník. Vývoj signálů při čtení tímto způsobem pro kanály 1,2 a 4 je na obr.4. Po zahájení převodu stažením signálu /CONVST na nízkou úroveň dojde k nastavení signálu BUSY na vysokou úroveň. Na nízkou úroveň se vrátí po dokončení převodu všech zvolených kanálů. Pro čtení naměřených dat je nutné na pinech /CS a /RD generovat záporný pulz. Data jsou z převodníku odesílána vždy od nejnižšího převáděného kanálu. Například pokud je zvolen převod na 2 a 4 kanálu, tak při prvním čtení obvodu budou odeslána data z druhého kanálu a při dalším čtení odeslána data ze čtvrtého kanálu.



cteni

Obr.4: Časový diagram převodu a čtení dat [1]


3. Knihovna    
            Vytvořená knihovna byla testována na vývojové desce s mikroprocesor ATmega16 s krystalem o frekvenci 16MHz. Knihovna je složena ze souborů AD7864.c a AD7864.h. 
/***********************************************************************************************************************************
*                                           AD7864H -----< AD7864.h>-----                                                     *
************************************************************************************************************************************/ h    Pro správnou funkci knihovny je nutné v souboru AD7864.h definovat piny, které jsou použity pro komunikaci mezi mikroprocesorem a A/D převodníkem. Definice 12-bitového paralelního rozhraní je rozdělena na dvě části. Část kde se definuje osmice pinů (DB0-DB7), a část kde se definuje zbývající čtveřice pinů (DB8-DB11) paralelního rozhraní. Předpokládá se, že obě definice budou provedeny formou portu s tím, že nejnižší pin portu mikroprocesoru je připojen k nejnižšímu pinu paralelního rozhraní A/D převodníku. Dále je nutné definovat piny mikroprocesoru, které jsou použity jako signály /CS, /RD, /WR a /CONVST.
    Po definici komunikačního rozhraní zbývá říci programu jakým způsobem je proveden výběr měřených kanálu, a které kanály budou použity. Jakým způsobem je proveden výběr kanálů určuje nastavení definice 
HS_SEL. Pokud je HS_SEL 1, tak jsou kanály vybrány softwarově a pokud je  HS_SEL 0, tak jsou kanály vybrány hardwarově. Výběr měřených kanálu je prováděn nastavením definice SL1 až SL4 na jedničku nebo nulu. Pokud je SL nastaven na jedničku je daný kanál měřen. Pokud je SL nastaven na nulu, tak daný kanál měřen není. Nastavení SL1 až SL4 je nutné provést i v případě, že je používán hardwarový výběr kanálů.



























/***********************************************************************************************************************************

*                                    AD7864c  -----< AD7864.c>-----                                               *
************************************************************************************************************************************/
f  V souboru AD7864.c se nacházejí veškeré funkce, které jsou pro práci s A/D převodníkem potřeba. První funkce v tomto souboru je funkce ad_init, která se můsí volat jako první. Jedná se o funkci, která nastaví směry portů, tedy jestli mají být porty na vstup nebo na výstup a dále nastaví klidové úrovně jednotlivých signálů. Je-li použit mód převodník, kdy je výběr kanálů prováděn softwarově, je nutné jako další funkci volat funkci select_channel. Mohlo by se zdát, že funkce musí mít nějakou proměnnou jako vstup, která by určovala, které kanály mají být měřeny. Opak je ale pravdou. Pro zachování smysluplnosti celé knihovny jsou všechny definice ovlivněné zapojením a použitím převodníku uloženy v souboru AD7864.h, kde jsou uloženy i definice použitých kanálů (SL1 až SL4). Tyto definice jsou právě vstupem funkce select_chanel. Po provedení inicializace převodníku a po případném odeslání informace, které kanály mají být měřeny, je možné spustit převod. Převod je spouštěn funkcí start_convert. Tato funkce nedělá nic jiného, než že vygeneruje krátký záporný pulz na signálu /CONVST čímž dojde ke spuštění převodu. Téměř všechny signály jsou vzorkovány s určitou periodou. Proto bude tato funkce nejčastěji volána z přerušení čítače časovače odměřujícího periodu vzorkování.
    Jak již bylo řečeno výše, knihovna je uzpůsobena pro čtení dat po ukončení převodu všech zvolených kanálu. O tom, že byl převod všech kanálů dokončen informuje signál BUSY, který je připojen na externí přerušení mikroprocesoru. V programu tedy musí být definováno externí přerušení, ve kterém bude docházet ke čtení a uložení naměřených dat. Naměřená data jsou ukládána do pole data. Pole data má velikost čtyř 16-bitových čísel. Výsledky převodu jsou do pole ukládána následujícím způsobem:

data[0] = Kanál 0

data[1] = Kanál 1

data[2] = Kanál 2

data[3] = Kanál 3


Nezáleží přitom, zda je měřen jeden nebo více kanálů. Způsob uložení zůstane vždy stejný.
     Funkce, která uloží výsledky měření do pole data má název get_data. V této funkci je volána funkce na čtení portu read_port tolikrát, kolik je převáděno kanálů.
    Funkce read_port vrací výsledek měření přijatý po paralelním rozhraní mezi A/D převodníkem a mikroprocesorem. Protože je paralelní rozhraní A/D převodníku připojeno na dva porty mikroprocesoru, je nutné  přeskládat přijatá data na 16-bitové číslo.

    V sekci přílohy jsou ke stažení tři verze knihovny.  První verze nazvaná Knihovna obsahuje pouze soubory AD7864.c a AD7864.h. Soubor AD7864.c obsahuje pouze funkce pro práci s převodníkem. V souboru AD7864.h je nutné definovat komunikační rozhraní mezi A/D převodníkem a mikroprocesorem. Místa kde jsou potřeba provést definice jsou označena (...). 

    Další verze knihovny je ukázkový projekt (program). Jedná se o program, který změří všechny kanály a výsledky jednotlivých měření zobrazí na LCD displeji. Program je uzpůsoben pro školní vývojovou desku obsahující mikroprocesor ATmega16.

    Poslední verze knihovny je projekt (program). Jedná se o program, který je zobrazen v levé části této stránky. Je určen pro mikroprocesory ATmega16. V programu je předdefinována funkce main, nastavení externího přerušení, spuštění převodníku a přečtení naměřených dat. Jedná se o startovací program, který také nejlépe demonstruje nejvhodnější sled volání jednotlivých funkcí ze souboru AD7864.c. Funkci start_convert je nejvhodnější volat v přerušení  od čítače časovače odměřujícího přesnou periodu vzorkování.













































4. Zkouška rychlosti převodníku
       
Na základě vytvořené knihovny byla provedena zkouška maximální frekvence vzorkování na jednom až čtyřech kanálech. Z naměřených hodnot uvedených níže v tabulkách je patrné, že při hardwarovém výběru kanálu je možné dosáhnou vyšší vzorkovací frekvence než při softwarovém výběru kanálu. Tento výsledek byl ale očekáván. Protože při softwarovém výběru kanálu musí  docházet k zápisu dat do převodníku, které určují, na kterých kanálech bude převod prováděn. Z naměřených výsledků je dále patrná doba zápisu dat do A/D převodníku. Tato doba je přibližně 6,3us.
        Měření maximální vzorkovací frekvence probíhalo v idealizovaných podmínkách. Tedy v přerušení, které bylo vyvoláno dokončením převodu všech vybraných kanálů se přečetla a uložila naměřená data a znovu se spustil převod. Při využití mikroprocesoru s vyšším výpočetním výkonem by mohlo být dle mého odhadu dosaženo vzorkovací frekvence až kolem 300kHz-400kHz.
 

                                                                           Softwarový výběr kanálu:
Počet kanálů 1 2 3 4
Perioda vzorkování 22,60us 28,3us 37,4us 46,4us
Frekvence vzorkování 48,54kHz 43,46kHz 26,74kHz 21,60kHz

                                                                            Hardwarový výběr kanálu:
Počet kanálů 1 2 3 4
Perioda vzorkování 15,3us 22,6us 31,4us 40,1us
Frekvence vzorkování 65,36kHz 44,25kHz 31,85kHz 24,94kHz



5. Závěr:
       
Vytvořil jsem knihovnu určenou mikroprocesorům Atmel, které používají externí A/D převodník AD7864. Dále jsem vytvořil program demonstrující použití vytvořené knihovny. Z naměřených výsledků maximální vzorkovací frekvence vyplývá, že při použítí mikroprocesoru s vyšším výpočetním výkonem je možné použít převodník ke vzorkování  rychle se měnících signálů. Dle mého názoru bude A/D převodník ve většině případů používán v režimu hardwarového výběru kanálů, protože softwarový výběr kanálů zpomaluje mikroprocesor. 
   

6. Přílohy:
       
Datasheet převodníku AD7864
          Knihovna- Pouze soubory  AD7864.h a AD7864.c. Jen funkce pro práci s převodníkem a definice komunikačního rozhraní. V souboru AD7864.h je nutné na místech                                označených ... definovat komunikační rozhraní!
          Ukázkový program pro školní vývojovou desku s procesorem ATmega16 - Program měří všechny vstupy a zobrazuje naměřené hodnoty na LCD displeji
          Program s předdefinovaným externím přerušením a funkcí main - Program pro mikroprocesory ATmega16 s přednastaveným externím přerušením a funkcí main


7. Použitá literatura:

            [1]  AD7864 [online]. [s.l.] : Analog Devices, 2009 [cit. 2010-04-21]. Dostupné z WWW: <www.analog.com>.