Taigi nusprendžiau pasidaryti laikrodį su HP-21 skaičiuotuvo (kalkuliatoriaus) ekranu. Kadangi STM32 procesoriukas su 48 kojomis tų kojų turi pakankamai bei turi viduje RTC laikrodį, tai daugiau jokios periferijos ir kitų komponentų nereikia.
Įžanga. Šis įrašas pradėtas rašyti 2014-12-28. Taigi projektui jau daugiau kaip metai. O kaip aš jį nusprendžiau gaivinti? Ogi paprastai, žmona pasakė, kad ant stalo per daug laidų mėtosi, o man pačiam pritrūko bredbordukų (skylutinių bandomųjų maketavimo plokščių, breadboard). Bo ant mano stalo jau va tie metai laiko guli toks kūšys visokių laidukų ir vaizduoja laikrodį:
RTC procesoriaus viduje — paprastutis. Ne toks naglas, kaip specializuotų mikroschemų, kurios turi valandų, minučių, metų ir savaitės dienų registrus. Be to, atskirus registrus skirtingų pozicijų dešimtainiams skaitmenims. ARM procesoriaus laikrodis — paprasčiausias 32 bitų skaitliukas. Kadangi aš apsipratęs su Unix epocha, tai nusprendžiau, kad ten laikysiu Unix laiką. Tik laiko juostomis nesinaudosiu, tai laikas bus truputuką neteisingas, bet nieko tokio. Automatinio laiko persukimo irgi nedarysiu, nėra tam jokios prasmės.
Tiesa, jei pagalvosime rimtai, žaisliniam laikrodukui nėra būtinybės nustatinėti kažkokią žinomą ir visuotinai priimtą epochą, kaip kad Unix epocha ar Jėzaus gimimas. Epocha jam gali prasidėti nors ir dabar ir tas laikas gali kapsėti toliau, o skaičiavimo algoritmai šią mūsų pasirinktą epochą gali paversti žmonėms perskaitomais skaičiukais. Tiek, kad nuo metų pradžios paprasčiau skaičiuoti ir jei laikrodukas gyvuos be perprogramavimo keletą (ar keliolika, duokdie) metų, tai toks sprendimas bus naudingesnis. Aišku, su tolimesnėm epochom paprasčiausiai pravartu ištestuoti sekundžių pavertimą skaitomais skaičiukais (ir atvirkščiai).
Na ir skaičiavimui reikalingi pajėgumai yra kur kas mažesni, kai skaičiuojama nuo šviežios epochos, o ne senos. Čia dėl bjaurybių keliamųjų metų ir kitų gėrių. Aišku, viską galima padaryti gudriau, bet kadangi aš nelabai gudrus, tai sudėtis ir liekana — geriausi ir paprasčiausi ginklai.
Jo, kai pagalvoju, tai sprendžiu čia vos ne penkiasdešimties metų senumo problemas… kai viskas ir taip turėtų būti aišku ir viskas turėtų būti suprogramuota. Bet kažkodėl newlib nepasinaudojau, o sugalvojau epochos kalkuliaciją sukodyt pats. Durns, žinau, ale va… beje, padariau beveik be dalybos. Vėliau pamačiau, kad panašiai funkcija buvo įgyvendinta vienoje Minix dėl procesoriaus subtilybių: daugybė for cikliukų greičiau prasisuka nei krūvelė aparatūrinės dalybos. Vat jums ir prašom.
Na, kažkaip epochos perskaičiavimą išsprendžiau. Tiesa, ne be bugų. Atėjo keliamieji 2016-ieji ir susivėlė skaičiavimas 🙂 Na, bet nusispjaut, kada nors aš tą skaičiavimą dar persidarysiu. O dabar laikas daryti naują plokštę. Aš bandžiau šitam laikrodukui susiprojektuoti kompaktišką ir labai gražiai už ekrano pasikavojančią plokštę, bet sufeilinau. Po to buvo nusivylimas ilgasis ir nieko nedariau. Paskui po kažkiek laiko užsipirkau mažų STM32F103 devbordukų ir vėl sukilo noras šitą laikroduką gaivinti. Na, ir tos laidų krūvos bei tvarkymasis…
Ekraniukas nuo to seno skaičiuotuvo man kelia didelę nostalgiją. Galbūt dėl seno mano dėdės skaičiuotuvo, kuris pusę kilo svėrė. Galbūt šiaip. Na, savotiški tie seni diodiniai ekraniukai. Kažkokia jų savybė ir vaizdas verčia suvirpėti dūšią. Įdomu tai, kad segmentai mažučiukai ir ekranėlio priekis yra nusėtas burbuliukais — padidinimo lęšiais.
Tai va taip gykai švenčia gimtadienius: ima ir pasidaro, pavyzdžiui, kokį nors naują ir nereikalingą šūdniekį. Tiesa, ar aš esu gykas, ar ne – pačiam sunku pasakyt. Na, bet daug pažįstamų ir netgi mano žmona mane taip apibūdina. Musėt, taip ir yr.
Plokštę susiprojektavau labai primityvią, išsitraukiau laminatorių ir atsispaudžiau:
Paskui šast į druskos rūgštį su peroksidu ir galima skyleles gręžiot:
Pasiskolinau iš virtuvės vieną dangtelį, kad SMD rezistoriai neišsibėgiotų. Jų, rupūžių, kojytės labai greitos:
Va tokie „projektai“ man patinka. Kelios detalės ir viskas veikia. Ačiū kinams už nuostabius devbordukus bei mažučius maitinimo šaltinius. Viską susilitavau, perjunginėjau kai kuriuos takelius ir štai, gavosi va toks daiktas:
Kitu kampu:
Čia rodo „defaultinę“ datą, kada baigtas kurti šito laikroduko firmwaras 🙂 Su bugu tas firmwaras, kai reikia nuskaitinėt klaviatūrą. Tuo metu kažkaip labai labai tingėjau aparatūrinius pertaukimus analizuotis, tai mygtukai pagabinti su programiniu laikmatuku ir nuskaitinėjami. Tik va, kartais tas nuskaitinėjimas įvyksta ne tada, kada tikimasi… ir kartais „peršoka“ kelias pozicijas. Šiaip nustatinėjimą padariau gan naglą, netgi su atitinkamo skaičiuko mirksėjimu ir dar laisvame segmente rodoma „A“ raidele, tipo, „Adjust“.
Liko dar pasiimti „klaviatūros“ su trim mygtukais išvadą ir pridėti 5 V maitinimo šaltinį, kad laikrodukas galėtų būti maitinamas nuo 220 V. Tiesa, priprojektavau ir bateriją laikrodžio išsaugojimui, ale neveikia. Gal per diodą įtampa per daug nukrenta? Maitinimo šaltinukų tai užsipirkau kažkada iš kinų visą krūvelę, nedidukai tokie, po 0,7 A duoda. Vienas trūkumas — zirzia. Bet pamatavau su vis dar iš Mindaugo pasiskolintu galios matuokliu ir laikrodukas parodė 0 vatų. T.y., jo naudojama elektra yra niekinga, gali sau gulėt ant stalo ir žibėt. Ką ir daro sėkmingai:
Prie šaltinuko prilituotą laidą dar apdrėbiau epoksidke, kad kas nors netyčia nepačiupinėtų nagučiais ir prikabinau įprastu elektrikams dirželiu:
Šiaip buvau suplanavęs terminalą su varžteliais laidui, kad būtų galima lengvai prišriubuot. Bet paskui pagalvojau, kad iš plokštės apačios bus du takeliai su tinklo įtampa… brr. O kol šitas laikrodukas įgis kokią saugią dėžutę, gali vėl metai-kiti praeit. Todėl prilitavau laidą ir apdrėbiau. Terminalo skylutės suėjo dirželiui.
Laikrodukas be klaviatūros nustatymui yra kiek nepatogus naudoti. Todėl pasiėmiau vieną atraižėlę ir pasižymėjau tris plotelius:
Labai tingėjau gręžiot ir juo labiau projektuot-ėsdint, tai tuos tris gabaliukus išėdžiau su graviravimo galiuku:
Ranka buvo truputį pamiršus šitą darbą, todėl pirmas dešinėje segmentas toks biškį kreivas. Kiti geresni. Na ir ką, mygtukams apkarpiau kojas, atsikirpau su gailesčiu kelis laidelius nuo vaivorykštės ir atseit klaviatūra su paviršiniu litavimu baigta:
Šiek tiek apie patį darbelį. Skaičiukui ir taškui sudaryti yra 8 segmentai, vadinami raidėmis nuo A iki H:
(Paveiksliukas iš vieno apačioje išvardytų šaltinių)
Šituos segmentus galime pavadinti anodais, nes jie tokie ir yra — šviesos diodų „pliusai“. Tuo tarpu katodų yra 12 — jie atitinka skaitmenų kiekį. Originalioje skaičiuotuvo schemoje, kaip matome, naudojama dinaminė indikacija — kitokia ir neįmanoma. Taigi reikia įjungti reikiamus anodus (skaitmens segmentus), tada kažkurį katodą užtrumpinti į „žemę“. Paskui perjungti anodus ir užtrumpinti kitą katodą.
Kad būtų paprasčiau kodyti, anodams skyriau GPIOA elektrodus nuo 0 iki 7, o katodams — dvylika GPIOB elektrodų. GPIOA sukonfigūravau „push-pull“ režimu, o GPIOB — „open drain“. Tai taip ir sukasi dinaminė indikacija: GPIOA elektrodai nustatomi į kokio nors skaičiuko vaizdavimą (nustatomi loginiai vienetai), o GPIOB vienas kuris elektrodas nustatomas į loginį nulį, kiti tuo tarpu — į loginį vienetą („open drain“ įsijungia). Laikmatukas sukasi kas milisekundę ir „perstumia“ skaičiuko rodymą iš buferio. Dar padariau, kad kas kelias sekundes laikrodis persijunginėtų iš datos rodymo į laikroduką:
Galutinis variantas:
Dabar dar būtų gerai kur nors kokią tinkamą dėžutę rasti.
Tiesa, susidūriau su vienu nemaloniu dalyku. STM32F103 plokštelė kaip ir įsistato į jungteles (pinhead’us). Bet kontaktuoja ne idealiai Iš pradžių nesupratau, kodėl ne visi ekranėlio segmentai veikia. Tai mane kiek suneramino ateities plokščių projektavimui. Negi teks šituos devboardukus lituoti į vietą, o ne daryti keičiamus? Hm hm hm…
Tiems, kam įdomu, medžiaga apie HP-21 (ir panašius HP-25, HP-35 ir kt.) skaičiuotuvą:
Kaip tų mažų plokščių rtc veikia? Pas mane įdomus dalykas vyksta jei pastatau plokštę prie stalinės lempos su transformatoriumi, tada nebeskaičiuoja laiko arba stipriai nuplaukia dažnis rtc. Pastebėjau kad gana toli laikrodinis kvarcas nuo procesoriaus pastatytas, nes rekomenduojama kuo arčiau dėti. o dar takeliai eina po pagrindiniu kvarcu..
Nagi nežinau, šiaip nesiskundžiu. Aišku, nuplaukia tas laikrodis per kelias savaites kokią pusę minutės ar pan. Bet mano požiūriu nekritiška, bo turėjau atvejį su AVR ir DS1307, kuris per parą dvi minutes nučiuoždavo…
Turiu vieną projektą ankstyvoje gamyboje, kur bus daug šitų plokštelių ir kiekviena su laikrodžiu. Bet bus ir „masteris“, kuris kartą per parą pasiųs „teisingą“ laiką. Tikiuosi, kad to užteks. O jei neužteks, pasiuntinės laiką kas valandą 😀