Využítí AD převodníku
V mnoha aplikacích jednočipových mikropočítačů se může hodit měření napětí, případně jiných veličin, které se dají na napětí převést. Jak už bylo uvedeno, výše procesor ATMEGA16 nám dává možnost měřit napětí zabudovaným AD převodníkem s postupnou aproximací o rozlišení až 10 bitů, což ve většině případů bohatě stačí. Mnohdy se dokonce spokojíme s nižším rozlišením a díky tomu získáme daleko větší rychlost převodu (menší doba nutná pro převod).
Než začneme s úvodem do použití AD převodníku, uvedeme si jeho základní vlastnosti:
- až 10ti bitové rozlišení
- nelinearita max. 0,5 LSB
- přesnost ± 2 LSB
- průměrný čas konverze 65 - 260 us (15 000 vzorků / s)
- celkem 8 možných vstupů (multiplexovaných)
- 7 rozdílových vstupů (2 s možností nastavení zisku)
- nastavitelné rozlišení
- vstupní napětí a reference v celém rozsahu napájení
- nastavitelná vnitřní reference 2,56V
- možnost volby mezi ručním spouštěním a kontinuálním během
- možnost spuštění přerušení po dokončení konverze
Začínáme s AD převodníkem
Pro řízení zabudovaného AD převodníku používáme několik speciálních registrů. Jedním z nich je registr AMUX. Rozložení řídících bitů registru si můžete prohlédnout na následujícím obrázku.Nyní si uvedeme význam jednotlivých bitů:
- REFS0, REFS1 slouží k výběru analogové reference.
0 0 vnější reference
0 1 AVCC (kondenzátor na AREF)
1 0 zatím bez významu
1 1 vnitřní 2,56 V
Pamatujte, že pokud připojujete vnitřní referenci, nesmí být na vývod AREF připojeno vnější napětí. Je ale nutné na tento vývod připojit kondenzátor.
- ADLAR slouží k nastavení zarovnání výsledku převodu. Je-li bit vynulován, je výsledek zarovnán standardně napravo. Je-li bit nastaven, pak je výsledek zarovnán doleva.
- MUX4 - MUX0 slouží k výběru kanálu. Může být vybrán jeden kanál, použitelný pro převod a nebo dva kanály, kde se převání rozdíl mezi úrovněmi napětí těchto kanálů.
Pokud tedy zvolíme hodnotu 0 - 7, pak je zvolen jeden z kanálů.
Pokud je nastavena hodnota 8 - 29 pak se převod koná na výsledku rozdílu mezi vybranými diferenčními kanály.
Hodnota 30 slouží pro přivedení napětí 1,22V na vstup převodníku a hodnota 31 přivede na vstup 0V. (AGND)
Dalším důležitým registrem je registr ADCSRA. Tento registr řídí převod a informuje nás o stavu převodu.
- ADEN - Zapíná a vypíná AD převodník. Pokud je prováděn převod, je ihned ukončen.
- ADSC - Začne s AD převodem na vybraném kanálu (nebo dvojici diferenčních kanálů. Čtením tohoto bitu také zjistíme v jakém stavu je převod. Pokud převod stále probíhá, je bit nastaven. Pokud je bit vynulován, byl převod dokončen.
- ADATE - Tento bit zajistí automatické spouštění vzniku nastaveného přerušení... Ukážeme si v příkladu.
- ADIF - příznak přerušení po dokončení AD převodu.
- ADIE - povolí přerušení od AD převodníku.
- ADPS2:ADPS0 - nastaví před-děličku hodin pro AD převodník. Dělicí faktor je 2,2,4,8,16,32,64,128.
Výsledek převodu se zapisuje do dvojice registrů. ADCH a ADCL. Hodnoto z těchto registrů musíme číst vždy v pořadí ADCL, ADCH, abychom měli jistotu, že čteme celou hodnotu z právě dokončeného AD převodu.
Jedním z dalších registrů, které obsahují bity pro nastavení funkce AD převodníku je registr SFIOR. Konkrétně se jedná o bity ADTS2:ADTS0. Tyto bity nastavují zdroj pro spuštění AD převodu. Připomeňme si, že musí být pro tento druh spuštění zároveň nastaven bit ADATE.
#include <mega16.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40
unsigned int read_adc(void)
{
ADMUX=0; // určí převáděný kanál
ADCSRA|=0x40; // odstartuje převod
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
{
unsigned int vysledek;
char retezec[5];
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x5F;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;
while (1)
{
float realne;
vysledek = read_adc();
realne = (float) 5.03 / 1023;
realne = (float) realne * vysledek;
ftoa(realne,2,retezec);
puts(retezec);
delay_ms(500);
};
}
Po spuštění odesílá program sériovou linkou procesoru údaje o naměřeném napětí. Přestože jsme si ještě sériovou komunikaci nepopisovali, je tento způsob vhodný pro právě pro ladění takovýchto aplikací a to nejen na procesoru AVR. Napětí přivádíme na pin PA.0.
Pro spojení s počítačem postačí obyčejný křížený kabel (RX-TX, TX-RX, GND). To platí pokud využíváte například vývojovou desku od PK-DESIGN. Parametry spojení nastavte na 9600 baud, 8 datových bitů, 1 stop bit, bez parity.
Popis sériového kanálu si uvedeme v přespříštím díle. Příště si ještě upřesníme některé informace okolo AD převodníku.
Komentovat článek
Komentáře k článku
Zdarek, ADCW jsou spojene registry ADCL a ADCH ve kterých je výsledek převodu.
Ahoj, pls mohl bys trosku vysvetlit ADCW? Pouzivas to ve funkci pro cteni z AD prevodniku. Nikde v datasheetu jsem takhle pojmenovanej bit ani registr nenasel. Diky

