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:examples:sensor:potentiometer [2014/10/09 07:35] raivo.sellet:examples:sensor:potentiometer [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Potentsiomeeter ====== ====== Potentsiomeeter ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:sensor]], [ELC] [[et:electronics:voltage_divider]], [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:segment_display]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:digi]], 
 +[ELC] [[et:electronics:voltage_divider]], 
 +[AVR] [[et:avr:adc]],  
 +[LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:segment_display]]//
  
 ===== Teooria ===== ===== Teooria =====
Line 9: Line 13:
  
 Potentsiomeeter on kolme kontaktiga muuttakisti, mille kahe äärmise kontakti vahel on fikseeritud takistus ja äärmiste ning keskmise kontakti vahel muutuv takistus. Potentsiomeeter on põhimõtteliselt ka pingejagur, kus takistid moodustuvad äärmiste kontaktide ja keskmise kontakti vahel. Potentsiomeetri (inglise keeles //potentiometer//) sünonüüm on reostaat (inglise keeles //rheostat//).  Potentsiomeeter on kolme kontaktiga muuttakisti, mille kahe äärmise kontakti vahel on fikseeritud takistus ja äärmiste ning keskmise kontakti vahel muutuv takistus. Potentsiomeeter on põhimõtteliselt ka pingejagur, kus takistid moodustuvad äärmiste kontaktide ja keskmise kontakti vahel. Potentsiomeetri (inglise keeles //potentiometer//) sünonüüm on reostaat (inglise keeles //rheostat//). 
- 
-[{{  :examples:sensor:potentiometer:sensor_potentiometer_turn.jpg?120|Pööratav potentsiomeeter}}] 
  
 Tüüpiline potentsiomeeter koosneb voolu juhtiva pinnaga takistist ja sellel liuglevast liikuvast kontaktist ehk liugurist. Mida lähemal on liugur takisti servale, seda väiksem on liuguri ja selle serva vaheline takistus ning vastupidi. Takisti rolli võib täita kas suure eritakistusega materjal või takistustraadist keritud mähis. Potentsiomeetreid on olemas nii lineaarse kui ka logaritmilise takistuse ja positsiooni suhtega. Suurem osa potentsiomeetritest on pööratavad (näide kõrvaloleval pildil), kuid eksisteerib ka liugtakisteid. Potentsiomeetrite eriliik on digitaalsed potentsiomeetrid, milles takistuse reguleerimine toimub mikroskeemi sees vastavalt juhtsignaalidele. Tüüpiline potentsiomeeter koosneb voolu juhtiva pinnaga takistist ja sellel liuglevast liikuvast kontaktist ehk liugurist. Mida lähemal on liugur takisti servale, seda väiksem on liuguri ja selle serva vaheline takistus ning vastupidi. Takisti rolli võib täita kas suure eritakistusega materjal või takistustraadist keritud mähis. Potentsiomeetreid on olemas nii lineaarse kui ka logaritmilise takistuse ja positsiooni suhtega. Suurem osa potentsiomeetritest on pööratavad (näide kõrvaloleval pildil), kuid eksisteerib ka liugtakisteid. Potentsiomeetrite eriliik on digitaalsed potentsiomeetrid, milles takistuse reguleerimine toimub mikroskeemi sees vastavalt juhtsignaalidele.
  
 ===== Praktika ===== ===== Praktika =====
- +[{{  :examples:sensor:pote.png?250|Pööratav potentsiomeeter}}] 
-Kodulabori moodulil asub pööratav potentsiomeeter. Potentsiomeeter on ühendatud maa ja mikrokontrolleri toite potentsiaalide vahele ning liugur ühendub mikrokontrolleri analoog-digitaalmuunduriga. Selliselt ühendatuna saab potentsiomeetri väljundpinget reguleerida vahemikus 0 V kuni toitepinge. Kui ka AVR-i analoog-digitaalmuunduri võrdluspinge võtta AVCC viigult, saab potentsiomeetri väljundpinge digitaalse väärtuse kogu selle reguleerimispiirkonna ulatuses. Kodulabor III puhul on maksimaalseks pingeks AVCC viigul 2.7 V kuid sisenditesse võib lasta kuni 3.3 V pinget. AVR ADC kasutamiseks on Kodulabori teegis kirjutatud järgmised funktsioonid:+Kodulabori moodulil asub pööratav 10 kΩ potentsiomeeter. Potentsiomeeter on ühendatud maa ja mikrokontrolleri toite potentsiaalide vahele ning liugur ühendub mikrokontrolleri analoog-digitaalmuunduriga (inglise keeles //analog digital converter//, lühend ADC). Selliselt ühendatuna saab potentsiomeetri väljundpinget reguleerida vahemikus 0 V kuni toitepinge. Kui ka AVR-i analoog-digitaalmuunduri võrdluspinge võtta AVCC viigult, saab potentsiomeetri väljundpinge digitaalse väärtuse kogu selle reguleerimispiirkonna ulatuses. Kodulabor III puhul on maksimaalseks pingeks AVCC viigul 2,7 V kuid sisenditesse võib lasta kuni 3,3 V pinget. AVR ADC kasutamiseks on Kodulabori teegis kirjutatud järgmised funktsioonid:
  
   * void adc_init(reference, prescale)    * void adc_init(reference, prescale) 
Line 24: Line 26:
  
 Funktsioon //adc_init// tuleb välja kutsuda programmi alguses, millega seatakse AVR-i ADC töövalmis. Valida tuleb võrdluspinge kas AREF või AVCC viigult või hoopis sisemine  pinge. Lisaks tuleb määrata muunduri töötakt, täpsemalt sagedusjaguri tegur, millega jagatakse läbi mikrokontrolleri töötakt. Kõrgema taktiga käib muundamine kiiremini, kuid võib kannatada mõõtmistäpsus. Mõõtmiseks on //adc_get_value// funktsioon, millega saab valida kanali ja mis tagastab 16-bitise täisarvuna 10-bitise (Kodulabor III puhul 11-bitise) mõõtmistulemuse. Mõõtmisfunktsioon on blokeeruv ehk see jääb ootama muundamise lõppu ja tagastab väärtuse alles siis, kui mõõtmine on tehtud.  Funktsioon //adc_init// tuleb välja kutsuda programmi alguses, millega seatakse AVR-i ADC töövalmis. Valida tuleb võrdluspinge kas AREF või AVCC viigult või hoopis sisemine  pinge. Lisaks tuleb määrata muunduri töötakt, täpsemalt sagedusjaguri tegur, millega jagatakse läbi mikrokontrolleri töötakt. Kõrgema taktiga käib muundamine kiiremini, kuid võib kannatada mõõtmistäpsus. Mõõtmiseks on //adc_get_value// funktsioon, millega saab valida kanali ja mis tagastab 16-bitise täisarvuna 10-bitise (Kodulabor III puhul 11-bitise) mõõtmistulemuse. Mõõtmisfunktsioon on blokeeruv ehk see jääb ootama muundamise lõppu ja tagastab väärtuse alles siis, kui mõõtmine on tehtud. 
 +
 +Järgnevad teegifunktsioonide näited on toodud ATmega2561 ADC muunduri kohta.
  
 <code c> <code c>
-// 
 // ADC käivitamine // ADC käivitamine
-// 
 void adc_init(adc_reference reference, adc_prescale prescale) void adc_init(adc_reference reference, adc_prescale prescale)
 { {
Line 38: Line 40:
 } }
  
-// 
 // ADC määratud kanali väärtuse muundamine // ADC määratud kanali väärtuse muundamine
-// 
 unsigned short adc_get_value(unsigned char channel) unsigned short adc_get_value(unsigned char channel)
 {  {
Line 53: Line 53:
  {  {
  asm volatile ("nop");  asm volatile ("nop");
-  }+ }
    
  // Tulemuse tagastamine  // Tulemuse tagastamine
Line 62: Line 62:
 Näiteprogrammis kasutatakse äsja selgitatud analoog-digitaalmuunduri ja 7-segmendilise LED numberindikaatori teeki. Analoog-digitaalmuunduri väärtus korrutatakse kümnega ja jagatakse 2048-ga, et saada väärtus vahemikus 0 kuni 9. Väärtus 10 ei saa tekkida, sest C-keeles arvutatakse jagatises täisosa väärtus, mitte ümardatud tulemus. Täpsema mõõtetulemuse saamiseks kasutatakse muunduri tulemuse keskmistamise funktsiooni. Tulemusena näitab töötav programm vastavalt potentsiomeetri asendile indikaatoril numbreid 0 kuni 9. Näiteprogrammis kasutatakse äsja selgitatud analoog-digitaalmuunduri ja 7-segmendilise LED numberindikaatori teeki. Analoog-digitaalmuunduri väärtus korrutatakse kümnega ja jagatakse 2048-ga, et saada väärtus vahemikus 0 kuni 9. Väärtus 10 ei saa tekkida, sest C-keeles arvutatakse jagatises täisosa väärtus, mitte ümardatud tulemus. Täpsema mõõtetulemuse saamiseks kasutatakse muunduri tulemuse keskmistamise funktsiooni. Tulemusena näitab töötav programm vastavalt potentsiomeetri asendile indikaatoril numbreid 0 kuni 9.
  
-Tähele tuleks panna seda, kuhu konkreetsel riistvaral potentsiomeetri analoogsisend on ühendatud. Näiteks on Kodulabor II Anduriplaadil see ühendatud analoogkanalisse 3, aga Kodulabor III Kasutajaliidese plaadil analoogkanalisse 15.+Tähele tuleks panna seda, kuhu konkreetsel riistvaral potentsiomeetri analoogsisend on ühendatud. Näiteks on Kodulabor II Andurimoodulil see ühendatud analoogkanalisse 3, aga Kodulabor III Kasutajaliidese moodulil analoogkanalisse 15.
  
 <code c> <code c>
-// +// Kodulabori potentsiomeetri näidisprogramm 
-// Kodulabori Andurite mooduli potentsiomeetri +// 7-segmendilisel numberindikaatoril kuvatakse potentsiomeetri asend
-// näidisprogramm. 7-segmendilisel numberindikaatoril +
-// kuvatakse potentsiomeetri asendit. +
-//+
 #include <homelab/adc.h> #include <homelab/adc.h>
 #include <homelab/module/segment_display.h> #include <homelab/module/segment_display.h>
Line 79: Line 76:
 #define ADC_CHANNEL 15 #define ADC_CHANNEL 15
  
-// 
 // Põhiprogramm // Põhiprogramm
-// 
 int main(void) int main(void)
 { {
  int value;  int value;
  
- // 7-segmendilise indikaatori seadistamine+ // 7-segmendilise numberindikaatori seadistamine
  segment_display_init();  segment_display_init();
  
  // ADC muunduri seadistamine  // ADC muunduri seadistamine
- adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);+ adc_init(ADC_REF_AVCC, ADC_PRESCALE_16);
  
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // Kanali 4-kordselt ümardatud väärtuse lugemine  // Kanali 4-kordselt ümardatud väärtuse lugemine
Line 99: Line 94:
  
  // Näidu sajandike näitamine  // Näidu sajandike näitamine
- segment_display_write(value * 10 / 2048); + // Kodulabor II
- //Kodulabor 2 puhul+
  //segment_display_write(value * 10 / 1024);  //segment_display_write(value * 10 / 1024);
 + // Kodulabor III
 + segment_display_write(value * 10 / 2048);
  }  }
 } }
 </code> </code>
et/examples/sensor/potentiometer.1412840129.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