User Manual
89
Příklady:
uint16_t ubat = readADC(ADC_BAT);
uint16_t iMotorR = readADC(ADC_MCURRENT_R);
uint16_t iMotorL = readADC(ADC_MCURRENT_L);
uint16_t lsL = readADC(ADC_LS_L);
uint16_t lsR = readADC(ADC_LS_R);
uint16_t free_adc0 = readADC(ADC_ADC0);
uint16_t free_adc1 = readADC(ADC_ADC1);
if(ubat < 580)
writeString_P("Warning! Low battery level!");
Jako reference se používá základní napájecí napětí 5 V, ale funkce se může modifikovat tak, že
se použije vnitřní referenční napětí 2,56V obvodu ATmega32 (viz katalogový list MEGA32).
Standardní snímače RP6 to obvykle nepotřebují.
Před dalším zpracováním ADC výstupu se provede posloupnost několika měření, výsledky se
uloží do pole a vypočítá střední nebo minimální/maximální hodnota.
Zpracování několika hodnot může snížit chybu měření. Předpokládáme, že metoda “střední
hodnoty” je například potřeba při měření napětí baterie. Napětí baterie se velmi mění podle
zátěže, zvláště při změně podmínek zatížení vlivem motorů.
Analogicky můžeme snímače nárazníků realizovat pomocí ADC měření a v hlavním programu
jednoduše použít pohodlnou funkci:
void task_ADC(void)
která během krátkého času vyhodnotí všechny ADC kanály. Volání této funkce provede
postupné čtení všech ADC kanálů “na pozadí” (tím se ušetří čas, měření se automaticky spustí i
přečte...) a výsledky se uloží v předem definovaných proměnných.
Každé ADC měření vyžaduje určitý čas a funkce readADC může blokovat průběh programu.
Vlstní měření nepotřebuje programový zásah, během tohoto času můžeme provádět něco
jiného (ADC je samostatný hardwarový modul).
Měření z jednotlivých kanálů se uloží do následujících 16-bitových proměnných, které mohou
být kdykoliv použity na libovolném místě programu:
ADC_BAT: adcBat
ADC_MCURRENT_L: adcMotorCurrentLeft
ADC_MCURRENT_R: adcMotorCurrentRightADC_LS_L: adcLSL
ADC_LS_R: adcLSR
ADC_ADC0: adc0
ADC_ADC1: adc1
Jak vidíte, na rozdíl od funkce readADC, musíte při volání funkce task_ADC() používat tyto
proměnné.