Temperatūrinis aliarmas su „ATMega8“ mikrovaldikliu bei DS18S20/DS18B20 temperatūros davikliu. Jungikliais nustatote minimalią bei maksimalią temperatūros reikšmes ir, kai aplinkos temperatūra išeis už nustatytų ribų, prietaisas jus įspės mirksinčiais šviesos diodais bei zirzeklio (angl. buzzer) signalu.
Indikacija
Prietaiso būsena indikuojama dviem šviesos diodais bei zirzekliu. Yra penkios būsenos:
- Normali (temperatūra nustatytose ribose): zirzeklis išjungtas, abu šviesos diodai mirksi 1 Hz dažniu;
- Aukšta temperatūra (aplinkos temperatūra aukštesnė už nustatytą „Tmax“): žemos temperatūros šviesos diodas išjungtas, aukštos temperatūros šviesos diodas mirksi 2 Hz dažniu, zirzeklis pypsi 2 Hz dažniu;
- Žema temperatūra (aplinkos temperatūra žemesnė už nustatytą „Tmin“): aukštos temperatūros šviesos diodas išjungtas, žemos temperatūros šviesos diodas mirksi 2 Hz dažniu, zirzeklis pypsi 2 Hz dažniu;
- Daviklio gedimas (mikrovaldiklis negali nuskaityti temperatūros iš daviklio): zirzeklis įjungtas, abu šviesos diodai mirksi 2 Hz dažniu;
- Neteisingi nustatymai („Tmin“ >= „Tmax“, absoliutine nustatymo reikšmė >99): zirzeklis išjungtas, abu šviesos diodai pastoviai šviečia.
Po nunulinimo (angl. reset) įjungiami abu šviesos diodai ir zirzeklis, todėl lengvai galima pastebėti, jei mikrovaldiklis persikrovinėja.
Temperatūros ribų nustatymas
Temperatūros ribų nustatymas vykdomas jungikliais S1-S6.
S3,S4,S5,S6 nustato absoliutinę reikšmę, S1 bei S2 – ženklą ( jei jungiklis įjungtas (mikrovaldiklio įėjimas sujungtas su GND) , reikšmę neigiama, jei išjungtas – teigiama).
Maks. temperatūra = (S3*10+S4); ženklas nustatomas jungikliu S1.
Min. temperatūra = (S5*10+S6); ženklas nustatomas jungikliu S2.
Absoliutinės temperatūros reikšmės nustatymui panaudoti jungikliai su sekančiu kodavimu (pav. dešinėje).
Schema
Visi laikai mikrovaldiklio programoje apskaičiuoti 4 MHz dažniui (naudojamas vidinis RC generatorius). Kaip temperatūros daviklis gali būti naudojamas DS18S20 arba DS18B20. Jei panaudotas DS18B20, mikrovaldiklio programa naudoja tik 9 bitų temperatūros rezoliuciją, nors daviklis standartiškai startuoja su 12 bitų rezoliucija. Daviklio tipą programa nustato automatiškai pagal nuskaitytą kodą.
Mikrovaldiklio programa
Programa susideda iš šių dalių:
- „Timer0“ pertraukimas;
- „Timer1“ pertraukimas;
- main() ciklas.
„Timer0“ pertraukimas:
„Timer0“ pertraukimas įvyksta kas 50 ms (20 Hz). Kas 10-ą pertraukimą (t. y. kas 0.5 sekundės) vyksta indikacijos atnaujinimas ( įjungiami/išjungiami šviesos diodai bei zirzeklis).
„Timer1“ pertraukimas:
„Timer1“ pertraukimas įvyksta kas 1 s (1 Hz). Kas 5 pertraukimai nustatomas požymis „nuskaityti temperatūrą“ (t. y. kas 5 s).
main() ciklas susideda iš šių dalių:
- inicializacija;
- jungiklių nuskaitymas;
- temperatūros daviklio nuskaitymas;
- temperatūros palyginimas su nustatytomis min./maks. reikšmėmis.
Inicializacija vykdoma vieną kartą po mikrovaldiklio persikrovimo. Į registrus įrašomos reikiamos reikšmės, įjungiami šviesos diodai bei zirzeklis (todėl lengva pastebėti jei mikrovaldiklis persikrovinėja). Po to programa pereina į begalinį ciklą, pertraukiamą tik „Timer0“ bei „Timer1“.
Kartą į 5 sekundes mikrovaldiklis nuskaito nustatytas temperatūros ribas, daviklį, palygina aplinkos temperatūrą su ribomis ir išvalo požymį „nuskaityti temperatūrą“.
„Watchdogas“
Kiekviena cikliškai vykdoma paprogramė nustato tam tikrą bitą globaliam kintamajame. Pagrindinėje programoje nuolat tikrinama ar reikiami bitai nustatyti, ir jei taip – „watchdog“ laikmatis (angl. taimer) nunulinamas. Jei programos vykdymas sutrinka, „watchdog“ laikmatis perkrauna mikrovaldiklį.
Programa
Kompiliuota su „WinAVR“ 20081205
Optimization level: -Os
Program: 1530 bytes (18.7% Full)
(.text + .data + .bootloader)
Data: 10 bytes (1.0% Full)
(.data + .bss + .noinit)
Programą ir principinę elektrinę schemą galite atsisiųsti iš archyvo.