30
Robotika v tehniki Programiranje vmesnika eProDas- Rob1 v programskem okolju BASCOM ® Delovno gradivo 1. september 2007 Tomaž Kušar, David Rihtaršič, Slavko Kocijančič Univerza v Ljubljani, Pedagoška fakulteta Projekt sofinancirajo:

Programiranje v programskem okolju BASCOM · Web viewProgramski jezik BASCOM – pregled osnovnih ukazov 11 8.1 Digitalni izhod 11 8.2 Programska zanka Do-Loop 13 8.3 Programska zanka

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Programiranje v programskem okolju BASCOM

Programiranje vmesnika eProDas-Rob1 v programskem okolju BASCOM

Robotika v tehniki

Programiranje vmesnika eProDas-Rob1 v programskem okolju BASCOM®

Delovno gradivo 1. september 2007

Tomaž Kušar, David Rihtaršič, Slavko Kocijančič

Univerza v Ljubljani, Pedagoška fakulteta

Projekt sofinancirajo:

Kazalo

31Uvod

42Zakaj BASCOM?

43Namestitev programa BASCOM AVR- DEMO 1.11.8.7

74Priključitev vmesnika na osebni računalnik

85Prevajanje programa v HEX kodo in prenos programa v mikrokrmilnik

96Napake v programu

107Začetek povsem novega projekta

118Programski jezik BASCOM – pregled osnovnih ukazov

118.1Digitalni izhod

138.2Programska zanka Do-Loop

158.3Programska zanka For-Next

168.4Digitalni vhod in pogojni stavek if -then

188.5Analogni vhod

198.6Uporaba časovnika

208.7Krmiljenje servomotorjev

228.8Izpisovanje na LCD zaslon

1 Uvod

Pozdravljeni! Navodila ki so pred vami vas bodo popeljala v svet programiranja oziroma v svet robotike. Na konkretnih primerih se boste lahko naučili najbolj osnovnih ukazov programskega jezika BASIC, oziroma programiranja v programskem okolju BASCOM. Slednji nam omogoča, da napisan program prenesemo v sistem, ki kasneje lahko deluje avtonomno.

Vaje vas bodo postopoma vodile od enostavnih primerov na začetku, pa do nekoliko bolj kompleksnih primerov na koncu. Za izvedbo vseh vaj, poleg vmesnika eProDas-Rob1, potrebujete še nekaj dodatnih elementov, kot je na primer LCD izpisovalnik, servo motor, ipd.. Omenjene vaje so nekakšna nadgradnja vaj iz programiranja ''hrošča''.

Vredno je poudariti, da ne potrebujete posebnega predznanja s področja programiranja! Vaje so sestavljene tako, da jih lahko razume tudi začetnik, ki vsaj malo pozna računalnik.

Torej, nikar ne oklevajte! Prelistajte navodila in začnite ustvarjati. Skupina razvijalcev Vam želi obilo zabave!

2 Zakaj BASCOM?

Razlogov za programiranje v programskem okolju BASCOM je več. Eden izmed njih je prav gotovo njegova cena. Program Bascom- AVR DEMO je namreč brezplačna različica, ki jo lahko presnamemo z internetne strani http://www.mcselec.com. Omejitev najnovejše brezplačne različice je, da prevedena koda ne sme presegati velikosti 4k byte, kar pa popolnoma zadostuje našim potrebam. Programsko okolje BASCOM ima seveda še druge prednostne lastnosti. Programski ukazi so preprosti, zato je programiranje enostavno in zelo primerno za začetnike. BASCOM ima vgrajeno tudi kvalitetno sprotno pomoč (help), kjer so vsi ukazi opisani na konkretnih primerih. Program nam omogoča tudi programiranje v zbirni kodi (assembler), katero lahko kombiniramo z BASIC kodo. Navsezadnje imamo možnost spremljati potek izvajanja programa (debugger), kar nam olajša iskati napake in optimizirati program. Skratka, program ime vse lastnosti, katere vsebuje dober komunikacijski vmesnik, kar BASCOM definitivno je! Prepričajte se sami!

3 Namestitev programa BASCOM AVR- DEMO 1.11.8.7

Namestitev programa je zelo enostavna. Z zgoraj navedene internetne strani presnamemo Zip. datoteko in jo razpakiramo v neko novo mapo na računalniku. Med datotekami poiščemo datoteko setupdemo.exe in jo zaženemo. Če imamo inštalacijski CD RobTeh_2007, omenjeno datoteko najdemo v mapi Bascom-setup, postopek pa je enak. V kolikor smo zagnali pravo datoteko, se nam pokaže okno na sliki 1. Od tu naprej samo sledimo navodilom.

Slika 1: Inštalacija programa BASCOM.

Da bo vsa programska oprema uspešno nameščena, bomo morali najverjetneje ponovno zagnati računalnik (na to nas računalnik opozori samodejno). S tem je večji del inštalacije opravljen. Sedaj moramo namestiti še posebno datoteko, s katero omogočimo komunikacijo med vmesnikom eProDas-Rob1 in računalnikom. To je datoteka z naslovom prog.settings, najdemo pa jo na inštalacijskem CD-ju, v mapi Bascom-setup. To datoteko moramo prekopirati v mapo, ki jo na C disku ustvari sam program. Če smo sledili navodilom, oziroma če med inštalacijo nismo spreminjali privzete poti, potem se omenjena mapa nahaja na mestu C:\Program Files\MCS Electronics\BASCOM-AVR. To je torej mesto, kamor skopiramo prej omenjeno datoteko prog.settings. Datoteka seveda že obstaja, zato nas računalnik vpraša, če želimo obstoječo datoteko nadomestiti z novo. Kliknemo gumb OK (slika 2), in inštalacija programa je končana.

Slika 2: Namestitev datoteke prog.settings.

Končno lahko zaženemo program. V sistemu Windows kliknemo na ikono Start programi( MCS Electronics( BASCOM AVR( BASCOM AVR. Ob prvem zagonu programa se na zaslonu pojavi sporočilno okno na sliki 3. To sporočilo je povezano z nastavitvijo programatorja in je v tem trenutku nepomembno, zato kliknemo gumb OK, in odpre se nam program BASCOM (slika 4).

Slika 3: Sporočilno okno ob prvem zagonu.

Prvikrat se ne odpre nobeno urejevalno okno, ob naslednjih zagonih pa se prikaže okno s programom, katerega smo nazadnje uporabljali. Novo urejevalno okno odpremo s klikom na ikono (Open an existing file), v orodni vrstici levo zgoraj. Hkrati so nam omogočene vse ostale ikone in funkcije programa. Lotimo se še nastavitev programatorja, na kar nas je program ob zagonu opozoril že sam. Postavimo se v menijsko vrstico in izberemo Options( Compiler( Chip. Odpre se nam novo okno, in v tem oknu kliknemo na zavihek Programmer (slika 5).

Slika 4: Zaslonska slika programa ob prvem zagonu.

V oknu Programmer izberemo možnost Universal MCS Interface. V polju spodaj, kjer pravtako piše programmer, pa izberemo programator z imenom PefProg. Preden vse nastavitve potrdimo, določimo še integrirano vezje, za katerega bomo pisali program. Kliknemo na zavihek Compiler, skrajno levo, in prikaže se nam meni na sliki 6.

Slika 5: Nastavitev programatorja.

V polju chip nato izberemo pravo integrirano vezje, v našem primeru mikrokrmilnik z oznako m16def.dat. To isto nastavitev lahko izvedemo tudi z ukazom $REGFILE = ''m16def.dat'', čisto na začetku programa, ampak o tem malo kasneje. Pomembno pa je tudi, da izberemo, oziroma nastavimo frekvenco, s katero bo izbrani mikrokrmilnik deloval. Kliknemo na zavihek Communication, in v polju Frequency izberemo možnost 8000000. Tudi to nastavitev lahko izvedemo v programu, z ukazom $CRYSTAL = 8000000. Sedaj imamo vse pripravljeno za prvo programiranje.

Slika 6: Nastavitev integriranega vezja.

Slika 7: Nastavitev delovne frekvence.

4 Priključitev vmesnika na osebni računalnik

Vmesnik eProDas-Rob1 povežimo z osebnim računalnikom preko LPT priključka (tiskalniški priključek), kot prikazuje slika 8. Pravilno moramo nastaviti tudi priloženi napajalni adapter. Predvsem je pomembna nastavitev polaritete. Slednja je nastavljena tako, da je sredinski del priključka na adapterju GND oz. ''-'', zunanji del pa je +5V (slika 9). Nastavljiva je tudi napajalna napetost, ki nikakor ne sme biti manjša od +5V, torej v našem primeru najmanj +6V (slika 10). Zaradi povečanih zagonskih tokov elektromotorčkov na mobilnem robotku, priporočamo nastavitev napetosti na 7.5V. Če so nastavitve pravilne, bo po vklopu na vmesniku zasvetila zelena LED dioda. (Vmesnik je zaščiten pred napačno nastavitvijo polaritete!) V nasprotnem primeru je nekaj narobe. Še enkrat preverimo nastavitev polaritete, oziroma preverimo, če je adapter sploh priključen na omrežno napetost.

Na vmesnik lahko priključimo tudi baterijsko napajanje, in sicer na priključka Pow in GND.

Slika 8: Priključitev preko LPT priključka.

Slika 9: Nastavitev polaritete na adapterju.

Slika 10: Nastavitev napajalne napetosti na 7.5V.

5 Prevajanje programa v HEX kodo in prenos programa v mikrokrmilnik

Preden napišemo naš prvi program, zaženimo testni program. V programu BASCOM kliknemo na ikono v menijski vrstici, nato pa na priloženem CD-ju RobTeh_2007 poiščemo datoteko testni_program.bas, slika 11.

slika 11: Datoteka testnega programa.

Pot do te datoteke je naslednja: Bascom_vaje/testni_program/testni_program.bas. Odpre se nam programsko okno na sliki 12.

Slika 12: Testni program.

Program je napisan v programskem jeziku BASIC, katerega mikrokrmilnik ne razume. Zato ga moramo prevesti v jezik, ki ga mikrokrmilnik razume in sicer v tako imenovano HEX kodo. To storimo s klikom na ikono (Compile program) v menijski vrstici. Če se je program uspešno prevedel, ga lahko prenesemo v mikrokrmilnik oz. na vmesnik eProDas-Rob1. Pred tem pa moramo vmesnik priključiti na električno napajanje. Napajalni adapter priključite na vmesnik, kot prikazuje slika 13.

slika 13: Priključitev vmesnika na električno napajanje.

V menijski vrstici nato kliknemo na ikono (Program chip). Odpre se nam novo okno, slika 14.

Slika 14: Prenos programa v mikrokrmilnik.

Naj vas številke ne prestrašijo! To kar vidite je samo program, preveden v jezik, ki ga razume mikrokrmilnik! Vse kar moramo storiti je to, da ponovno kliknemo na ikono (Program chip) in počakamo nekaj sekund, da se program prenese v mikrokrmilnik. Če je bil prenos uspešen, lahko na vmesniku opazujemo potujoče LED diode!

V nasprotnem primeru še enkrat preletimo vse prej naštete korake, in preverimo, če smo slučajno kje naredili napako.

Torej, da lahko katerikoli napisan program prenesemo v mikrokrmilnik, ga moramo najprej prevesti. Postopek je za vse primere enak, zato ga v nadaljevanju ne bomo več omenjali.

6 Napake v programu

Hitro se nam lahko zgodi, da med pisanjem programa naredimo napako. Program BASCOM najpogostejše napake zazna sam, in sicer med prevajanjem programa v HEX kodo. V tem primeru se nam v spodnjem delu delovnega okna izpiše vrsta napake, slika 15. Z dvojnim klikom na to vrstico nas program postavi na mesto, kjer smo napako naredili. To nam močno olajša odkrivati in popravljati napake.

Slika 15: Napaka v programu.

7 Začetek povsem novega projekta

Povsem nov projekt odpremo s klikom na ikono (Open an existing file). Projekt takoj shranimo v neko novo mapo na računalniku. Sem bo program kasneje shranil tudi ostale datoteke, ki jih ustvari med prevajanjem programa. Vsak povsem nov projekt začnemo z ukazoma:

$regfile = "m16def.dat"

$crystal = 8000000

s katerima izberemo integrirano vezje ki ga bomo programirali in določimo njegovo delovno frekvenco, v našem primeru 8MHz. Na tem mestu bi omenil tudi pisanje komentarjev. Slednji so zelo koristni, ko pregledujemo program, katerega smo napisali pred časom. Komentar začnemo pisati tako, da na tipkovnici odtipkamo zgornji enojni narekovaj (') nato pa napišemo želeni tekst, ki se obarva zeleno.

'Moj prvi komentar

Vsak program na koncu obvezno zaključimo z ukazom End.

End 'end program

Na tem mestu velja opozoriti na dodatne privzete nastavitve. Priključki vmesnika eProDas-Rob1 so iz varnostnih razlogov apriorno nastavljeni kot vhodni, razen priključkov C, ki so lahko samo izhodni. Seveda to ne pomeni, da so to edine možne nastavitve! V kolikor vam te nastavitve ne bodo ustrezale zaradi kakršnihkoli razlogov (bodisi potrebujete več izhodnih priključkov ipd. …), jih lahko spremenite, drugače pa v program zapišite spodnje vrstice.

Config PORTA = Input '/Output

Config PORTB = Input

Config PORTC = Output

Config PORTD = Input '/Output

Ker bomo v nadaljevanju uporabljali oziroma dopolnjevali že v naprej pripravljene programe, so vsi zgoraj omenjeni ukazi navedeni zgolj informativno, saj se ponovijo v vsakem programu.

8 Programski jezik BASCOM – pregled osnovnih ukazov

V tem poglavju so zbrani najbolj osnovni ukazi s katerimi programiramo v programskem okolju BASCOM. Uporaba teh ukazov je prikazana na preprostih primerih, velika večina vaj pa ima tudi nadaljevanje (nadgradnjo), kjer so našteti še dodatni ukazi. Kdor bi želel še bolj podrobno spoznati programsko oklje BASCOM, si lahko pomaga s sprotno pomočjo, HELP-om, kjer so pravtako za vsak ukaz navedeni primeri.

8.1 Digitalni izhod

Naloga:

Naredimo model svetlobnega prometnega znaka pred železniško progo. Torej, ob vklopu vmesnika naj lučki izmenično utripata. Utripanje naj se ponovi trikrat.

Izvedba vaje:

Odprimo vajo digitalni_izhod.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. PORTC = 1 'vklopimo prvi bit na vratih C

2. Wait 1 'pocakamo 1s

3. PORTC = 2 'vklopimo drugi bit na vratih C

4. Wait 1 'pocakamo 1s

5. PORTC = 1 'vklopimo prvi bit na vratih C

6. Wait 1 'pocakamo 1s

7. PORTC = 2 'vklopimo drugi bit na vratih C

8. Wait 1 'pocakamo 1s

9. PORTC = 1 'vklopimo prvi bit na vratih C

10. Wait 1 'pocakamo 1s

11. PORTC = 2 'vklopimo drugi bit na vratih C

Slika 16: Izmenično utripajoči lučki.

Razlaga ukazov:

PORTC = xxx

PORTC = &B11111111

PORTC.0 = x

Za nastavljanje logičnih stanj na izhodu vmesnika eProDas-Rob1 uporabljamo posebne ukaze. V programu BASCOM so to pravzaprav rezervirane besede, ki imajo točno določen pomen. Izbiramo lahko med tremi različnimi možnostmi. Prva možnost je ukaz PORTC = stevilo. V parameter stevilo vpišemo desetiško število tipa byte, torej število med 0 in 255, ki ga želimo prikazati na izhodu.

Lahko pa to zapišemo tudi drugače, in sicer z ukazom PORTC = &B11111111. Osem enic pomeni, da je vseh 8 bitov v logični enici. S tem ukazom pravzaprav lahko nastavljamo vsak bit posebej. Na primer ukaz PORTC = &B11110000 pomeni, da bodo biti od 0-3 v logični ˝0˝, višji štirje biti pa v logični ˝1˝.

Imamo še tretjo možnost, in sicer ukaz, s katerim lahko spreminjamo logično stanje na samo enem izhodnem bitu. V tem primeru zapišemo PORTC.0 = logicno stanje. V parameter logicno stanje zapišemo 1, če želimo izhod postaviti v logično ˝1˝, ali 0, če želimo izhod postaviti v logično ˝0˝.

Wait 1

Waitms 100

Waitus 1000

V programu smo uporabili tudi ukaz Wait 1, s katerim smo prekinili izvajanje programa za 1s. Število za ukazom Wait pomeni število sekund. Če želimo čakati manj, lahko uporabimo ukaza Waitms ali Waitus. V prvem primeru zapišemo časovni interval v mili sekundah, v drugem primeru pa časovni interval v mikro sekundah.

Nadaljevanje vaje:

Naredimo še model potujočih lučk, kot na primer lučke na pokončnih ovirah na cesti.

Slika 17: Pokončne ovire na cesti.

Izvedba vaje:

Odprimo vajo digitalni_izhod_potujoce_lucke.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. PORTC = 1 'vklopimo prvi bit na vratih C

2. Waitms 200

3. Rotate PORTC , Left

4. Waitms 200

5. Rotate PORTC , Left

6. Waitms 200

7. Rotate PORTC , Left

8. Waitms 200

9. Rotate PORTC , Left

10. Waitms 200

11. …

Razlaga ukazov:

Rotate PORTC, Left

Rotate PORTC, Right

V program smo dopisali ukaz Rotate PORTC, Left. Slednji prestavi stanje vseh bitov na izbranih vratih (v našem primeru so to vrata C) za eno mesto v levo (desno). Ker smo hoteli da potuje samo ena lučka, smo na začetku programa zapisali ukaz PORTC = 1.

8.2 Programska zanka Do-Loop

Naloga:

Tokrat želimo, da se program po vklopu vmesnika izvaja neprestano, torej da lučki utripata, dokler ne izklopimo električnega napajanja.

Izvedba vaje:

Odprimo vajo programska_zanka_do_loop.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Do 'začetek zanke

2. PORTC = &B00000010 'vklopimo drugi bit na vratih C

3. Wait 1 'počakamo 1s

4. PORTC = &B00000001 'vklopimo prvi bit na vratih C

5. Wait 1 'počakamo 1s

6. PORTC = &B00000010 'vklopimo drugi bit na vratih C

7. Wait 1 'počakamo 1s

8. PORTC = &B00000001 'vklopimo prvi bit na vratih C

9. Wait 1 'počakamo 1s

10. Loop 'konec zanke

Razlaga ukazov:

Do

Ukaz 1

Ukaz 2

Loop

Navadno pri avtonomnih sistemih želimo, da se neko zaporedje ukazov nenehno ponavlja. Na voljo imamo več možnosti in ena izmed njih je zanka Do-loop. Vsi ukazi, ki jih vpišemo med ti dve besedi, se bodo nenehno ponavljali, vse dokler iz zanke ne izstopimo, kar si bomo ogledali v naslednji vaji.

Nadaljevanje vaje:

Dopolnimo program tako, da se bo programska zanka izvedla 15x, potem počakajmo 2s in nato naj zasvetijo vse lučke.

Izvedba vaje:

Odprimo vajo programska_zanka_do_loop_pogoj.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Dim Stevec As Byte

2. Stevec = 0

3. Do

4. PORTC = &B00000010 'vklopimo drugi bit na vratih C

5. Waitms 500 'počakamo 0,5s

6. PORTC = &B00000001 'vklopimo prvi bit na vratih C

7. Waitms 500 'počakamo 0,5s

8. PORTC = &B00000010 'vklopimo drugi bit na vratih C

9. Waitms 500 'počakamo 0,5s

10. PORTC = &B00000001 'vklopimo prvi bit na vratih C

11. Waitms 500

12. Stevec = Stevec + 1 'povečamo vrednost števca za 1

13. Loop Until Stevec = 15 'ponavljamo dokler števec ne doseže vrednosti 15

14. PORTC = 0

15. Wait 2

16. PORTC = 255

Razlaga ukazov:

Do

Ukaz 1

Ukaz 2

Loop Until pogoj

Zgoraj smo videli, da je zanka do-loop pravzaprav neskončna zanka. Lahko pa ji dodamo pogoj, s katerim določimo, kdaj naj se izvajanje konča. Namesto ukaza loop zapišemo ukaz Loop Until pogoj. Torej, zanka se bo ponavljala vse dokler ne bomo izpolnili pogoja. Slednji je lahko poljuben. V našem primeru smo dodali števec, ki se vsakokrat poveča za 1. Ko je vrednost števca enaka 15, se izvajanje zanke konča.

Dim Stevec As Byte

Novo spremenljivko stevec smo deklarirali kot spremenljivko tipa byte, za kar smo uporabili ukaz Dim ime_spremenljivke As Byte. Na ta način lahko deklariramo še druge spremenljivke, ki pa so lahko tipa byte, integer, word, long, single, double, string itd.

8.3 Programska zanka For-Next

Naloga:

Napišimo program, s katerim bomo šteli od 10 do 32, trenutno stanje pa prikazali z lučkami na izhodu.

Izvedba vaje:

Odprimo vajo programska_zanka_for_next.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. PORTC = &B00000000

2. For I = 10 To 32 'začetek zanke for next

3. PORTC = I 'stanje I prikažemo z lučkami na izhodu

4. Waitms 500 'počakamo 0,5s da je štetje opazno

5. Next I

Razlaga ukazov:

For I = zacetna_vrednost to koncna_vrednost

Ukaz 1

Ukaz 2

Next I

Kot smo že omenili, ponavljanje programa lahko dosežemo na več načinov. Eden od njih je tudi uporaba zanke For-Next. Lastnost te zanke je, da lahko določimo tudi začetno vrednost števca, katero vpišemo v parameter zacetna_vrednost. Zanka se bo ponavljala dokler stevec ne doseže končne vrednosti, katero določimo s parametrom koncna_vrednost. Da bomo lažje razumeli smiselnost uporabe For-Next zanke, si poglejmo nadaljevanje vaje.

Nadaljevanje vaje:

Napišimo program, s katerim bomo šteli od 32 do 10, s korakom -2.

Izvedba vaje:

Odprimo vajo programska_zanka_for_next_step.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. PORTC = &B00000000 'vsi bit-i porta C so v logični ničli.

2. 'začetek zanke for next. Štejemo od 32 do 10 s korakom -2

3. For I = 32 To 10 Step -2

4. PORTC = I 'stanje prikažemo z lučkami

5. Waitms 500 'zakasnitev za 0,5s.

6. Next I

Razlaga ukazov:

For I = 32 To 10 Step -2

Ukaz 1

Ukaz 2

Next I

Zanka je zelo podobna kot v prejšnjem primeru. Dodali smo ukaz Step(-)stevilo. S parametrom stevilo določimo velikost koraka, bodisi navzdol ali navzgor. Če želimo odštevati, potem pripišemo znak -, v nasprotnem primeru napišemo samo vrednost koraka. Začetna in končna vrednost štetja sta lahko tudi spremenljivki.

8.4 Digitalni vhod in pogojni stavek if -then

Naloga:

Naredimo model parkirne hiše, ki ima v našem primeru samo 4 parkirna mesta. Na začetku naj bo hiša prazna, in števec avtomobilov naj bo nastavljen na 4- kar pomeni štiri prosta mesta. Senzor na vhodu vrat naj zazna vsako vozilo ki vstopa v hišo, in v tem primeru naj se števec zmanjša za ena in poveča za ena, ko avtomobil garažo zapusti. Stanje števca prikažimo z lučkami.

Izvedba vaje:

Odprimo vajo dig_vhod_pogojni_stavek_if_then.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Dim Stevec_avt As Byte

2. 'štiri prosta mesta

3. Stevec_avt = 4

4. PORTC = Stevec_avt

5. Do

6. If Pinb.0 = 1 Then

7. 'Povečamo števec Avtomobilov Za 1

8. Incr Stevec_avt

9. End If

10. If PINB.1 = 1 Then

11. 'Zmanjšamo števec Avtomobilov Za 1

12. Decr Stevec_avt

13. End If

14. PORTC = Stevec_avt

15. Waitms 500

16. Loop

Razlaga ukazov:

Spremenljivka = PINB.oznaka_bita

Za branje digitalnega vhoda uporabljamo ukaz PINB.oznaka_bita. Namesto črke B bi lahko zapisali A, C ali D, odvisno katera vhodna vrata nas zanimajo. V parameter oznaka_bita vpišemo številko bita, katerega stanje nas zanima.

Incr spremenljivka

Decr spremenljivka

Z ukazoma Incr in Decr povečamo oziroma zmanjšamo vrednost spremenljivke za 1. Namesto teh dveh ukazov bi lahko zapisali:

Stevec_avt = Stevec_avt + 1 oziroma Stevec_avt = Stevec_avt - 1.

If pogoj Then

Ukaz 1

Ukaz 2

End If

Običajno pa v kombinaciji z digitalnim vhodom uporabljamo pogojne stavke if. Torej, če je nek pogoj (stanje na digitalnem vhodu) izpolnjen, naj se izvrši določen ukaz. Lahko napišemo tudi več ukazov. Vsak pogojni stavek moramo zaključiti z besedo End if.

Nadaljevanje vaje:

Dogradimo model garažne hiše tako, da v polno garažo ne bo mogel zapeljati nihče, dokler se ne sprosti vsaj eno prazno parkirno mesto. Poskrbimo tudi zato, da senzor pri izhodnih vratih ne bo aktiven, ko bo garaža prazna (iz prazne garaže praktično ne more noben avto()

Izvedba vaje:

Odprimo vajo pogojni_stavek_if_then_dopolnitev.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Dim Stevec_avt As Byte

2. 'štiri prosta mesta -prazna garaža

3. Stevec_avt = 4

4. 'stanje prostih mest prikažemo na izhodu vrat C

5. PORTC = Stevec_avt

6. 'trenutno gledamo samo senzor na vhodu, saj je garaža se prazna

7. Prazna_garaza:

8. Bitwait PINB.0 , Set

9. 'prvi avtomobil je vstopil, zato se število prostih mest zmanjša za 1

10. Decr Stevec_avt

11. 'stanje prostih mest prikažemo na izhodu vrat C

12. PORTC = Stevec_avt

13. Waitms 500

14. 'sedaj začnemo spremljati senzor na vhodu in izhodu garaže

15. Prosta_garaza:

16. Do

17. If PINB.1 = 1 Then

18. 'Povečamo Stevec Avtomobilov Za 1

19. Incr Stevec_avt

20. End If

21. If PINB.0 = 1 Then

22. 'Zmanjšamo Stevec Avtomobilov Za 1

23. Decr Stevec_avt

24. End If

25. 'stanje prostih mest prikažemo na izhodu vrat C

26. PORTC = Stevec_avt

27. If Stevec_avt = 0 Then Goto Polna_garaza

28. If Stevec_avt = 4 Then Goto Prazna_garaza

29. Waitms 500

30. Loop

31. Polna_garaza:

32. 'garaža je polna, zato spremljamo samo izhodni senzor (da se sprosti eno mesto)

33. 'Na vhodu je tokrat zapornica neaktivna!

34. Bitwait PINB.1 , Set

35. Incr Stevec_avt

36. Waitms 500

37. Goto Prosta_garaza

Razlaga ukazov:

Bitwait PINB.0 , Set

Kot že ime samo namiguje, z ukazom Bitwait nekaj čakamo, in sicer določeno logično stanje na posameznem bitu. V primeru da čakamo na vhodu logično ˝1˝, potem zapišemo parameter Set, v nasprotnem primeru Reset.

If Stevec_avt = 0 Then Goto Polna_garaza

Polna_garaza:

Ukaz 1

Nekoliko drugače smo zapisali tudi pogojni stavek. Slednjega lahko zapišemo samo v eni vrstici, pri čemer tudi odpade ukaz end if. Pri tako zapisanem pogojnem stavku moramo ukaz zapisati v isti vrstici. V našem primeru smo uporabili ukaz goto ime_podprograma. S tem ukazom se, ob izpolnjenem pogoju, izvajanje programa nadaljuje na mestu ki ga določimo. Pravzaprav skočimo v nek podprogram, ki ga poimenujemo tako da napišemo ime in dvopičje (ime_podprograma:)Ukaz goto lahko uporabimo tudi neodvisno kjerkoli v programu.

8.5 Analogni vhod

Naloga:

Izdelajmo napravo, s katero bomo lahko zaznali belo oziroma črno podlago. Ko bo senzor zaznal belo podlago, naj zasveti led dioda, v nasprotnem primeru naj se ugasne.

Izvedba vaje:

Najprej na vmesnik eProDas-Rob1 priključimo svetlobni senzor. Odprimo vajo analogni_vhod.bas. prevedimo program in ga prenesimo na vmesnik eProDas-Rob1. Nato pripravimo belo podlago, na primer bel list papirja, na katero narišemo črno črto. Premikajmo svetlobni senzor nad temno in svetlo podlago, kot kažeta sliki spodaj, slika 18, 19.

Program:

1. Do

2. Napetost = Getadc(7)

3. If Napetost > 200 Then

4. Portc = 1

5. Else

6. Portc = 0

7. End If

8. Loop

slika 18: Zaznavanje črne podlage.

slika 19: Zaznavanje bele podlage.

Razlaga ukazov:

Config ADC = Single , Prescaler = Auto , Reference = Off

Start ADC

W = Getadc(7)

Poleg digitalnih vhodov, lahko z vmesnikom eProDas-Rob1 spremljamo osem 10-bitnih analognih vhodov. Ukaz za konfiguracijo ADC-ja je zapisan zgoraj. Z nastavitvijo parametra Prescaler na vrednost Auto, nastavimo največjo frekvenco vzorčenja, z nastavitvijo parametra Reference na off pa povemo, da imamo zunanjo napetostno referenco.

Napetost na vhodu preberemo z ukazom Getadc, ki nam vrne vrednost tipa word in lahko zavzame vrednosti od 0-1023. V oklepaj zapišemo oznako analognega vhoda, ki ga želimo spremljati (od 0-7)

Opomba: Za dodatno uporabo analognega vhoda glejte primer Izpisovanje na LCD zaslon.

8.6 Uporaba časovnika

Naloga:

Napišimo program, s katerim bomo odčitali analogni vhod v določenih časovnih intervalih.

Izvedba vaje:

Najprej na vmesnik eProDas-Rob1 priključimo svetlobni senzor. Odprimo vajo uporaba_ casovnika.bas, prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Config Timer1 = Timer , Prescale = 8

2. On Timer1 Beri_adc

3. Enable Interrupts

4. Enable Timer1

5. 'glavni program

6. PORTC = 0

7. Do

8. If Napetost > 100 Then

9. PORTC = 1

10. Else

11. PORTC = 2

12. End If

13. Loop

14. 'podprogram

15. Beri_adc:

16. Napetost = Getadc(7)

17. Return

Razlaga ukazov:

Config Timer1 = Timer , Prescale = 8

On Timer1 Beri_adc

Enable Interrupts

Enable Timer1

Glavni program:

...

Beri_adc:

Napetost = Getadc(7)

Return

Kadar želimo, da se neka rutina zanesljivo zgodi v določenem časovnem intervalu, običajno uporabljamo časovnike. Pravzaprav gre za prekinitve, ki se zgodijo v časovnem intervalu, ki ga določimo. Kaj vse se bo ob tej prekinitvi zgodilo, zapišemo pod dogodek On Timer1 naslov_dogodka. Pravzaprav je to samo ime podprograma, kamor zapišemo vse ukaze, ki naj se ob prekinitvi zgodijo. Z ukazom Enable Interrupts omogočimo omenjene prekinitve. Paziti moramo le na to, da se ti ukazi ne izvršujejo dlje, kot smo določili sam časovni interval. Ne smemo pa pozabiti na ukaz Return, ki ga zapišemo na koncu podprograma, in pomeni skok na mesto, kjer smo prekinili izvajanje glavnega programa.

Časovnik Timer1 je 16-bitni števec, kar pomeni da v funkciji Timer-ja šteje od 0 do 65535, nato pa se štetje ponovi. Vsakokrat ko prešteje do konca, se izvede zgoraj omenjen dogodek. Hitrost štetja je odvisna od takta mikrokrmilnika, lahko pa jo s parametrom Prescale tudi zmanjšamo na 1/8, 1/64, 1/256 in 1/1024 osnovne frekvence s katero deluje mikrokrmilnik.

8.7 Krmiljenje servomotorjev

Naloga:

V perkirni hiši bi želeli postaviti zapornico. Sestavimo vezje in napišimo program, s katerim bomo lahko krmilili spuščanje in dviganje zapornice.

Izvedba vaje:

Na tripinski priključek z oznako A7 priključimo nepredelan servo-motor (kot kaže slika 20). Nato odprimo vajo krmiljenje_servomotorjev.bas, prevedimo program in ga prenesimo na vmesnik eProDas-Rob1. S pritiskanjem na tipki S1 in S2 preizkusite delovanje modela.

Program:

1. Desno:

2. Do

3. If Pinb.0 = 1 Then Goto Levo

4. Servo(1) = 40

5. Loop

6. Levo:

7. Do

8. Servo(1) = 80

9. If Pinb.1 = 1 Then Goto Desno

10. Loop

slika 20: Krmiljenje servo-motorja.

Razlaga ukazov:

Config Servos = 1 , Servo1 = Porta.7 , Reload = 15

Enable Interrupts

Servo(1) = 40

Z vmesnikom eProDas je mogoče krmiliti do 14 servo-motorjev hkrati. Ukaz za konfiguracijo je zelo enostaven. Najprej z ukazom Config Servos = 1 določimo skupno število servo-motorjev, nato pa za vsak motor posebej določimo priključek, s katerim ga bomo upravljali.

Servo-motor za svoje delovanje, poleg električnega napajanja, potrebuje različno dolge električne pulze. Njegova pozicija je odvisna prav od dolžine pulza, ki pa ga mora motor prejeti najmanj vsakih 20ms. S parametrom Reload nastavljamo ta interval.

Z ukazom Servo(1) = 40 torej nastavljamo pozicijo motorja. Številka v oklepaju pomeni, kateri servo-motor upravljamo, druga številka (40) pa pomeni pozicijo. Te vrednosti se gibljejo nekje med 30 in 120.

Opomba: Za dodatne informacije o delovanju servo motorja glejte poglavje Predelava servomotorjev.

Nadaljevanje vaje:

Industrijska avtomatizacija danes uporablja robote, katerih roke premikajo servo motorji. Prednost servo motorjev je, da jim zelo enostavno določimo pozicijo. Sestavimo model člena robotske roke, ki naj ima pet pozicij. Ko doseže zadnjo pozicijo naj se vrne na začetek.

slika 21: Primer industrijskega robota.

Izvedba vaje:

Odprimo vajo krmiljenje_servomotorjev_1.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1. Ob vklopu vmesnika se program začne izvajati samodejno.

Program:

1. Servo(1) = 34

2. Zacetek:

3. Servo(1) = 34

4. Wait 1

5. Servo(1) = 45

6. Wait 1

7. Servo(1) = 60

8. Wait 1

9. Servo(1) = 80

10. Wait 1

11. Servo(1) = 100

12. Wait 1

13. For I = 100 To 34 Step -1

14. Servo(1) = I

15. Waitms 10

16. Next I

17. Goto Zacetek

Razlaga ukazov:

V programu nismo uporabili ničesar novega. Določili smo pet različnih pozicij ki jih motor zavzame. Za zvezni pomik servo motorja pa smo uporabili zanko for-next.

8.8 Izpisovanje na LCD zaslon

Naloga:

Napišimo preprost program, s katerim bomo na LCD zaslon izpisali poljubno besedilo.

Izvedba vaje:

Na vmesnik priključimo LCD zaslon in sicer preko konektorja speedy, kot kaže slika spodaj. Odprimo vajo izpisovanje_na_lcd_zaslon.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1.

Program:

1. Do

2. Cls

3. Wait 2

4. Lcd " eProDasRob1 "

5. Wait 2

6. Lowerline

7. Lcd " demo "

8. Wait 2

9. Loop

slika 22: Izpisovanje na LCD zaslon.

Razlaga ukazov:

Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = .7

Config Lcd = 16 * 2

Cursor Off Noblink

Cls

Lcd "poljuben tekst"

Lowerline

Lcd "se en tekst"

Za konfiguracijo omenjenega LCD zaslona v program zapišemo zgornje vrstice. Za podrobnejši opis LCD zaslona poglejte dodatek.

Za izpisovanje na zaslon uporabljamo ukaz Lcd, za tem pa v dvojnih zgornjih narekovajih zapišemo želen tekst. Paziti moramo, da tekst ni daljši od 16 znakov. Z ukazom Cls zbrišemo celotno vsebino LCD-ja. Da se pomaknemo v drugo vrestico (omenjen LCD zalon je dvo-vrstični) uporabimo ukaz Lowerline.

Nadaljevanje vaje:

Sestavimo vezje, ki nam bo dajalo informacijo o tem, kako svetla, oziroma temna je podlaga. Rezultat naj se izpiše na LCD zaslonu.

Izvedba vaje:

Odprimo vajo izpisovanje_na_lcd_zaslon_1.bas. Prevedimo program in ga prenesimo na vmesnik eProDas-Rob1. Na vmesnik priključimo še svetlobni senzor, in sicer na tripinski konektor z oznako A7. Slednjega premikajmo iz temne na svetlo podlago, na LCD zaslonu pa spremljajmo rezultat.

Program:

1. Do

2. Cls

3. Lcd "Vrednost ADC:"

4. Waitms 20

5. Lowerline

6. Lcd Napetost

7. Wait 2

8. Loop

9. Beriadc:

10. Napetost = Getadc(7)

11. Return

slika 23: Izpis na LCD- črna podlaga.

slika 24: Izpis na LCD- bela podlaga.

Razlaga ukazov:

Lcd Napetost

Na LCD zaslon lahko izpisujemo tudi vrednost spremenljivk. V tem primeru zapišemo ukaz Lcd in dodamo samo ime spremenljivke.

Notranji del priključka je GND oziroma ''-''.

Puščici kažeta druga proti drugi.

Močnostni izhodi- Port C.

Digitalni vhodi ali izhodi- Port D.

Port D. (Za povezavo z LCD prikazovalnikom in drugimi integriranimi vezji)

Analogni vhodi ali digitalni vhodi oziroma izhodi- Port A.

Štirje digitalni vhodi- od B0 do B3. (Stikala od S1 – S4)

Ikona za prevajanje programa.

Ikona za prenos programa v mikrokmilnik.

PAGE

24