Obsah:

Úvod do ADC v mikrokontroléru AVR - pro začátečníky: 14 kroků
Úvod do ADC v mikrokontroléru AVR - pro začátečníky: 14 kroků

Video: Úvod do ADC v mikrokontroléru AVR - pro začátečníky: 14 kroků

Video: Úvod do ADC v mikrokontroléru AVR - pro začátečníky: 14 kroků
Video: Úvod do programování AVR v jazyce C - Díl 1: Co je AVR, co je Arduino, práce s pamětí 2024, Listopad
Anonim
Úvod do ADC v mikrokontroléru AVR | pro začátečníky
Úvod do ADC v mikrokontroléru AVR | pro začátečníky

V tomto tutoriálu se dozvíte vše o ADC v mikrokontroléru AVR

Krok 1: Co je to ADC?

Převodník ADC nebo analogový digitální převodník umožňuje převést analogové napětí na digitální hodnotu, kterou může použít mikrokontrolér. Existuje mnoho zdrojů analogových signálů, které by člověk rád měřil. K dispozici jsou analogové senzory, které měří teplotu, intenzitu světla, vzdálenost, polohu a sílu, abychom jmenovali alespoň některé.

Krok 2: Jak funguje ADC v mikrokontroléru AVR

AVR ADC umožňuje mikrokontroléru AVR převádět analogová napětí na digitální hodnoty s několika až žádnými externími částmi. ATmega8 je vybaven 10bitovým postupným přibližováním ADC. ATmega8 má 7kanálový ADC na PortC. ADC má samostatný analogový napájecí napájecí kolík AVCC. AVCC se nesmí lišit o více než ± 0,3 V od VCC. Napěťová reference může být externě odpojena na pinu AREF. Jako referenční napětí se používá AVCC. ADC lze také nastavit tak, aby běžel nepřetržitě (režim s volným provozem) nebo aby prováděl pouze jednu konverzi.

Krok 3: Převodní vzorec ADC

Převodní vzorec ADC
Převodní vzorec ADC

Kde Vin je napětí na vybraném vstupním pinu a Vref zvolené referenční napětí

Krok 4: Jak konfigurovat ADC v ATmega8?

Jak konfigurovat ADC v ATmega8?
Jak konfigurovat ADC v ATmega8?

K implementaci ADC v ATmega8 se používají následující registry

Výběr multiplexeru ADC

Krok 5: Výběr ADLAR

Výběr ADLAR
Výběr ADLAR
Výběr ADLAR
Výběr ADLAR

Výsledek úpravy levého ADC Bit ADLAR ovlivňuje prezentaci výsledku převodu ADC v datovém registru ADC. Napište jeden do ADLAR a upravte výsledek vlevo. Jinak je výsledek upraven správně

Po dokončení převodu ADC je výsledek nalezen v ADCH a ADCL Při čtení ADCL není registr dat ADC aktualizován, dokud není načten ADCH. V důsledku toho, pokud je výsledek ponechán upravený a není požadována více než 8bitová přesnost, stačí přečíst ADCH. Jinak je nutné nejprve přečíst ADCL, pak ADCH. Bity pro výběr analogového kanálu Hodnota těchto bitů určuje, které analogové vstupy jsou připojeny k ADC.

Krok 6: Výběr ADCSRA

Výběr ADCSRA
Výběr ADCSRA
Výběr ADCSRA
Výběr ADCSRA

• Bit 7 - ADEN: Povolení ADC Zapisováním tohoto bitu do jednoho povolíte ADC. Zapisováním na nulu se ADC vypne

• Bit 6 - ADSC: Zahájení převodu ADC V režimu jednoduché převodu zapište tento bit do jednoho, abyste zahájili každou konverzi. V režimu Free Running zapište tento bit do jednoho, abyste zahájili první převod.

• Bit 5 - ADFR: Volný běh ADC Vyberte Pokud je tento bit nastaven (jeden), ADC pracuje v režimu volného provozu. V tomto režimu ADC průběžně vzorkuje a aktualizuje datové registry. Vymazáním tohoto bitu (nula) ukončíte režim Free Running.

• Bit 4 - ADIF: Příznak přerušení ADC Tento bit je nastaven po dokončení převodu ADC a aktualizaci datových registrů. ADC Conversion Complete Interrupt se provede, pokud je nastaven bit ADIE a I-bit v SREG. ADIF je vymazán hardwarem při provádění příslušného vektoru zpracování přerušení. Alternativně je ADIF vymazán zapsáním logické jedničky do vlajky.

• Bit 3-ADIE: Povolit přerušení ADC Je-li tento bit zapsán do jedničky a je nastaven I-bit v SREG, aktivuje se přerušení ADC Conversion Complete.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Podle datasheetu je třeba tento prescalar nastavit tak, aby vstupní frekvence ADC byla mezi 50 KHz a 200 KHz. Hodiny ADC jsou odvozeny od systémových hodin pomocí ADPS2: 0 Tyto bity určují dělící faktor mezi frekvencí XTAL a vstupními hodinami do ADC.

