Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:avr:adc [2010/02/11 14:50] mikk.leiniet: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//, lühend ADC) muundab analoogpinge väärtuse digitaalseks väärtuseks. AVR-i ADC analoogpinge sisend on lubatud 0-5,5 V piires. Digitaalne väärtus on 10-bitine, kuid selle täpsus on ±2 ühikut. Viga võib veelgi kasvada, kui kiibi toitepinget häirete eest ei kaitsta. ADC jaoks on AVR-il eraldi toite ja võrdluspinge viik. Eraldi toide on mürakindluse pärast ja see ei tohi kiibi toitepingest erineda rohkem kui 0,3 V. Võrdluspinge määrab maksimaalse digitaalse väärtuse. Ehk kui võrdluspinge on 3 V, siis sama pingega sisend annab väärtuseks 2<sup>10</sup> - 1 ehk 1023.+Analoog-digitaalmuundur (inglise keeles //analog to digital converter//, lühend ADC) muundab analoogpinge väärtuse digitaalseks väärtuseks. AVR-i ADC analoogpinge sisend on lubatud 0-toitepinge V piires. Digitaalne väärtus on 10-bitine, kuid selle täpsus on ±2 ühikut. Viga võib veelgi kasvada, kui kiibi toitepinget häirete eest ei kaitsta. ADC jaoks on AVR-il eraldi toite ja võrdluspinge viik. Eraldi toide on mürakindluse pärast ja see ei tohi kiibi toitepingest erineda rohkem kui 0,3 V. Võrdluspinge määrab maksimaalse digitaalse väärtuse. Ehk kui võrdluspinge on 3 V, siis sama pingega sisend annab väärtuseks 2<sup>10</sup> - 1 ehk 1023 (xmega kontrolleritel 2<sup>12</sup> - 1 ehk 4095).
  
-AVR ADC töötab võrdlusmeetodil (inglise keeles //successive approximation//). Lühidalt öeldes toimub mõõdetava pinge võrdlemine kindlate nivoopingetega ja tulemuste esitamine tõeväärtuste-, ehk bitijadana. See meetod on suhteliselt aeganõudev, sest iga biti leidmine lõppväärtuses toimub eraldi. AVR-il kulub töö ajal 13 takti ühe mõõtmise tegemiseks ja 25 takti kõige esimesel mõõtmisel (käivitusel). Need taktid pole aga kontrolleri töötaktid, vaid spetsiaalselt ADC üksuse jaoks sagedusjaguriga saadud taktid. Maksimaalse täpsuse saamiseks peaks ADC takt olema 50-200 kHz. Kõrgemal taktil kaob täpsus. Vahel on ka mõõtmiste suur arv olulisem kui täpsus ja siis on põhjendatud suurema sageduse kasutamine. Ühele mõõtmisele kuluvaks ajaks on AVR dokumentatsioonis antud 13-260 µs.+AVR ADC töötab võrdlusmeetodil (inglise keeles //successive approximation//). Lühidalt öeldes toimub mõõdetava pinge võrdlemine kindlate nivoopingetega ja tulemuste esitamine tõeväärtuste-, ehk bitijadana. See meetod on suhteliselt aeganõudev, sest iga biti leidmine lõppväärtuses toimub eraldi. AVR-il kulub töö ajal 13 takti ühe mõõtmise tegemiseks ja 25 takti kõige esimesel mõõtmisel (käivitusel). Need taktid pole aga kontrolleri töötaktid, vaid spetsiaalselt ADC üksuse jaoks sagedusjaguriga saadud taktid. Maksimaalse täpsuse saamiseks peaks ADC takt olema 50-125 kHz (xmega puhul 2 MHz). Kõrgemal taktil täpsus kaob. Vahel on mõõtmiste suur arv olulisem kui täpsus ja siis on suurema sageduse kasutamine põhjendatud
  
-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, kus kaht tulemusregistrit lugedes tekib 10-bitine arv, nimetatakse parem-asetusega mõõtetulemuseks (//right align//).+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 //left align//). Teistpidist kombinatsiooni, kus kaht tulemusregistrit lugedes tekib 10-bitine arv, nimetatakse parem-asetusega mõõtetulemuseks (inglise keeles //right align//)
 + 
 +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 #EEEEEE|Näide> <box 100% round #EEEEEE|Näide>
Line 16: Line 17:
 #include <avr/io.h> #include <avr/io.h>
  
-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 5 V toiteahelasse)
- //   (eeldatavasti on see ühendatud +5V toiteahelasse)+
  // 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;
 +}
 +</code>
 +
 +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 <avr/io.h>
 +
 +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;
 } }
 </code> </code>
  
 </box> </box>
et/avr/adc.1265899856.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0