V uredništvu revije Svet elektronike smo pred leti naredili celo paleto raznih adapterjev, ki se lahko priključijo na eno od razvojnih orodij: MikroPin, MiniPin ali MegaPin. Tokrat predstavljamo modul z grafičnim LCD Nokia 3310 in rotacijskim enkoderjem.
Ko smo zadnja leta načrtovali naše naprave, smo velikokrat uporabljali Nokia 3310 LCD. V povezavi s tem LCD-jem pa tudi rotacijski enkoder. Najprej smo z Nokia 3310 LCD nadgradili PWM napajalnik, nato smo naredili še Vikend radijsko postajo. V obeh primerih smo uporabljali tudi rotacijski enkoder. Za svojo »dušo« sem s tem LCD-jem naredil še VFO za KV radijsko postajo in še nekaj manjših gradenj, ki pa jih nisem objavil v reviji Svet elektronike.
AX elektronika d.o.o.
Avtor: Jurij Mikeln
E-pošta: stik@svet-el.si
2021-301-53
Ta vsebina je samo za naročnike
In vedno, ko sem razvijal program za vse navedene naprave, sem ga pisal na MegaPin plošči, na katero sem z žičkami povezal Nokia 3310 LCD in tudi enkoder. Lahko si predstavljate (neugleden) šop žic, ki je štrlel iz MegaPin in je kar klical po težavah.
Nekaj časa sem to »prenašal«, dokler se nisem odločil, da naredim adapter, na katerem bo Nokia 3310 LCD in tudi rotacijski enkoder s tipko. Tipka na enkoderju je zelo pomembna, saj z njo potrjujemo izbor na zaslonu – o tem malce kasneje.
Električna shema
Električna shema adapterja je zelo enostavna. Nokia 3310 je enostavna, kljub temu pa je potrebno napisati nekaj besed o njej.
Za krmiljenje Nokia 3310 LCD-ja sem uporabil vse priključke na LCD-ju. Na ta način dosežemo zanesljivo delovanje LCD-ja, res pa je da to pomeni polno zasedenost porta. Modul ima vgrajen N-FET tranzistor, ki ima dve funkciji. Ena funkcija je, da vklaplja oziroma izklaplja osvetlitev ozadja na Nokia LCD-ju. Druga pa je, da lahko preko tranzistorja s pulzno-širinsko modulacijo (PWM) zvezno zmanjšujemo oziroma povečujemo osvetlitev ozadja. S kratkostičnikom J1 omogočimo krmiljenje osvetlitve ozadja. Če tega ne želimo, J1 odklopimo in vklopimo kratkostičnik J2, ki potem za stalno vklopi osvetlitev ozadja, kot je razvidno iz sheme na sliki 1.
Kot se vidi v shemi na sliki 1 je stikalo enkoderja tudi vezano na kratkostičnik J1, kar pomeni, da če je J1 spojen, potem bi s pritiskom na stikalo enkoderja za hip izklopili osvetlitev ozadja. Zato je potrebno upoštevati sledeče:
- če želimo uporabljati stikalo enkoderja, imejmo J1 izklopljen in J2 vklopljen.
Če pa želimo preizkusiti program za zvezno krmiljenje osvetlitve ozadja, potem izklopimo J2, vklopimo J1 in ne pritiskajmo stikala na enkoderju.
Zvezno krmiljenje osvetlitve ozadja
Omenili smo že zvezno krmiljenje osvetlitve ozadja. Pri programu, ki krmili osvetlitev ozadja gre v bistvu za PWM krmiljenje tranzistorja Q1. Pri načrtovanju sheme za ta adapter sem imel nekaj »pomislekov«. Namreč zaradi (pregovorno) nesrečnega razporeda priključkov pri AVR-jih, ne moremo ustreči vsem. Kaj mislim s tem? No, če pogledate ATMega32 boste videli, da se PWM izhod nahaja na priključku PortD.5:
Medtem, ko je na popularnem ATMega328 PWM izhod na PortB.1, kot kaže slika 3.
Ker je velikokrat tako, da ne moremo »ustreči vsem svetom«, sem se odločil, da modul načrtujem tako, da ima PWM krmiljenje na priključku PortD.5, kot je to pri ATMega32 mikrokontrolerju.
Priklop rotacijskega enkoderja
Na Nokia LCD modulu se nahaja tudi rotacijski enkoder s tipko. Velikokrat, ko sem do sedaj pisal programe, sem uporabljal ravno Nokia LCD in rotacijski enkoder. To se mi zdi takšna simpatična zmagovalna kombinacija: Nokia LCD je grafični LCD, na katerem lahko prikažemo marsikaj – od različno velikih pisav do grafike. Res je, da je zaslon majhen in marsikdo (vključno z mano) že potrebuje očala za branje iz zaslona, pa vendar njegova cena, dostopnost in lastnosti pretehtajo. Večji LCD-ji so tudi precej dražji, kar je nekako razumljivo, saj so Nokia 3310 zaslonov (očitno) naredili ogromno in je zato tudi njihova cena zelo sprejemljiva.
Rotacijski enkoder bi v principu lahko priključili kamor koli, saj Bascom-AVR podpira delovanje enkoderja na katerem koli priključku. Važno je le, da sta oba priključka enkoderja (priključek A in B) vezana na istem portu. Stikalo enkoderja lahko vežemo tudi na nek drugi port. To bo potrebno narediti takrat, ko bomo krmilili osvetlitev ozadja LCD-ja preko tranzistorja Q1.
Bascom programska podpora
V uredništvu smo pripravili program, s katerim lahko krmilite Nokia LCD in enkoder. Ni namen tega članka, da v podrobnosti analiziramo program, pač pa bomo na hitro opisali delovanje programa.
Na začetku programa se nahaja inicializacijski ukaz za LCD:
Config Graphlcd = 128x64sed , Rst = Portd.0 , Cs1 = Portd.4 , A0 = Portd.1 , Si = Portd.6 , Sclk = Portd.7 'CS1=CE, SI=DIN, A0=DC, SCLK=CLK
Modul seveda lahko povežemo na kateri koli drugi port s tem, da spremenimo PortD v tisti port, katerega uporabljamo.
V komentarju smo tudi zapisali, kako se ujemajo oznake priključkov na LCD-ju z oznakami v programu.
Pisanje na Nokia LCD je enostavno. Najprej definiramo s katero pisavo(fontom) naj se pisanje izvaja, nato pa z ukazom LCDAT pišemo na zaslon:
Setfont Font10x16tt 'Setfont Font6x8 Disable Interrupts Lcdat 1 , 10 , "NOKIA" Lcdat 3 , 10 , "LCD " Setfont Font6x8 Lcdat 6 , 1 , "AX elektronika"
Na začetku programa pa je priporočljivo inicializirati LCD ter določiti kontrast, s katerim izpisujemo naše podatke na zaslonu:
Initlcd Cls Glcdcmd 33 : Glcdcmd Kontrast
V kratkem izseku programa ste videli tudi ukaz Disable Interrupts. Zakaj je ta ukaz tukaj potreben? V bistvu pri tako enostavnem programu, kot je program za krmiljenje LCD-ja in enkoderja niti ni potreben. Je pa potreben, če je program obširen in se izpisovanje na zaslonu toliko upočasni, da bi ga z vrtenjem enkoderja lahko celo prekinili in bi se na zaslonu pokazalo vse drugo, samo tisto ne, kar bi želeli. Jaz se držim pravila, da pri izpisu na LCD onemogočim prekinitve.
Poglejmo si zdaj branje z rotacijskega enkoderja. Ukaz za branje enkoderja je enostaven:
B = Encoder(Enk1 , Enk2 , Enkoder_sub2 , Enkoder_sub1 , 0)
B je spremenljivka vrste byte, Enk1 in Enk2 sta priključka enkoderja, ki sta vezana (v našem primeru) na PortD.2 in PortD.3. Ta dva porta sta bila izbrana zato, ker se na teh priključkih nahaja vhod za prekinitev – interrupt. V primeru programa, ki ga boste našli na spletu, nismo uporabili prekinitev za detekcijo vrtenja enkoderja. Boste pa v programu našli komentirane vrstice programa, če se želite sami poigrati s prekinitvami za detekcijo vrtenja enkoderja.
Dodajmo še malce razlage za zvezno krmiljenje osvetlitve LCD-ja. Kot omenjeno, osvetlitev ozadja krmilimo s PWM preko tranzistorja Q1. Za namene krmiljenja je potrebno spojiti kratkostičnik J1 in odklopiti kratkostičnik J2.
Velikokrat boste videli, da je konfiguracija PWM-ja s takšno obliko:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Vendar boste s to konfiguracijo imeli težave pri našem modulu, ker vam LCD ne bo deloval, saj bo PWM zasedel PortD.5, PortD.6 in PortD.7. Zato je potrebno naš konfiguracijski ukaz malce spremeniti. Odstranili bomo samo Compare B PWM:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Poleg tega je potrebno Enk3 v programu prestaviti (npr. na Pinb.5). Če Enk3 v programu ne prestavimo na nek drugi port, PWM ne bo deloval:
Enk3 Alias Pinb.5
Zdaj bo PWM signal prisoten samo na PortD.5 in osvetlitev ozadja izklopimo tako, da spremenljivko Pulses postavimo na 255. Za polno osvetlitev nastavimo spremenljivko Pulses = 0.
S tipko enkoderja tako lahko izbiramo – recimo nastavljen parameter. Pri PWM napajalniku smo nastavljali izbor funkcije (Napajalnik, Polnilnik, Merilnik napetosti…) in s pritiskom na tipko enkoderja izbor potrdili. To je tudi najenostavnejši način izbire in potrditve izbire nekih parametrov.
Zaključek
Na Nokia 3310 LCD-ju lahko prikazujemo tudi posebne znake, ki si jih sami zamislimo. Prikazovanje takšnih znakov sicer zahteva malce potrpežljivosti, saj moramo za vsak piksel v našem znaku določiti, ali je vklopljen ali izklopljen.
Primer prikazov posebnih znakov vidite na sliki 4, ki prikazuje VFO avtorja radioamaterja ZL2PD in znak za Df, ali Tx oziroma zaklenjeno ključavnico. Ker prikaz posebnih znakov zahteva malce več »dela«, bomo to tematiko obdelali v posebnem članku. Vam pa lahko že zdaj zaupam, da na ta način lahko prikazujemo res zanimive oblike in znake, ki jih sicer ne moremo prikazati.
Upam, da vam bo Modul z Nokia 3310 in rotacijskim enkoderjem dobro služil pri razvoju vaših programov.