6 minute read

mikroupravljača (20

Next Article
BBC micro:bit [24

BBC micro:bit [24

ELEKTRONIKA

Shield-A, učilo za programiranje mikroupravljača (20)

Advertisement

Od svih modula s čipom PCF8574, jedan ima vrlo specifičnu namjenu: taj modul ima takav raspored izvoda da ga je moguće postaviti na poleđinu standardnog alfanumeričkog displeja (Slika 59.). Time se modul i displej povezuju u funkcionalnu cjelinu, a sheme na Slici 60. ilustriraju što smo postigli. Tipičan način povezivanja alfanumeričkog displeja s mikroupravljačem prikazan je shemom na lijevoj polovici slike: za to nam je potrebno 6 priključaka mikroupravljača. Koristimo li serijski I2C LCD-modul, izvode LCD-a povezat ćemo na njegove izvode, a za povezivanje s mikroupravljačem bit će dostatna samo dva komunikacijska pina, SDA i SCL (desna shema). I ne samo to: više ovakvih modula možemo povezati paralelno na iste SDA- i SCL-pinove, pod pretpostavkom da smo njihove adresne pinove A2-A0 postavili na različite vrijednosti ‒ sa samo dva pina mikroupravljača možemo potpuno nezavisno ispisivati različite poruke na 16 LCD-a (8 s I2C-modulima baziranima na čipu PCF8574 i 8 s I2C-modulima baziranima na PCF8574A)! Pogledamo li pažljivije shemu na Slici 60. desno, uočit ćemo da se na I2C LCD-modulu nalazi i trimer za ugađanje kontrasta alfanumeričkog displeja te tranzistor kojim možemo uključivati i isključivati njegovo pozadinsko osvjetljenje. Ovim tranzistorom također upravljamo pomoću jednog pina PCF-čipa, dakle, preko iste I2C-sabirnice kojom šaljemo poruke na displej. Napomena: raspored izvoda na serijskom I2C LCD-modulu odgovara alfanumeričkim displejima kod kojih je priključak 15 anoda, a priključak 16 katoda pozadinskog osvjetljenja; kod displeja na kojima je raspored ovih izvoda zamijenjen nećemo moći upravljati pozadinskim

Slika 59. Serijski I2C LCD-modul moguće je postaviti na poleđinu standardnog alfanumeričkog displeja

Slika 60. Standardni način povezivanja alfanumeričkog displeja s mikroupravljačem (lijevo) i povezivanje preko serijskog I2C LCD-modula (desno)

Slika 61. Konfiguracija pomoću koje ćemo ispitati mogućnosti I2C-komunikacije

osvjetljenjem ako ne napravimo odgovarajuće korekcije. U ovom ćemo nastavku ilustrirati kako to funkcionira u praksi. Koristit ćemo spoj prema Slici 61., na kojem su dva alfanumerička displeja povezana s priključcima razvojnog sustava Shield-A SDA i SCL preko svojih serijskih I2C LCD-modula. Na iste priključke povezan je i I2C-ekspander s četiri tipkala (jednako dobro će poslužiti i modul iz “kućne radinosti” sa Slike 58., o kojem smo pisali u prošlom nastavku). Svi ovi moduli napajaju se s priključaka razvojnog sustava VCC i GND. Kako bi ovakva konfiguracija mogla raditi, nužno je osigurati da su adrese modula različite. Upotrijebljeni serijski I2C LCD-moduli imaju na sebi čip PCF8574A, a adresni pinovi A2-A0 su im postavljeni u stanje “111” na prvom i “110” na drugom modulu. Upotrijebljeni I2C-ekspander ima na sebi čip PCF8574 (kao i modul iz prošlog nastavka) i adresnu kombinaciju “111”. Zbog toga će adrese spojenih modula biti: “01001110” za I2C-ekspander “01111110” za LCD1 i “01111100” za LCD2. Na isti način bi na konektor J1 moglo biti povezano još ovakvih ili drugih I2C-modula: dokle god su im adrese različite, mikroupravljač može uspostaviti “privatnu” komunikaciju sa svakim od njih! 18. programski zadatak: Za sklop prema Slici 61. napisati program koji će

• na prvom alfanumeričkom displeju ispisati poruku *** LCD1 *** *** Shield-A *** • na drugom alfanumeričkom displeju ispisati poruku *** LCD2 *** * ABC tehnike * • pritiscima na tipkalo S0 naizmjenično selektirati LCD1 i LCD2, • pritiscima na tipkalo S1 naizmjenično paliti i gasiti pozadinsko osvjetljenje selektiranog displeja, • pritiscima na tipkalo S2 pomicati sadržaj selektiranog displeja ulijevo, • pritiscima na tipkalo S3 pomicati sadržaj selektiranog displeja udesno. Rješenje Bascom-AVR-a (program Shield-A_18. bas) U Bascom-AVR-u nije moguće konfigurirati alfanumerički displej sa serijskim I2C-modulom, pa smo njegove mogućnosti nadogradili bibliotekom I2CLCD.sub. Kada je dodamo našem programu, ona će “presretati” Bascomove LCD-naredbe i “preraditi” ih u oblik u kojem ih zatim šalje modulu s čipom PCF8574A preko I2C-sabirnice. Pored toga, biblioteka sadrži nekoliko novih naredbi koje će nam olakšati rad s LCD-om. Koristit ćemo ove naredbe: • Lcd$init: Prijavljuje programu adresu LCD-a i inicijalizira LCD; naredbu je potrebno izvršiti za svaki LCD spojen na sabirnicu. • Lcd$select: Selektira jedan od LCD-a spojenih na sabirnicu; nakon toga, sve LCD-naredbe prosljeđivat će se tom LCD-u. • Lcd$on: Uključuje prikaz na selektiranom

LCD-u. • Lcd$off: Isključuje prikaz na selektiranom

LCD-u. • Lcd$bl_on: Uključuje pozadinsko osvjetljenje selektiranog displeja. • Lcd$bl_off: Isključuje pozadinsko osvjetljenje selektiranog displeja. Od koristi će nam biti i varijabla Lcd$current iz biblioteke, jer ona sadrži adresu trenutno selektiranog LCD-a. Adresa je zapisana u obliku četverobitnog binarnog broja “xaaa”, pri čemu x = 0, ako se koristi čip PCF8574, odnosno x = 1, ako se koristi čip PCF8574A, dok je “aaa” stanje adresnih bitova A2-A0. Isti oblik adrese koriste i naredbe Lcd$init i LCD$select. Program ćemo započeti konfiguracijom LCD-a, nakon čega uključujemo biblioteku I2CLCD.sub: Config Lcd = 16 * 2 $include „I2CLCD.sub“ Još moramo definirati i koje ćemo pinove mikroupravljača koristiti za I2C-komunikaciju: Config Sda = Portc.4 Config Scl = Portc.5

I2cinit Sada ćemo inicijalizirati LCD1 (čip PCF8574A, A2-A0 = “111”) i odmah na njemu ispisati pozdravnu poruku: Lcd$init &B1111

Lcd „*** LCD1 ***“ Home L Lcd „** Shield-A **“ Isto ćemo ponoviti s LCD2 (čip PCF8574A, A2-A0 = “110”): Lcd$init &B1110

Lcd „*** LCD2 ***“ Home L Lcd „* ABC tehnike *“ Primijetimo ovdje kako je nakon naredbe Lcd$init odnosni LCD odmah i selektiran, pa će se sljedeće poruke ispisati na njemu. Prije ulaza u glavnu petlju još ćemo morati konfigurirati I2C-ekspander, kako bismo mogli očitavati stanja na njega spojenih tipkala S0-S3: Za_pcf = &B11111111 Gosub Pcf_pisi Pojedinim bitovima u kojima su zapisana trenutna stanja tipkala pridijelili smo alternativne nazive S0-S3, jer će tako program biti “čitljiviji”: S0 Alias Iz_pcf.0 S1 Alias Iz_pcf.1 S2 Alias Iz_pcf.2 S3 Alias Iz_pcf.3 O potprogramima Pcf_pisi i Pcf_citaj, kao i općenito o načinu na koji koristimo taj modul, detaljno smo pisali u prethodnom nastavku. U glavnoj petlji očitavamo stanja tipkala S0-S3 i, ako je neko od tipkala pritisnuto, izvršavamo pridruženi potprogram.

Do Gosub Pcf_citaj If S0 = 0 Then Gosub S0_sub Elseif S1 = 0 Then Gosub S1_sub Elseif S2 = 0 Then Gosub S2_sub

Elseif S3 = 0 Then Gosub S3_sub End If

Loop Kako smo postavili u zadatku, ako je pritisnuto tipkalo S0 moramo ustanoviti koji je LCD trenutno selektiran i zatim selektirati onaj drugi. U tome će nam pomoći varijabla Lcd$current iz biblioteke I2CLCD.sub: S0_sub: If Lcd$current = &B1111 Then Lcd$select &B1110 Else Lcd$select &B1111 End If Promjenu ćemo signalizirati tako što ćemo nekoliko puta isključiti i ponovo uključiti prikaz na upravo selektiranom LCD-u For Brojac = 1 To 4 Waitms 250 Lcd$off Waitms 250 Lcd$on Next i onda pričekati da se tipkalo otpusti, kako bismo mogli krenuti dalje: While S0 = 0

Slika 62. Prikaz I2C-ekspandera s kratkospojnicima žute boje Waitms 25 Gosub Pcf_citaj Wend

Return Pritiskom na S1 moramo upaliti ili ugasiti pozadinsko osvjetljenje selektiranog displeja. Trenutno stanje pozadinskih osvjetljenja upisano je u varijablama Lcd1_bl i Lcd2_bl za prvi i drugi LCD, pri čemu “0” znači da je osvjetljenje ugašeno, a “1” da je uključeno. U potprogramu moramo prvo ispitati koji je LCD trenutno selektiran i ispitati stanje njegovog pozadinskog osvjetljenja kako bismo ga mogli promijeniti: S1_sub: If Lcd$current = &B1111 Then If Lcd1_bl = 0 Then Lcd$bl_on Lcd1_bl = 1 Else Lcd$bl_off Lcd1_bl = 0 End If

... U nastavku ćemo ponoviti isto za LCD2 i zatim pričekati da se S1 otpusti. Potprogram za pomak prikaza na displeju ulijevo koristi Bascomovu naredbu Shiftlcd Left, nakon čega čeka da se tipkalo otpusti: S2_sub: Shiftlcd Left While S2 = 0 Waitms 25 Gosub Pcf_citaj Wend

Return Potprogram S3_sub za pomak prikaza udesno vrlo je sličan, samo se u njemu koristi naredba Shiftlcd Right i čeka da se otpusti tipka S3. Rješenje Arduina (program Shield-A_18.ino) Zna se dogoditi da serijski I2C LCD-moduli koji imaju na sebi čip PCF8574A imaju i drugačiju adresu. Umjesto do sada spomenute “0B01111111” (ili heksadecimalno “0x3F”, mogu imati “0B00100111” (ili heksadecimalno “0x27”) što je ista adresa koju ima naš I2C-ekspander. U tom ćemo slučaju promijeniti adresu I2C-ekspandera pomoću kratkospojnika u “0B00100100” (ili heksadecimalno “0x24”) kao što je prikazano na Slici 62. Zbog toga će adrese spojenih modula biti: “0B00100100” (“0x24”) za I2C-ekspander

This article is from: