This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:avr:adc [2010/02/11 14:50] – mikk.leini | et:avr:adc [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Analoog-digitaalmuundur ====== | ====== Analoog-digitaalmuundur ====== | ||
- | Analoog-digitaalmuundur (inglise keeles //analog to digital converter//, | + | Analoog-digitaalmuundur (inglise keeles //analog to digital converter//, |
- | AVR ADC töötab võrdlusmeetodil (inglise keeles // | + | AVR ADC töötab võrdlusmeetodil (inglise keeles // |
- | Mõõtetulemust saab kasutaja lugeda 8- ja 10-bitisena. Kuna AVR on 8-bitine, siis ADC mõõteväärtuste jaoks on sel kaks 8-bitist registrit. Seadistustes saab määrata, kas 10-bitisest väärtusest 2 esimest või 2 viimast bitti lähevad eraldi registrisse. Kui eraldatakse 2 noorimat ehk tulemust vähem iseloomustavat bitti, saab mõõtetulemuse 8-bitisena lugeda - sellist kombinatsiooni nimetatakse vasak-asetusega mõõtetulemuseks (//left align//). Teistpidist kombinatsiooni, | + | Mõõtetulemust saab kasutaja lugeda 8- ja 10(12)-bitisena. Kuna AVR on 8-bitine, siis ADC mõõteväärtuste jaoks on sel kaks 8-bitist registrit. Seadistustes saab määrata, kas 10-bitisest väärtusest 2 esimest või 2 viimast bitti lähevad eraldi registrisse. Kui eraldatakse 2 noorimat ehk tulemust vähem iseloomustavat bitti, saab mõõtetulemuse 8-bitisena lugeda - sellist kombinatsiooni nimetatakse vasak-asetusega mõõtetulemuseks (inglise keeles |
+ | |||
+ | Mõõdetavaid analoogpinge sisendkanaleid on AVR-idel tavaliselt 8, ATtiny seerial üksikud, mõnel ATmega seeria kiibil 16, kuid muundureid on tavaliselt üks. AVR xmega seeria kontrolleritel võib olla muundureid ka kaks. Erinevate sisendite kasutamiseks on kiibis multiplekser. Multiplekseri sisend on spetsiaalse registriga määratav. ADC üksusel on veel mõned omadused: muundamine protsessori magamisrežiimis müra vähendamiseks ja sisemise fikseeritud võrdluspinge (2,56 V, mõnel ka 1 V) kasutamise võimalus. | ||
- | Mõõdetavaid analoogpinge sisendkanaleid on AVR-idel tavaliselt 8, ATtiny seerial üksikud, mõnel ATmega seeria kiibil 16, kuid muundureid on siiski üks. Erinevate sisendite kasutamiseks on kiibis multiplekser. Multiplekseri sisend on spetsiaalse registriga määratav. ADC üksusel on veel mõned omadused: muundamine protsessori magamisrežiimis müra vähendamiseks ja sisemise fikseeritud võrdluspinge (2,56 V, mõnel ka 1 V) kasutamise võimalus. | ||
<box 100% round # | <box 100% round # | ||
Line 16: | Line 17: | ||
#include < | #include < | ||
- | int main() | + | int main(void) |
{ | { | ||
unsigned char result; | unsigned char result; | ||
- | // Võrdluspingeks AREF viigu valimine | + | // Võrdluspingeks AREF viigu valimine (eeldatavasti on see ühendatud |
- | // (eeldatavasti on see ühendatud | + | |
// Multiplekseriga kanali 3 valimine | // Multiplekseriga kanali 3 valimine | ||
// Tulemus on vasak-asetusega | // Tulemus on vasak-asetusega | ||
Line 35: | Line 35: | ||
// 8-bitise tulemuse lugemine | // 8-bitise tulemuse lugemine | ||
result = ADCH; | result = ADCH; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vaja on mõõta ATxmega128A1U ADC viigu 3 pinget kasutades ADCA muunduri kanalit CH0 vahemikus 0-2 V (Vcc/1.6) 8-bitise täpsusega. Märgiga lugemist kasutatakse selleks, et sisendpinge 0 V läheduses tagastaks ka 0 V ADC mõõtetulemusena. | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | unsigned char result; | ||
+ | // Seadista ADCA lugema märgiga tulemit 8-bitise resolutsiooniga | ||
+ | ADCA.CTRLB = (ADC_CONMODE_bm|ADC_RESOLUTION_8BIT_gc); | ||
+ | // Seadista ADCA pingevõrdluseks VCC/1.6 pinge | ||
+ | ADCA.REFCTRL = (ADC_REFSEL_VCC_gc); | ||
+ | // Seadista ADCA taktsagedusega F_CPU/32 | ||
+ | ADCA.PRESCALER = (ADC_PRESCALER_DIV32_gc); | ||
+ | // Seadista ADCA kanal 0 lugema vaid üht sisendit | ||
+ | ADCA.CH0.CTRL = (ADC_CH_INPUTMODE_SINGLEENDED_gc); | ||
+ | // Seadista ADCA kanal 0 lugema viiku ADC3 | ||
+ | ADCA.CH0.MUXCTRL = (ADC_CH_MUXPOS_PIN3_gc); | ||
+ | |||
+ | // Käivita ADCA | ||
+ | ADCA.CTRLB |= (ADC_ENABLE_bm); | ||
+ | // Alusta lugemit kanalis CH0 | ||
+ | ADCA.CH0.CTRL |= (ADC_CH_START_bm); | ||
+ | // Oota, kuni CH0 on lõpetanud lugemise | ||
+ | while((ADCA.CH0.INTFLAGS & ADC_CH_CHIF_bm) != 0x01); | ||
+ | |||
+ | // Loe tulemus | ||
+ | result = ADCA.CH0RES; | ||
} | } | ||
</ | </ | ||
</ | </ |