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 [2014/02/20 12:07] raivo.sellet:avr:adc [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 3: Line 3:
 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). 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-125 kHz (xmega puhul 2 MHz). Kõrgemal taktil täpsus kaob. Vahel on mõõtmiste suur arv olulisemkui täpsus ja siis on suurema sageduse kasutamine põhjendatud. +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(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õõ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 muunureid 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 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.
  
-~~PB~~ 
  
 <box 100% round #EEEEEE|Näide> <box 100% round #EEEEEE|Näide>
Line 18: 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 40: Line 38:
 </code> </code>
  
-Vaja on mõõta ATXmega128A1U ADC viigu 3 pinget kasutades ADCA muundi kanalit CH0 vahemikus 0-2V (Vcc/1.6) 8-bitise täpsusega. Märgiga lugemist kasutatakse selleks, et sisendpinge 0V läheduses tagastaks ka 0V ADC mõõtetulemusena.+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> <code c>
 #include <avr/io.h> #include <avr/io.h>
  
-int main()+int main(void)
 { {
  unsigned char result;  unsigned char result;
Line 61: Line 59:
  // Käivita ADCA  // Käivita ADCA
  ADCA.CTRLB |= (ADC_ENABLE_bm);  ADCA.CTRLB |= (ADC_ENABLE_bm);
- 
  // Alusta lugemit kanalis CH0  // Alusta lugemit kanalis CH0
  ADCA.CH0.CTRL |= (ADC_CH_START_bm);  ADCA.CH0.CTRL |= (ADC_CH_START_bm);
- 
  // Oota, kuni CH0 on lõpetanud lugemise  // Oota, kuni CH0 on lõpetanud lugemise
  while((ADCA.CH0.INTFLAGS & ADC_CH_CHIF_bm) != 0x01);  while((ADCA.CH0.INTFLAGS & ADC_CH_CHIF_bm) != 0x01);
et/avr/adc.1392898051.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