Šoreiz autors izveidojis elektrisko principiālo shēmu, ar kuras palīdzību ir iespējams izmērīt istabas temperatūru, izmantojot TC74 sērijas termosensoru. Lai varētu noteikt istabas temperatūru, izmantojot TC74 sērijas termosensoru, nepieciešams izmantot mikrokontrolleri, kurš tālāk, izmantojot I2C saskarni, sazinās ar termosensoru, veic datu nolasīšanu un apstrādi.
Elektriskās principiālās shēmas elektrobarošanai paredzēts izmantot 9 V bateriju, kas nozīmē to, ka ierīce ir pārnēsājama.
1.1.att. Termometrs, izmantojot TC74 sērijas termosensoru
Shēmas darbības princips ir balstīts uz TC74 sērijas termosensora un ATMEGA328P sērijas mikrokontrollera, kurš paredzēts temperatūras nolasīšanai, apstrādei un attēlošanai uz šķidro kristālu displeja.
Augsta signāla līmeņa piesaistei paredzēti R1, R2 un R3 rezistori.
Lai varētu nodrošināt 5 V elektrobarošanu, izmantojot 9 V bateriju, tiek izmantots LM7805 sērijas lineārais sprieguma stabilizators.
D2 taisngriežu diode paredzēta aizsardzībai pret nepareizu polaritāti.
Ieejas un izejas sprieguma pulsāciju "gludināšanai" paredzēti C5 un C4 elektrolītiskie kondensatori.
C3 keramiskais kondensators paredzēts parazītiskās induktivitātes mazināšanai.
D1 gaismas diode paredzēta +5 V elektrobarošanas indikācijai, bet R7 rezistors ir paredzēts tās aizsardzībai.
SW1 slēdzis paredzēts elektriskās principiālās shēmas ieslēgšanai un izslēgšanai.
Lai mikrokontrolleris varētu nolasīt un apstrādāt informāciju par temperatūru, nepieciešams izmantot I2C saskarni, kas nozīmē to, ka sākumā mikrokontrolleris sazinās ar termosensoru, norādot tā adresi (7 biti, bet 8.bits nozīmē rakstīt vai nolasīt), tad norāda, ko darīs, no kuras adreses vēlas saņemt informāciju jeb temperatūru.
Jāievēro, ka atkarībā no sērijas numura var mainīties sensora adrese, piemēram, kad tiek izmantots TC74A7-5.0VCT sērijas termosensors, tad jānorāda 0x9E, kad tiek nosūtīti dati, bet 0x9F, kad tiek saņemti. Ja tiek izmantots TC74A0-5.0VCT sērijas termosensors, tad jānorāda 0x90, kad tiek nosūtīti dati, bet 0x91, kad tiek saņemti.
int main(){
DDRD = 0xFF;
DDRB = 0x00;
InitLCD(0);
I2C_init();
LCDClear();
int temperatura=0;
while(1){
_delay_ms(500);
LCDClear();
TC74_get_temperature(&TC74);
temperatura = TC74.temp;
LCDWriteStringXY(2,0,"TEMPERATURA");
LCDWriteIntXY(5,1,temperatura,2);
LCDWriteStringXY(8,1,"oC");
}
return 0;
}
void TC74_get_temperature(TC74_data *TC74){
I2C_start();
I2C_write(Write_ADDRESS); // 0x90
I2C_write(TC74_REG); // 0x00
I2C_stop();
I2C_start();
I2C_write(Read_ADDRESS); // 0x91
TC74->temp = I2C_read_NACK();
I2C_stop();
_delay_ms(5);
}