Kažkaip neparašau apie laikrodžių darymą. Kiekvienas bent kiek įvaldęs kontroleriuką kada nors pradeda gaminti laikrodį. Aš irgi 🙂 Labai labai seniai dariau RTC laikrodį su PIC procesorium. Rašiau aš jį asembleryje… ir labai nervinaus, nes buvo sunku ir tas PICas turėjo savo bjauriu niuansu. Šiaip internete pilna laikrodžių- visokiems procesoriams, visokiems ekranams. Pasibandžiau keletą, kai kurie patiko, kai kurie ne. Pagaliau vieną dieną pasakiau- va ateis savaitgalis ir pradėsiu rašyti laikrodį nuo nulio.
Pagrindinės užduotis kurias sau pastačiau:
- RTC nepriklausantis nuo maitinimo. T.y. atjungiam maitinimą, o laikrodis sau toliau veikia.
- Hardwarinis laikrodis- tikras nesusipratimas smaukytis su procesoriaus kodu, kad skaičiuoti kiekvieną pirstelėjimą ir apsakaičiuoti laiką. Laika turi skaičiuoti RTC čipas- procesorius užsiima grožiu ir User Interface.
- Valdymas turi būti aiškus, o ne su vienu nupiepusiu mygtuku. Naudojam kaip minimum 6 klavišus (juolab kad naudojant ADC mygtukus, jų skaičiaus kaitaliojimas nėra nei hardwariškai, nei softwariškai sudėtingas). Mygtukai: kairėn, dešinėn, aukštyn, žemyn, OK ir Cancel. Kaip bet kuriame teliko distanciniam.
- Jokių asemblerių, advanced dalykėlių (ir atminties taupymo). Turi kompiliuotis su gcc.
- Laikrodžio variklis (core) turi lengvai persikelti ant kito “displėjaus”. T.y. dabar rašau naudojant LCD ekraniuką, bet su minimaliu pokyčiu, softas turi persikelti kad ir į LED matricą ar kokį rotary clock displėjų.
Konstravimui panaudota esama hardwarė. Tik papildomai, prie I2C porto pajungta RTC mikroschema, kurią man maloniai padovanojo Intersil semiconductors: isl1208.
Čia kiek geriau matosi analoginių mygtukų “matrica” kuri pajungta prie MCU tik trim laidais: Vcc, GND ir analog. Tai pat matosi, kad RTC turi savo rezervinį energijos šaltinį: Ličio batareiką CR2025 (čia iš seno kompo išlupau).
Visas kodas dar neparašytas. Jau galima užprogramuoti laiką ir datą, beveik pabaigtas žadintuvas ir konfiguracinis modulis.
Pats žadintuvas irgi nedaromas su ATMEGA16, o jis tupi RTC mikroschemoje- netgi yra speciali kojytė, kuri gali generuoti žadinimo signalą be MCU pagalbos. Arba paprasčiausiai MCU nuskaito būklės registrą ir pradeda čirškėti. Įdomumas tame, kad žadintuvas gali suveikinėti kiekvienos valandos kažkurią minutę, arba galima nustatyti kad žadintuvas skambėtu tik pirmadieniais, trečią valandą penkiolika minučių ir 27 sekundės, arba kad skambėtu kiekvienos valandos 3 minutę tik balandžio 23 dieną ir jei ta diena išpuola sekmadienį… 🙂 Ten daug navarotų turi tas čipukas. O jei dadėti ir MCU navarotus, tai tikras CRON daemonas gaunasi. Nekalbant apie tai, kad softas pats žino, kelintadienis bus bet kurią 21 amžiaus dieną ir taip pat puikiai susipažinęs su keliamųjų metų skaičiavimais.
Softas turi bent trijų lygių menių sistemą. Meniu sistema automatiškai išsijungia, jei vartotojas ilgai neliečia klavietūros. Su minimaliais pokyčiais si sistema modifikuojasi ir galima konstruoti kokį nors termostatą- juk užtenka pajungti prie to pačio I2C kad ir FM75 mikroschemą. Arba galima valdyti kokią nors periferiją… Čia tik reikia įjungti fantaziją. Šiaip viskas sugrūsta į TIMER0 pertraukimą- visą kitą laiką ATMEGA dinderį muša.
Softas neskirtas “C” kalbos puristams ir specialistams. Aš iškarto pasakau, kad niekada nesimokiau “C” programavimo. Todėl daugelis momentų padaryta kvailai. Tik žinau, kad gerasis gcc nerado nei vienos priekabės prie šios programos- kompiliuojasi be jokių warning…
Štai jis: RTC clock core source code. Dalinamas pagal GNU GPL licenzija- imkit ir naudokit.