Mokausi valdyti postūmio registrus

Posted: 2013-04-10 in Darbeliai
Žymos:, , , , ,

Pradėjau tokį naują darbelį. Kadaise, prieš 20 metų, kai pirmą kartą susidomėjau radijoelektronika, tai greičiausiai visų pirmas „projektas“ būdavo detektorinio imtuvo pasigaminimas. Visose knygelėse „jauniesiems technikams“ būdavo toks skyrius. Na, o šiais laikais, visi, kas truputuką susidomi mikrokontroleriais, prieina tokią stadiją, kai užsimano pasidaryti laikrodį 😀 Tai aš irgi ne išskirtinis, taip pat užsimaniau pasidaryti laikrodį. Ypač, kad iškraustęs vieną palėpę radau lyg tyčia šešis atsarginius neoninius indikatorius, dar nenaudotus. Lieka tikėtis, kad jie gulėjo saugiai ir ramiai bei nebuvo pažeisti ir dujos iš jų neištekėjo lauk. Bet kokiu atveju, reikės juos išbandyti.

Taigi pradžiai susirinkau „devboard’ą“ su vienu mikrokontroleriu, dviem postūmio registrais ir šešiolika šviesos diodų. Na, kad galėčiau išsidebuginti savo įsivaizduojamą indikatorių valdymo koncepciją. Koncepcija detalių taupymo atžvilgiu numatyta dinaminė. T.y. signalai nebus siunčiami į kiekvieną indikatorių atskirai, o pirma į vieną, paskui į antrą ir taip toliau. Perjunginėjant signalus pakankamai greitai susidarys įspūdis, kad indikatoriai švyti ištisai. Be to, jie turi šiokią tokią inerciją, tad tas irgi padės. Kiekvienam indikatoriui reikia valdyti 10 kojų (katodų) ir vieną anodą. Taigi šešioms lempoms reikia šešiolikos valdymo elektrodų — dešimt skaičiukui parinkti ir šešių perjunginėjimui tarp skirtingų indikatorių. Kadangi reikės dar prijungti RTC laikroduką per I2C protokolą, tai net ir PORTA kojas išnaudojus bendroj sumoj šešiolika nesigauna. Galima būtų pataupyti ir naudoti tik vieną postūmio registrą, o kitus aštuonis elektrodus imti iš mikrokontrolerio… bet kad tos postūmio registrų mikroschemos po keliolika centų kainuoja, ką čia taupyt… o ir kodą paprasčiau bendrą rašyt.

Apie postūmio registrus. Tai tokios mikroschemos, kurioms bitukai sušeriami nuosekliai, o jos juos išdalina lygiagrečiai per išvedamąsias kojeles. Kitaip sakant, nuoseklaus-lygiagretaus signalo konverteriai. Žinau apie dviejų rūšių registrus: į vienus atkeliavęs bitukas iš karto padedamas į atitinkamą koją, o kiti turi atmintį: į juos galima sušerti visą krūvą bitukų, o paskui duoti atskirą signalą ir tie bitukai „peršoka“ į kojas vienu ypu. Tokie registrai vadinami „latch“ registrais. Na, turintys „sklendę“. Gerumas tas, kad su trimis mikrokontrolerio kojomis (ir aišku, bendra „žeme“) galima valdyti kiek tik nori nuosekliai sujungtų postūmio registrų. Aš sujungiau du. Į juos galiu „sušerti“ 16 bitų skaičiuką ir jį išskirstyti, kaip man reikia. Aš panaudojau, ko gero, pačius populiariausius registrus su „sklendėmis“ 74HC595.

Postūmio registrai valdomi taip: į „duomenų elektrodą“ nustatomas 1 arba 0 (t.y. žema-nulinė arba aukšta-vienetinė įtampa). Kad registras tą reikšmę perskaitytų, reikia dar nustatyti loginį vienetą į „laikroduko“ elektrodą. Paskui laikroduko elektrodą vėl nustatyti į nulį. Ir taip kartoti tiek kartų, kiek bitukų norime į registrą sukišti. Du registrai — šešiolika bitukų iš viso. Kai sukišam visus reikiamus bitukus, pasiunčiam loginį vienetą į „sklendės“ elektrodą ir „sušerti“ bitukai peršoka į realius signalus — atitinkamas įtampas registro kojelėse.

Tiek teorijos. O dabar einu į barą su kompu ir „devboard’u“, imu Gineso vieną-kitą ir pradedu kažką kodyti.

Taigi pirmas bandymas: uždegti po vieną šviesos diodą iš eilės, o pabaigoje — visus kartu. Šešiolikos bitų skaičiuką iš pradžių nustatau vienetuku. Taigi, gaunasi tokia bitų krūva: 0b1000000000000000. Ir jį visą po bituką sukišu į registrus ir įjungiu „sklendę“. Užsidega pirmas diodas. Tada darau postūmį per vieną poziciją. Skaičiukas tampa 0b0100000000000000. Vėl jį sušeriu į registrą. Šeriu, beje, nuo aukščiausio bito, t.y. atvirkštine tvarka. Na ir taip toliau. O kai padarau 16 postūmių, skaičiuką nustatau į 0b1111111111111111 arba dešimtainę reikšmę 65535 ir vėl sukišu į registrą. Užsidega visi diodai. Na ir vėl iš naujo.

Beje, rašiau visą kodą grynai su grynai AVR bibliotekomis, nieko nenaudojau iš Arduino. Buvo visokių kliurkų, iš pradžių tie diodai degiojosi bile kaip, bet paskui išsiaiškinau bėdas. Pasirodė, kad pora laidelių nekontaktavo, o dar vieno iš viso trūko. Na, bet viskas pavyko ir viskas tvarkoj.

Tai čia tik koncepcijos parodymas, kad galiu kaišiot bitukus taip, kaip noriu. Paskui jau reikės mokytis imti informaciją iš RTC mikroschemos ir kaišiot sekundes, minutes ir taip toliau į tuos man reikiamus bitukus ir valdyti aukštos įtampos tranzistorius.

O čia vaizdo įrašas, kuriame matyti mano aprašytas diodų degiojimas. Diodai specialiai spalvoti, kad lengviau atskirčiau, kur kokia pozicija.

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 )

Google photo

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

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter 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.