Reklama

Základy ovládání mikrokontroléru ATmega(16/32) 8.díl – A/D převodník (1.část)

Úvod

  V tomto příspěvku se podíváme na další užitečnou vlastnost mikrokontroléru ATmega, a to je integrovaný A/D převodník. Popis a jednotlivé aplikace A/D převodníku budou rozděleny do více částí, kde mimo jiné taky bude možné stáhnout aplikaci jednoduchého voltmetru pro osobní počítač. Dnes se podíváme na základní popis A/D převodníku v mikrokontroléru ATmega.

Popis A/D převodníku

  Mikrokontrolér ATmega32 obsahuje 10bitový převodník s multiplexorem, kterým lze přepínat mezi osmi vstupy, zabudovanou referencí 1,22 V a analogovou nulou. Integrovaný A/D převodník je typu „sample and hold“, což znamená, že naměřenou hodnotu napětí drží do doby, než je provedeno nové měření. Maximální rychlost převodníku dosahuje až 15 kSPS. Pro určení reference lze použít tři hodnoty napětí, a to napětí na pinu AREF, napětí na pinu AUCC a napětí vnitřní reference 2,56 V. Napětí na pinu AUCC musí být připojeno na UCC. Pro měření pomocí A/D převodníku můžeme použít tři režimy: jednoduchý převod, automatické spouštění s různými zdroji a volný běh. Pomocí integrovaného A/D převodníku lze měřit napětí proti zemi, ale také diferenčně mezi piny mikrokontroléru ATmega.

 

  Pro správné nastavení měření pomocí A/D převodníku budeme potřebovat registry ADMUX, ADCSRA, ADCH:ADCL a SFIOR.

Popis registrů

  Jako první se zaměříme na registrový pár ADCH:ADCL, do kterého se ukládá výsledek převodu na základě nastavení bitu ADLAR v registru ADMUX. Pokud je nastaven bit ADLAR do stavu log. 0, tak je nutné přečíst registr ADCL a poté taky ADCH, protože pokud nepřečteme také registr ADCH, tak se nové hodnoty do ADCL nezapíší. Toto neplatí při stavu log. 1 bitu ADLAR.

 

  Dalším popisovaným registrem je registr ADMUX, kterým lze vybrat referenční hodnotu napětí, zarovnání výsledku a použitý měřící kanál. Popis jednotlivých bitů registru ADMUX ukazuje následující tabulka Tab. 1.

 

Tab. 1: Popis registru ADMUX

Pozice bitu Označení
7 – (nejvyšší váha) REFS1
6 REFS0
5 ADLAR
4 MUX4
3 MUX3
2 MUX2
1 MUX1
0 – (nejnižší váha) MUX0

 

  Referenci nastavujeme pomocí bitů REFS1 a REFS0. Jednotlivé nastavení referenčního napětí ukazuje následující tabulka Tab. 2. Ve všech případech by měl být na pin AREF připojený filtrační kondenzátor.

 

Tab. 2: Výběr referenčního napětí

REFS1 REFS0 Režim
0 0 Výběr reference AREF
0 1 Výběr reference AUCC
1 0 rezervováno
1 1 Vnitřní reference 2,56V

 

  Dalším bitem ADLAR řídíme zarovnání naměřené výsledné hodnoty A/D převodníku. Pokud nastavíme bit ADLAR do stavu log. 0, je použito zarovnání doprava, tzn. že jsou dva nejvyšší bity výsledku uloženy do dvou nejnižších bitů registru ADCH a zbytek je uložený v ADCL. Při stavu log. 1 je výsledek zarovnán doleva tzn. nejvyšší bity výsledku jsou uloženy do registru ADCH a dva nejnižší bity výsledku se uloží do dvou nejvyšších bitů registru ADCL.

 

  Poslední skupinou popisovaných bitů v registru ADMUX jsou bity MUX0MUX4 , které slouží k výběru měřeného kanálu a výběru režimu. Následující tabulka Tab. 3. ukazuje možnost nastavení pro měření napětí proti zemi.

 

Tab. 3: Výběr kanálu pro měření proti zemi

MUX4 MUX3 MUX2 MUX1 MUX0 Kanál
0 0 0 0 0 ADC0
0 0 0 0 1 ADC1
0 0 0 1 0 ADC2
0 0 0 1 1 ADC3
0 0 1 0 0 ADC4
0 0 1 0 1 ADC5
0 0 1 1 0 ADC6
0 0 1 1 1 ADC7

 

  Dále lze také měřit v diferenčním režimu. V tabulce Tab. 4. lze nalézt nastavení pro jednotlivé režimy. Režimy se ziskem 200 x nejsou garantovány pro pouzdro DIP.

 