Krok 7: Pokud chcete získat hodnotu ADC, budete potřebovat nějakou práci, která je uvedena níže

  • Nastavte hodnotu ADC
  • Konfigurace výstupního LED pinu
  • Konfigurujte hardware ADC
  • Povolit ADC
  • Spusťte analogově digitální převod
  • KDYŽ navždy

IF ADC Value Higher then Set value, Turn on LED ELSE Turn Off LED

Krok 8: Nastavte hodnotu ADC

Kód: uint8_t ADCValue = 128;

Krok 9: Konfigurace výstupu LED dioda

Kód: DDRB | = (1 << PB1);

Krok 10: Konfigurace hardwaru ADC

Konfigurujte hardware ADC

To se provádí nastavením bitů v řídicích registrech pro ADC. Nejprve nastavíme prescalar pro ADC. Podle datasheetu je třeba tento prescalar nastavit tak, aby byla vstupní frekvence ADC mezi 50 KHz a 200 KHz. Hodiny ADC jsou odvozeny od systémových hodin. Při systémové frekvenci 1MHz bude mít předzesilovač 8 za následek frekvenci ADC 125 Khz. Přednastavení je nastaveno pomocí bitů ADPS v registru ADCSRA. Podle datového listu musí být všechny tři bity ADPS2: 0 nastaveny na 011, aby se získal 8 předzesilovač.

Kód: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Dále nastavíme referenční napětí ADC. Toto je řízeno bity REFS v registru ADMUX. Následující nastavuje referenční napětí na AVCC.

Kód: ADMUX | = (1 << REFS0);

Chcete -li nastavit kanál procházející multiplexorem do ADC, je třeba odpovídajícím způsobem nastavit bity MUX v registru ADMUX. Protože zde používáme ADC5

Kód: ADMUX & = 0xF0; ADMUX | = 5;

Chcete-li přepnout ADC do volného provozu, nastavte vhodně pojmenovaný bit ADFR v registru ADCSRA:

Kód: ADCSRA | = (1 << ADFR);

Provede se poslední změna nastavení, aby bylo čtení hodnoty ADC jednodušší. Ačkoli ADC má rozlišení 10 bitů, tolik informací často není nutné. Tato 10bitová hodnota je rozdělena do dvou 8bitových registrů, ADCH a ADCL. Ve výchozím nastavení se v ADCL nachází nejnižší 8 bitů hodnoty ADC, přičemž horní dva jsou nejnižší dva bity ADCH. Nastavením bitu ADLAR v registru ADMUX můžeme zarovnat hodnotu ADC doleva. Tím se do registru ADCH vloží nejvyšších 8 bitů měření, zbytek do registru ADCL. Pokud potom přečteme registr ADCH, dostaneme 8bitovou hodnotu, která představuje naše měření 0 až 5 voltů jako číslo od 0 do 255. V zásadě měníme naše 10bitové měření ADC na 8bitové. Zde je kód pro nastavení bitu ADLAR:

Kód:

ADMUX | = (1 << ADLAR); Tím je v tomto případě dokončeno nastavení hardwaru ADC. Než začne ADC provádět měření, je třeba nastavit další dva bity.

Krok 11: Povolte ADC

Chcete -li povolit ADC, nastavte bit ADEN v ADCSRA:

Kód: ADCSRA | = (1 << ADEN);

Krok 12: Spusťte analogově digitální převod

Chcete -li zahájit měření ADC, je třeba v ADCSRA nastavit bit ADSC:

Kód: ADCSRA | = (1 << ADSC);

V tomto okamžiku by ADC začal nepřetržitě vzorkovat napětí uvedené na ADC5. Kód k tomuto bodu by vypadal takto:

Krok 13: KDYŽ navždy

Jediné, co musíte udělat, je otestovat hodnotu ADC a nastavit diody LED tak, aby zobrazovaly indikaci vysoké / nízké hodnoty. Protože čtení ADC v ADCH má maximální hodnotu 255, byla vybrána testovací hodnota th, aby se určilo, zda bylo napětí vysoké nebo nízké. Jednoduchý příkaz IF/ELSE ve smyčkách FOR nám umožní rozsvítit správnou LED:

Kód

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Zapněte LED

}

jiný

{

PORTB & = ~ (1 << PB0); // Vypněte LED

}

Krok 14: Na konci je kompletní kód

Kód:

#zahrnout

int main (neplatné)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Nastavit LED1 jako výstup

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Nastavte ADC prescalar na 8 - // 125KHz vzorkovací frekvence 1MHz

ADMUX | = (1 << REFS0); // Nastavit odkaz ADC na AVCC

ADMUX | = (1 << ADLAR); // Nastavení ADC doleva umožňuje snadné čtení 8 bitů

ADMUX & = 0xF0;

ADMUX | = 5; // Aby bylo možné použít ADC0, bylo třeba změnit hodnoty MUX

ADCSRA | = (1 << ADFR); // Nastavte ADC na Free-Running Mode

ADCSRA | = (1 << ADEN); // Povolit ADC

ADCSRA | = (1 << ADSC); // Zahajte A2D převody, zatímco (1) // Loop Forever

{

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Zapněte LED1

}

jiný

{

PORTE & = ~ (1 << PB1); // Vypněte LED1

}

}

návrat 0;

}

Nejprve publikovat tento návod Klikněte sem

Doporučuje: