PÉCSI TUDOMÁNYEGYETEM

Természettudományi Kar

Matematikai és Informatikai Intézet

INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK

 

 

 

 

 

Halász Antal - dr. Keresztesi Miklós:

 

DIGITÁLIS ELEKTRONIKA

Mikroprocesszoros laboratóriumi gyakorlatok

 

Lektor:

 

Drommer Bálint

 

 

 

 

A laboratórium fejlesztésében közreműködtek:

Dárdai Géza

 demonstrátor

(2., 4.1. fejezet)

Császár Csutorás Péter

demonstrátor

(3., 4.2.  fejezet)

Kovács Péter

demonstrátor

((4.3, 4.4. fejezet)

 

 

 

Pécs, 2003.

Bevezetés

 A digitális elektronikus rendszerekben az információt diszkrét jelek reprezentálják. Míg az analóg jelek egy adott intervallumban az idő függvényében minden értéket felvehetnek, a digitális jelek csak meghatározott amplitúdójúak lehetnek. Kiemelt jelentőségűek a bináris digitális jelek. A kettes számrendszerben mindössze két számjegyre van szükség, a 0-ra és az 1-re. Sokkal könnyebb olyan elektronikus áramköröket megvalósítani, amelyek csupán két jelszintet kezelnek. Ez az oka annak, hogy a számítógépek bináris számokkal dolgoznak. Az aritmetikai műveletek visszavezethetők logikai műveletekre, a logikai értékekhez bináris számokat rendelhetünk: az igazhoz az 1-es, a hamishoz a 0-s számjegyet. Egy logikai áramkör bemeneteinek vagy kimenetének logikai értéke lehet 1 (igaz), lehet 0 (hamis).

 Elektronikus rendszerekben a logikai értéket feszültség szintek hordozzák. Egy logikai kapu által megvalósított logikai függvény azonban nem egyértelmű, ha a logikai érték és feszültség szintek közötti kapcsolat nincs tisztázva. A hozzárendelés önkényes is lehet, de egy készüléken belül egységesnek kell lennie. Jelen szakaanyagunkban az alábbi összerendelést alkalmazzuk: a logikai 1 értékhez magas (High), a logikai 0 értékhez az alacsony (Low) feszültség szintet rendeljük. A magas feszültség szint +5 V, vagy ennél kicsit kisebb feszültség,  míg az alacsony feszültség szint a 0 V-ot, vagy annál kicsit magasabb feszültség szintet jelenti. Ezen hardveres jellemzőket Assambly programmal állítjuk be. Ha magas feszültség szintet akarunk elérni egy rendszerben (pl. 8 bites regiszterben, annak valamelyik bitjén), akkor a Set kulcsszóval a magas, a Clear kulcsszóval az alacsony feszültség szintet programozzuk. Mivel egy elektronikus rendszerben a külvilág zavaró hatásának csökkentésére gyakran földelik a tápegység negatív pólusát, ezért az alacsony (Low) feszültség szint gyakorlatilag föld (GND) potenciált jelent. A fenti összerendelést táblázatosan is összefoglaljuk:

 

 

 

 

  A mikroprocesszorok megjelenését az elektronika látványos fejlődése előzte meg, mint­egy kialakítva  a µP megalkotásának előfeltételeit. 1948-ban megjelent az elektronikus elven működő erősítő elem a tranzisztor. A Fairchild  laboratórium munkatársai felismerték, hogy a planáris tech­nológiával kialakított tranzisztorokat magán a szilícium szeleten is összehuzalozhatják. 1959-ben kidolgozták a szilícium alapú planáris integrált áramköröket. Az amerikai Intel cég a 60-as évek végén már nagy mennyiségben gyártott LSI (nagy integráltsági fokú) áramkörö­ket. Ekkor vetette fel az Intel egyik fejlesztő mérnöke (M. E. Hoff), hogy a számológépekhez a sokféle céláramkör helyett egyetlen, programozható működésű áramkört kellene tervezni és kü­lönböző alkalmazásokban ugyanaz az IC dolgozna, csak éppen más és más programot hajtana végre. 1971-ben piacra került az Intel 4004 típusú mikroprocesszora 2300 tranzisztor funkció­val.

 Napjainkban elterjedtek  az irányítástechnikában a PIC mikro vezérlők. Jellemzőjük a redukált utasításkészlet (RISC processzor), azaz utasításkészletük kevés és egyszerű (bit-, bájt műveletek, konstans és vezérlő utasítások). A memória szervezése Harvard architektúrájú: kü­lön program- és külön adat tárolót használ. Eltérő szélességű adat és programbusz használható. A program- és adat tároló flash EPROM-os, elektronikusan tetszőleges számban törölhető és újraírható.      

A mikroprocesszorok megjelenésének és elterjedésének eredményeként több nagyságrenddel megnőtt a berendezésekbe beépíthető komplexitás felső határa. Ezáltal minőségileg új, az eddigiekhez képest sokkal nagyobb teljesítőképességű  termékek, termékcsaládok jöttek létre. Jegyzetünk célja, bevezetést nyújtsunk a µP alkalmazásának technikájába. A szükséges Assambly alapismereteket az 1. sz. szakirodalom tartalmazza.

1. PIC 16F873 mikrokontroller  (µP)

        A mikrocontroller (µP) néhány kiegészítő áramköri elemmel együtt nyomtatott áramköri lapon van elhelyezve. Alkalmazói oldalról tekintve a következő funkcionális egységek találhatók rajta (ábra a következő oldalon):

1.1. Tápfeszültség csatlakozások. A GND és +Ut közé kell kapcsolni a panel működtetéséhez szükséges tápfeszültséget (12 V), ebből stabilizátor áramkör állítja elő a kontroller és kiegészítő áramköreinek 5 V-os tápfeszültségét. Az 5 V és az Ut GND pontja közös, az 5 V terhelhetősége a mikrokontroller tápellátása miatt korlátozott, erről max. 100 mA-es beavatkozók működtethetők.

1.2. Csatlakozás a külvilág felé: RA0, RA1,RA2, RA3, RA4, RA5. A panel tetején található sorkapcsokhoz input  (szükség esetén) output eszközöket köthetünk. A fenti csatlakozó pontokat PORTA -nak nevezzük.

1.3. Az RA0 és RA1 két 10 bites A/D konverter bemenetei. A mérendő feszültség + pólusai csatlakoznak az RA0 és/vagy RA1 pontokhoz, a mérendő feszültség negatív pólusát valamelyik GND ponthoz kötjük. A konverzió programozásnak gyakorlásához két potenciométer is található a panelon, amelyek  0 ...5 V feszültség beállítására alkalmasak. Akkor kapcsolódik ez a feszültség az RA0 és/vagy RA1bemenetre, ha a JP1, és/vagy JP2 dugaszolva van. Amennyiben a dugaszokat eltávolítjuk, akkor RA0, RA1 külső digitális jelet fogadhat.  Digitális inputként használva, ezt a két bitet is fel kell húzni egy - egy ellenállással +5V-ra, hasonlóan a többihez (RA2, RA3, RA4, RA5).

1.4. Input jelek beadására alkalmas nyomógombok, amelyek az RA2, RA3, RA4, RA5 kontroller lábakhoz csatlakoznak, lenyomott állapotban GND-t, azaz logikai 0 értéket kapcsolnak. A nyomógombok nyugalmi helyzetében az adott kontroller láb logikai 1 értékű. A kontroller a külvilágból is fogadhat digitális input jeleket, ilyenkor ezeket a GND és az RA2, RA3, RA4, RA5 sorkapcsokhoz kötjük.

1.5. Csatlakozás a külvilág felé: RB0, RB1, RB2, RB3, RB4, RB5, RB6. A csoport neve PORTB.  A PORT A-hoz hasonlóan a kontroller ezen pontjai csatlakoznak a külvilág  felé. Míg a PORT A-t  inputként, a PORT B-t outputként fogjuk használni. Motor, izzólámpa, relé egyik végét közvetlenül csatlakoztatjuk valamelyik sorkapocshoz, a fogyasztó másik végét - névleges feszültségének megfelelően -  a szükséges tápfeszültség + pólusához  kötjük. Tápfeszültségként használhatjuk a panel +Ut vagy + 5 V pontjait, de külső tápfeszültség is alkalmazható, melynek maximális értéke 63 V. A PORT B maximális terhelhetősége 700 mA. Az alábbi ábra a panelra épített meghajtó tranzisztor használatát  mutatja induktív fogyasztó esetén. Pl.  izzólámpánál a védődiódát (COM) nem kell bekötni. Külső tápegység alkalmazása esetén a két földpontot (negatív pólust) össze kel kötni.
 

1.6. A PORT B alapértelmezés szerint kimenetként használatos, az RB0, ..., RB7 hétszegmenses kijelzőhöz csatlakozik és jelzi a port bitjeinek logikai állapotát. A kijelző közös anódú.

1.7. RESET  áramkör. a mikroprocesszort alap helyzetbe állítja.

1.8. RS232 csatlakozó: soros vonalon kommunikációt biztosít a mikrokontroller és IBM PC számítógép között. Használata az 1. szakirodalomban található meg, jelen jegyzetben ezt a csatlakozót nem használjuk.

1.9. RS485: a mikrokontroller panelok ezen csatornán felfűzhetők és egymással kapcsolatba léphetnek. Használata az 1. szakirodalomban található meg, jelen jegyzetben nem használjuk.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Beavatkozó szervek csatlakoztatása a mikrokontrollerhez

 Technikai rendszerek irányításában leggyakrabban alkalmazott beavatkozó szervek a lámpa, DC (Direct Current: egyenáramú) motor, léptető motor, mágnes szelep, ... Vizsgáljuk meg ezek vezérlését mikrokontrollerről.

  1. 2.1. Lámpa bekapcsolása 

        Kapcsoljunk a PORT B nulladik bitjéhez (RB0) 12 V-os izzólámpát. 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:

Izzó helyett LED-et is használhatunk

 
A működtető program:
 

 list p=16f873                                ;compilernek szóló direktíva

        #include „p16873.inc”  ;compilernek szóló direktíva

 bsf  status,5  ;lapozzunk az 1. memória bankba

 movfw  0FFh   ;mozgassuk W-be  az 11111111=FFh számot

 movwf  trisa   ;ezáltal porta minden bitje input

 clrf  trisb   ;portb minden bitje output

 movlw  06h   ;

 movwf  adcon1   ;porta digitális input (nem analóg)

 bcf  status,5  ;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

 end     ;vége a programnak

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, ezért a további programokban ezt a részt nem ismételjük meg.  Az adatirányt beállító programrész magyarázatát elhagytuk a programból. A villogtató program:

  bsf                status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5  

villog bsf  portb,0   ;kapcsoljuk a B port 0. bitjét logikai 1 értékre

call  varakoz  ;időzítés, kb.0,147 s (órajel 16 MHz)

bcf  portb,0   ;kapcsoljuk a B port 0. bitjét logikai 0 értékre

call  varakoz  ;időzítés, kb.0,147 s (órajel 16 MHz)

 goto  villog   ;ugorjunk a villog címkére

varakoz

v03 decfsz  020h,1   ;dekrementáljuk a rekeszt

 goto  v03

 decfsz  021h,1   ;dekrementáljuk a rekeszt

 goto   v03

 return

end     ;vége a programnak

 

  1. 2.3. DC motor bekapcsolása 

A motor névleges feszültsége Ut = 12 V, vezéreljük a PORT B első (RB1) bitjéről. Induktív fogyasztóknál a kikapcsolási önindukciós feszültség károsíthatja a meghajtó tranzisztort, védelme érdekében használjuk a panelra épített védődiódát (a COM vezetéket is be kell kötni az ábra szerint).

 bsf                status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5  

forog bsf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 1 értékre, a motor

 forog

call  varakoz ;időzítés,

bcf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 0 értékre, a motor áll

motor goto  motor  ;ugorjunk a motor cimkére

varakoz

 movlw  b’0000 1111’ ;a 2.2. fejezetben alkalmazott időzítést 15-szeresére

 növeljük

 movwf  020h

v03 decfsz  021h,1

 goto  v03

 decfsz  022h,1

 goto  v03

 decfsz  020h,1

 goto  v03

 return

 end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A varakoz szubrutin rövid magyarázata:

  • .Meghíváskor a work regiszter felveszi a bináris 00001111 értéket. 

  • .A work regiszter tartalmát átírjuk a 020 hexa című rekeszbe 

  • .Dekrementáljuk a 021 hexa című 8 bites rekeszt, míg nulla nem lesz (eltelt idő 192 µs) 

  • .Dekrementáljuk a 022 hexa című rekeszt. Minden egyes dekrementálásnál a 021 hexa rekeszt 256-szor visszafelé léptetjük (eltelt idő 192 x 3 x 256 µs = 147 ms) 

  • .A 147 ms időzítést többszörözzük a 020 hexa című rekesz értékével. Pl. tizenötszörözzük (2205 ms). 

  1. 2.4. DC motor forgásirány változtatása (jelfogós kapcsolás) 

 Kis teljesítményű motorok állórésze permanens mágnes, forgórésze tekercselt. Forgásirány változtatáshoz elegendő a tápfeszültség két végét felcserélni, ezáltal megváltozik a motoron áthaladó áram iránya. A gyakorlat igényeit figyelembe véve még szükség van a motor elindítására és megállítására.

 A forgásirány váltást J1 jelfogó, a ki-be kapcsolást J2 valósítja meg. A jelfogók tekercsét a PORT B két bitje, az  RB0, RB1 működteti. Ha mindkettő árammentes (bcf portb,0   bcf portb,1), akkor a motor áll. Ha J2-t bekapcsoljuk (bsf portb,1), akkor a motor  forog. A forgásirányt bcf portb,0 vagy bsf portb,0 állítja be.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Utasítás

J1

J2

Motor

bcf            portb,0

bcf            portb,1

áram mentes

áram mentes

áll

bcf            portb,0

bsf            portb,1

áram mentes

meghúz

forog

egyik irány

bsf            portb,0

bsf            portb,1

meghúz

meghúz

forog

másik irány

 

 

A következő program a motort bekapcsolja, forgat egyik irányban, majd forgat a másik irányban. A motor ezután megáll.

 

 bsf  status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

  

 bcf  portb,0

bsf  portb,1  ;motor forog, egyik irány

 call  varakoz ;időzítés

bcf  portb,0

bcf  portb,1  ;a motor áll

call  varakoz ;időzítés

bsf  portb,0

bsf  portb,1  ;motor forog, másik irány

call  varakoz ;időzítés

bcf  portb,0

bcf  portb,1  ;motor áll

motor goto  motor  ;ugorjunk a motor címkére

varakoz

 movlw  b’00011111’ 

 movwf  020h

v03 decfsz  021h,1

 goto  v03

 decfsz  022h,1

 goto  v03

 decfsz  020h,1

 goto  v03

 return

 end

  1. 2.5. DC motor forgásirány változtatás (elektronikus kapcsolás) 

 Az RB0 és RB1 pontok a mikrokontrolleres panelon nyitott kollektoros meghajtó tranzisztorokhoz csatlakoznak. Iktassunk be mindkét kollektor vezetékébe egy-egy munkaellenállást (510 ohm) és működtessük 5 V-ról. A munkaellenállások egyben a Schmitt-triggerek felhúzó ellenállásai, az inverter kimenetén logikai 0 érték (L-szint) van. A T1 - T3, valamint a T2 - T4 tranzisztor nem vezet, a motor áll. Programmal állítsuk be  a PORT B nulladik  bitjét logikai 1 értékre: bsf portb,0. A baloldali Schmitt-trigger bemenete GND-re kapcsolódik, az invertált kimenet nyitja T1 - T3 tranzisztorokat, a motoron áram folyik.  A PORT B első bitjét logikai 1 értékre állítva  (bsf portb,1) nyit a T2 - T4 tranzisztor és megváltozik a motor forgásiránya. Ha mindkét bitet logikai 1 értékre programozzuk, akkor a tápegység zárlatba kerül T1 ... T4 tranzisztorokon keresztül, ezért ez tiltott állapot. A forgásirány váltó működése táblázatosan:

 

 

 

 

 

Schmitt-trigger

bem.         kim.

T1 -T3

T2 - T4

Motor

bcf      portb,0

bcf      portb,1

1            0

nem vezet

nem vezet

áll

bsf      portb,0

bcf      portb,1

bal oldali

0            1

vezet

nem vezet

forog

egyik irány

bcf      portb,0

bsf      portb,1

jobb oldali

0            1

nem vezet

vezet

forog

másik irány

bsf      portb,0

bsf      portb,1

Tiltott állapot !

Forgassuk a motort egyik, majd másik irányba!

  bsf  status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

 bsf  portb,0  

bcf  portb,1  ;motor forog, egyik irány

call  varakoz ;időzítés

bcf  portb,0 

bcf  portb,1  ;a motor áll

call  varakoz ;időzítés

bcf  portb,0

bsf  portb,1  ;motor forog, másik irány

call  varakoz ;időzítés

bcf  portb,0

bcf  portb,1  ;motor áll

motor goto  motor  ;ugorjunk a motor cimkére

varakoz

 movlw  b’00111111’ 

 movwf  020h

v03 decfsz  021h,1

 goto  v03

 decfsz  022h,1

 goto  v03

 decfsz  

 return

 end

  1. 2.6. DC motor fordulatszám szabályozása 

 A fordulatszám legegyszerűbb formája, ha névleges feszültsége alatt üzemeltetjük, ekkor fordulatszáma kisebb lesz a névleges fordulatszámnál. Hátránya ennek a megoldásnak, hogy a  kapocsfeszültség csökkentése  jelentősen csökkenti a motor tengelyen leadott nyomatékét. A gyakorlatban ezért inpulzus - szünet arány szabályozással szokás a fordulatszámot változtatni. A szabályozás elve:

 

 

 

 

 

 

 

 

 A motor csatlakoztatása a mikrokontrollerhez megegyezik a 2.3. fejezetben bemutatott kapcsolással. A T periódus időt a motor mérete, tehetetlensége szabja meg. A laboratóriumban használt kis motorok esetében 10 ms körüli érték, kísérletileg célszerű meghatározni. A motor teljes fordulatszámmal forog, ha tki=0. Az alábbi beállítások fokozatosan csökkenő fordulatszámot eredményeznek:

 

 

 

020 rekesz

 

020 rekesz

 

020 rekesz

tbe

   7 ms

00100100

   4 ms

00010101

   1 ms

00000101

tki

   3 ms

00001111

   6 ms

00100000

   9 ms

00101111

T

 10 ms

 

 10 ms

 

 10 ms

 

 

A táblázatban a 020 hexadecimális című rekesz kezdő értékét is megadtuk. A következő program a  tbe = 4 ms (00010101) és tki = 6 ms (00100000) impulzus - szünet arányt valósítja meg.

 bsf  status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

forog bsf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 1 értékre

call  be  ;időzítés, kb.4 ms (órajel 16 MHz)

bcf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 0 értékre

call  ki  ;időzítés, kb.6 ms (órajel 16 MHz)

 goto  forog  ;ugorjunk a forog  címkére

be movlw  b’00010101’

 movwf  020h

v01 decfsz  021h,1

 goto  v01

 decfsz  020h,1

 goto  v01

 return

ki movlw  b’00100000’

 movwf  020h

v02 decfsz  021h,1

 goto  v02

 decfsz  020h,1

 goto  v02

 return

 end

 

2.7. Gamma típusú léptető  motor vezérlése

A léptető  motor forgórésze az állórészre kapcsolt áramimpulzus hatására meghatározott szöggel elfordul.

A működtető program algoritmusa: kapcsoljunk feszültséget a PB0 tekercsre, ekkor az áramiránynak megfelelően magához vonzza a forgórész ellentétes mágneses pólusát A forgórész, mint mechanikai rendszer tehetetlensége miatt ezt az állapotot megfelelően időzíteni kell. Ezután PB0-ról lekapcsoljuk a feszültséget és gerjesztjük az óramutató járásával egyezően vagy ellentétesen következő  tekercset. A fenti algoritmust folytatva a szerkezetre jellemző szöggel elfordul a tengelyt. A forgásirányt a tekercsek bekapcsolási sorrendje, a fordulatszámot az időzítés mértéke határozza meg. Az időzítés legkisebb értékét kísérletileg kell meghatározni.

 bsf                status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

forog bsf  portb,0   ;PB0 feszültséget kap, a tengely elfordul

 call  timer   ;időzít

 bcf  portb,0

 bsf  portb,1   ;PB1 feszültséget kap, a tengely elfordul

 call  timer   ;időzít

 bcf  portb,1

 bsf  portb,2   ;PB2 feszültséget kap, tengely  elfordul

        call  timer   ;időzít

 bcf  portb,2

 bsf  portb,3   ;PB3 feszültséget kap, a tengely elfordul

 call  timer   ;időzít

 goto  forog 

timer

movlw  b’10000000’  ;ezt az értéket változtatva,

 szabályozható a fordulatszám

 movwf  020h

v02 decfsz  021h,1

 goto v02

 decfsz 020h,1

 goto v02

 return

 end

 

 

 

 

 

2.8. Mágnes szelep vezérlése

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Működtető program:

 bsf                status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

adagol 

bsf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 1 értékre

call  varakoz ;időzítés

bcf  portb,0  ;kapcsoljuk a B port 0. bitjét logikai 0 értékre

call  varakoz ;időzítés

 goto  adagol  ;ugorjunk az adagol címkére

varakoz

 movlw  b’00001111’

 movwf  022h

 

v03 decfsz  020h,1  ;dekrementáljuk a rekeszt

 goto  v03

 decfsz  021h,1  ;dekrementáljuk a rekeszt

 goto   v03

 decfsz  022h,1  ;dekrementáljuk a rekeszt

 return

end    ;vége a programnak

 

  1. 2.9. Hangszóró illesztése kimenethez 

 

 

 

 

 

 

 

 

 

 

 

Program:

 bsf                status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

 

 

 

 

zum bsf portb,6  ;kapcsoljuk a B port 0. bitjét logikai 1 értékre

call frek  ;időzítés, kb.4 ms (órajel 16 MHz)

bcf portb,0  ;kapcsoljuk a B port 6. bitjét logikai 0 értékre

call frek  ;időzítés, kb.6 ms (órajel 16 MHz)

 goto zum  ;ugorjunk a forog  címkére

frek movlw b’00010101’

 movwf 020h

v01 decfsz 021h,1

 goto v01

 decfsz 020h,1

 goto v01

 return

 end

 

2.10.  Piezo keramikus zümmögő illesztése kimenethez

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A zümmögők a meghajtó elektronikát is tartalmazzák, a mikrokontroller csak feszültséget kapcsol rá. Program:

 bsf  status,5

 movlw  0FFh

 movwf  trisa

 clrf  trisb    

movlw  06h   

 movwf  adcon1

 bcf  status,5

hang bcf portb,6

 goto  hang

 end

 

  1. 3. Érzékelők csatlakoztatása a mikrokontrollerhez 

 Nyomógomb, reed relé, fotóellenállás közvetlenül csatlakoztatható a logikai 1 értékre felhúzott portA bemenetre. Ezeket működtetve  a processzor lábon a logikai 1 átvált logikai 0-ra. Vízbe merülő elektródás szintérzékelő illesztő elektronikával együtt képes korrekt jelet szolgáltatni.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Tesztelő program:

 bsf  status,5

 movlw  0FF 

 mov wf trisA 

 clrf  trisB

movlw  06h

 movwf  adcon1

 bcf  status,5 

teszt movf  portA,0 ;mozgassuk az A port tartalmát az akkumulátorba

 movwf  portB  ;mozgassuk az akkumulátor tartalmát a B port bitjeibe

 bsf  portB,7 ;PortA-n ki nem épített bit törlése a kijelzőn

 bsf  portB,6 ;PortA-n ki nem épített bit törlése a kijelzőn

 bsf  portB,1 ;PortA-n logikailag határozatlan bit törlése a kijelzőn

 bsf  portB,0 ;PortA-n logikailag határozatlan bit törlése a kijelzőn

 call  varakoz ;ezzel az időzítéssel szemünk érzékeli a törlést

 goto  teszt

varakoz

v03 decfsz  020h,1

 goto  v03

 decfsz  021h,1

 goto  v03

 return

 end

Az érzékelőket működtetve a panelon lévő hétszegmenses kijelző a, b, c, d szegmense világít.

 

 

Opto kapu csatlakoztatása a mikrokontrollerhez

 Az opto kapu infra LED-del megvilágított infra foto tranzisztort tartalmaz.

 

 

 

 

 

 

 

 

 

 

 

 

 

Megvilágított állapotban a foto tranzisztor kollektorán logikai 0 értéknek megfelelő feszültség van. Ha mozgó rendszer a fénysugarat megszakítja az U alakú kapu belsejében, akkor a foto tranzisztor kollektorán logikai 1 érték jelenik meg. A foto tranzisztor kollektor köri munka ellenállása a panelon beforrasztott 10 k ohmos bemeneti felhúzó ellenállás.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Program:

 bsf  status,5 

 movlw  0FFh  

 movwf  trisA  

        clrf                trisB               

movlw  06h  

 movwf  adcon1

 bcf  status,5

teszt btfss  trisA,5  ;vizsgálja trisA 5. bitjét, ha 1, akkor érkezett jel,

     ;átugorja a következő utasítást

 goto  teszt

 bcf  portB,5 ;ha érkezett jel, kijelzi az 5. biten

 end

A program a kijelző feleslegesen világító szegmenseit nem oltja ki.

  1. 4.  Rendszerek irányítása mikrokontrollerrel 

 Az irányító rendszer a külvilággal érzékelőkön és beavatkozókon keresztül tartja a kapcsolatot. Elemi követelmény az érzékelők és beavatkozók korrekt illesztése  az irányító panelhoz, ezt mutattuk meg az előző fejezetekben. Az irányítandó rendszer célirányos működését a mikrokonroller flasch epromjába égetett program biztosítja.

 

  1. 4.1. Közúti kereszteződés lámpáinak vezérlése 

 A járművek forgalmát a piros, sárga, zöld lámpa irányítja, a megkülönböztetett jármű jelzését az úttestbe épített reed relé (modell szintű közelítés) fogadja. A gyalogos forgalmat a piros és zöld lámpa  

 A mikrokontroller A portjához csatlakozik az úttestbe épített érzékelő, B portjához az öt lámpa.Az érzékelő egyik pontja GND-re van kapcsolva, a megkülönböztetett jelzésű jármű - modell szinten - permanens mágnest visz magával jeladóként.  

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Csatlakozzon az érzékelő az RA2 bithez:

 

 

 

 

 

A lámpák bekötése:

 

 

 

 

 

 

Program:

 

 

 

 

 

 

 

eleje

 

 

 

 

 

 

villog1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bsf

movlw

movwf

clrf

movlw

movwf

bcf

bsf

bsf

movlw

movwf

call

movlw

movwf

bcf

call

bsf

call

decfsz

goto

bsf

bsf

movlw

movwf

call

bcf

bcf

bsf

movlw

movwf

call

bcf

bsf

movlw

monwf

call

goto

status,5

0FFh

trisA

trisB

06h

adcon1

status,5

portB,2

portB,1

7h

020h

timer1

b’00000101’

021h

portB,1

timer2

portB,1

timer2

021h,1

villog1

portB,3

portB,0

2h

020h

timer1

portB,2

portB,3

portB,4

Ah

020h

timer1

portB,4

portB,3

2h

020h

timer1

eleje

 

 

 

 

 

 

 

;jármű piros

;gyalogos zöld

 

;az időzítés mértéke, gyalogos átkelés

;timer1 időzítés hívása

;ennyit villog a gyalogos zöld

 

;gyalogos zöld kikapcsolva

 

;gyalogos zöld bekapcsolva

 

;a rekesz dekrementálása

;ha a rekesz tartalma nem nulla

;js bekacsolása, bekapcsolva maradt jp

;gyp bekapcsolása, bekapcsolva maradt jp + js

 

;időzítés mértéke

;jp + js + gyp együtt világít

;jp kikapcsolása

;js kikapcsolása, gyp tovább világít

;jz bekapcsolása

;jármű átkelés időzítésének mértéke (AH=10D)

 

 

;jz kikapcsolása

;js bekapcsolása, gyp tovább világít

;a lámpa kombináció időzítése

 

 

 

timer1

v01

 

 

 

 

 

 

 

timer2

v02

 

 

 

 

 

figyel

 

 

 

sarga

 

 

villog2

 

 

 

 

 

 

varakoz

v03

 

 

call

decfsz

goto

decfsz

goto

decfsz

goto

return

 

 

call

decfsz

goto

decfsz

goto

return

btfss

goto

return

 

movlw

movwf

clrf

bsf

call

bcf

call

decfsz

goto

goto

 

decfsz

goto

decfsz

goto

return

end

 

figyel

022h,1

v01

023h,1

v01

020h,1

v01

 

 

 

figyel

022h,1

v02

023h,1

v02

 

portA,2

sarga

 

 

0Fh

025h

portB

portB,3

varakoz

portB,3

varakoz

025h,1

villog2

eleje

 

026h,1

v03

027h,1

v03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

;ha a bit 1, nem hajtja végre a köv. utasítást

;megkülönböztetett jelzésű jármű érkezett

 

 

;villogások száma

 

;minden lámpa kikapcsolva

;sárga lámpa be

 

;sárga lámpa ki

 

 

 

 

 

 

 

 

 

 

Az érzékelő kiolvashatóságának feltétele, hogy a megkülönböztetett jelzésű jármű  jeladója az érzékelő felett megfelelő ideig bekapcsolt állapotot idézzen elő. Egy 60 km/h sebességgel haladó jármű  1 µs alatt 0,017 mm utat tesz meg. A fenti programban a figyel szubrutin végrehajtási ideje kb. 1 µs, ezen belül csak 0,25 µs az érzékelõ olvasása. A figyel szubrutint  még a TIMER1 vagy TIMER2 aktivizálja, ezért újabb inaktív idõ lép be, kb. 1 µs. Tehát az aktív figyelés 2,25 mikrosecundumonként csak 0,25 µs. A reed relé érzékelési zónája néhány milliméter,  a felette tartózkodás ideje eléri a 100 µs-ot is. Ezalatt a program 40-szer megvizsgálja a PORTA megfelelõ bitjét. A reed relé mechanikai tehetetlensége elõnyösen befolyásolja a kiolvasás biztonságát.

 

 

 

 

Nagyobb sebességû jármûnél növelni lehet a  biztonságot elektronikus tároló felhasználásával.

 

 

 

 

 

 

 

 

 

Az SR tároló set bemenete fogadja a reed relé jelét, ezt a tároló tartósan megőrzi és az Input jelzésű pont logikai értéke a PORTA kapcsolt bitjét beállítja logikai 0 értékre. Bármikor kényelmesen ki lehet olvasni és a program elindíthatja  a sárga villogást. A tároló működésének feltétele, hogy a jel várakozási ciklusában a reset (R) bemenet logikai 1 értéken (H szinten) legyen. Ezt a pontot (R) a PORTB-ről lehet vezérelni logikai 0 értékkel (L szinttel). Mivel a PORTB meghajtó tranzisztorai nyitott kollektorosak, ezért az R ponthoz +5 V-ra felhúzó ellenállást is be kell kötni.  A megkülönböztetett jelzés detektálása után a programnak gondoskodni kell a tároló törléséről: PORTB logikai 1 értéke az R ponton logikai 0 -át eredményez. Ezt a jelet mihamarabb le is kell kapcsolni, hogy a tároló ne kerüljön tiltott állapotba újabb jel fogadásakor.

 

4.2. Teherlift vezérlése

 A teherlift egy felső és alsó szint között szállít munkadarabokat. A járószék a  program indításakor felső helyzetben van. Elindul lefelé, az alsó holtponti helyzetben megáll. Az adagoló kigurít egy munkadarabot, az lejtős pályán a járószékbe esik. A járószék elindul felfelé és a felső szintnél megáll. Ebben a helyzetben a járószék alsó ajtaja kinyílik, a munkadarab a felső tárolóba gurul.

 

 

 

 

 

 

 

 

 

 

 

 

 

Érzékelők:

  • .Felső és alsó végállás kapcsoló, ezeket a ráfutó liftszekrény zárja.  

Beavatkozók:

  • .Forgásirány váltóról vezérelt motor, amely a liftszekrényt fel, le mozgatja. 

  • .Elektromágneses adagoló. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Az érzékelőket a PORT A fogadja.

  • .A felső végállás kapcsoló az RA2 bithez csatlakozik 

  • .Az alsó végállás kapcsoló az RA3-hoz van bekötve. 

A beavatkozók a PORT B-ről vezérelhetők.

  • .Motor forgásirány fel:  RB0 

  • .Motor forgásirány le:   RB1  

  • .Az adagoló  elektromágnes az BB2-höz csatlakozik. 

A  járószéket mozgató  motort elektronikus forgásirány váltó vezérli (2.5. fejezet), programozásánál el kell kerülni a tiltott állapotot (bsf portb,0; bsf portb,1).

Program:

  bsf  status,5  

  movlw  0FFh   

  movwf  trisA   

  clrf  trisB   

movlw  06h   

  movwf  adcon1

  bcf  status,5  

eleje

  bcf  portB,0  

  bsf  portB,1  ;motor lefelé mozgatja a járószéket

olvas1  btfsc  portA,3  ;vizsgálja az alsó kapcsoló állapotát

  goto  olvas1

  bcf  portB,0

 

 

 

 

 

  bcf  portB,1  ;a motort leállítja

  bsf  portB,2  ;bekapcsolja az adagolót

  call  varakoz  ;az adagoló mechanika működési ideje

  bcf  portB,2  ;adagoló kikapcsolása

  bsf  portB,0

  bcf  portB,1  ;motor felfelé mozgatja a járószéket

olvas2  btfsc  portA,3  ;felső végállás kapcsoló vizsgálata

  goto   olvas2

  bcf  portB,0  

  bcf  portB,1  ;fent megáll, a golyó kigurul

vege  goto  vege  

varakoz

v01  decfsz  020h,1

  goto  v01

  decfsz  021h,1

  goto  v01

  return

  end

  

 

 

 

 

4.3. Folyadékszint szabályozása

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A folyadék szint szabályozás algoritmusa:

  1. 1.Megvizsgáljuk az 1. szintérzékelő állapotát, ha az 0, akkor a tartály meg van töltve, a szivattyút kikapcsoljuk. 

  2. 2.Ha az 1. szintérzékelő állapota 1, akkor a tartályban a folyadék szint a szükséges érték alatt van, a szivattyút kikapcsoljuk.  

  3. 3.Az 1., 2. tevékenységet ciklikusan ismételjük. 

 

Program:

  bsf  status,5  

  movlw  0FFh   

  movwf  trisA   

  clrf  trisB   

movlw  06h   

  movwf  adcon1

  bcf  status,5  

 

 

eleje  

 

 

 btfsc  porta,2

  goto  ki

  bsf  portb,0

  call  varakoz

  goto  eleje

ki  bcf  portb,0

  call  varakoz

  goto  eleje

  end

 

A folyadék szint érzékelést úszóval működtetett kapcsolóval is megoldhatjuk:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 A modell beavatkozó szerve a liftet mozgató motor, amely forgásirány váltó elektronikával van működtetve. A forgásirány váltó bemenetei a PORTB 0. és 1. bitjéről kapnak vezérlő jelet. A PORTB-t outputba kell beállítani:

 clrf  trisb

 

 A lift szekrény permanens mágnest visz magával és működteti az emeleteken elhelyezett reed reléket, mint érzékelőket. Az érzékelőket a PORTC 0., 1., 2., 3., 4. bitje fogadja. A mikroprocesszoros panelon a PORTC  az RS232 és RS485 kommunikáció céljára van lefoglalva, azonban kiemelve ezt az integrált áramkört a processzorhoz csatlakoztathatjuk az emelet érzékelőket. A korrekt működés feltétele, hogy a processzor láb felhúzó ellenálláson keresztül +5V-ra csatlakozzon (logikai 1 állapot) és a reed relé kapcsolja az adott bitet GND-re (logikai 0 állapot). A PORTC inputban működik:

 movlw  0FFh

 movwf  trisc

 

 A lift felhasználója a mikroprocesszoros panel nyomógombjain adja meg, hogy hová kíván eljutni. Ezek a PORTA-hoz csatlakoznak. Ezt a portot is inputba kell állítani:

 movlw  0FFh

 movf  trisa

 

Mivel a trisa, trisb, trisc az 1. memóriabankban van, ezért az adatirány programozásához előzetesen memóriabankot kell váltani, majd a PORTA, PORTB, PORTC input/output műveletei miatt visszatérünk a 0. memóriabankba.

 

A vezérlés algoritmusa:

  1. 1.Pozícionáljuk a lift szekrényt. Feltétel, hogy a lift a földszint és 4. emelet között legyen. Elindítjuk pl. felfelé. Vizsgáljuk a PORTC bitjeit. Ha bármelyik értéke 0, akkor a motort megállítjuk.  

  2. 2.PORTA-t megvizsgáljuk, hogy hol van a lift. 

  3. 3.A felhasználó a lift álló állapotában adhat jelzést, hogy melyik emeletre kíván menni. Csak egy gombot nyomhat meg. A PORTB kerámia zümmögőt is működtethet a gomb megnyomására. 

  4. 4.PORTC-t megvizsgáljuk, hogy hová kell mozgatni a liftet. 

  5. 5.PORTA és PORTC  összehasonlítása alapján eldöntendő, hogy fel, vagy le mozgassuk a liftet. 

  6. 6.Elindul megfelelő irányban a motor. 

  7. 7.Vizsgáljuk PORTA aktuális értékét, ha egyenlő PORTC-vel, a motort leállítjuk. 

  8. 8.Vissza a 3. pontra. 

 

Megjegyzés: PORTA regiszter 8 bites, de a processzorban csak 6 bit van kiépítve és ebből csak négyet használunk.