Tab. 4: Výběr kanálu pro diferenční režim

MUX4 MUX3 MUX2 MUX1 MUX0 Neinvertující vstup Invertující vstup NZisk
0 1 0 0 0 ADC0 ADC0 10 x
0 1 0 0 1 ADC1 ADC0 10 x
0 1 0 1 0 ADC0 ADC0 200 x
0 1 0 1 1 ADC1 ADC0 200 x
0 1 1 0 0 ADC2 ADC2 10 x
0 1 1 0 1 ADC3 ADC2 10 x
0 1 1 1 0 ADC2 ADC2 200 x
0 1 1 1 1 ADC3 ADC2 200 x
1 0 0 0 0 ADC0 ADC1 1 x
1 0 0 0 1 ADC1 ADC1 1 x
1 0 0 1 0 ADC2 ADC1 1 x
1 0 0 1 1 ADC3 ADC1 1 x
1 0 1 0 0 ADC4 ADC1 1 x
1 0 1 0 1 ADC5 ADC1 1 x
1 0 1 1 0 ADC6 ADC1 1 x
1 0 1 1 1 ADC7 ADC1 1 x
1 1 0 0 0 ADC0 ADC2 1 x
1 1 0 0 1 ADC1 ADC2 1 x
1 1 0 1 0 ADC2 ADC2 1 x
1 1 0 1 1 ADC3 ADC2 1 x
1 1 1 0 0 ADC4 ADC2 1 x
1 1 1 0 1 ADC5 ADC2 1 x

 

  Při nastavování A/D převodníku budeme dále potřebovat registr ADCSRA. Popis jednotlivých bitů registru ADCSRA ukazuje tabulka Tab. 5.

 

Tab. 5: Popis registru ADCSRA

Pozice bitu Označení
7 – (nejvyšší váha) ADEN
6 ADSC
5 ADATE
4 ADIF
3 ADIE
2 ADPS2
1 ADPS1
0 – (nejnižší váha) ADPS0

 

  Pomocí nejvyššího bitu ADEN lze zapnout (nastavením log. 1) a vypnout (stav log. 0) A/D převodník. Dalším bitem ADSC je prováděn start A/D převodníku. Pokud je nastaven jednoduchý převod, musí se tento bit nastavit do stavu log. 1 před každým měřením. Naopak při režimu volného běhu je nutné tento bit nastavit do stavu log. 1 pouze před prvním měřením. První nastavení tohoto bitu způsobí tzv. rozšířený převod. Rozdíl mezi normálním a rozšířeným převodem je v délce trvání. Zatímco normální převod trvá 13 taktů frekvence A/D převodníku, tak rozšířený převod trvá 25 taktů vzorkovací frekvence A/D převodníku.

 

  Nastavením log. 1 do bitu ADATE aktivujeme automatické spouštění na základě některého zdroje přerušení. Pro výběr zdroje přerušení se používá registr SFIOR, a to konkrétně bity ADTS0ADTS2.

 

  Následující bity ADIF a ADIE jsou použity pro procesy po ukončení převodu. Bit ADIF informuje stavem log. 1 o ukončeném převodu a nových hodnotách v registrovém páru ADCH:ADCL. Pokud je také nastaven ADIE do stavu log. 1, provede se příslušné přerušení a automaticky se vynuluje bit ADIF. Pokud chceme vynulovat bit ADIF ručně, zapíšeme do tohoto bitu log. 1.

 

  Poslední trojice bitů ADPS0ADPS2 slouží k nastavení předděličky pro hodinový kmitočet A/D převodníku. V tabulce Tab. 6. je ukázáno nastavení jednotlivých dělících poměrů. Pro deseti-bitovou přesnost výsledku je nutné mít vzorkovací frekvenci nastavenou v rozsahu 50 až 200 kHz. Pokud budeme mít nastavené nižší rozlišení výsledku, lze zvolit vyšší vzorkovací frekvenci A/D převodníku, a to do maximální hodnoty 1 MHz.

 

Tab. 6: Nastavení předděličky pro A/D převodník

