ARM: laikrodukas su HP-21 ekranu arba gyko gimtadienis

Posted: 2016-02-28 in Darbeliai
Žymos:, , , ,

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į:

Laikroduko su HP-21 skaičiuotuvo ekranu maketas | Elektronika | Darau, blė

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:

Plokštė laikrodukui su HP-21 ekranu | Elektronika | Darau, blė

Paskui šast į druskos rūgštį su peroksidu ir galima skyleles gręžiot:

Išėsdinta plokštė | Elektronika | Darau, blė

Pasiskolinau iš  virtuvės vieną dangtelį, kad SMD rezistoriai neišsibėgiotų. Jų, rupūžių, kojytės labai greitos:

Kad SMD rezistoriai neišsibėgiotų | Elektronika | Darau, blė

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:

Laikroduko vaizdas iš viršaus kampu | Elektronika | Darau, blė

Kitu kampu:

Perrinktas ir vėl veikiantis laikrodukas su HP-21 skaičiuotuvo ekranu | Elektronika | Darau, blė

Č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:

Laikrodukas su HP-21 kalkuliatoriaus ekranu ir maitinimo šaltiniu | Elektronika | Darau, blė

Prie šaltinuko prilituotą laidą dar apdrėbiau epoksidke, kad kas nors netyčia nepačiupinėtų nagučiais ir prikabinau įprastu elektrikams dirželiu:

Laikroduko maitinimo šaltinis | Elektronika | Darau, blė

Š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:

Klaviatūros plokštė ir mygtukas laikrodukui | Elektronika | Darau, blė

Labai tingėjau gręžiot ir juo labiau projektuot-ėsdint, tai tuos tris gabaliukus išėdžiau su graviravimo galiuku:

Plokštės graviravimas | Elektronika | Darau, blė

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:

Paviršiniu būdu sulituoti mygtukaiPlokštės graviravimas | Elektronika | Darau, blė

 

Šiek tiek apie patį darbelį. Skaičiukui ir taškui sudaryti yra 8 segmentai, vadinami raidėmis nuo A iki H:

Skaičiuotuvo HP-25 schema | Elektronika | Darau, blė

(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:

Laikrodukas su HP-21 skaičiuotuvo ekranu pilnai sukomplektuotas | Elektronika | Darau, blė

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ą:

Komentarai
  1. Alvarito parašė:

    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..

    • Darau, Blė parašė:

      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ą 😀

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti /  Pakeisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti /  Pakeisti )

Connecting to %s

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.