Obsah:

Úvod do ADC v mikrokontroléri AVR - pre začiatočníkov: 14 krokov
Úvod do ADC v mikrokontroléri AVR - pre začiatočníkov: 14 krokov

Video: Úvod do ADC v mikrokontroléri AVR - pre začiatočníkov: 14 krokov

Video: Úvod do ADC v mikrokontroléri AVR - pre začiatočníkov: 14 krokov
Video: XLoader - upload strojového kódu (.hex) - Ethernet termostat - Arduino Uno 2024, Júl
Anonim
Úvod do ADC v mikrokontroléri AVR | pre začiatočníkov
Úvod do ADC v mikrokontroléri AVR | pre začiatočníkov

V tomto návode sa dozviete všetko o ADC v mikrokontroléri AVR

Krok 1: Čo je to ADC?

ADC alebo analógovo -digitálny prevodník umožňuje prevod analógového napätia na digitálnu hodnotu, ktorú môže použiť mikrokontrolér. Existuje mnoho zdrojov analógových signálov, ktoré by sa dali merať. K dispozícii sú iba analógové snímače, ktoré merajú teplotu, intenzitu svetla, vzdialenosť, polohu a silu.

Krok 2: Ako funguje ADC v mikrokontroléri AVR

AVR ADC umožňuje mikrokontroléru AVR prevádzať analógové napätie na digitálne hodnoty s niekoľkými až žiadnymi externými časťami. ATmega8 má 10-bitový ADC s postupnou aproximáciou. ATmega8 má 7-kanálový ADC v PortC. ADC má samostatný analógový kolík napájacieho napätia AVCC. AVCC sa nesmie líšiť od VCC o viac ako ± 0,3 V. Referencia napätia môže byť externe oddelená na kolíku AREF. Ako referenčná hodnota napätia sa používa AVCC. ADC je možné tiež nastaviť tak, aby bežal nepretržite (voľne spustený režim) alebo aby vykonával iba jednu konverziu.

Krok 3: Konverzný vzorec ADC

Konverzný vzorec ADC
Konverzný vzorec ADC

Kde Vin je napätie na zvolenom vstupnom pine a Vref zvolená referenčná hodnota napätia

Krok 4: Ako nakonfigurovať ADC v ATmega8?

Ako nakonfigurovať ADC v ATmega8?
Ako nakonfigurovať ADC v ATmega8?

Nasledujúce registre sa používajú na implementáciu ADC v ATmega8

Výber multiplexora ADC

Krok 5: Výber ADLAR

Výber ADLAR
Výber ADLAR
Výber ADLAR
Výber ADLAR

Výsledok nastavenia doľava ADC Bit ADLAR ovplyvňuje prezentáciu výsledku prevodu ADC v registri údajov ADC. Napíšte jeden do ADLARU a upravte výsledok vľavo. V opačnom prípade je výsledok upravený správne

Keď je konverzia ADC dokončená, výsledok sa nájde v ADCH a ADCL Keď sa číta ADCL, register údajov ADC sa neaktualizuje, kým sa neprečíta ADCH. V dôsledku toho, ak je výsledok ponechaný upravený a nie je potrebná viac ako 8-bitová presnosť, stačí prečítať ADCH. V opačnom prípade je potrebné najskôr prečítať ADCL a potom ADCH. Bity výberu analógového kanála Hodnota týchto bitov určuje, ktoré analógové vstupy sú pripojené k ADC.

Krok 6: Výber ADCSRA

Výber ADCSRA
Výber ADCSRA
Výber ADCSRA
Výber ADCSRA

• Bit 7 - ADEN: Povolenie ADC Zapísaním tohto bitu na jeden sa povolí ADC. Keď ho napíšete na nulu, ADC sa vypne

• Bit 6 - ADSC: Spustenie konverzie ADC V režime jednoduchej konverzie zapíšte tento bit do jednej, aby sa spustila každá konverzia. V režime voľného spustenia zapíšte tento bit do jednej a začnite prvú konverziu.

• Bit 5 - ADFR: Voľne spustený ADC Vyberte Ak je tento bit nastavený (jeden), ADC pracuje v režime voľného chodu. V tomto režime ADC priebežne vzorkuje a aktualizuje dátové registre. Vymazaním tohto bitu (nula) ukončíte režim voľného chodu.

• Bit 4 - ADIF: príznak prerušenia ADC Tento bit je nastavený, keď sa dokončí konverzia ADC a aktualizujú sa dátové registre. Prerušenie úplnej konverzie ADC sa vykoná, ak sú nastavené bity ADIE a I-bit v SREG. ADIF je vymazaný hardvérom pri vykonávaní zodpovedajúceho vektora spracovania prerušenia. Alternatívne sa ADIF vymaže zapísaním logického znaku do vlajky.

• Bit 3-ADIE: Povolenie prerušenia ADC Keď je tento bit zapísaný do jedničky a je nastavený I-bit v SREG, aktivuje sa prerušenie prerušenia ADC.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Podľa technického listu je potrebné tento prescalar nastaviť tak, aby bola vstupná frekvencia ADC medzi 50 KHz a 200 KHz. Hodiny ADC sú odvodené od systémových hodín pomocou ADPS2: 0 Tieto bity určujú deliaci faktor medzi frekvenciou XTAL a vstupnými hodinami do ADC.

