This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:sensor:thermistor [2014/09/12 11:22] – Kodulabor3 tugi heikopikner | et:examples:sensor:thermistor [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| ====== Termistor ====== | ====== Termistor ====== | ||
| - | //Vajalikud teadmised: | + | //Vajalikud teadmised: |
| + | [HW] [[et: | ||
| + | [ELC] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| - | [{{ : | + | [{{ : |
| Termistor on takisti, mille takistus muutub temperatuuriga. Termistore on kahte liiki: positiivse ja negatiivse temperatuuri koefitsiendiga. Positiivse koefitsiendiga termistori takistus temperatuuri tõustes kasvab ja negatiivsel väheneb. Vastavad lühendatud ingliskeelsed nimed on neil PTC (//positive temperature coefficient// | Termistor on takisti, mille takistus muutub temperatuuriga. Termistore on kahte liiki: positiivse ja negatiivse temperatuuri koefitsiendiga. Positiivse koefitsiendiga termistori takistus temperatuuri tõustes kasvab ja negatiivsel väheneb. Vastavad lühendatud ingliskeelsed nimed on neil PTC (//positive temperature coefficient// | ||
| Line 23: | Line 28: | ||
| Piiratud ressurssidega ja suurt täpsust mittenõudvates rakendustes kasutatakse eelnevalt välja arvutatud temperatuuri ja takistuse vahelise sõltuvuse tabelit. Tabelis on üldjuhul kirjas kindla vahemikuga temperatuurinäitude vastavus anduri takistuse, pinge või analoog-digitaalmuunduri väärtusega. Tabeli puhul on kogu eksponentsiaalne arvutus eelnevalt ära tehtud ja programmis tuleb vaid mõõdetud parameetrile vastav rida üles otsida ja temperatuur välja lugeda. | Piiratud ressurssidega ja suurt täpsust mittenõudvates rakendustes kasutatakse eelnevalt välja arvutatud temperatuuri ja takistuse vahelise sõltuvuse tabelit. Tabelis on üldjuhul kirjas kindla vahemikuga temperatuurinäitude vastavus anduri takistuse, pinge või analoog-digitaalmuunduri väärtusega. Tabeli puhul on kogu eksponentsiaalne arvutus eelnevalt ära tehtud ja programmis tuleb vaid mõõdetud parameetrile vastav rida üles otsida ja temperatuur välja lugeda. | ||
| + | < | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| - | Kodulabori | + | Kodulabori |
| - | Temperatuuri leidmiseks on AVR-i peal otstarbekas kasutada temperatuuri ja analoog-digitaalmuunduri väärtuste teisendustabelit. Mõistlik on leida soovitud temperatuurivahemikust igale kraadile vastav analoog-digitaalmuunduri väärtus, sest vastupidine tabel läheb 10-bitise ADC väärtuste hulga tõttu liiga suureks. Tabeli tegemiseks on soovitatav kasutada mõnd tabelarvutuse programmi (MS Excel, | + | Temperatuuri leidmiseks on AVR-il otstarbekas kasutada temperatuuri ja analoog-digitaalmuunduri väärtuste teisendustabelit. Mõistlik on leida soovitud temperatuurivahemikust igale kraadile vastav analoog-digitaalmuunduri väärtus, sest vastupidine tabel läheb 10-bitise ADC väärtuste hulga tõttu liiga suureks. Tabeli tegemiseks on soovitatav kasutada mõnd tabelarvutuse programmi (MS Excel, |
| <code c> | <code c> | ||
| - | // | + | // Temperatuuri ADC väärtuseks teisendamise tabel |
| - | // Temperatuuri ADC väärtuseks teisendamise tabel. | + | // Iga massiivi element tähistab ühte Celsiuse kraadi |
| - | // Iga massiivi element tähistab ühte Celsiuse kraadi. | + | // Elemendid algavad -20 kraadist ja lõpevad 100 kraadiga |
| - | // Elemendid algavad -20 kraadist ja lõpevad 100 kraadiga. | + | // Kokku on massiivis 121 elementi |
| - | // Kokku on massiivis 121 elementi. | + | |
| - | // | + | |
| const signed short min_temp = -20; | const signed short min_temp = -20; | ||
| const signed short max_temp = 100; | const signed short max_temp = 100; | ||
| Line 55: | Line 58: | ||
| }; | }; | ||
| </ | </ | ||
| - | |||
| - | ~~PB~~ | ||
| Et tabelist ADC väärtuse järgi temperatuur leida, võib kasutada järgmist algoritmi: | Et tabelist ADC väärtuse järgi temperatuur leida, võib kasutada järgmist algoritmi: | ||
| <code c> | <code c> | ||
| - | // | + | // ADC väärtuse teisendamine Celsiuse kraadideks |
| - | // ADC väärtuse teisendamine Celsiuse kraadideks. | + | |
| - | // | + | |
| signed short thermistor_calculate_celsius(unsigned short adc_value) | signed short thermistor_calculate_celsius(unsigned short adc_value) | ||
| { | { | ||
| Line 74: | Line 73: | ||
| // mõõdetud tulemus, siis temperatuur on vähemalt | // mõõdetud tulemus, siis temperatuur on vähemalt | ||
| // sama kõrge kui elemendile vastav temperatuur | // sama kõrge kui elemendile vastav temperatuur | ||
| + | |||
| if (adc_value >= conversion_table[celsius]) | if (adc_value >= conversion_table[celsius]) | ||
| { | { | ||
| Line 89: | Line 89: | ||
| Algoritm otsib tabelist vahemikku, kuhu ADC väärtus jääb, ja saab teada selle vahemiku aluspiiri järjekorranumbri. Järjekorranumber tähistab kraade, sellele tuleb ainult algtemperatuur otsa liita ja nii saadaksegi 1 kraadi täpsusega temperatuur. | Algoritm otsib tabelist vahemikku, kuhu ADC väärtus jääb, ja saab teada selle vahemiku aluspiiri järjekorranumbri. Järjekorranumber tähistab kraade, sellele tuleb ainult algtemperatuur otsa liita ja nii saadaksegi 1 kraadi täpsusega temperatuur. | ||
| - | Toodud teisendustabel ja funktsioon on juba olemas Kodulabori teegis, nii et käesolevas harjutuses neid ise kirjutama ei pea. Teisendamise funktsioonil on teegis nimeks // | + | Toodud teisendustabel ja funktsioon on juba olemas Kodulabori teegis, nii et käesolevas harjutuses neid ise kirjutama ei pea. Teisendamise funktsioonil on teegis nimeks // |
| - | ~~PB~~ | ||
| <code c> | <code c> | ||
| - | // | + | // Kodulabori termistori näidisprogramm |
| - | // Kodulabori | + | // LCD ekraanil kuvatakse temperatuur kraadides |
| - | // LCD ekraanil kuvatakse temperatuur kraadides. | + | |
| - | // | + | |
| #include < | #include < | ||
| #include < | #include < | ||
| Line 110: | Line 107: | ||
| #define ADC_CHANNEL 14 | #define ADC_CHANNEL 14 | ||
| - | // | ||
| // Põhiprogramm | // Põhiprogramm | ||
| - | // | ||
| int main(void) | int main(void) | ||
| { | { | ||
| Line 129: | Line 124: | ||
| lcd_gfx_goto_char_xy(1, | lcd_gfx_goto_char_xy(1, | ||
| lcd_gfx_write_string(" | lcd_gfx_write_string(" | ||
| - | |||
| // ADC muunduri seadistamine | // ADC muunduri seadistamine | ||
| Line 135: | Line 129: | ||
| // Lõputu tsükkel | // Lõputu tsükkel | ||
| - | while (true) | + | while (1) |
| { | { | ||
| // Termistori pinge 4-kordselt ümardatud väärtuse lugemine | // Termistori pinge 4-kordselt ümardatud väärtuse lugemine | ||