ProjektaiSchemosAkustikaPatarimaiTeorijae-motion.lt | |||
Autorius: Šarūnas („circuit“) Grafinis skystųjų kristalų displėjusŠį skystųjų kristalų displėjų (LCD — iš anglų kalbos Liquid Crystal Display) išėmiau iš 1992 metų japonų gamybos elektroninės užrašų knygutės „CITIZEN”. Kad LCD kažką rodytų, nepakanka to vien tik panorėti. Jam reikia siųsti skaitmeninius signalus. Tai galima daryti personaliniu kompiuteriu arba mikrovaldikliu. Mano atveju puikiai tinka mikrovaldiklis. Kad galima būtų prijungti mikrovaldiklį prie LCD, reikia žinoti ką jungti ir prie ko. Su mikrovaldikliu viskas aišku — jo gamintojas pateikia pilną aprašymą (datasheet) ir tuomet viskas priklauso nuo programuotojo parašytos programos. Tik va iškilo bėda su LCD draiveriais. Jų (T7778A ir T7900) aprašymų internete ir net prašydamas gamintojo negavau. Išrinkta CITIZEN užrašų knygutė buvo veikianti, taigi, teko suktis kitaip — pasinaudojant oscilografu. Toks darbelis nėra labai paprastas, nes su oscilografu gana sunku sugaudyti neperiodinius signalus. Na, bet pasistengęs išsiaiškinau kur koks signalas, kokiu principu jis paverčiamas vaizdu ir t.t. Oscilografu ištirti 8 į LCD nuolat siunčiami signalai Kai jau žinojau kaip valdyti LCD, reikėjo išsirinkti tam tinkamą mikrovaldiklį. Pradžioje buvau suplanavęs naudoti PIC16F870 (jį turėjau), bet paaiškėjo, kad reikėtų bent dvigubai greitesnio, kad jis sugebėtų nuolat siųsti informaciją į LCD, keisti vaizdus, komunikuoti su aplinka ir sutalpinti visą paveiksliuką savo laikinoje atmintyje (RAM). Kadangi pilno dydžio paveiksliuko dydis yra 160x64 taškų, taigi paveiksliuką sudaro 10240 taškų. Paveiksliuko spalvų gylis yra 1 bitas (0 atitinka baltą spalvą, o 1 — juodą). Dydis bitais = taškų skaičius * spalvų gylis = 10240 * 1 = 10240 bitų. Kadangi 1 baitas = 8 bitai (mikrovaldiklio atmintyje), taigi paveiksliuko dydis baitais = 10240 / 8 = 1280B. Kadangi 1 kilo baitas yra 1024 baitai, taigi paveiksliuko dydis kilobaitais = 1280 / 1024 = 1.25kB. Šis PIC serijos mikrovaldiklis turi 1kB (8 kilo bitus) vidinės laikinos atminties, o paveiksliukas užima 1.25kB (10 kilo bitų). Akivaizdu, kad paveiksliukas yra didesnis nei telpa PIC16F870 mikrovaldiklio atmintyje. Taip pat jam pritrūko greičio informacijos apdorojimui:
Jau palyginti senai atsirado vadinamieji „Smart LCD” turintys integruotą mikrovaldiklį. Tai leidžia tik vieną kartą
nusiųsti informaciją ir grožėtis LCD rodomu vaizdu. Kad vaizdas pasikeistų vėl reikia nusiųst kito vaizdo informaciją.
Deja, mano naudojamas LCD neturi integruoto mikrovaldiklio ir tą informaciją reikia siųsti nuolat.
Norint išlaikyti tokį atsinaujinimo dažnį reikia nuolat suspėti į LCD draiverius siųsti paveiksliuko informaciją.
Per tokį laiko tarpą (~5µs) mikrovaldiklis turi tik nuskaityti paveiksliuko duomenis iš jo atmintyje esančios programos ir
išsiųsti 4 taškų informaciją. Mikrovaldiklis PIC16F870 dirba maksimaliu 4MHz taktiniu dažniu. Vieną komandą jis
atjieka per 4 taktus, t.y. 1MHz dažniu, o tai yra 1µs. Taigi, teko mikrovaldiklio PIC16F870 atsisakyti, ir užsakyt galingesnį ATmega32 (jo kaina — ~24Lt). Jis turi 2kB laikinos atminties (RAM), o jo maksimalus taktinis dažnis yra 20MHz. Visa laimė, kad šis mikrovaldiklis vieną komandą atlieka per 1-4 taktus priklausomai nuo komandos (vidutiniškai — ~1.5), nes kitaip ir jo greičio būtų buvę maža. Dabar LCD valdymas išnaudoja ~20% viso jo greičio. Taigi mikrovaldiklis dar laisvai suspėja atlikti kitus darbus, tokius kaip žingsninio variklio (sukinėjančio garso rankenėlę) valdymą, sąsają su kompiuteriu ir vartotoju ir kita.
Žinoma, mikrovaldiklis be programos yra visai kaip ir kompiuteris — metalo laužas. Taigi reikėjo parašyt programą, kuri
mikrovaldiklyje atlieka tokį vaidmenį, kaip ir operacinė sistema kompiuteryje. Ir pagaliau prasideda linksmoji dalis: Ir kur tą *.asm failą dabar dėti..? Ogi išversti jį į mikrovaldikliui suprantamą kalbą — šešioliktainę sistemą (sukompiliuoti). Tai gali atlikti ta pati AVRstudio programa. Gautas failas yra *.hex formato. Kai jau turime mikrovaldikliui suprantamą programą, galime ją įrašyti į mikrovaldiklio pastovią FLASH atmintį. Kad galėtume tai atlikti reikalinga sąsaja tarp kompiuterio ir mikrovaldiklio. Taigi, teikia pasigaminti tam skirtą programatorių, kurių schemų internete apstu. Aš pasirinkau šį programatorių, nes su juo galima programuoti kontrolerį neišimant jo iš prietaiso (tokio tipo programatoriai vadinami ISP — In System Programming). T.y. mikrovaldiklis gali laisvai dirbti savo darbą, tuo metu prisijungiame programatorių, mikrovaldiklis toliau pilnai funkcionuoja, ir tuomet pradėti įrašinėjimą. Prasidėjus įrašymui mikrovaldiklis pereina į būseną, kurioje nebevykdo darbo ir laisvai programuojasi. Po ~20 sekundžių trūkusio programavimo mikrovaldiklis vėl pereina į normalų darbo režimą ir jau vykdo naują programą. Į programatorių informacija iš *.hex failo siunčiama per programą PonyProg. Galite atsisiųsti mano demonstracinę programą (programa taip pat valdo skaitmeninį 6 kanalų potenciometrą garsui reguliuoti ir dar valdo žingsninį variklį, kuris sukioja potenciometrą (šiuo metu nenaudojama)) *.asm formate, kuri šiuo metu rodo vieną paveiksliuką, be abejo vėliau, kai atrasiu laisvo laiko, programą papildysiu (bet tik sau :-). Šį projektą sujungiau su projektu „BLASTER A03“, taigi tesinį rasite jame. Šia tema galite diskutuoti forume. Nuotraukos |
|||
|