Šoreiz, izmantojot mikrokontrolleri (ATmega328P), tika izveidota elektriskā principiālā shēma, kura paredzēta iekštelpu temperatūras mērīšanai (no 0 °C līdz 150 °C ). Temperatūra uz 16x2 simbolu displeja tiek attēlota gan Celsija skalā, gan Fārenheita skalā, gan Kelvina skalā.
1.1.att. Termometra elektriskā principiālā shēma
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include<avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>
#include "lcd.h"
unsigned int Read_ADC();
void Init_ADC();
int main(){
unsigned int ACP_vertiba=0, temp_Celsius=0,temp_Fahrenheit=0,temp_Kelvin=0;
DDRB=0x0F;
DDRD=0xFF;
DDRC=0x00;
InitLCD();
_delay_ms(500);
LCDClear();
_delay_ms(500);
Init_ADC();
while(1){
_delay_ms(3000);
LCDClear();
ACP_vertiba = Read_ADC();
_delay_ms(20);
temp_Celsius = (ACP_vertiba/2.05); // 1 °C = 2.05
temp_Fahrenheit = (ACP_vertiba/2.05)*1.8+32;
temp_Kelvin = (ACP_vertiba/2.05)+273.15;
_delay_ms(20);
LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," oC");
if(temp_Celsius>99){
LCDWriteIntXY(5,1,temp_Celsius,3);
}
else{
LCDWriteIntXY(5,1,temp_Celsius,2);
}
_delay_ms(3000);
LCDClear();
LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," oF");
if(temp_Fahrenheit>99){
LCDWriteIntXY(5,1,temp_Fahrenheit,3);
}
else{
LCDWriteIntXY(5,1,temp_Fahrenheit,2);
}
_delay_ms(3000);
LCDClear();
LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," K");
if(temp_Kelvin>99){
LCDWriteIntXY(5,1,temp_Kelvin,3);
}
else{
LCDWriteIntXY(5,1,temp_Kelvin,2);
}
}
return 0;
}
void Init_ADC(){
ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
unsigned int Read_ADC(){
ADMUX|=0x00;
ADCSRA|=(1<<ADSC);
_delay_ms(1);
while(!(ADCSRA&(1<<ADSC)));
ADCSRA|=(1<<ADIF);
return ADCW;
}
1.2.att. Temperatūras attēlošana pēc Kelvina skalas
1.3.att. Temperatūras attēlošana pēc Fārenheita skalas
1.4.att. Temperatūras attēlošana pēc Celsija skalas