ADPS2 ADPS1 ADPS0 Dělící poměr fAD pro f = 16MHz
0 0 0 2 8 MHz
0 0 1 2 8 MHz
0 1 0 4 4 MHz
0 1 1 8 2 MHz
1 0 0 16 1 MHz
1 0 1 32 500 kHz
1 1 0 64 250 kHz
1 1 1 128 125 kHz

 

  Posledním popisovaným registrem je registr SFIOR, kterým je určen zdroj pro automatické spuštění A/D převodu. Automatický převod je spuštěn náběžnou hranou jednotlivého zdroje. Pokud přijde náběžná hrana ještě před dokončením předchozího převodu, tak je ignorována. K určení zdroje slouží tři bity ADTS0ADTS2. V tabulce Tab. 7. lze vidět umístění těchto bitů v registru SFIOR.

 

Tab. 7: Umístění bitů v registru SFIOR

Pozice bitu Označení
7 – (nejvyšší váha) ADTS2
6 ADTS1
5 ADTS0

 

  V tabulce Tab. 8. jsou popsány jednotlivé zdroje přerušení.

 

Tab. 8: Nastavení zdroje spouštění

Číslo bitu Označení Označení Označení
0 0 0 Volný běh
0 0 1 Analogový komparátor
0 1 0 Vnější vstup přerušení 0
0 1 1 Jednotka OC čítače/časovače 0
1 0 0 Přetečení čítače/časovače 0
1 0 1 Jednotka OCB čítače/časovače 1
1 1 0 Přetečení čítače/časovače 1
1 1 1 Jednotka IC čítače/časovače 1

 

  Výsledná hodnota registrů ADCH a ADCL po A/D převodu je dána vztahy pro:

 

    Měření proti zemi:      ADCH:ADCL = 1024 x (UVST/UREF)

    Diferenční měření:     ADCH:ADCL = G x 512 x ((UPOS – UNEG) / UREF)

 

  V příštím díle si ukážeme jednoduchý zdrojový kód pro měření napětí a následné zobrazení pomocí LED diod.

[1] ATMEL. 8-bit AVR Microcontroller with 16K Bytes In-System Programmable Flash. [online] citováno 3. Listopadu 2013. Dostupné na www: http://www.atmel.com/Images/doc2466.pdf
Jiné příspěvky v kategorii:

Základy ovládání mikrokontroléru ATmega(16/32) 1.díl – První kroky

Základy ovládání mikrokontroléru ATmega(16/32) 2. díl – Kompilace a krokování programu

Základy ovládání mikrokontroléru ATmega(16/32) 3.díl – Nahrání vytvořeného zdrojového kódu do mikrokontroléru

Základy ovládání mikrokontroléru ATmega(16/32) 4.díl – Ovládání vstupně/výstupních portů

Základy ovládání mikrokontroléru ATmega(16/32) 5.díl – Ošetření zákmitů na vstupním pinu mikrokontroléru

Základy ovládání mikrokontroléru ATmega(16/32) 6.díl – Externí přerušení

Základy ovládání mikrokontroléru ATmega(16/32) 7. díl – Jednoduchá elektronická hrací kostka

Základy ovládání mikrokontroléru ATmega(16/32) 9.díl – A/D převodník (2.část)

Základy ovládání mikrokontroléru ATmega(16/32) 10.díl – A/D převodník (3.část)

Základy ovládání mikrokontroléru ATmega(16/32) 11.díl – Čítač / Časovač (1.část – Základní popis)

Základy ovládání mikrokontroléru ATmega(16/32) 12.díl – Čítač / Časovač (2.část – Popis registrů)

Základy ovládání mikrokontroléru ATmega(16/32) 13.díl – Čítač / Časovač (3.část – Praktická ukázka)

Základy ovládání mikrokontroléru ATmega(16/32) 14.díl – Dvouřádkový LCD displej

Základy ovládání mikrokontroléru ATmega(16/32) 15.díl – Popis implementace komunikace I2C a EEPROM paměti 24LC512

Základy ovládání mikrokontroléru ATmega(16/32) 16.díl – Watchdog

Základy ovládání mikrokontroléru ATmega(16/32) 17.díl – Obsluha maticové klávesnice

Základy ovládání mikrokontroléru ATmega(16/32) 18.díl – Jednotka USART (1. část – Popis)

Základy ovládání mikrokontroléru ATmega(16/32) 19.díl – Jednotka USART (2. část – Praktická ukázka)

Základy ovládání mikrokontroléru ATmega(16/32) 20. díl – Generování audio signálu pomocí PWM

Základy ovládání mikrokontroléru ATmega(16/32) 21. díl – Analogový komparátor

Základy ovládání mikrokontroléru ATmega(16/32) 22. díl – Krokování programu v jazyce symbolických adres (JSA)
 
Tajned facebook
 

Za případné chyby v textu, ve zdrojovém kódě, nebo ve schématickém zapojení se omlouváme.
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.