Krok 7: Ak chcete získať hodnotu ADC, budete potrebovať prácu, ktorá je uvedená nižšie

  • Nastavte hodnotu ADC
  • Konfigurujte výstupný LED kolík
  • Konfigurujte hardvér ADC
  • Povoliť ADC
  • Začnite analógovo -digitálne konverzie
  • KEDY navždy

AK je hodnota ADC vyššia ako nastavená hodnota, rozsvieťte LED INAK Vypnite LED

Krok 8: Nastavte hodnotu ADC

Kód: uint8_t ADCValue = 128;

Krok 9: Konfigurujte pin LED výstupu

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

Krok 10: Konfigurujte hardvér ADC

Konfigurujte hardvér ADC

To sa deje nastavením bitov v riadiacich registroch pre ADC. Najprv si nastavme predkallar pre ADC. Podľa údajového listu je potrebné tento preskalár nastaviť tak, aby bola vstupná frekvencia ADC medzi 50 KHz a 200 KHz. Hodiny ADC sú odvodené od systémových hodín. Pri systémovej frekvencii 1 MHz bude predzvárač 8 mať za následok frekvenciu ADC 125 Khz. Predbežné meranie je nastavené bitmi ADPS v registri ADCSRA. Podľa údajového listu musia byť všetky tri bity ADPS2: 0 nastavené na 011, aby sa získal 8 predzosilňovačov.

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

Ďalej nastavíme referenčné napätie ADC. Toto je riadené bitmi REFS v registri ADMUX. Nasledujúce nastavenie referenčného napätia na AVCC.

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

Na nastavenie kanála prechádzajúceho multiplexorom do ADC je potrebné zodpovedajúcim spôsobom nastaviť bity MUX v registri ADMUX. Pretože tu používame ADC5

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

Aby ste ADC uviedli do voľného režimu, nastavte vhodne pomenovaný bit ADFR v registri ADCSRA:

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

Vykoná sa posledná zmena nastavení, aby bolo čítanie hodnoty ADC jednoduchšie. Aj keď má ADC rozlíšenie 10 bitov, tento počet informácií často nie je potrebný. Táto 10 -bitová hodnota je rozdelená do dvoch 8 -bitových registrov, ADCH a ADCL. V predvolenom nastavení sa v ADCL nachádza najnižších 8 bitov hodnoty ADC, pričom horné dva sú najnižšie dva bity ADCH. Nastavením bitu ADLAR v registri ADMUX môžeme zarovnať hodnotu ADC doľava. To dáva najvyšších 8 bitov merania do registra ADCH, zvyšok do registra ADCL. Ak potom prečítame register ADCH, dostaneme 8 -bitovú hodnotu, ktorá predstavuje naše 0 až 5 voltové meranie ako číslo od 0 do 255. V zásade premieňame naše 10 -bitové meranie ADC na 8 -bitové. Tu je kód na nastavenie bitu ADLAR:

Kód:

ADMUX | = (1 << ADLAR); Tým je v tomto prípade dokončené nastavenie hardvéru ADC. Predtým, ako ADC začne merať, je potrebné nastaviť ďalšie dva bity.

Krok 11: Povoľte ADC

Ak chcete povoliť ADC, nastavte v ADCSRA bit ADEN:

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

Krok 12: Spustite analógovo -digitálne konverzie

Na spustenie meraní ADC je potrebné nastaviť bit ADSC v ADCSRA:

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

V tomto mieste by ADC začal nepretržite vzorkovať napätie uvedené na ADC5. Kód do tohto bodu bude vyzerať takto:

Krok 13: KEDY NAVŽDY

Jediná vec, ktorú musíte urobiť, je otestovať hodnotu ADC a nastaviť diódy LED tak, aby zobrazovali indikáciu vysokej / nízkej hodnoty. Pretože čítanie ADC v ADCH má maximálnu hodnotu 255, bola zvolená testovacia hodnota th, aby sa určilo, či bolo napätie vysoké alebo nízke. Jednoduchý príkaz IF/ELSE v slučkách FOR nám umožní zapnúť správnu LED diódu:

Kód

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Zapnite LED

}

inak

{

PORTB & = ~ (1 << PB0); // Vypnite LED

}

Krok 14: Na konci je kompletný kód

Kód:

#zahrnúť

int main (prázdny)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Nastaviť LED1 ako výstup

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Nastavte ADC prekalar na 8 - // 125KHz vzorkovaciu frekvenciu 1MHz

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

ADMUX | = (1 << ADLAR); // Upravte výsledok ADC doľava, aby ste umožnili ľahké 8 -bitové čítanie

ADMUX & = 0xF0;

ADMUX | = 5; // Na používanie ADC0 bolo potrebné zmeniť hodnoty MUX

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

ADCSRA | = (1 << ADEN); // Povoliť ADC

ADCSRA | = (1 << ADSC); // Spustite A2D konverzie, kým (1) // Navždy budete slučkou

{

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Zapnite LED1

}

inak

{

PORTE & = ~ (1 << PB1); // Vypnite LED1

}

}

návrat 0;

}

Najprv zverejnite tento návod Kliknite sem

Odporúča: