Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:examples:sensor:potentiometer [2015/02/26 12:51] – raivo.sell | et:examples:sensor:potentiometer [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
~~PB~~ | <pagebreak> |
====== Potentsiomeeter ====== | ====== Potentsiomeeter ====== |
| |
| |
===== Praktika ===== | ===== Praktika ===== |
[{{ :examples:sensor:pote.png?200|Pööratav potentsiomeeter}}] | [{{ :examples:sensor:pote.png?250|Pööratav potentsiomeeter}}] |
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: | 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: |
| |
| |
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. |
~~PB~~ | |
Järgnevad teegifunktsioonide näited on toodu ATmega2561 ADC muunduri kohta. | Järgnevad teegifunktsioonide näited on toodud ATmega2561 ADC muunduri kohta. |
| |
<code c> | <code c> |
| |
// Robootika Kodulabor II | // Robootika Kodulabor II |
// #define ADC_CHANNEL 3 | //#define ADC_CHANNEL 3 |
| |
// Robootika Kodulabor III | // Robootika Kodulabor III |
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 |
| |
// Näidu sajandike näitamine | // Näidu sajandike näitamine |
//Kodulabor II | // Kodulabor II |
//segment_display_write(value * 10 / 1024); | //segment_display_write(value * 10 / 1024); |
//Kodulabor III | // Kodulabor III |
segment_display_write(value * 10 / 2048); | segment_display_write(value * 10 / 2048); |
} | } |
} | } |
</code> | </code> |