Vezérlés és irányítástechnológia (Mikroprocesszoros irányítás) 2.1. Lámpa bekapcsolása 2.2. Lámpa villogtatása 2.3. Futófény programozása 2.4. Fény futtatása balra, jobbra 2.5. Fénysáv megjelenítése 2.6. LED (Light Emitting Diode) impulzusüzemű működtetése
2.1. Lámpa bekapcsolása Kapcsoljunk a PORT B nulladik bitjéhez (RB0) 12 V-os izzólámpát, vagy LED-et (ügyelve a LED polaritására). A feladat megoldásához a mikrokontroller nem használt funkcionális egységeit az ábrázolásból elhagyva az alábbi egyszerűsített ábrát kapjuk: 12 V; 200 ma +Ut RA0 RA2 RA4 RA1 RA3 RA5 RESET RB0 RB2 RB4 RB6 RB1 RB3 RB5 COM RB0 +5V PIC 16F873 µp RB5 RB4 RB6 RB3 RB1 RB2 RB7 A működtető program: ;compilernek szóló direktíva ;compilernek szóló direktíva ;lapozzunk az 1. memória bankba movfw 0FFh ;mozgassuk W-be az 11111111=FFh számot ;ezáltal porta minden bitje input ;portb minden bitje output ; ;porta digitális input (nem analóg) ;lapozzunk vissza a 0. memória bankba eleje bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre goto eleje ;ugorjunk az elejére ;vége a programnak Figyeljük meg, hogy a sorkapocshoz kapcsolt lámpa (LED) világít a bsf portb,0 végrehajtásakor, ugyanakkor a hétszegmenses kijelző felső (a ) szegmense sötét marad.
2.2. Lámpa villogtatása Az összeállíts azonos a 2.1. fejezet ábrájával. A compilernek szóló direktívák is azonosak, az adatirányt beállító programrész magyarázatát elhagytuk a programból. A lámpa villogtató programja: villog bsf portb,0 ;a lámpa ég ;időzítés, kb.0,3 s bcf portb,0 ;a lámpa nem ég ;időzítés, kb.0,3 s goto villog ;ugorjunk a villog címkére var movlw b 00000110 movwf 022h decfsz 022h,1 020h és 021h regiszterek sorozatos dekrementálásával az időzítés kb. 50 ms 022h regiszter decimális tartalma 6. A var szubrutin időzítése 6 x 50 ms, azaz 300 ms. Időzítésre gyakran fogjuk használni a fenti, vagy algoritmusban ehhez hasonló szubrutint. Induláskor a regiszterek tartalma 00000000, amely az első dekrementálás után átbillen 11111111 (255 d ) értékre. Ezt követően a sorozatos dekrementálás eredményei: 11111110 (254 d ), 11111101 (253 d ), A dcfsz utasítás jelentése: decrement f, skip if zero, azaz csökkenti az f című memóriarekesz tartalmát eggyel, míg az nullává nem válik. Ekkor átugorja a következő utasítást. Az eredmény f,1 esetén f-ben, míg f,0 esetén a workregiszterben keletkezik. Pl. az alábbi részlet magyarázata: A 020h regiszter dekrementálása, az eredmény képzése a 020h-ban, 256 lépés után értéke nullává válik, ekkor átugorja a következő () sort és kezdi a 021h dekrementálását. 2.3. Futófény programozása A mikroprocesszoros oktató panelon a portb 8 bitje csatlakozik a hétszegmenses kijelzőhöz (RB0,, RB7), ugyanakkor a nagyobb áramú fogyasztókat tápláló erősítő (ULN2004A integrált áramkör) csak 7 csatornás. A nyolcadik lámpát egy külön panelon megépített kis erősítő működteti, ezen feladat gyakorlásához olyan processzoros oktató eszköz alkalmas, amelyen megtalálható az RB7-es sorkapocs is (lásd ábra) A futófény nem más, mint a lámpák egymás utáni bekapcsolása, kikapcsolása. Ezt elérhetjük, ha az egyes biteket bsf, bcf utasításokkal felprogramozzuk, és természetesen közöttük hagyunk várakozási időt a szem- és az izzólámpa tehetetlensége miatt. Elegánsabb megoldást kínál a
rotate right f rrf rotate left f rlf utasítás, amely forgatja a regiszter tartalmát jobbra, illetve balra. Valamely biten lévő lámpát (az erősítőt is figyelembe véve) H-szittel lehet kigyújtani, ez a logikai 1 értéknek felel meg. Legyen a portb regiszter tartalma: 0 0 0 0 0 0 0 1 Ebben az esetben az RB0-hoz kapcsolt lámpa világít. Forgassuk a regiszter tartalmát balra úgy, hogy a forgatás eredménye ugyanebben a regiszterben keletkezzen, majd ismételten adjuk ki az rlf utasítást: 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 RA0 RA2 RA4 RA1 RA3 RA5 RB0 RB2 RB4 RB6 RB1 RB3 RB5 COM RB7 +Ut RESET RB0 +5V RB5 RB1 PIC RB6 16F873 µp RB4 RB3 RB2 RB7 A forgatás eredménye keletkezhet ugyanabban a regiszterben, vagy a workregiszterben: Utasítás Forgatás eredménye portb-ben rlf portb,1 Forgatás eredménye W-ben rlf portb,0
Futófény programja: movlw b 00000000 ;az átvitel bit nullázása ;az átvitel bit nullázása rlf portb,1 ;az átvitel bit nullázása movlw b 00000001 ;egy lámpa ég fut rlf portb,1 goto fut var movlw b 00000110 movwf 022h decfsz 022h,1 2.4. Fény futtatása balra, jobbra Futtassuk a fényt hétszer balra, majd hétszer jobbra. A futások számát a 026h regiszterben adjuk meg: movlw b 00000111 movwf 026h A futások számlálását a bal illetve a jobb címke alatt írtuk meg. A rotálás a balra, jobbra címke alatt található. Program: movlw b 00000000 rlf portb,1 movlw b 00000111 movwf 026h movlw b 00000001 bal decfsz 026h,1
goto movlw movwf rrf movlw movwf movlw movwf balra b 00000000 portb portb,1 b 00000111 026h b 00000001 portb
jobb decfsz 026h,1 goto jobbra vege goto vege balra rlf portb,1 goto bal jobbra rrf portb,1 goto jobb var movlw b 00000110 movwf 022h decfsz 022h,1 A program futást végteleníthetjük, ha elhagyjuk a vege címkét és ezt a sort módosítjuk: goto eleje. Az eleje címke a zöld színű direktívák után következik. 2.5. Fénysáv megjelenítése Nyolc lámpát kapcsolunk a portb-hez, a lámpákat egymás után bekapcsoljuk, de a futófénytől eltérően a korábban bekapcsolt lámpát égve hagyjuk. Program: eleje movlw b 00000001 movlw b 00000011 movlw b 00000111 movlw b 00001111 movlw b 00011111 movlw b 00111111
movlw b 01111111 movlw b 11111111 movlw b 00000000 goto eleje var movlw b 00000110 movwf 022h decfsz 022h,1 2.6. LED (Light Emitting Diode) impulzusüzemű működtetése A kisáramú, látható fényű LED-ek szokásos munkaponti árama 10 20 ma, ekkor katalógus adatok szerinti élettartama 500 ezer üzemóra (57,8 év). Az emittált fényteljesítmény az árammal arányosan növelhető, de túlmelegedés következtében rövid időm belül tönkremennek. A fényteljesítmény növelésének útja (az átlagos disszipáció túllépése nélkül) a LED-ek impulzus üzemű működtetése. A LED-ek tehetetlensége sokkal kisebb, mint az izzólámpáké. A gyakorlaton használt LED-eknél a bekapcsolástól a teljes fényáram emittálásáig eltel idő 10 100 ns. A PIC 16F873 processzor 16 MHz-es órajellel 0,25 µ s hajt végre egy utasítást, míg a goto végrehajtása kétszer ennyi időt igényel. Ebből következik, hogy a processzor utasításait a LED képes követni. az alábbi szubritin időzítése kb. 5 µs. ido movlw b 00000110 movwf 026h v02 decfsz 026h,1 goto v02 Készítsünk programot 1:3 jel-szünet arányú, azaz 33,3 %-os kitöltési tényezőjű táplálásra. A LED fényereje kb. 2,5- szeresére nő, a normál áramú LED-hez képest. Az impulzus üzemű LED-et 33 ohmos áramkorlátozó ellenálláson keresztül kötjük a processzoros panelhoz a portb nulladik bitjéhez. Fényerő összehasonlítás céljából a portb 1. bitjéhez egy normál előtét ellenállásos (330 ohmos) LED is be van kapcsolva, ez a program futás alatt folyamatosan világít. Midkét LED azonos típusú, energiafogyasztása azonos.
bsf portb,1 eleje bsf portb,0 call ido bcf portb,0 call ido call ido call ido goto eleje ido movlw b 00000110 movwf 026h v02 decfsz 026h,1 goto v02 33 ohm 330 ohm +Ut RA0 RA2 RA4 RA1 RA3 RA5 RESET RB0 RB2 RB4 RB6 RB1 RB3 RB5 COM RB0 +5V PIC 16F873 µp RB5 RB4 RB6 RB3 RB1 RB2 RB7