seminar publikacija

152
Gregor MAČEK, Vilko SUSTIČ, Jure MIKELN, Matjaž SKUBIC, Bojan KOVAČ Bascom AVR za začetnike Bascom AVR za vse Dopolnjena izdaja!

Upload: anon212484958

Post on 26-Oct-2014

141 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: Seminar Publikacija

Gregor MAČEK, Vilko SUSTIČ,

Jure MIKELN, Matjaž SKUBIC, Bojan KOVAČ

Bascom AVR za začetnike

Bascom AVR za vse

Dopolnjena izdaja!

Page 2: Seminar Publikacija

2 Uvod | Bascom AVR za začetnike

Page 3: Seminar Publikacija

Bascom AVR za začetnike | Uvod 3

Uvod

Jure Mikeln

Uvod v publikacijo

Priče smo silnemu napredku na vseh področjih tehničnih znanosti. Novodobne tehnične znanosti se imajo temu napredku zahvaliti predvsem razvoju procesorske moči osebnih računalnikov, kar je omogočilo razvoj novih zmogljivih programskih orodij. Elektroniki poznamo veliko programskih orodij, brez katerih si sodobnega dela ne znamo več predstavljati. Podobno velja tudi za moderne elektronske komponente, izmed katerih bi poudaril mikrokontrolerje, ki so v zadnjih 15 letih tudi naredili ogromen korak naprej. Ta napredek se vidi na cenovnem, predvsem pa na tehničnem področju. Tako danes za nekaj evrov dobimo izredno zmogljiv ARM mikrokontroler (32-bitni mikrokontroler), ki ima izredno zmogljivo periferijo, kot so analogni/digitalni in digitalno/analogni (A/D in D/A) pretvorniki, Ethernet, CAN ter USB vmesniki, krmilniki za motorje, moduli za realno uro in podobno. Pri tem pa ne zamešajmo izrazov: v PC-ju ne deluje mikrokontroler, pač pa zmogljiv procesor (64-bitni), ki signale po vodilu pošilja na razne enote, kot so video, spominska, krmilnik trdih diskov itd. Razlika med procesorjem in mikrokontrolerjem je v tem, da procesor nima vgrajene periferije.

V tečaju, ki je pred vami, se z ARM mikrokontrolerji ne bomo spoznavali, pač pa smo pripravili osnovne informacije, ki naj bi jih poznal začetnik - programer, da bi lahko suvereno začel programirati mikrokontrolerje družine AVR. Takšen mikrokontroler bo brez težav poganjal motorje, vklapljal ter izklapljal releje, sprejemal signale z različnih senzorjev in tipk, signale obdeloval ter s pomočjo LCD-prikazovalnika prikazoval podatke in sodeloval z drugimi mikrokontrolerji ter tako predstavljal mikrokontrolerski sistem tudi za večje zahteve. Po potrebi bo alarmiral oskrbovalce sistema bodisi zvočno, bodisi preko mobilnih telefonov ali radijskih postaj.

AVR mikrokontrolerji

AVR mikrokontrolerji so eni izmed popularnih mikrokontrolerjev, ki so dobavljivi že približno 10 let. Mikrokontroler si predstavljajmo kot “črno škatlo“, ki ima vhodne in izhodne priključke. Mikrokontroler brez programa je mrtev in kot tak res neuporaben. Zaživi le, ko se v njem vpisani program prične izvajati. Jasno pa je, da je za to potrebna tudi napajalna napetost. Mikrokontrolerje dandanes uporabljamo v praktično vsaki napravi, bodisi da je to igrača ali zahteven industrijski PLC krmilnik. V vseh teh napravah je vsaj en mikrokontroler, vemo pa, da v sodobnih avtomobilih deluje več mikrokontrolerjev.

Obstaja več vrst mikrokontrolerjev, od 1, 4, 8 pa tja do 32-bitnih. Danes se največ uporabljajo 8 in 32-bitni, redko pa še kakšni drugi. Mikrokontrolerji, o katerih bo govora v seriji člankov so 8-bitni. AVR mikrokontroler vsebuje ALU (arithmetical logical unit) enoto, več vhodno/izhodnih (V/I, v tuji literaturi je uveljavljen izraz I/O – input/output port) vrat ali portov, FLASH spomin in še več enot, o katerih bo govora kasneje. V FLASH spomin s pomočjo programatorja naložimo naš program, ki ga v zaporednih korakih izvaja ALU. V/I porti so večinoma dvosmerni s tem, da moramo s programom definirati ali bo posamezni pin vhodni ali izhodni. Mikrokontroler za svoje delovanje potrebuje napajalno napetost in večinoma tudi kvarčni kristal oziroma keramični resonator, ki ALU-ju daje t.i.

Page 4: Seminar Publikacija

4 Uvod | Bascom AVR za začetnike

taktni signal, s katerim ALU izvaja programsko kodo. V kolikor ALU nima takta se njeno delovanje ustavi in se spet nadaljuje, ko obnovimo taktni signal. V določenih primerih pa tudi kvarčni kristal ali resonator nista potrebna, saj imajo AVR mikrokontrolerji vgrajen t.i. RC oscilator, ki daje takt ALU-ju in s tem omogoča delovanje mikrokontrolerja. Izbor med RC oscilatorjem ali zunanjim kvarčnim kristalom oz. resonatorjem definiramo med postopkom programiranja.

Notranja blok shema mikrokontrolerja ATTiny2313

Kot vidite je v notranjosti mikrokontrolerja veliko blokov, o katerih ne bomo izgubljali besed. Zaenkrat naj bo mikrokontroler za nas črna škatla z vhodi in izhodi, ki jo bomo sprogramirali z našim programom.

Page 5: Seminar Publikacija

Bascom AVR za začetnike | Uvod 5

Program v mikrokontrolerju se odvija glede na ukaze t.i. strojne kode, ki ALU-ju določa, kaj bo naredila. Ker ALU deluje z binarno matematiko je ukaz v strojni kodi sestavljen iz ničel in enic – pač v binarni kodi. V začetkih mikrokontrolerjev so programerji za programiranje uporabljali strojno kodo, vendar so kmalu ugotovili, da je to izredno nepraktično. Zato so pričeli uporabljati zbirnik (v tuji literaturi se uporablja izraz assembler), dandanes pa vedno bolj posegamo po višjih programerskih jezikih, kot so C, različne vrste „visual basic“ programov ter basic programov, ki programsko kodo napisano v basic-u prevedejo v strojno kodo.

Med basic programe spada tudi programski jezik Bascom, ki se je v Evropi, pa tudi v Sloveniji lepo uveljavil. Zavedamo se, da ima Bascom (kot tudi drugi višji programski jeziki) svoje prednosti in slabosti, vendar trdno stojim za stališčem, da je Bascom idealno programsko orodje za začetnike v programiranju, kar bo pokazano v nadaljevanju.

© Dovoljeno kopiranje publikacije ali dela le-te v elektronski ali papirni obliki,

pri čemer prosim navedite tudi vir in avtorje!

Page 6: Seminar Publikacija

6 Program Bascom AVR | Bascom AVR za začetnike

Program Bascom AVR

Jure Mikeln

Predstavitev razvojnega okolja Bascom-AVR

Bascom trenutno obstaja v dveh verzijah: Bascom-AVR in Bascom-8051. Končnica nam nakazuje, za katero vrsto mikrokontrolerjev je namenjen prevajalnik. Mi bomo seveda uporabljali Bascom-AVR, ki si ga lahko brezplačno snamete s spletne strani www.mcselec.com. Z navedene spletne strani si snemite DEMO verzijo, ki je popolnoma delujoča verzija z omejitvijo velikosti programske kode, ki jo lahko prevedemo. Kot programerji – začetniki nam bo DEMO verzija popolnoma zadostovala, saj bodo naši programi kratki in ne bodo dosegali omejitve DEMO verzije.

Bascom je identičen večini programov, ki tečejo v MS Oknih (Windows), zato tukaj ne bi izgubljali besed. Ker je Bascom-AVR programsko orodje je prav, da se spoznamo z vrstami števil - spremenljivk, ki jih lahko uporabljamo v naših programih. Na voljo so nam spremenljivke Bit (1 bit), Byte (8 bitov = 1 byte), Integer (2 byte, vrednost spremenljivke je lahko od -32,768 do +32,767), Word (2 byte, vrednost spremenljivke je lahko od 0 do 65535), Long (4 byte, vrednost spremenljivke je lahko od -2147483648 do 2147483647, Single (32 bitov, vrednost spremenljivke je lahko od 1.5 x 10^–45 do 3.4 x 10^38), Double (64 bitov, vrednost spremenljivke je lahko od 5.0 x 10^–324 do 1.7 x 10^308) in String (do 264 byte, spremenljivke so tipa byte z dodatnim byte-om vrednosti nič na koncu).

Spremenljivke lahko imajo poljubna imena, ki jih ponavadi izberemo tako, da so med programiranjem prepoznavna. Načeloma lahko spremenljivke poimenujmo X1, X2, X3 itd., vendar bomo med programiranjem lažje razumeli program, če bomo spremenljivko, ki ponazarja vklop/izklop npr. releja poimenovali Rele. Vsekakor pa ne smemo uporabljati t.i. rezerviranih imen. Teh je preveč za ta prispevek, zato si jih le oglejte v Help-u. Nekaj teh imen pa lahko naštejem za boljši občutek: OFF, ON, OR, OUT, OUTPUT, LCASE, LCD, LCDAT, LEFT, LEFT, LEN, LINE in podobno.

Page 7: Seminar Publikacija

Bascom AVR za začetnike | Program Bascom AVR 7

Shema vezave mikrokontrolerja

Preden bomo začeli s programiranjem, se podrobno spoznajmo še z izrazi bit in byte. Oba izraza smo srečali že v osnovni šoli v predmetu matematika, kjer smo spoznavali binarni številski sistem, ki ima samo dve števili: 0 in 1. Spremenljivka vrste bit ima tudi dve vrednosti 0 ali 1. Medtem ko ima število vrste byte vrednosti med 0 do 255 (binarno: 00000000 do 11111111).

Zdaj ko smo spoznali nekaj osnov pa lahko že pričnemo s programiranjem. Za začetek si zapomnimo enega najpogostejših ukazov: Do Loop. Ta ukaz pomeni, da se program, ki je napisan med Do in Loop teoretično odvija v neskončnost. Prične se pri Do, ko pa med izvajanjem od ukaza do ukaza pride do Loop se vrne na Do in tako naprej dokler ne izklopimo napajalne napetosti. Morda se bo komu to zdelo nelogično, vendar vam bom pokazal, da se večina programov odvija v Do Loop zanki, izjemno redki programski primeri so narejeni brez Do Loop zanke.

Page 8: Seminar Publikacija

8 Program Bascom AVR | Bascom AVR za začetnike

Prvi program

Prvi program bo izjemno enostaven. Na mikrokontroler bomo priključili LED-ice (enostavno povedano so to polprevodniške lučke, ki se v primerjavi z lučkami z žarečo nitko izjemno malo grejejo in so tudi fizično majhne), ki jih bomo z ustreznim programom vklapljali in izklapljali. LED-ice so zelo primerne za krmiljenje z mikrokontrolerjem saj za normalno svetilnost potrebujejo le nekaj voltov napetosti in nekaj mA toka, kar mikrokontroler, ki ga bomo obravnavali, z lahkoto zagotovi. Pozorni bralci bodo na shemi poleg mikrokontrolerja in LED-ic opazili tudi upore in resonator. Upor R1 služi za ustrezno resetiranje mikrokontrolerja, resonator služi generiranju takta, ki ga za svoje delovanje potrebuje ALU, ostali upori služijo omejitvi toka, ki teče skozi LED-ice. Vezju je še dodan konektor za programiranje mikrokontrolerja in s tem je osnovni opis vezja zaključen.

Prvi primer programa, s katerim bomo vklapljali in izklapljali LEDice bo izgledal takole:

Dim Ledica As Bit Do Config Portd = Output Portd.0 = Ledica Ledica = Not Ledica Wait 1 Loop

V tem programu smo najprej definirali vrsto spremenljivke, ki jo bomo uporabili. Ker vklapljamo oziroma izklapljamo samo eno LEDico, je dovolj, da imamo spremenljivko vrste Bit.

Sledi Do-Loop zanka, v kateri ni skoraj nič programa. Najprej je potrebno definirati ali je določen port vhodni ali izhodni. V našem primeru je izhodni, zato smo ga tako tudi definirali. Nadalje smo definirali na katerem V/I portu se nahaja ta LEDica. V principu lahko LEDico priključimo na kateri koli prosti port mikrokontrolerja in to definiramo v programu – kar je s stališča izdelave vezja zelo praktično. Pri zahtevnejih projektih je namreč težje narediti enostavno tiskano vezje, kot pa spremeniti program.

Sledi ukaz

Ledica = Not Ledica in Wait 1

Ta stavek negira vrednost spremenljivke Ledica: če je bila predhodno 1, bo zdaj 0 in obratno. Ukaz

Wait 1

je trivialen in pomeni, da mikrokontroler na tem mestu v programu počaka 1 sekundo. Enostaven program bo povzročil, da bo LEDica utripala v 1 sekundnem taktu.

Page 9: Seminar Publikacija

Bascom AVR za začetnike | Program Bascom AVR 9

Simulator v Bascom-u

V tem delu seminarja vam bomo prikazali uporabo Simulatorja v Bascomu. Bascom ima vgrajen softverski simulator, ki nam pomaga pri razhroščevanju programa. Simulator je zgolj enostaven pripomoček in ne 100% zanesljivo orodje, saj v simulatorju ne moremo dobro simulirati prekinitev, časovnih zank in drugih zahtevnejših operacij. V simulatorju bomo lahko spremljali potek programa, vpisovali vrednosti spremenljivk med izvajanjem simulatorja ter na podlagi tega spremljali odziv na LCD simulatorju kot tudi na LEDicah.

Simulator je razdeljen na več oken. V glavnem oknu vidimo naš program oziroma le del programa, saj za celoten program ni dovolj prostora v oknu. Nadalje vidimo okno, kjer so zavihki Variable, Locals, Watch, uP, Interrupts. Nadalje je tukaj še okno Interrupts in okno z zavihkoma UART0/UART1.

Od teh oken bomo najbolj pogosto uporabljali okno s programom, okno z zavihki Variable ter okno z UART zavihkoma.

V prvem oknu bomo spremljali potek izvajanja programa. Izvajanje programa lahko sprožimo na dva načina: tekoče ali po korakih. Če izberemo tekoče izvajanje progama bomo izredno težko spremljali, kaj se dogaja s programom, saj se bo program odvijal zelo hitro in tako bo spremljanje praktično nemogoče. Zato ponavadi izberemo izvajanje po korakih (F8). Vsakič ko pritisnemo tipko F8 se bo kazalec pri vrstici programa premaknil za eno vrstico naprej in izvedel napisan ukaz. Če želimo v tem trenutku spremeniti vrednost določene sprejemljivke kliknemo v okno Variables in ročno vpišemo ime sprejemljivke oziroma jo izberemo iz padajočega menija. Potrdimo z Enter in v oknu Value vpišemo vrednost spremenljivke ter potrdimo z Enter. Nato lahko spet izvajamo program v simulatorju po korakih. V kolikor pa se izkaže, da je izvajanje programa dolgo, lahko izberemo tekoče izvajanje programa. V tem primeru si v oknu s programom označimo t.i. Break točke, kjer se izvajanje simulatorja ustavi. break točke postavimo tako, da z desnim gumbom miške kliknemo pri odseku programa, kjer želimo imeti Break točko in kliknemo Toggle Break point. Na isti način Break točko tudi odstranimo.

Page 10: Seminar Publikacija

10 Program Bascom AVR | Bascom AVR za začetnike

Simulator in UART

Simulator lahko s pridom uporabljamo pri simulaciji RS232 komunikacije. Za ta namen je pripravljeno okno UART, v katerem se bo izpisovala vsebina (podatki), ki bi se sicer izpisovali na terminalu. V okno UART lahko tudi vnesemo spremenljivke, ki jih sprejemamo po UART-u – recimo iz tipkovnice.

Simulator in LCD/LED

Simulator lahko prikazuje izpis na LCD-ju oziroma na LEDicah. Kliknemo na ikono LCD in odprlo se bo okno, kot ga vidimo na sliki:

Okno LCD in LED simulatorja

Simulator bo stanje na LEDicah izpisoval tako, da logična 1 „vklopi“ LEDico. Ker vemo, da to ne ustreza realnim mikrokontrolerjem je spodaj levo okno, kjer odkljukamo Invert in s tem preprečimo to obnašanje simulatorja.

Page 11: Seminar Publikacija

Bascom AVR za začetnike | Programiranje AVR mikrokontrolerjev 11

Programiranje AVR mikrokontrolerjev

Jure Mikeln

Opis MiniPin razvojnega orodja in programiranje

MiniPin razvojno orodje ni nič drugega kot ploščica tiskanega vezja, na katerem so že prispajkani določeni elektronski elementi, ki jih programer, ko programira mikrokontroler, s pridom uporablja. MiniPin lahko uporabimo tako za 20 kot tudi 40-pin mikrokontrolerje družine 8051 in AVR. Ker v našem nadaljevanju teče beseda o programiranju AVR-jev, se bomo osredotočili na AVR-je. Nadalje je na MiniPin že predviden prostor za kvarčni kristal oziroma 3-pin keramični resonator, ki ga lahko uporabimo namesto kvarčnega kristala. Na vezju najdemo 4x8 LEDic (ki so vezane tako, kot je prikazano na Sliki 2), 4 tipke + 1 reset tipko, priključke za LED in LCD prikazovalnike, 1Wire elemente, I2C spominske elemente, RS232, RS485 ter integriran regulator napetosti, s katerim napajalno napetost mikrokontrolerja nastavimo na 5V ali na vedno bolj popularnih 3,3V. MiniPin ima tudi več razširitvenih konektorjev, ki jih bomo spoznali sproti.

Fotografija MiniPin z označenimi elementi

MiniPin napajamo z enosmerno ali izmenično napetostjo od 9-15V. V vezje vtaknemo mikrokontroler ATTiny2313-20PU na mesto IC6, na mesto U1 vtaknemo 12 MHz kvarc ali resonator, stikalo S3 preklopimo v položaj AVR in že smo pripravljeni, da povežemo MiniPin s programatorjem in sprogramiramo mikrokontroler.

Page 12: Seminar Publikacija

12 Programiranje AVR mikrokontrolerjev | Bascom AVR za začetnike

Za programator lahko uporabimo Proggy programator ali pa si sami naredimo programator po načrtu, ki ga vidite na sliki 4.

Shema Sample programatorja

Tako Proggy kot Sample programator povežemo na MiniPin na konektor K6. V Bascomu je potrebno nastaviti (Options/Programmer) izbrani programator, kot vidite na sliki 5.

Page 13: Seminar Publikacija

Bascom AVR za začetnike | Programiranje AVR mikrokontrolerjev 13

Nastavitev programatorja

V nastavitvah LPT-address morate nastaviti ustrezen naslov, ki ga najdete v BIOS nastavitvah.

V koliko boste uporabljali Proggy svetujem, da najprej naložite program AVR Studio, kjer boste nastavili Tools/ProgramAVR/Connect in nastavili program, kot kaže spodnja slika:

Page 14: Seminar Publikacija

14 Programiranje AVR mikrokontrolerjev | Bascom AVR za začetnike

Če se bo Proggy uspešno povezal s PC-jem, se bo odprlo naslednje okno:

Proggy je pripravljen za programiranje v AVR Studiu

Zdaj smo pa že res pri koncu nastavitev strojne in programske opreme. Program, ki smo ga napisali v Bascom-u prevedemo (Compile ali tipka F7) in v primeru, da uporabljamo Sample programator kliknemo ikono Program Chip ali pritisnemo F4. Če pa uporabljamo Proggy v

AVR Studiu pritisnemo tipko „...“ in izberemo datoteko s končnico HEX.+

Podobno dosežemo, če v Bascomu namesto Sample programatorja nastavimo STK500 in v oknu SKT500EXE izberemo, kje se nahaja exe datoteka za STK500 program. Pred tem še odstranimo kljukice pri Auto Program in Auto Verify ter postavimo kljukico na Upload Code and Data.

Page 15: Seminar Publikacija

Bascom AVR za začetnike | Programiranje AVR mikrokontrolerjev 15

Ne glede na uporabljeni programator nastavimo mikrokontroler, ki ga programiramo (ATTiny2313) in kliknemo Program. S tem smo sprogramirali mikrokontroler!

Preden gremo na samo programiranje in Bascom se še malce ustavimo na t.i. Fuse in Lock bitih, ki znajo pri začetnikih povzročiti kar nekaj težav. Fuse in Lock biti so posebni – recimo temu konfiguracijski biti, ki (na žalost) niso nastavljivi iz programske kode pač pa jih nastavljamo ob postopku programiranja.

Page 16: Seminar Publikacija

16 Fuse in Lock biti | Bascom AVR za začetnike

Fuse in Lock biti

Jure Mikeln

Iz Bascom-AVR programa ni možno nastavljati tako imenovane Fuse in Lock bitov. Zato za ta namen uporabimo AVR Studio. Tipični izgled okna, kjer nastavljamo Fuse bite vidimo na sliki:

Page 17: Seminar Publikacija

Bascom AVR za začetnike | Fuse in Lock biti 17

Ko odpremo AVR Studio kliknemo na zavihek Fuses. V tem oknu lahko nastavljamo sledeče:

• Bootloader (BOOTSZ in BOOTRST)

• Onemogočanje reset-a (RSTDISBL)

• Omogočanje debugWIRE (DWEN)

• Omogočanje Watch Dog timerja (WDTON)

• Preprečitev brisanja EEPROM-a med programiranjem mikrokontrolerja (EESAVE)

• Vklop Brown-out detektorja in nastavitev BOD napetosti (BODLEVEL)

• Deljenje internega oscilatorja z 8 (CKDIV8)

• Omogočanje Clock signala (CKOUT)

• Izbira vira takta (SUT_CKSEL)

Največkrat uporabljamo zadnji Fuse bit, kjer spreminjamo vir taktne ure za mikrokontroler. Izbiramo lahko med velikim številom možnih virov takta. Pri izbiri moramo biti IZJEMNO previdni, da mikrokontrolerja po nesreči ne sprogramiramo na zunanji takt ali zunanji RC oscilator. V tem primeru je za normalno delovanje potrebno pripeljati takt iz zunanjega oscilatorja oziroma na mikrokontroler vezati R in C ustreznih vrednosti. Več o tem si preberite v Data Sheet-u AVR-jev.

Page 18: Seminar Publikacija

18 Fuse in Lock biti | Bascom AVR za začetnike

Izbor različnih taktnih virov za mikrokontroler.

Lock biti so namenjeni zaklepanju mikrokontrolerja pred nepooblaščenim branjem programa iz mikrokontrolerja tako preko Boot loaderja kot tudi preko paralelno/serijskega načina branja. Po navadi uporabimo LB bit, kjer izberemo možnost: »Further programming and verification disabled«.

Page 19: Seminar Publikacija

Bascom AVR za začetnike | Fuse in Lock biti 19

Page 20: Seminar Publikacija

20 Priklop periferije na mikrokontroler | Bascom AVR za začetnike

Priklop periferije na mikrokontroler

Jure Mikeln, Gregor Maček

Vezava tipke

Tipko lahko vežemo v t.i. pull-up vezavi (ko je tipka pritisnjena, je sklenjena proti masi, sicer pa preko 10k »pull up« upora proti VCC – vhod ima pri pritisnjeni tipki vrednost 0) ali pull-down vezavi (ko je tipka pritisnjena, je sklenjena proti VCC, sicer pa preko 10k »pull down« upora proti masi – vhod ima pri pritisnjeni tipki vrednost 1).

Omenjeni upori so namenjeni definiranju stanja spuščene tipke, saj se sicer lahko zgodi, da vhod »zaplava« in menja stanja brez, da bi bilo karkoli pritisnjeno. Na zgornji sliki je narisana pull up vezava (R1 na sliki je na primer tak pull up upor).

*Opomba:

Na sliki je prikazan procesor z družine 8051. Priklop na družino AVR je enak.

Page 21: Seminar Publikacija

Bascom AVR za začetnike | Priklop periferije na mikrokontroler 21

Vezava LED diode

Tudi LED diodo lahko vežemo proti masi ali proti VCC (kot na zgornji sliki); v slednjem slučaju bo LED prižgana, ko bo izhod na logični 0, ugasnjena pa, ko bo izhod na logični 1.

Če pa vežemo LED med izhod in maso, pa je LED prižgana, ko je izhod na logični 1, ugasnjena pa, ko je izhod na logični 0.

AVR družina mikrokontrolerjev je sposobna na izhodu direktno poganjati največ 20mA toka, ne glede na to ali vežemo breme proti masi ali proti VCC. Kontrolerji prejšnje, 8051 družine, pa so lahko takšen tok zagotovili le pri vezavi bremena proti VCC, ne pa tudi proti masi.

V vsakem primeru moramo zaporedno z LED diodo vezati upor, s katerim omejimo tok skozi diodo, saj lahko v nasprotnem primeru uničimo kontroler in/ali LED diodo.

*Opomba:

Na sliki je prikazan procesor z družine 8051. Priklop na družino AVR je enak.

Page 22: Seminar Publikacija

22 Priklop periferije na mikrokontroler | Bascom AVR za začetnike

Vezava PFET in NFET tranzistorja

Mikrokontroler ima prešibke izhode za krmiljenje močnejših porabnikov - Rt (npr. relejev, žarnic itd.), zato moramo njihov izhod „ojačiti“. To ponavadi naredimo s tranzistorjem, v zadnjem času so popularni FET tranzistorji, zato bomo prikazali vezavo FET-ov. Pri programiranju bodimo pozorni: NFET vklapljamo z logično 1, PFET pa z logično 0.

*Opomba:

Na sliki je prikazan procesor z družine 8051. Priklop na družino AVR je enak.

Page 23: Seminar Publikacija

Bascom AVR za začetnike | Priklop periferije na mikrokontroler 23

Vezava LDC prikazovalnika

V tem seminarju bomo predstavili uporabo 2x16 LCD prikazovalnika, ki je nekako najbolj razširjen. Vsi tekstovni zasloni, ne glede na velikost, se priklapljajo enako, potrebno pa je preveriti v dokumentaciji posameznega zaslona, kje imajo pine za krmiljenje, saj razpored ni povsem standarden (predvsem kje je pin 1, pini v nadaljevanju so navadno po standardnem razporedu).

Če ima zaslon za priklop 16 pinov, sta pina 15 in 16 navadno uporabljena za priklop osvetlitve zaslona.

Navadno tekstovni LCD uporabljamo v t.i. 4 bitnem načinu, kjer imamo med kontrolerjem in zaslonom 6 linij: 4 data linije, enable in reset. Obstaja pa tudi 8 bitni način naslavljanja, kjer imamo 8 data linij ter enable in reset (torej skupno 10 linij).

*Opomba:

Na sliki je prikazan procesor z družine 8051. Priklop na družino AVR je enak.

Page 24: Seminar Publikacija

24 Priklop periferije na mikrokontroler | Bascom AVR za začetnike

Krmiljenje DC motorja

DC motor lahko krmilimo zgolj preko tranzistorja (vklop/izklop), če pa želimo nadzorovati tudi smer vrtenja pa ga najlažje krmilimo preko namenskega vezja L272M. Omenjeno integrirno vezje omogoča krmiljenje izhoda z maksimalnim tokom 1A, pred preobremenitvijo pa je zaščiten tudi s posebnim vezjem, ki izklopi izhod, če se vezje pregreje.

*Opomba:

Na sliki je prikazan procesor z družine 8051. Priklop na družino AVR je enak.

Page 25: Seminar Publikacija

Bascom AVR za začetnike | Uporaba izhodov 25

Uporaba izhodov

Gregor Maček

Mikrokontrolerji imajo različno število vhodov in izhodov. Navadno je v portu, ki ga označujemo s črko, 8 vhodov/izhodov (lahko tudi manj). Tako imamo, na primer, v portu A pine 0 do 7, ki jih potemtakem deklariramo kot PA.0, PA.1 ... PA.7. Posamezen pin ima lahko zgolj funkcijo logičnega vhoda ali izhoda (0/1), lahko pa taisti pin omogoča še druge funkcije. Dodatne funkcije pinov vidimo v datasheetu posameznega mikroprocesorja – tu si kot primer oglejmo pinout Mega128:

Za informacije o dodatnih funkcijah posameznih pinov imamo v datasheetu vsak register posebej detajlno opisan. Ko pišemo program, moramo najprej konfigurirati posamezne porte/pine tako, da prevajalnik ve, ali bomo posamezni pin/port uporabili kot vhod ali kot izhod. Izhode konfiguriramo z ukazom CONFIG:

Page 26: Seminar Publikacija

26 Uporaba izhodov | Bascom AVR za začetnike

Config Porta = Output 'Lahko nastavimo cel register kot output Config Portb.0 = Output 'Lahko pa tudi zgolj posamezni pin iz registra Config Portb.1 = Output

Z ukazom SET postavimo izhod na 1 (izhod na logični 1; +5V), z RESET pa na 0 (izhod na logični 0 - GND). Naredimo enostavno zanko, kjer bo LED dioda na portu A.0 utripala: Do 'Začetek zanke Set Porta.0 'Vklopim LED Wait 1 'Počakam sekundo (ukaz wait; lahko tudi waitms ali waitus, max. vrednost pri posameznem ukazu je 255!) Reset Porta.0 'Izklopim LED Wait 1 'Počakam sekundo Loop 'Se vrnem na začetek zanke

Direktno naslavljanje V določenih primerih je nastavljanje porta po posameznih pinih zamudno. In tudi nepotrebno... Uporabimo lahko namreč ukaz za direktno naslavljanje &B: Do Porta = &B00000000 'Biti od 0-7 v portu A so izklopljeni Wait 1 Porta = &B11111111 'Biti od 0-7 v portu A so vklopljeni Wait 1 Loop

Sedaj lahko naredimo enostavni light-show s poljubnim zaporedjem utripanja in poljubno hitrostjo, na primer: Do Porta = &B01010101 Waitms 250 'Maksimalna vrednost za wait/waitms-/waitus je 255 Waitms 250 'zato za čas 500ms uporabimo 2 ukaza waitms 250 Porta = &B10101010 Waitms 250 Waitms 250 Loop

Page 27: Seminar Publikacija

Bascom AVR za začetnike | Uporaba vhodov 27

Uporaba vhodov

Gregor Maček

Najprej moramo v programu konfigurirati posamezne porte/pine tako, da prevajalnik ve, ali bomo posamezni pin/port uporabili kot vhod ali kot izhod. Vhode tako kot izhode konfiguriramo z ukazom CONFIG: Config Porta = Input 'Lahko nastavimo cel port kot output Config Portb.0 = Input 'Lahko pa tudi zgolj posamezni pin iz porta

Da bomo lahko gledali spremembe, potrebujemo tudi kakšen izhod... Config Portc.0 = Output

Branje vhoda z ukazom IF-Then Najenostavneje beremo stanje vhoda z IF stavkom. Naredimo program, ki prižge LED na pinu C.0, če pritisnemo tipko na pinu B.0 Do If Pinb.0 = 1 Then 'Pogojni stavek: če je pin B.0 na stanju 1 (+5V - tipka stisnjena), potem ... Set Portc.0 'prižgem LED diodo na C.0 ... Else '... sicer ... Reset Portc.0 'ugasnem LED diodo na C.0 End If 'Konec pogojnega stavka Loop

Slabost omenjene rešitve je, da tipka lahko pri pritisku/spustu odskakuje in v aplikacijah, kjer štejemo število pritiskov itd. lahko dobimo napačen rezultat. Problem lahko rešimo tako, da po prvem prebiranju tipke počakamo nekaj časa in nato še enkrat preverimo stanje tipke in šele če obe stanji sovpadata, izvršimo dejanje. Do If Pinb.0 = 1 Then Waitms 50 'malo počakamo If Pinb.0 = 1 Then 'ponovno preverimo stanje in če je tipka še vedno pritisnjena... . . . 'naredimo željeno operacijo End If End If Loop

Page 28: Seminar Publikacija

28 Uporaba vhodov | Bascom AVR za začetnike

Branje vhoda z ukazom DEBOUNCE

Bascom pa omogoča taisto zadevo še enostavneje, s posebnim ukazom "debounce" – ta ukaz ob pritisku tipke samodejno počaka prednastavljeno časovno periodo, nato stanje tipke preveri še enkrat in vkolikor ugotovi, da je tipka dejansko pritisnjena, skoči na nastavljeni kazalec oz. v podprogram (če je dodan še SUB parameter): Config portb.0 = input 'Port b.0 konfiguriramo kot vhod Config portc.0 = output 'Port c.0 konfiguriramo kot izhod Config Debounce = 40 'Najprej konfiguriramo čas, po katerem je pritisk tipke veljeven; v tem primeru 40ms

Main: 'Kazalec glavne zanke Do 'Zanka za preverjanje pritisnjene tipke Debounce Pinb.0 , 1 , Program 'Sintaksa: pin, stanje za aktiviranje, 'podprogram, kamor naj skočim ob 'izvršenem pogoju Loop Program: 'Podprogram, kamor skočim ob pritisku na tipko Set Portc.0 'Prižgem in ugasnem LED na C.0 Wait 1 Reset Portc.0 Goto Main 'Vrnem se nazaj v glavno zanko

V programih se GOTO ukaza skušamo izogibati, saj potek programa z več GOTO ukazi postane zelo nepregleden; rajši uporabimo skok podprogram, iz katerega se z ukazom RETURN vrnemo tja, s kjer smo skočili:

Config portb.0 = input 'Port b.0 konfiguriramo kot vhod Config portc.0 = output 'Port c.0 konfiguriramo kot izhod Config Debounce = 40 'Najprej konfiguriramo čas, po katerem je pritisk tipke veljeven; v tem primeru 40ms Do 'Zanka za preverjanje pritisnjene tipke Debounce Pinb.0 , 1 , Program , Sub Loop Program: 'Podprogram, kamor skočim ob pritisku na tipko Set Portc.0 'Prižgem in ugasnem LED na C.0 Wait 1 Reset Portc.0 Return 'Vrnem se nazaj v glavno zanko

Page 29: Seminar Publikacija

Bascom AVR za začetnike | Uporaba tekstovnega LCD zaslona 29

Uporaba tekstovnega LCD zaslona

Gregor Maček

Konfiguracija zaslona Zaslon moramo najprej konfigurirati - Bascomu povedati, katere pine uporabljati. To storimo v Options - Compiler – LCD. Navadno moramo nastaviti le tip - velikost LCDja ter katere priključke uporabljamo. Ostale nastavitve pustimo takšne, kot so. V samem začetku programa zaslon "pobrišemo" z ukazom CLS in izklopimo kurzor (če ga ne rabimo): Cls 'Pobrišemo zaslon Cursor Off 'Izklopimo prikaz kurzorja

Sedaj lahko na zaslon izpišemo enostaven tekst. To storimo z ukazom LCD

Izpis na zaslon – ukaz LCD Lcd "Testiranje"

Če sedaj pošljemo še en tekst, se začne pisati tam, kjer se je pisanje prvega nehalo: Lcd "Nadaljujem"

Tega navadno ne želimo. Zato lahko, če želimo izpisati nov zaslon, le-tega najprej pobrišemo in nato zapišemo Cls Lcd "Nadaljujem 2"

Page 30: Seminar Publikacija

30 Uporaba tekstovnega LCD zaslona | Bascom AVR za začetnike

Pozicioniranje teksta na zaslon – ukaz LOCATE ali pa povemo, na kateri poziciji zaslona želimo pisati z ukazom LOCATE Y , X. Če želimo npr. izpisati tekst "test" na 3. polju v 2. vrstici, to storimo tako: Cls Locate 2 , 3 Lcd "test"

Lahko uporabljamo tudi ukaze LOWERLINE, THIRDLINE in FOURTHLINE, s katerimi se pomaknemo v izbrano vrstico - npr. Cls Lcd "1. vrstica" Lowerline Lcd "2. vrstica"

Seveda lahko uporabimo prej omenjene ukaze glede na velikost LCD zaslona, ki ga uporabljamo (ne moremo npr. uporabljati ukaza THIRDLINE pri dvovrstičnem zaslonu). V samih programih se nam dostikrat pojavi problem, ker se določen tekst na zaslonu ne izpiše. Najpogosteje je vzrok temu program, ki teče v zanki in v kateri imamo tudi ukaz CLS, ki zaslon izbriše. Ker zanka teče zelo hitro, izpisanega teksta ne vidimo, saj je prej izbrisan. Pri vsakem brisanju zaslona (CLS) zaslon tudi utripne, zato se ukaza CLS v zanki poskusimo čimbolj izogibati in raje tekste in spremenljivke zgolj prepisujmo (uporabimo tudi ukaz LOCATE). Sedaj smo prikazovali statično vsebino - v narekovajih. Pri prikazu spremenljivk je zadeva podobna, le da spremenljivko ne napišemo v "narekovaje" Dim A As Byte A = 0 Cls Do Incr A 'povečam A za 1 (isto kot bi napisal A = A + 1) Locate 1 , 1 Lcd A Wait 1 Loop Until A = 30

Page 31: Seminar Publikacija

Bascom AVR za začetnike | Uporaba tekstovnega LCD zaslona 31

Premik teksta po zaslonu v levo ali desno – ukaz SHIFTLCD Z ukazoma SHIFTLCD lahko vsebino zaslona premikamo po zaslonu levo/desno A = 1 'spremenljivka za premikanje Cls Lcd “Tekst na LCD” For A = 1 To 10 Shiftlcd Left 'premikamo v levo .... 'Shiftlcd Right '... ali desno ... Wait 1 'vsako sekundo za 1 znak Next

Page 32: Seminar Publikacija

32 Uporaba tekstovnega LCD zaslona | Bascom AVR za začetnike

Kreiranje lastnih znakov V kolikor želimo kreirati kakšen poseben znak, ki ni v ASCII tabeli, to lahko storimo z Bascom orodjem LCD designer: Tools -> LCD Designer Še prej se postavimo v prazno vrstico programa, kjer bo nato vnešena koda za nov znak; najbolje, da je to v začetku programa (poleg konfiguracije zaslona). Odpre se nam okno, kjer lahko s klikanjem naredimo željen znak. Ko kliknemo OK, se nam v izbrano vrstico izpiše naslednja koda: (variira glede na narejeni karakter) Deflcdchar ?,16,16,8,8,4,4,3,3' replace ? with number (0-7)

Vprašaj moramo zamenjati za številko od 0 do 7 (kreiramo lahko 8 svojih znakov), torej naredimo npr. Deflcdchar 1 , 32 , 7 , 5 , 7 , 32 , 32 , 32 , 32 'znak za stopinje

Prikaz takšnega znaka v programu naredimo z ukazom LCD CHR(?), torej: Lcd Chr(1)

Izpis v tekstu pač naredimo povsem navadno, kot izpis na LCD: Lcd "Temp je 12" : Lcd Chr(1) : Lcd " Celzija"

Zgornji program izpiše: Temp je 12° Celzija

Pri čemer smo znak za stopinje naredili sami. Vloga dvopičja je ista kot da bi pisali vsako postavko v novo vrstico, le pregledneje je tako.

Inicializacija zaslona med delovanjem programa – ukaz INITLCD

Vkolikor naredimo aplikacijo, kjer LCD priklopimo zgolj občasno (npr. ko želimo preveriti določene parametre), nam le-ta pri »on-line« priključitvi ne bo deloval. Vzrok temu je to, da zaslon ni inicializiran, kar se zgodi ob zagonu programa (Bascom prevede kodo tako, da v začetek programa postavi tudi inicializacijo samega displaya tudi, če INITLCD ne uporabomo).

Če pa v program vključimo omenjeno funkcijo, se zaslon inicializira tudi tekom delovanja programa in ga potemtakem lahko priključimo med delovanjem same aplikacije.

Page 33: Seminar Publikacija

Bascom AVR za začetnike | Komunikacija – UART pošiljanje 33

Komunikacija – UART pošiljanje

Gregor Maček

Za komunikacijo s perifernimi napravami (GSM modem, GPS ...) največkrat uporabljamo UART vmesnik. UART je kratica za universal asynchronous receiver/transmitter - torej univerzalni asinhroni prenos (pošiljanje/sprejem) podatkov. Več o samem standardu lahko zveste na Internetu.

RS-232 protokol S pretvorniki (npr. MAX232, MAX485) lahko napetosti prilagodimo aplikaciji, ki jo delamo. Za kratke razdalje lahko uporabljamo kar direkten priklop UART <-> UART, vkolikor pa imamo vmes daljše kable ali v okolju motnje, uporabimo napetostni pretvornik.

Kot primer uporabimo MAX232, s katerim dosežemo nivoje, potrebne za RS232 komunikacijo (Reccomended Standard 232), ki navadno uporablja +/-22V napetostne nivoje. Ker prenašamo višje napetosti je tudi vpliv motenj na samo komunikacijo manjši. RS232 je tudi vmesnik, ki ga imamo največkrat na razvojni plošči...

Page 34: Seminar Publikacija

34 Komunikacija – UART pošiljanje | Bascom AVR za začetnike

AVR mikroprocesorji imajo navadno 1 UART vmesnik (TX/RX), določeni večji modeli pa tudi po več (2 ali celo 4). Mi se bomo tokrat omejili le na en vmesnik, prav nič bistveno bolj pa ni komplicirana uporaba dveh ali več.

Komunikacijske nastavitve v Bascomu V Bascomu moramo najprej nastaviti parametre komunikacije. To storimo v Options -> Compiler -> Communication.Tu izberemo hitrost, s katero želimo komunicirati (baudrate) in nastavimo frekvenco procesorja. Vkolikor uporabljamo interni oscilator (1/4/8 MHz) nastavimo to vrednost, če pa uporabljamo kristal, pa nastavimo frekvenco kristala. Če se malo igramo z nastavitvami, vidimo da je faktor napake najmanjši (oz. ga sploh ni) pri frekvenci kristala 11,059MHz. Vkolikor uporabljamo drugo frekvenco, je vedno neka napaka (ki se seveda veča z višanjem hitrosti prenosa), a vrednosti pod 5% so največkrat sprejemljive. Vse omenjene nastavitve lahko vpišemo tudi direktno v program in tako vpisane imajo prednost pred nastavitvami, izbranimi v meniju. Ravno tako lahko v sam program vključimo ostale informacije (o procesorju, pinih LCDja itd.) Primer: $regfile = "m16def.dat" $crystal = 8000000 $baud = 19200 $hwstack = 32 $swstack = 8 $framesize = 24

Torej, ko smo opravili nastavitve komunikacije, poskusimo nekaj poslati na UART oziroma RS-232 izhod (na razvojni plošči je že MAX232, ki poskrbi za pretvorbo napetostnih nivojev). To storimo z enostavnim ukazom PRINT.

Page 35: Seminar Publikacija

Bascom AVR za začetnike | Komunikacija – UART pošiljanje 35

Pošiljanje podatkov – PRINT Da bomo imeli kje spremljati komunikacijo, bomo RS232 vmesnik na razvojni plošči morali povezati z RS232 vmesnikom na računalniku. Kabel mora biti t.i. crossover – TX pin (izhod) mora biti povezan z RX pinom(vhod) računalnika in obratno. Potem lahko komuniciramo z uporabo HyperTerminala (del Windows XP) oz. uporabimo naprednejši program kot je npr. Brayev terminal. Slednji je priporočljiv tudi zato, ker HyperTerminal ne pokaže vsega, kar se dogaja na ravni protokola (CR, LF ...). Do Print "Posiljam podatke preko RS232 vmesnika" Wait 3 Loop

Zgornji program vsake 3 sekunde pošlje omenjeno sporočilo na RS232 port in v kolikor imamo računalnik pravilno nastavljen (izbran pravilni port in hitrost) ter pravilno narejeno povezavo se le to prikaže v oknu programa. Prazno vrstico enostavno kreiramo s praznim ukazom PRINT, torej: Do Print "test" Print 'prazna vrstica Print "test2" Wait 3 Loop

Če želimo več vrednosti poslati v eni vrstici (brez CR), kot ločilo uporabimo podpičje: Do Print "test " ; "naprej " ; "v eni " ; "vrstici" Wait 3 Loop

Isto kot pri izpisu na LCD za fiksne vrednosti uporabimo narekovaje, pri pošiljanju spremenljivk pa le-te izpustimo.

Page 36: Seminar Publikacija

36 Komunikacija – UART pošiljanje | Bascom AVR za začetnike

Pošiljanje podatkov v binarni in šesdesetiški obliki Če želimo izpisati šesdesetiško ali binarno vrednost spremenljivke, to storimo z ukazoma PRINT HEX oz. PRINT BIN: Dim A As Byte A = 20 Do Print Bin(A) 'pošljem A kot binarno vrednost Wait 3 Print Hex(A) 'pošljem A kot šesdesetiško vrednost Wait 3 Loop

Page 37: Seminar Publikacija

Bascom AVR za začetnike | Komunikacija – UART sprejemanje 37

Komunikacija – UART sprejemanje

Gregor Maček

Sprejem podatkov z ukazoma INKEY, WAITKEY

Podatke na UART lahko sprejemamo na različne načine, odvisno seveda od tega, za kakšne podatke gre.

Dim A As Byte Do A = Inkey() 'čakam na ASCII vrednost na UARTu If A > 0 Then 'če smo nekaj dobili… Print "Dobili smo " ; A ; " (ASCII vrednost)" '… to izpišemo Print "Dejansko pa je to " ; Chr(a) 'in še dejanski znak! End If Loop

Podoben ukaz kot INKEY je tudi WAITKEY, s to razliko, da se v primeru uporabe WAITKEY program na tem mestu ustavi in stoji, dokler nekaj ne prejmemo.

Sprejem podatkov z ukazom INPUT

Tega ukaza se največkrat poslužimo, če želimo narediti komunikacijo med Hyperterminalom in našo aplikacijo z namenom spreminjanja parametrov sistema itd. Program

Dim A As Word Dim C As Integer Dim S As String * 15 Do Input "Vpisite spremenljivko A: " , A Print "Spremenljivka A je: " ; A

Wait 3

Input "Vpisite tekst S" , S Print "Napisali ste tekst: " ; S Wait 3 Loop

Page 38: Seminar Publikacija

38 Multipleksiranje – 7 segmentni LED | Bascom AVR za začetnike

Multipleksiranje – 7 segmentni LED

Vilko Sustič

Svetleča dioda sveti, če teče skozi njo tok v prevodni smeri. Običajno tok sklenemo in prekinjamo na strani katode, tako da potencial katode damo na 0V, med tem ko je anoda vezana na stalni vir energije +5V. POZOR, na slikah ni narisan upor, ki se veže v serijo z diodami, za omejitev toka, kajti 5V je

previsoka napetost za diodo in bi jo prežgala. Sheme v tem dokumentu obravnavajte samo za

razlago delovanja.

Tok pa lahko prekinjamo tudi na strani anode, ali na obeh straneh

Na strani anode si pomagamo s PNP tranzistorjem, ki ga odpremo z tokom skozi bazo, ki ga ustvarimo tako, da damo drugo stran upora na nizek potencial 0V . Da bo dioda svetila morata torej biti oba izhoda iz mikroprocesorja na nizkem potencialu. Ta koncept uporabimo, kadar želimo upravljati z velikim številom diod:

Page 39: Seminar Publikacija

Bascom AVR za začetnike | Multipleksiranje – 7 segmentni LED 39

Uporabili smo 8 + 4 = 12 izhodov mikroprocesorja, in upravljamo z 8 x 4 = 32 diodami. Lahko prižgemo katerokoli diodo, če le pravilno vzbujamo izhode s katerimi krmilimo potenciale na diodah. Problem postane, kadar bi radi, da bi svetilo več diod hkrati. To se da samo takrat, če so diode, ki naj bi hkrati svetile bodisi v isti vrstici, bodisi v isti koloni. Oglejmo si vezje Minipin plošče. Na njej so štirje 7-segmentni prikazovalniki, od katerih ima vsak 8 diod in vse imajo skupno anodo, prav tako, kot ima 8 diod vezano skupaj anode na zgornji sliki. Katode so speljane ven, vsaka za en segment in ena za diodo, ki predstavlja decimalno piko. Vsaka dioda ima tudi svoje ime, pravzaprav črko:

. Iz sheme lahko vidimo, kam so vezane katode posameznih diod in naredimo sledečo tabelo:

Dioda Port 0 1 2 3 4 5 6 7 8 9

A Portb.7 x x x x x x x x B Portb.1 x x x x x x x C Portb.5 x x x x x x x x D Portb.4 x x x x x x x E Portb.2 x x x x x F Portb.3 x x x x x x x G Portb.0 x x x x x x x Dp Portb.6

Nič pa ne bo narobe, če se o tem prepričamo. Naredimo si program, ki bo dajal na 0V ciklično vsak portpin posebej, in istočasno bomo odprli tok skozi enega od tranzistorjev: Reset Portd.7 Do For I = 0 To 7 Portb = 255 Portb.i = 0 Wait 3 Next Loop

Seveda moramo jumperje na Minipin plošči tudi pravilno postaviti, sicer ne bo nič videti. In potem poženemo program vaja2.bas:

Page 40: Seminar Publikacija

40 Multipleksiranje – 7 segmentni LED | Bascom AVR za začetnike

Config Portb = Output ' dodamo/vklopimo 7seg displey na PD.7 Config Portd.7 = Output Reset Portd.7 Do Dim I As Byte For I = 0 To 7 Portb = 255 Portb.i = 0 Wait 3 Next Loop 'Zgraditi moramo tabelo za prevajanje - lookup tabelo. 'Kako ? Obrezložim na primeru: 'Želimo prikazati recimo številko 1 'Da bo vidna številka ena, morata goreti diodi, ki odgovarjata pinom 1 in 5 'Odgovarjajoča pina morata biti na 0 ostali na 1 torej: 'Torej če so pini 7 6 5 4 3 2 1 0 ' 1 1 0 1 1 1 0 1 ' ali heksa D D &HDD ' 'Tako dobljene konstante, ki izvirajo iz samega vezja sestavim v tabelo. 'Zaporedje se mora začeti z kombinacijo, ki odgovarja ničli, in nato po ena 'naprej: ' 'Minipin7seg: 0 1 2 3 4 5 6 7 'Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D 8 9 A B C D E F 'Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

To, kar vidimo, mora odgovarjati načrtu. Vendar ne odgovarja, ker sem pri prenašanju načrta v tabelo namerno naredil napako, prosim popravite jo. Če vežete v vašem projektu diode drugače, boste pač tudi krmilili malo drugače. In sedaj moramo doseči, da na 7-segmentnem prikazovalniku ne bo svetila samo ena dioda, temveč, da bodo svetile vse tiste diode, ki bodo skupaj optično pričarale vsebino, ki jo želimo prikazati. Če želimo prikazati enojko, morata svetiti diodi B in C, če hočemo prikazati trojko, potem morajo svetiti diode A,F,G,E,D. in tako naprej za vse znake, ki jih želimo prikazati. Kako to naredimo? Za vsako vrednost spremenljivke, ki jo želimo prikazati, se pravi od 0 do 9, no morda do 15, naredimo bajt, ki ima odgovarjajoče bite na 0, ostale bite na 1. Razložim na primeru enice: Pri enici naj svetita samo diodi B in C, ki sta vezani na Portb.1 in Portb.5 Portb ima osem bitov ki so numerirani tako :

Page 41: Seminar Publikacija

Bascom AVR za začetnike | Multipleksiranje – 7 segmentni LED 41

7 6 5 4 3 2 1 0 in vsebina le teh za enico bodi: 1 1 0 1 1 1 0 1 kar heksadecimalno zapišemo kot D D Tako moramo priti do vsej 10 (ali 15) konstant in jih postavimo v vrsto: Minipin7seg: ' 0 1 2 3 4 5 6 7 Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D ' 8 9 A B C D E F Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

In potem z lookup ukazom potegnemo iz te vrste tistega, ki odgovarja spremenljivki: Portb = Lookup(i , Minipin7seg)

Preverimo to s programom vaja3.bas: Dim I As Byte Dim J As Byte Dim K As Byte Dim L As Byte Dim S As String * 16 Config Portb = Output 'dodamo 7seg displey na PD.7 Config Portd.7 = Output Reset Portd.7 Do For I = 0 To 15 Portb = Lookup(i , Minipin7seg) ' lookup ukaz potegne iz tabele tisto vrednost, ki odgovarja po ' zaporedju ' vrednosti argumenta lookup ukaza, torej spremenljivki i Wait 2 Next Loop Minipin7seg: ' 0 1 2 3 4 5 6 7 Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H40 , &H42 , &H5D ' 8 9 A B C D E F Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

S programom preverimo, ali smo tabelo pravilno sestavili. V tabeli je namerna napaka, in prosim popravite jo! Potem, ko smo popravili tabelo, gremo naprej, želimo prikazati kaj več, kot samo eno mesto! Na vsa 4 mesta prikazovalnika bomo dali neko vsebino: Vaja4.bas:

Page 42: Seminar Publikacija

42 Multipleksiranje – 7 segmentni LED | Bascom AVR za začetnike

Dim I As Byte Dim J As Byte Dim K As Byte Dim L As Byte Dim S As String * 16 Config Portb = Output 'dodamo 7seg displey na PD.7 Config Portd = Output Do For I = 0 To 3 Portb = Lookup(i , Minipin7seg) Portd = 255 If I = 0 Then Reset Portd.4 If I = 1 Then Reset Portd.5 If I = 2 Then Reset Portd.7 If I = 3 Then Reset Portd.3 Wait 1 'Eksperimentiraj Z Različnimi Zakasnitvami Waitms 5 Next Loop Minipin7seg: ' 0 1 2 3 4 5 6 7 Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D ' 8 9 A B C D E F Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72 Sedaj se prikazovalniki prikazujejo eden po eden po vrsti. Če zakasnitveni čas primerno zmanjšamo, bo oko videlo, kot da delajo vsi hkrati, in to vztrajnost očesa uporabimo pri kot rečemo mulitpleksiranemu krmiljenju 7-segmentnih prikazovalnikov. Vendar prikazati moramo neko vsebino! Prikažimo vsebino spremenljivke I! ' V zanki iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni ' in le te prikažemo: Eni = I Mod 10 Des = I Mod 100 Des = Des / 10 Sto = I Mod 1000 Sto = Sto / 100 Tis = I / 1000 For K = 0 To 3 Portb = Lookup(i , Minipin7seg) Portd = 255

Page 43: Seminar Publikacija

Bascom AVR za začetnike | Multipleksiranje – 7 segmentni LED 43

If K = 0 Then ' vsak displej posebej vklopimo Reset Portd.4 ' in za vsako mesto vzamemo svojo vrednost za prikaz: Portb = Lookup(tis , Minipin7seg) End If If K = 1 Then Reset Portd.5 Portb = Lookup(sto , Minipin7seg) End If If K = 2 Then Reset Portd.7 Portb = Lookup(des , Minipin7seg) End If If K = 3 Then Reset Portd.3 Portb = Lookup(eni , Minipin7seg) End If 'Wait 2 experimentiraj z različnimi zakasnitvami Waitms 5 Next

In dodamo še preprosto spreminjanje vrednosti spremenljivke I . Če pritisnemo tipko, se vrednost poveča za 1: Tipka1 Alias Pind.0 Config Pind.0 = Input Debounce Tipka1 , 0 , Dodaj Goto Preskok2 Dodaj: Incr I Preskok2:

Opazimo, da s pritiskom na tipko malo zmotimo prikazovanje, svetloba prikazovalnikov utripne. Se da to popraviti? Izboljšati? Odgovor je seveda ja. A v ta namen si moramo pomagati z časovno prekinitvijo, timer interruptom. Mikroprocesor ima napravo, časovnik ali angleško timer. Le ta sicer ne meri časa, temeč utripe kristala oziroma oscilatorja, ki poganja mikroprocesor, kar je pravzaprav nekaj podobnega.

Page 44: Seminar Publikacija

44 Multipleksiranje – 7 segmentni LED | Bascom AVR za začetnike

Zaenkrat se ne bomo spuščali v veliko teorijo o tem, temveč si bomo pomagali s programom ki ga je prijazno dal brezplačno na voljo gospod Ian Dobson. V okno ki izgleda tako:

Vtipkamo frekvenco kristala ali oscilatorja in želeni čas prekinitve in že nam ponudi bascom avr kodo, ki jo iščemo:

Page 45: Seminar Publikacija

Bascom AVR za začetnike | Multipleksiranje – 7 segmentni LED 45

To kodo enostavno prenesemo v naš program. Seveda pa moramo sami napisati v časovno prekinitveni podprogram, kaj naj naredi. Naš prekinitveni podprogram naj prikaže eno dekado, in se vrne, drugič drugo in tako naprej. ' PREKINITVENI PODPROGRAM – Vaja 6 Timer0_isr: Load Timer0 , Timer0reload ' V prekinitveni rutini vsakokrat prikažemo eno od 4 številk ' in to neodvisno od dela glavnega programa, zato ni utripanja, kadar ' glavni program dela kaj drugega Dim Tis As Word 'Tisočice Dim Sto As Word 'Stotice Dim Des As Word 'Desetice Dim Eni As Word 'Enice 'Iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni ' in le te prikažemo: Eni = I Mod 10 Des = I Mod 100 Des = Des / 10 Sto = I Mod 1000 Sto = Sto / 100 Tis = I / 1000 Incr K If K > 3 Then K = 0 Portb = Lookup(i , Minipin7seg) Portd = 255 If K = 0 Then ' vsak displej posebej vklopimo Reset Portd.4 ' in za vsak displej vzamemo svojo vrednost za prikaz Portb = Lookup(tis , Minipin7seg) End If If K = 1 Then Reset Portd.5 Portb = Lookup(sto , Minipin7seg) End If If K = 2 Then Reset Portd.7 Portb = Lookup(des , Minipin7seg) End If If K = 3 Then Reset Portd.3 Portb = Lookup(eni , Minipin7seg) End If Return

Glavni program sedaj se ne ukvarja več z prikazovanjem na 7 segmentne prikazovalnike, temveč se ukvarja za bistvenimi zadevami, rezulat da v spremenljivko I, prikazovanje le te pa opravi podprogram. Opazimo sedaj, da pritisk na tipko ne zaustavlja prikazovanja in svetloba ob pritisku na tipko ne utripne.

Page 46: Seminar Publikacija

46 Prekinitve (Interrupti) | Bascom AVR za začetnike

Prekinitve (Interrupti)

Vilko Sustič

Mikroprocesorji omogočajo prekinitve delovanja glavnega programa. Zakaj? Včasih je nujno potrebno narediti kako malenkost takoj, in ne čakati, da bo mikroprocesor po programu zaključil nekaj, za kar potrebuje še nekaj časa, kajti takrat zna biti prepozno. Zato je prekinitev vedno vezana na mali podprogram, v katerem smo programirali, kaj je potrebno tako nujno narediti. Prekinitev je povzročena lahko na različne načine, lahko je časovna prekinitev, ki nastopi, ko mine določen čas, lahko je zunanja prekinitev, ki nastopi ob spremembi nivoja napetosti na kakem vhodu mikroprocesorja (port-pinu), lahko se proži, ko UART zazna in prebere nek bajt, ki pride po komunikacijski liniji v mikroprocesorski medspomin – buffer.

V splošnem velja, da se prekinitev izvede tako, da se najprej spravi vse bistvene podatke o dogajanju v mikroprocesorju zaradi delovanja glavnega programa na odložišče (stack) in se šele potem požene prekinitveni podprogram. Ko prekinitveni program zaključi svoje delo z ukazom Return, se potem iz odložišča spet napolnijo vsi registri mikroprocesorja in glavni program nadaljuje svoje delo, kot da se ni nič zgodilo. No, je pa preteklo nekaj časa, in že samo to dejstvo lahko slabo vpliva na delovanje glavnega program, če recimo glavni program v tem času ni opazil kake bistvene spremembe, ki bi jo bil moral upoštevati. Zato velja načelo: prekinitveni podprogram bodi v načelu čim bolj kratek, naj odvzame čim manj časa glavnemu programu.

Prekinitev bomo uporabili tudi v kasnejšem programu za prikazovanje na 7-segmentnem prikazovalniku. Pa nadaljujmo kar z časovno prekinitvijo ali timer-interruptom.

Časovnik ni pravzaprav nič drugega kot števec impulzov, ki prihajajo na vhod števca. Le ti so običajno kar impulzi istega oscilatorja, ki poganja mikroprocesor, ali pa impulzi, ki prihajajo iz zunanjega vira preko vhodov T0 ali T1 (PB0 ali PB1) To smo že uporabili pri prejšnjem poglavju o multipleksiranju.

Vaja1.bas program v novi varianti, ki prikazuje vsebino števca sekund na 7-segmentni prikazovalnik in vsak pritisk na tipko zaustavi ali požene štetje. Ker merimo sekunde z ukazom wait 1 tisti čas, ko je program v zanki, ki jo povzroči wait, ne zazna pritiska tipke.

Page 47: Seminar Publikacija

Bascom AVR za začetnike | Prekinitve (Interrupti) 47

Vaja2.bas pa odtipava tipko s pomočjo externega interrupta. Definiramo:

Config Int0 = Falling On Int0 Int0_int Enable Int0

Sedaj ni problema z detektiranjem tipke, saj kadarkoli pritisnemo tipko, program takoj reagira. Toda še vedno je problem tako natančnega štetja, kot tudi zaustavljanja štetja v trenutku, ko velja wait 1.

V vaja3.bas smo odpravili tudi to slabost. Da dokažemo, smo se odločili šteti kar stotinke sekunde in imamo sedaj neke vrste uro štoparico. Za štetje časa smo zadolžili kar prekinitveni podprogram, ki je dolžan prikazovati številke na 7-segmentni prikazovalnik.

Glavni program sedaj ne dela drugega, kot da popravi šteto vrednost. In sedaj ga lahko obremenimo še z drugimi nalogami, ki ne bodo zaustavljane z raznimi wait ukazi.

V programu vaja4.bas smo iz te ure naredili merilnik odzivnega časa. Ko je števec na 0, tedaj gremo v čakanje za neznano število sekund. To število dobimo z ukazom

J = Rnd(17)

Funkcija Rnd nam da slučajnostno število nekje med 0 in v funkciji omenjeno zgornjo mejo.

Ko preteče ta slučajnostni čas, se meritev začne, kar vidi testiranec tako, da začne teči prikaz na prikazovalniku. Sedaj mora čim hitreje pritisniti tipko in s tem ustaviti štetje, in odmerjeni čas si potem lahko na prikazovalniku ogleda.

Page 48: Seminar Publikacija

48 1-wire protokol in termometer DS1820 | Bascom AVR za začetnike

1-wire protokol in termometer DS1820

Vilko Sustič

Termometer spada v družino 1wire. To je Dallasov način povezovanja in napajanja elementov po eni sami žici.

Ista žica lahko služi za napajanje, kot tudi za komunikacijo. Ko ne komuniciramo, je žica na high, visoko, in napaja naprave, ki si energijo akumulirajo, tako da so napajane še tisti čas, ko signal na žici utripa v ritmu komunikacije. Naprave, ki jih je na žici lahko več, ločimo med seboj po unikatni identifikacijski oznaki, ki je vpisana v ROM naprave, termometra na primer in jo moramo poznati, če priključimo na žico več kot eno napravo.

Časovni diagrami, ki se jih je potrebno držati, da je komunikacija uspešna, so dovolj zapleteni in določeni:

Page 49: Seminar Publikacija

Bascom AVR za začetnike | 1-wire protokol in termometer DS1820 49

A za programerja, ki programira v Bascomu, za vse to poskrbi Bascom sam. Drugače je za programerja, ki programira v zbirniku, assemblerju. Programer v Bascomu mora samo toliko biti previden, da ne zavira izvajanje programa s kakimi prekinitvenimi podprogramu, kajti to lahko pokvari časovni potek komunikacije, kadar se ta izvaja v glavnem programu. Merjenje temperature gre tako: Najprej zahtevamo, da DS1820 izmeri temperaturo in si rezultat spravi v svoj pomnilnik. 1wreset 1wwrite &HCC 'skip ROM – velja za vse, ki ste na liniji 1wwrite &H44 'merite temperaturo Wait 1 'dajem vam čas za merjenje

Ko DS1820 prejme tak ukaz, potrebuje energijo za delo, ki jo dobi tako, da mi držimo signal visok. Čas je lahko različen, a največ časa, ki ga za to potrebuje je 750msec. Ko preteče ta čas, damo ukaz: daj nam meritev. 1wreset 'reset 1wwrite &HCC 'skip ROM – velja za vse, a je samo eden na liniji 1wwrite &HBE 'dajte podatke

Podatek o temperaturi dobimo v polovičkah stopinje in ga daje v obliki dveh bajtov T = 1wread(2) 'Beremo podatke, prva dva bajta sta temperatura ' T je tipa integer 1wreset T = T / 2 'Temperaturo dobimo v polovičkah stopinje

Program DS1820-1 je primer branja temperature, če je na liniji en sam termometer Program DS1820-2 je izboljšan v toliko, da uporablja timer namesto wait za zagotavljanje potrebnega časa za konverzijo rezultata v DS1820

Page 50: Seminar Publikacija

50 1-wire protokol in termometer DS1820 | Bascom AVR za začetnike

Program DS1820-3 je izboljšan v toliko, da bere celotno vsebino, ki jo daje DS1820 in preverja dobljeno vsebino po CRC8 Vsebina, ki jo dobimo je:

Če želimo imeti več termometrov, potem potrebujemo za vsak termometer njegovo identifikacijo. Dobimo jo tako, da vsak termometer posebej priključimo, poženemo program DS1820-4 in informacijo, ki jo dobimo, prenesemo v program, ki bo zahteval temperaturo od konkretnega termometra. Program DS1820-5 je primer branja temperature konkretnega termometra Program DS1820-6 je primer branja temperature iz treh termometrov Beri tudi Bascp, AVR Help 'Using the 1 WIRE protocol'

Page 51: Seminar Publikacija

Bascom AVR za začetnike | Stack – odložišče 51

Stack – odložišče

Vilko Sustič

Morda beseda odložišče ni najboljša, toda smatram, da primerno pomensko odgovarja, kar bomo videli, ko si bomo ogledali stack - odložišče v funkciji.

V splošnem se programerji ne ukvarjamo dosti s tem orodjem, uporablja ga mikrokrmilnik sam, (hardware stack) oziroma Bascom sam, (software stack). Nerodno je le to, da nam o tem dosti ne pove, in če v ta namen določen prostor v pomnilniku (RAM-u) ni dovolj velik, se dogode nepredvidljive zadeve in program običajno umre brez karkšnekoli diagnoze. Boste videli zakaj.

Najbolj tipična uporaba odložišča je, kadar kličemo v glavnem programu podprogram, ali tudi v podprogramu še en podprogram. S klicem podprograma, glavni program, ali program višjega nivoja preda upravo podprogramu. To lahko naredi večkrat na različnih mestih. Podprogram v splošnem ne ve, od kod je bil klican. Ve pa, da je glavni program v samem klicu podprograma dal naslov predaje na odložišče. Ko podprogram reče Return, dejansko skoči na naslov, ki ga najde na odložišču.

Odložišče ali stack si je potrebno predsavljati kot skladovnico, kjer vedno odlagamo na vrh skladovnice in vedno jemljemo iz vrha, bajt po bajt. Če se pri tem zaporedju zmotimo, dobimo, ko jemljemo podatke nazaj, napačne vsebine in program gre v maloro. Temu rečemo LIFO , kar je kratica za Last in – first out, ali tisti ki zadnji pride, prvi odide.

Bascom AVR razlikuje tri delovna področja, ki so razvrščema na sam vrh pomnilnika, hwstack, swstack in frame.

Page 52: Seminar Publikacija

52 Stack – odložišče | Bascom AVR za začetnike

Oglejmo si na programu stack-bas:

$regfile = "m162def.dat" $hwstack = 64 $swstack = 64 $framesize = 64 Dim Reg14 As Iram Byte At 14 Overlay Dim I As Byte Dim J As Byte Dim K As Byte Dim L As Byte Dim M As Word Declare Sub B Declare Sub Sestej(prvi As Byte , Drugi As Byte , Tretji As Byte) Declare Function Vsota(first As Byte , Second As Byte) As Byte I = &H11 J = &H12 K = &H13 L = &H14 M = &H1567 Print "Smo v glavnem programu" Print Hex(i) ; " " ; Hex(j) ; " " ; Hex(k) ; " " Gosub A Print "Smo v glavnem programu" Print Hex(i) ; " " ; Hex(j) ; " " ; Hex(k) ; " " Call B Print "Smo v glavnem programu" Call Sestej(i , J , K) Print "Smo v glavnem programu" K = Vsota(i , J) Print "Smo v glavnem programu" End A: Push R14 Reg14 = I : Push R14 Reg14 = J : Push R14 Print "Smo v podprogramu A" I = &H21 : J = &H22 Print Hex(i) ; " " ; Hex(j) Gosub Aa Print "Smo v podprogramu A" Print Hex(i)

Page 53: Seminar Publikacija

Bascom AVR za začetnike | Stack – odložišče 53

Pop r14 : j = Reg14 Pop r14 : I = Reg14 Pop r14 Return Aa: Print "Smo v podprogramu Aa" Gosub Aaa Print "Smo v podprogramu Aa" Return Aaa: Print "Smo v podprogramu AAA" Gosub Aa Return B : Print "Smo v podprogramu B" Return Sub B Print "smo v subrutini B" End Sub Sub Sestej(prvi As Byte , Drugi As Byte , Tretji As Byte) Local Aha1 As Byte Aha1 = 2 Tretji = Prvi + Drugi End Sub Function Vsota(first As Byte , Second As Byte) As Byte Local Bebe1 As Byte Bebe1 = 7 Vsota = First + Second End Function End

Page 54: Seminar Publikacija

54 Stack – odložišče | Bascom AVR za začetnike

Ko ga prevedemo si oglejmo poročilo prevajalnika (compilerja). Vedno je priporočljivo, da si ogledamo poročilo (report) saj v njem dobimo zanimive podatke o našem programu. Poročilo o našem programu je skrajšano sledeče:

Report : STACK Date : 02-13-2008 Time : 10:59:40 Compiler : BASCOM-AVR LIBRARY V 1.11.8.5 Processor : M162 SRAM : 400 hex EEPROM : 200 hex ROMSIZE : 4000 hex ROMIMAGE : 3F6 hex -> Will fit into ROM ROMIMAGE : 1014 dec FLASH USED : 6 % BAUD : 9600 Baud XTAL : 4000000 Hz BAUD error : 0.16% Stack start : 4FF hex Stack size : 40 hex S-Stacksize : 40 hex S-Stackstart : 4C0 hex Framesize : 40 hex Framestart : 47F hex Space left : 827 dec -------------------------------------------------------------------------------- Variable Type Address(hex) Address(dec) -------------------------------------------------------------------------------- HWSTACK Word 005D 93 SWSTACK Word 001C 28 FRAME Word 0004 4 ERR Bit 0006 6 REG14 000E 14 I Byte 0100 256 J Byte 0101 257 K Byte 0102 258 L Byte 0103 259 M Word 0104 260

Glede na to, da smo definirali:

$regfile = "m162def.dat" $hwstack = 64 $swstack = 64 $framesize = 64

in ima mikrokrmilnik najvišji naslov H4FF smo s tem definirali

Page 55: Seminar Publikacija

Bascom AVR za začetnike | Stack – odložišče 55

HWstack od &H4FF do &H4C0 SWstack od &H4BF do &H480 in Frame od &H47F do &H440

Delovanje program si bomo ogledali na simulatorju, ker tam lahko izvajamo instrukcijo po instrukcijo in si ogledujemo, kaj se dogaja v mikroprocesorju.

Startamo simulator in vidimo nekaj takega:

Simulator krmilimo tako, da nam pokaže naš program in zraven še vsebino pomnilnika-rama.

Program poženemo počasi, korak po korak F8. Opazimo, da se nam pomnilnik pobriše na ničle šele, ko naredimo prvi korak v program. To je programirano v Bascomu.

Ko ponovno pritisnemo na F8, vidimo, da se je izvedel ukaz I = &H11 in je vsebina naslov H100 postala H11.

Pretaknimo na simulatorju okno tako, da nam pokaže IO vsebine. Izgledalo bo nekako tako:

Page 56: Seminar Publikacija

56 Stack – odložišče | Bascom AVR za začetnike

Rad bi vas opozoril na SPL in SPH. To sta dva bajta, ki skupaj kažeta lokacijo v odložišču (stack-u) na sledeče prosto mesto, angl. Stackpointer. V našem primeru je to naslov &H04FF

To pa je v tem primeru tudi končni naslov pomnilnika, saj toliko pomnilnika ima programirani mikrokrmilnik.

Page 57: Seminar Publikacija

Bascom AVR za začetnike | Stack – odložišče 57

Sedaj pa previdno naprej, pritisnemo F8 še dvakrat in izvedemo še dve instrukciji:

To sta bila dva print ukaza in vsebina je vidna lepo na simulatorju. Opazimo pa še nekaj: vsebina bajtov okoli naslova 04ff se je spremenila! Nekdo je uporabil stack! Ja, seveda, bascom sam pri zahtevnih ukazih, kot so print tudi kliče svoje podprograme, in pri vsakem klicu se naslov povratka iz podprograma spravi v stack. Oglejmo si sedaj spet Stackpoiner! (SPH in SPL v IO!) Le ta je lepo na 04FF, kot da se ni nič zgodilo. To je zato, ker smo spet v glavnem programu in uporabljeni bajti v stacku so dani nazaj na razpolago, no niso pa brisani na 0, ker to nima pomena.

Če se vrnemo na okno pomnilnika, opazimo tudi, da je bascom spremenil tri bajte na naslovu &H440: in to v &H31 (znak enojka) &H33 (znak trojka) in &H00 (konec niza). To so zadnji znaki, ki so izpisani v oknu komunikacije in so bili zaukazani z ukazom Print. Kot vidimo je bascom uporabil tri bajte v področju Frame kot delovni pomnilnik.

In sedaj še enkrat pritisnimo F8!

Page 58: Seminar Publikacija

58 Stack – odložišče | Bascom AVR za začetnike

Stackpointer sedaj kaže &H04FD, dva bajta niže! To je zato, ker se nahajamo v podprogramu A in je tam spravljen naslov povratka v glavni program, ki ga bomo še rabili. Ko bomo rekli Return, se bo od tam vzel naslov, kam se vrniti, in prostor v Stacku se bo sprostil.

Tako počasi analizirajte delovanje naprej, korak po korak, dokler ne pridete to konca programa.

Page 59: Seminar Publikacija

Bascom AVR za začetnike | Stack – odložišče 59

Zaključek mora biti sledeč:

Hwstack upravljam mikroprocesor na osnovi LIFO principa, vanj spravlja in jemlje informacije, predvsem naslove, pri klicanju podprogramov in funkcij, lahko tudi implicitno (Print recimo). Hwstack se polni od najvišjega naslova RAM-a navzdol, ne glede, ali je tam kaj programer pomotoma pisal. Ko se naslovi spet uporabijo, se prostor sprosti. Če je programer na te naslove neprevidno napisal kake podatke, bo mikroprocesor z veliko verjetnostjo smatral te podatke kot naslove, kam nadaljevati program, in tako bo program se odvil v gozd in umrl.

V splošnem potrebuje mikroprocesor po dva bajta tega področja za vsak gosub ali klic podprograma ali funkcije. Veliko več pa potrebuje, kadar se starta prekinitveni podprogram brez NOSAVE opcije. Takrat se spravi na stack poleg naslova povratka tudi vsebina večine registrov, (vseh je 32!) NOSAVE opcijo pa si lahko privoščite le, če potem sami v prekinitvenem podprogramu spravite na stack vse tiste registre, ki jih uporabite. Ker pa Bascom programerji ne vemo, katere registre uporabi Bascom, je tak nasvet brez smisla.

Software stack uporablja Bascom za naslove spremenljivk podanih kot paramater pri klicu Subroutine ali Funkcije. Pa tudi za vsako v subrutini ali funkciji definirano lokalno spremenljivko.

Frame uporablja Bascom kot delovno področje in za lokalno v subroutini ali funkciji definirane spremenljivke. Take spremenljivke so v področju Frame, njih naslovi v swstack.

Page 60: Seminar Publikacija

60 EEPROM – pisanje in branje | Bascom AVR za začetnike

EEPROM – pisanje in branje

Gregor Maček

SRAM pomnilnik, v katerem se shranjujejo podatki s katerimi operiramo, ima to slabo lastnost, da se ob izgubi napajanja izbriše. Če želimo določene podatke, parametre itn. shraniti tako, da ob izgubi napajanja podatki ostanejo, jih shranimo pomnilnik EEPROM. EEPROM je kratica za Electrically Erasable Programmable Read-Only Memory.

AVR mikroprocesorji imajo določeno količino EEPROM pomnilnika že znotraj samega procesorja, če pa želimo pa lahko dodatni EEPROM povežemo s kontrolerjem preko I2C (ali drugega) protokola in tako povečamo prostor, namenjen podatkom.

Da pa ne bo vse tako enostavno je potrebno omeniti neprijetno lastnost EEPROM pomnilnika, pravzaprav dve. Prva je relativno počasno branje in predvsem pisanje (napram SRAM pomnilniku), ki pa nam navadno ne povzroča večjih preglavic.

Večja težava je omejeno število prepisovanj pomnilnika, saj se po cca 10.000 – 100.000 zapisih mesto v EEPROM pomnilniku »obrabi« do te mere, da zapisovanje in branje s tega mesta ni več mogoče. Temu se izognemo s pametno narejenim programom, ki spremenljivke v EEPROM zapisuje le tedaj, ko je to potrebno, sicer pa z njimi izvajamo operacije le v SRAMu.

Kot eno izmed možnih rešitev naj navedem rešitev napajanje mikroprocesorja tako, da je v napajalni veji tudi dioda in visokokapacitativni kondenzator, z enim od vhodov pa vseskozi tipamo prisotnost glavnega napajanja naprave. Vkolikor glavno napajanje izgine, zapišemo spremenljivke v EEPROM in procesor zaustavimo (napajanje nikakor ne sme izginiti med samim pisanjem v EEPROM!) dokler se glavno napajanje ne vrne. Tedaj vrednost spremenljivk iz EEPROM pomnilnika prepišemo nazaj spremenljivkam v SRAMu in program se nadaljuje. Druga, elegantnejša (programska) metoda je, da spremenljivke zapisujemo le tedaj, ko se res spremenijo, ne pa ob vsakem prehodu do-loop zanke.

Page 61: Seminar Publikacija

Bascom AVR za začetnike | EEPROM – pisanje in branje 61

Zapisovanje v EEPROM in branje le-tega preko ERAM spremenljivk

Najenostavnejša varianta zapisovanja in branja pomnilnika EEPROM za začetnika je preko začasnih t.i. ERAM (EEPROM RAM) spremenljivk. Postopek je sledeč:

1. Kot navadno kreiramo SRAM spremenljivko XXX (ime je lahko poljubno)

Dim XXX as Word

2. Kreiramo še dodatno EEPROM spremenljivko eXXX (ime je lahko poljubno). Tip spremenljivke ERAM mora biti enak tipu spremenljivke SRAM!

Dim eXXX As ERAM Word

3. Ko želimo spremenljivko iz delovnega (SRAM) pomnilnika prepisati v EEPROM pomnilnik (torej pisanje v EEPROM), to enostavno storimo z:

eXXX = XXX

4. Če pa želimo spremenljivko iz EEPROMa prebrati, storimo obratno:

XXX = eXXX

Torej povsem enostavno! Sedaj lahko npr. naredimo enostaven termometer, ki najvišjo in najnižjo izmerjeno temperaturo hrani tudi ob izpadu napajanja.

Vkolikor imamo v EEPROMu shranjene določene parametre programa (npr. telefonske številke, nastavitve) je potrebno paziti pri (pre)programiranju mikrokontrolerja, saj je pri večini programatorjev privzeto nastavljeno, da se prepiše/izbriše tudi EEPROM pomnilnik. Vkolikor vrednosti v EEPROMu želimo obdržati, omenjeno možnost izklopimo.

Naj še enkrat opozorim, da ima EEPROM pomnilnik omejeno število vpisov, zato je potrebno paziti na sam program, da v EEPROM ne pišemo prepogosto.

Page 62: Seminar Publikacija

62 EEPROM – pisanje in branje | Bascom AVR za začetnike

Zapisovanje v EEPROM in branje le-tega preko ukazov READEEPROM in WRITEEEPROM

Bascom pa omogoča tudi drug, naprednejši način pisanja in branja EEPROMa preko ukazov WRITEEEPROM in READEEPROM ter direktno pisanje konstant v EEPROM s pomočjo $eeprom ukaza.

$eeprom

Z vključitvijo omenjenega ukaza v program prevajalniku povemo, da bomo deklarirali konstante, ki bodo vpisane v EEPROM pomnilnik. Prevajalnik generira EPP datoteko, ki jo s programatorjem zapišemo v EEPROM mikrokontrolerja.

$eeprom 'Zapisujemo v EEPROM P_eeprom: 'Deklariramo podatkovno polje P_eeprom… Data 1 , 2 , 3 , 4 , 5 '… in mu vnesemo podatke. $data 'Preklopimo nazaj v FLASH način!

Readeeprom

Sedaj bomo v programu (v FLASH pomnilniku) prebrali omenjene podatke:

Dim A as byte Readeeprom B , P_eeprom '1. vrednost iz Polje_eeprom prenesemo v spr. B Print B 'In to vrednost pošljemo na RS232 terminal

Vkolikor bi bili sedaj v Do-Loop zanki, bi prebrali vse vrednosti iz polja Polje_eeprom, ob vsakem prehodu naslednjo vrednost.

Writeeeprom

V EEPROM lahko tudi pišemo:

Dim B as byte B = 10 Writeeeprom B , P_eeprom 'Prvič moramo deklarirati tudi kam pišemo… B = 11 Writeeeprom B '… za naslednji vpis pa to ni več potrebno

Page 63: Seminar Publikacija

Bascom AVR za začetnike | 433 MHz komunikacija preko RFM12B modulov 63

433 MHz komunikacija preko RFM12B

modulov

Bojan Kovač

Splošen opis

Razširitveni modul s transceiver modulom RFM12B uporabnikom Minipin razvojnega sistema ponuja osnovo za hiter razvoj poceni in zanesljive rešitve brezžičnega prenosa blokov podatkov, predvsem zaradi možnosti dvosmerne izmenjave podatkov.

Modul RFM12B je low-power različica z razponom napajalne napetosti od 2,2 do 3,8 V, namenjen pa je aplikacijam, v katerih za komunikacijo potrebujemo sprejemnik in oddajnik, ker nam je pomembna dvosmerna komunikacija. Obe funkciji sta združeni v enem vezju, tako da imamo možnost razvoja dimenzijsko majhnih in zmogljivih brezžičnih aplikacij. Gre za ozkopasovni sprejemnik/oddajnik, zato imamo možnost ustvarjanja različnih frekvenčnih kanalov znotraj dovoljenega frekvenčnega pasu, ki med sabo nimajo vpliva. S tem se izognemo motnjam, slabljenju in interferenci med kanali in dosežemo robustnejšo brezžično zvezo.

Poleg low-power različice modula sicer obstajata še standardna različica RF12 in močnostna RF12BP, ki ob prej omenjenem napajanju zmore celih 500 mW oddajne moči. Žal je možnost legalne uporabe teh modulov zaradi tolikšne moči omejena le na frekvenčni pas 868 MHz.

Page 64: Seminar Publikacija

64 433 MHz komunikacija preko RFM12B modulov | Bascom AVR za začetnike

Tipični primeri uporabe ● daljinsko upravljanje, ● varnost doma in alarmiranje, ● brezžične tipkovnice, ● miš in druge PC periferne enote, ● upravljanje igrač, ● daljinsko prepoznavanje in vstop brez ključa, ● nadzor pritiska v pnevmatikah avtomobilov, ● telemetrija, ● zajem podatkov o osebah / pacijentih, ● avtomatsko brezžično odčitavanje instrumentov/merilnikov.

Glavne značilnosti oddajnika ● Stabilna in točna FSK modulacija s programabilnim odklonom ● Programabilna pasovna širina PLL zanke ● Diferencialni izhod za direktno priključitev antene ● Avtomatska prilagoditev priključeni anteni ● Programabilni nivo oddajne moči ● Vgrajen programabilni kondenzator kvarca

Glavne značilnosti sprejemnika ● Programabilni PLL sintesajzer visoke resolucije se hitro vzpostavlja ● Sposobnost hitrega preskakovanje frekvenc ● Direktni vhod/izhod za priključitev diferenciane antene ● Programabilna pasovna širina (67 v 400 kHz) na izbranem kanalu ● Analogni in digitalni RSSI izhodi ● Avtomatska regulacija frekvence (AFC) ● Zaznavanje kvalitete sprejetih podatkov (DQD) ● Notranje filtriranje podatkov in obnovitev takta ● Prepoznavanje RX vzorcev ● Upravljanje funkcij po SPI združljivem serijskem vodilu ● 16-bitni RX podatkovni FIFO ● Način delovanja z nizko porabo (manj kot 0.5 mA v povprečju) ● Standardni 10 MHz kristal ● Časovnik za samoprebujanje ● Zaznavanje prenizkega nivoja napajanja ● Deluje v območju napajanja od 2.2 do 5.4 V ● Majhna poraba ( - 9 miliamper v nizkofekvenčnem območju) ● Nizek tok v standby načinu (0.3µA)

Page 65: Seminar Publikacija

Bascom AVR za začetnike | 433 MHz komunikacija preko RFM12B modulov 65

Opis vezja

Razširitveni modul nam omogoča sprejemanje in pošiljanje blokov sporočil (nizov znakov). Zanesljivost prenosa oziroma verodostojnost prenešenih podatkov je v večji meri odvisna od dobre antene, razdalje med sprejemnikom in oddajnikom in trenutnih motenj na določenem komunikacijskem kanalu.

V odvisnosti od tega, kakšen niz smo sprejeli, se ob delnem ali popolnem ujemanju niza lahko aktivirajo funkcije, ki nam na različne načine aktivirajo izhode. Sprejemno-oddajna antena je v našem primeru izvedena na tiskanem vezju, kar bo za testiranja povsem zadostovalo. Modul priključimo prek dveh univerzalnih „PORT“ konektorjev Minipin razvojnega sistema in sicer prek porta B in D. Pin 1 konektorja je +Vcc, Pin 2 pa GND. Port B smo uporabili zato, ker so na njem že tovarniško določene linije za SPI komunikacijo, po kateri procesor izmenjuje podatke z modulom. Port D pa smo uporabili zaradi prekinitvenih vhodov INT0 in INT1 in s tem možnosti uporabe prekinitvenih rutin. ● Kot indikacija VF sprejemanja je vgrajena zelena, za VF oddajanje pa rdeča LED dioda. ● Tipki uporabljamo za pošiljanje znakovnih nizov v oddajnem načinu. ● Dodatni LED diodi sta namenjeni prikazu aktivnosti izhodov glede na sprejeti niz

Istočasno lahko na Minipinu uporabljamo le en RFM12 razširitveni modul. Za različne potrebe naložimo različne programe. Na voljo sta programa za oddajo in sprejem znakovnega niza. Primeren program, ki bo združeval funkcionalnost obeh, si iz predloženega gradiva in primerov lahko izdelate sami. Za preizkušanje komunikacije je najbolj priročno uporabiti dva Minipin razvojna sistema, saj bomo istočasno delali na vsaj dveh Bascom programih (oddajni in sprejemni).

Na tečajih Bascoma je to preprosto, saj se po dva in dva tečajnika povežeta na isti frekvenci, s tem, da eden oddaja, drugi pa sprejema odposlane nize. Prikaz sprejetega niza prikažemo tudi na LCD displayu. Če gre za dogovorjen niz, ki pripada tipki 1 ali tipki 2, se niza prikažeta za prvo tipko v zgornji in za drugo tipko v spodnji vrstici. Pred vsakim nazadnje sprejetim nizom se

prikaže znakec za anteno. V nizu pošiljamo tudi zaporedno številko oddanega niza za pripadajočo tipko in sicer do niza 255, potem začnemo od začetka. Če sprejmemo niz, ki ni dogovorjen, ga ignoriramo, vendar vseeno izpišemo na LCD display v prvo vrstico. Pred takšnim nizom je znakec za

slab sprejem.

Naključne nize lahko pogosto sprejmemo, saj je radijska dejavnost na 433 Mhz včasih zelo živahna. Naša naloga je sprejeti pravi niz, ga analizirati in izvršiti naloge, ki so na sprejemni strani za posamezen niz predvidene.

Page 66: Seminar Publikacija

66 433 MHz komunikacija preko RFM12B modulov | Bascom AVR za začetnike

Opis oddajnega programa

Oddajni program v principu deluje tako, kot je narisano v blok shemi na sliki. Dodali smo le še preverjanje, če je katera od tipk pritisnjena in v odvisnosti od tega, katera tipka to je, priredimo vsebino oddanega niza, da bomo pritisk te tipke na sprejemni strani lahko povezali z izvajanjem

željenih podprogramov. Za popestritev programa z raznimi možnostmi smo v podprogram za prvo tipko vpeljali čakanje, da je tipka spuščena, torej niz oddamo le enkrat za vsak pritisk tipke. Pri drugi tipki niz pošiljamo toliko časa, dokler je tipka pritisnjena.

Program teče takole:

Konfiguracija modula za oddajanje

To naredimo čisto na začetku in samo enkrat. (Opis vseh 17-ih ukazov in pomen vsakega posameznega bita v registrih je opisan v originalni dokumentaciji. Slika s kratkim opisom posameznega ukaza je na zadnji strani. )

V konfiguracijskem delu je tudi vrednost, ki jo vpišemo za komunikacijo na posameznem kanalu in pomeni frekvenco, na kateri bo modul oddajal. Sprejemnik mora imeti za uspešno sprejemanje v ta registervvpisano enako vrednost.

Oznaka konca konfiguracije

Zatem kot signalizacijo prižgemo in ugasnemo Tx in Rx LED diodi, s karterima označujemo sprejemanje, oziroma oddajanje

Page 67: Seminar Publikacija

Bascom AVR za začetnike | 433 MHz komunikacija preko RFM12B modulov 67

Vrtimo se v glavni programski zanki

Preberemo stanje vhodov.

Ugotovimo stanje tipk.

Če ugotovimo pritisk tipke, potem izvršimo njej določen podprogram.

Če ni pritisnjena nobena od tipk, se vrnemo na začetek glavne programske zanke

Konec glavne programske zanke

kratek opis podprogramov:

Podprogram za 1. Tipko

(odpošlje niz le enkrat in počaka, da spustimo tipko)

Odpošljemo niz „T1 on :....“, izpišemo isti niz na LCD display

Preverimo stanje tipke 1

Počakamo, dokler ni tipka spuščena

Vrnemo se v glavno programsko zanko

Podprogram za 2. Tipko

(pošilja niz toliko časa, dokler ne spustimo tipke)

Odpošljemo niz „T2 on : ....“, izpišemo isti niz na LCD display

Preverimo stanje tipke 2

Če je tipka še pritisnjena, gremo spet na začetek tega podprograma

če tipka ni več pritisnjena, se vrnemo v glavno programsko zanko

Page 68: Seminar Publikacija

68 433 MHz komunikacija preko RFM12B modulov | Bascom AVR za začetnike

Slika ploščice tiskanega vezja razširitvenega modula

Opis sprejemnega programa

Sprejemni program v principu deluje tako, kot je narisano v blok shemi na sliki. Dodali smo še izpis na LCD display. Sprejeti niz analiziramo in če ustreza enemu od dogovorjenih nizov ob pritisku na tipko na oddajni strani, izvedemo predvideni podprogram.

Page 69: Seminar Publikacija

Bascom AVR za začetnike | 433 MHz komunikacija preko RFM12B modulov 69

Konfiguracija modula za sprejem

To naredimo čisto na začetku in samo enkrat. (Opis vseh 17-ih ukazov in pomen vsakega posameznega bita v registrih je opisan v originalni dokumentaciji. Slika s kratkim opisom posameznega ukaza je na zadnji strani. )

V konfiguracijskem delu je tudi vrednost, ki jo vpišemo za komunikacijo na posameznem kanalu in pomeni frekvenco, na kateri bo modul sprejemal. Oddajnik mora imeti za uspešno komunikacijo v ta register vpisano enako vrednost.

Oznaka konca konfiguracije

Zatem kot signalizacijo prižgemo in ugasnemo Tx in Rx LED diodi, s karterima označujemo sprejemanje, oziroma oddajanje niza.

Vrtimo se v glavni programski zanki

Preverjamo „Test“ bit, ki označuje, da smo sprejeli zaključen niz

Če ta bit ni postavljen, se vrnemo na začetek glavne programske zanke

Če je ta bit postavljen, analiziramo sprejeti niz v podprogramu

Konec glavne programske zanke

kratek opis podprogramov:

Prekinitvena rutina, ko prispe v modul nov znak

(prekinitev se zgodi vsakič, ko sprejmemo nov znak) ● Znak dodamo nizu ● Če je zadnji znak CR(ASCII=13 decimalno), je to konec niza, zato postavimo „Test“ bit ● Vrnemo se v glavno programsko zanko na mesto zadnje prekinitve

Analiza sprejetega niza

(primerjava nizov, akcije, izpis, začetne vrednosti spremenljivk) ● Izločimo karakteristični del niza, ki vpliva na izhodne aktivnosti ● Primerjamo ga s tistimi nizi, ki so predvideni za aktiviranje posamezne aktivnosti ● Če se sprejeti niz ujema s katerim od predvidenih nizov, izpeljemo ustrezne aktivnosti ● Niz izpišemo na LCD display ● izbrišemo „Test“ bit in postavimo števec znakov na začetno vrednost ● Vrnemo se v glavno programsko zanko

Page 70: Seminar Publikacija

70 /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija) | Bascom AVR za začetnike

Komunikacija preko LAN omrežja

(modul MOXA NE-4100 serija)

Gregor Maček

V dandanašnjem času se vse več komunikacij seli v LAN svet. Sama implementacija LAN protokola v

obstoječe rešitve, narejene z mikrokontrolerjem, je lahko enostavna ali pa tudi ne. No, v primeru uporabe MOXA modulov, ki sem jih slučajno našel, ko sem zase iskal hitro rešitev za integracijo obstoječe aplikacije v LAN okolje, je to povsem enostavno. Od takrat sem te modulčke uporabil v več deset aplikacijah in lahko rečem, da delujejo bp od prvega do zadnjega! Obstaja več tipov modulov, pač odvisno od namena uporabe. Tako imajo nekateri moduli že vgrajeno RJ-45 vtičnico, obstajajo tipi za različne tipe komunikacij (RS232, RS485, čisti UART) in izberemo pač takega, ki nam glede na naše potrebe najbolj ustreza. Če še nimamo razvitega tiskanega vezja, priporočam model NE4100-T, ki ima UART kompatibilni vmesnik (torej priklop direktno na DATA pina mikrokontrolerja) ter je brez RJ vtičnice, ki jo pač damo na naše vezje. Sam modulček pa na naše vezje fiksiramo z dvema 2,54 letvicama.

Page 71: Seminar Publikacija

Bascom AVR za začetnike | /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija)

71

Sam modulček, glede na svojo velikost, v sebi skriva veliko. Na omrežju se predstavlja kot svoj strežnik in lahko podatke pošilja in prejema v več načinih:

• TCP server (do 4 povezave), V tem načinu smo omejeni, da se lahko hkrati na modul »priklopijo« do štirje klientje in prejemajo ter pošiljajo podatke po poljubnem portu. Dobra stran te rešitve je, da je sistem neodvisen od klientov in deluje tudi, če klientov ni.

• TCP client, V tem načinu modul deluje kot TCP/IP klient in za pošiljanje/prejemanje podatkov potrebuje imeti definiran strežnik(e), kamor se poveže. Slabost te rešitve je, da smo omejeni na vnaprej točno določene strežnike, katerih delovanje je pogoj za prenos podatkov.

• Virtual COM port, V tem načinu na poljubnem računalniku v omrežju naložimo programsko opremo, ki ustvari virtualna COM vrata. Karkoli sprejme modul, se pokaže na teh vratih (in obratho) – torej, kot bi imeli kontroler priklopljen direktno na računalnik.

• UDP mode. Način pošiljanja UDP paketov po celotnem omrežju (je potrebno »poslušati« na pravem naslovu).

Page 72: Seminar Publikacija

72 /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija) | Bascom AVR za začetnike

Da ne bo zmede, gremo kar od začetka. Torej – pred seboj imamo omenjeni modul, ki za delovanje potrebuje naslednje povezava:

• Napajanje +5V

• Povezavo na LAN omrežje

• TX in RX povezavo na mikrokontroler (ob predpostavki, da je GND od napajanja skupni tako mikrokontrolerju kot LAN modulčku, sicer potrebujemo še GND povezavo). Odvisno od tipa uporabljenega modula zavisi, ali lahko modul priklopimo na kontroler direktno (UART) ali pa potrebujemo vmes še RS232 napetostni pretvornik (MAX232).

Spletni vmesnik modula - nastavljanje Ko imamo modul povezan, priklopimo napajanje. Čez par sekund lahko dostopamo do modula preko WEB vmesnika za nastavljanje (v brsklalnik vpišemo IP naslov vmesnika, ki ga v omrežju samodejno najde priloženi program):

Izpišejo se nam osnovne informacije o modulu, z menijem na levo pa se lahko sprehodimo po vseh nastavitvah, ki jih modul ponuja. V publikaciji ne bom opisoval vseh nastavitev (tisti, ki se bodo s tem ukvarjali, jih najdejo v datasheetu proizvajalca), temveč le glavne.

Page 73: Seminar Publikacija

Bascom AVR za začetnike | /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija)

73

V mrežnih nastavitvah določimo, kako se modul predstavlja v omrežju. Omogoča tako statično naslavljanje kot DHCP, kot »bombonček« pa omogoča tudi pošiljanje alarmov preko SNMP protokola in tudi report lastnega IP naslova (če imamo DHCP okolje, kjer se IP modula menja samodejno).

V nastavitvah serijskega porta nastavimo hitrost in druge parametre komunikacijskega porta proti našemu mikrokontrolerju – pač v skladu z našimi nastavitvami komunikacije kontrolerja.

Page 74: Seminar Publikacija

74 /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija) | Bascom AVR za začetnike

Možnosti delovanja – tu lahko nastavimo že prej omenjene »načine« delovanja samega modula. Največkrat bomo verjetno uporabili kar TCP Server, kjer moramo nastaviti tudi port!

Še en »bombonček« modula: Modul ima že sam vgrajen 4 vhodno-izhodne pine, ki jih lahko programsko določimo kot digitalni vhod ali izhod ter preko WEB vmesnika nadzorujemo ali spreminjamo. Torej, če imamo potrebo le po prenosu štirih signalov, ne potrebujemo ničesar razen modula in stabilnega 5V napajanja!

Page 75: Seminar Publikacija

Bascom AVR za začetnike | /Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija)

75

Testiranje TCP/IP povezave med računalnikom in modulom Sedaj smo vse povezali, napisali testni program, ki periodično pošilja nek tekst, in sedaj želimo ta tekst videti preko mreže nekje drugje. Enostavno uporabimo Hyperterminal (ja, isto, kot bi delali s COM portom!). Le-ta ima namreč vgrajen tudi TCP/IP (Winsock) protokol, ki ga izberemo ob zagonu (po tem, ko nas vpraša za ime povezave)!

Če smo modul konfigurirali kot Server, v polje »Host adress« vpišemo njegov IP, v polje »Port number« pa uporabljeno številko vrat. Po kliku na OK moramo, če je kaj pravice na svetu ☺ že prejemati podatke iz našega kontrolerja in jih seveda (če nam napisan program to omogoča) tudi pošiljati. Če pa smo modul konfigurirali kot Client, pa smo morali samemu v nastavitvah samega modula določiti IP strežnika, ki je v tem primeru naš računalnik. V tem slučaju moramo v HyperTerminal kot Host adress napisati 127.0.0.1 (oz. njegov lasten IP), saj mora računalnik delovati v tem primeru kot strežnik. Od tu naprej ni več problemov! Še beseda ali dve o virtualnem COM portu, ki je tudi ena izmed možnosti. Vsekakor je za začetnika najenostavnejša (saj dejansko deluje, kot bi imeli kontroler fizično priklopljen na računalnik), vendar jo odsvetujem, saj je potrebno na vsakem računalniku, kjer bi želeli dostopati do modula, inštalirati tovrstno programsko opremo. Je pa to možnost za izkoristiti, če želimo na mrežo povezati kakšno napravo, ki sedaj z nadzornim računalnikom komunicira preko RS232 (UPS ...) – v tem primeru ni potrebne nobene spremembe originalnega programa (npr. UPSa), ta pa lahko teče na katerem koli računalniku – razdalja ni več problem!

Page 76: Seminar Publikacija

76 Polja spremenljivk | Bascom AVR za začetnike

Polja spremenljivk

Vilko Sustič

Najprej na kratko o tipih spremenljivk. Le ti so:

• Bit (1/8 byte ) • Byte (1 byte). Bytes lahko spravi števila od 0 do 255 brez predznaka. Glede na

to, kako ga obravnavamo v programu, pa je to lahko tudi znak po ASCII tabeli, ki jo najdete v Help-u. Samo za primer, znak A tudi potrebuje en bajt prostora in je v njem število 65 v binarni obliki, ali če napišemo drugače &H41 . Če z njim računamo (mu prištejemo recimo 3) bo rezultat 68, če ga izpišemo, bo to 65, če ga pa izpišemo kot znak, bo to A. Za razumevanje si napišimo kratek programček in ga testirajmo z simulatorjem:

Page 77: Seminar Publikacija

Bascom AVR za začetnike | Polja spremenljivk 77

• Integer (dva bajta) Za števila, ki jih ne moremo spraviti v en bajt, potrebujemo pač več. V tip integer ki vsebuje dva bajta spravljamo cela števila s predznakom v obsegu od -32,768 do +32,767.

• Word (dva bajta). Za cela števila od 0 to 65535.

• Long (štiri bajte). Za cela števila v obsegu od -2147483648 do 2147483647.

• Single. Kot ne moremo vsa deljena števila z decimalkami določiti popolnoma natančno ( vrednost 1/3 lahko samo z omejeno natančnostjo napišemo, da je 0.33 ) tako tudi v tem zapisu le z omejeno natančnostjo obravnavamo deljena števila. V spremenljivki tipa Single, ki zasede 4 bajte lahko spravimo števila v okviru od 1.5 x 10^–45 to 3.4 x 10^38 V obče je to dovolj natančno. Če pa ne, lahko izberemo

• Double ki zapiše število v 8 bajtih (64 bitih) števila so potem lahko v obsegu od 5.0 x 10^–324 to 1.7 x 10^308

• String (do 254 bajtov). Za shranjevanje besed in stavkov. ti imajo vedno po več znakov, definiramo spremenljivke tipa String. V tako spremenljivko spravimo niz znakov, ki mora biti zaključen z bajtom vsebine 0. To se pravi, če damo v spremenljivko stavek »Dober dan, Žalost.« ki ima z ločili vred 18 znakov, bomo porabili 19 bajtov, še enega z vsebino 00, ki pove, kje je konec niza znakov. S

Spremenljivke pa so lahko tudi z indeksom. Če na primer v spremenljivki T spravimo izmerjeno temperaturo, moramo pri več termometrih definirati več spremenljivk. To lahko kot

(Integer zato, ker je merjena temperatura lahko tudi negativna, torej potrebujemo tak tip spremenljivke, ki pozna predznak)

Ali pa definiramo spremenljivko T kot polje spremenljivk:

Na prvi pogled bi lahko rekli, pa kaj potem, saj je to isto, v obeh slučajih smo porabili 3 krat 2 bajta. No, ne gre za prihranek pri porabi bajtov ampak pri načinu programiranja. Sedaj lahko programiramo tako, da s pomočjo dodatnega parametra – indeksa, iste podprograme (podprogram za meritev temperature, podprogram za izpis temperature) uporabimo za obdelavo različnih temperatur, termometrov. Primer:

Pri tako majcenem podprogramu ni videti velike prednosti, a pri bolj obsežnih podprogrami se često tak način programiranja izplača.

Page 78: Seminar Publikacija

78 Polja spremenljivk | Bascom AVR za začetnike

Je pa potrebno pri takem načinu paziti, da nam indeks ne 'uide' iz z definicijami določenih mej. Kaj bi se zgodilo, če bi napisal

Ker sem v definicijah omenil, da je polje spremenljivk T v samo treh pojavah, in sem neposredno izza polja definiral spremenljivko X, Bascom ne more vedeti, ali bo spremenljivka x v okviru definicij ali ne, in bo vrednost 17 napisal na sledeče mesto, na mesto, kjer bi sicer bilo četrto mesto v spominu, in bo s tem prekril tam definirano spremenljivko. V našem slučaju je to spremenljivka X. Preverite to na simulatorju.

Pri uporabljanju spremenljivk z indeksi, take napake povzroče spremembe podatkov v pomnilniku, ki si jih ne znamo razložiti in jih je težko najti, ko so enkrat vgrajene v program. Program in mikroprocesor z njim 'podivja', in se nesmiselno obnaša.

Višji programski jeziki poznajo večdimenzionalna polja, kjer spremenljivko označimo z več indeksi, recimo T(x,y). Jeziki nivoja Basic, kar Bascom je, pa dovoljujejo le enodimenzionalne indekse.

Še en primer uporabe spremenljivke z indeksi. Recimo, da moramo upravljati temperaturo. Od upravnika dobimo morda po SMS-u ali kako drugače informacijo 'Želena temperatura je 22C' ki jo preberemo seveda v spremenljivko tipa String. Ne vemo natančno, kje v nizu se nahaja število, ki je dejansko krmilna informacija. Moramo jo izluščiti. Morda tako:

Vedno je dobro pogledati poročilo o prevedenem programu. Izvleček iz poročila:

Page 79: Seminar Publikacija

Bascom AVR za začetnike | Polja spremenljivk 79

Vidimo, da sta spremenljivki Text in Znaki postavljeni na isto mesto v pomnilniku.

V for – next zanki smo potem vse znake teksta, ki niso številke, spremenili v znak presledek (&H20). Po tej obdelavi bo v spremenljivki Text ostala le dva znaka, 22.

S funkcijo Val lahko potem bascom ta dva znaka pravilno prevede v binarno število in ga da v spremenljivko, v tem primeru Temperatura.

Kot vidite, ta program ne opazi, da je želena temperatura -22C in ne 22C! Popravite program tako, da bo znak minus (&H2D) ostal na mestu in ne bo spremenjen v &H20. Potem bo funkcija Val zaznala znak minus in pravilno prevedla temperaturo v -22!

S tem primerom prikažem pogost način obravnavanja vsebine v poljih tipa String in sicer direktno znak po znak na osnovi položaja znaka v samem nizu. Na ta način lahko tudi sestavljamo informacijo znak po znak v nizu, ne smemo pa pozabiti, da mora biti niz zaključen z znakom &H00 in paziti moramo, da nam indeks 'ne uide' iz okvira določenega v definicijah.

Page 80: Seminar Publikacija

80 GSM modem Falcom A2 (A2D, Wavecom) | Bascom AVR za začetnike

GSM modem Falcom A2 (A2D,

Wavecom)

Matjaž Skubic

GSM modem je zunanja naprava, ki jo priključite na računalnik preko standardne RS232 povezave. V splošnem je naprava narejena za povezavo dveh naprav, lahko pa se ga uporablja v kombinaciji s strežnikom z ustrezno aplikacijo, ki generira SMS sporočila - SMS strežnik.

Modem uporablja standardni vmesnik RS232, zato je enostaven za priklop na mikrokontrolerske sisteme. Modem ima:

• Priključek za anteno

• Priključek za napajanje

• DSUB9 konektor (Rs232 vmesnik)

• RJ45 konektor priklop slušalke in mikrofona.

Za kontrolo delovanja sta na RJ45 konektorju montirani dve LED diodi

• rumena - napajanje

• zelena – signal GSM (ko je sistem povezan z omrežjem zelena LED dioda utripa)

Page 81: Seminar Publikacija

Bascom AVR za začetnike | GSM modem Falcom A2 (A2D, Wavecom) 81

Opis vmesnikov za Modem Falcom:

Interface A - Napajanje sistema

Sistem se napaja na konektorju - A (RJ-9).

Napajalna napetost je 10.8 – 31.2 DC

Modem vključimo v delovanje, ko pin3 – Ignition in pin4 priključimo na napajalno napetost. Pin3 in Pin4 sta lahko povezana skupaj. Pin3- Ignition se lahko uporabi za vklop oz. izklop modema.

Interface B – Seijski vmesnik V24 RS232

Za povezavo modema z računalnikom potrebujemo klasični povezovalni kabel RS232C. Zadostuje že, da povežemo Pin2 (Txd), Pin3 (Rxd) in Pin5 (GND). Če se modem priključi na mikrokontrolerski sistem je potrebno uporabiti RS232 vmesnik (integrirano vezje MAX 232) za prilagoditev električnih nivojev med modemom in mikrokontrolesko napravo.

Opcijsko je možno preko konektorja priključiti tudi napajalno napetost. To je odvisno od tipa modema in je potrebno pred priklopom obvezno preveriti.

Page 82: Seminar Publikacija

82 GSM modem Falcom A2 (A2D, Wavecom) | Bascom AVR za začetnike

Interface C – RJ45 Vmesnik za Audio in opcijsko RS232

Audiointerface: Electret-Microphone Loudspeaker>50OHM Ground

Na vmesnik C se lahko priključijo audio naprave – mikrofon in slušalka/zvočnik. V kolikor se modem priključuje na neko drugo napravo je potrebno upoštevati dejstvo, da je izhod simetričen, zato je potrebno vmesnik prilagoditi z napravo. Če priključujemo interface C na mikrokontroleski sistem (DTMF sprejemnik) je potrebno vhod naprave prilagoditi. Ena izmed rešitev je uporaba ločilnega transformatorja.

Interface D – GSM antena

Na modem se lahko priključi katerakoli GSM antena z ustreznim FME konektorjem.

Odvisno od kvalitete signala GSM omrežja se izbere ustrezna antena.

Page 83: Seminar Publikacija

Bascom AVR za začetnike | GSM modem Falcom A2 (A2D, Wavecom) 83

Na povezovalnem antenskem kablu modema Falcom se nahaja FME adapter.

Prostor za SIM kartico se nahaja na spodnji strani modema.

Nekatere izvedbe modemov Falcom imajo poleg navedenega nosilca SIM kartice tudi internega v notranjosti modema (A2).

Reset tipka

Modem ima na spodnji strani tudi Reset tipko, s katero se modem lahko resetira.

Spodnja slika prikazuje vse vmesnike na modemu Falcom:

Page 84: Seminar Publikacija

84 GSM modem Falcom A2 (A2D, Wavecom) | Bascom AVR za začetnike

Tehnični podatki modema Falcom

Dimensions: 115mm x 54mm x 33mm (BxHxL) Weight: 160g Power Supply: 10,8...31,2VDC

235mA(max.)12VEGSM* 190mA(max.)12VDCS* 48mA(idle)12V*

IF MODEM IS SWITCHED OFF (BYAT+CPOFORAT+CFUN=0), BUT POWER IS STILL SUPPLIED:

25mA(off)12V* *Serial interface is applied and working. Temperature Range: Storage:-20°Cto+70°C

Use:-20°Cto+55°C Modem je Dualband 900/1800 MHz.

Kratice

ETSI European Telecommunications Standards Institute GSM Global Systemfor Mobile communications IMEI International Mobilestation Equipment Identity ME Mobile Equipment PLMN Public Land Mobile Network PIN Personal Identification Number PUK Personal Unblocking Key RP Receive Protocol RXQUAL Received Signal Quality SIM Subscriber Identity Module SMS Short Message Service SMS/PP Short Message Service/Point-to-Point TA Terminal Adapter TE Terminal Equipment TP Transmit Protocol

Priklop modema

Pred prvo uporabo je potrebno modem nastaviti. Za to se uporabljajo Hayes compatibil AT ukazi, ki jih poznamo tudi iz klasičnih modemov. Podrobnejši opis AT ukazov najdete na :

http://www.bonusdata.ch/GSMModem/a2dman.pdf oz na priloženem CD-ju.

Page 85: Seminar Publikacija

Bascom AVR za začetnike | GSM modem Falcom A2 (A2D, Wavecom) 85

AT UKAZI

GSM 07.05 AND 07.07 COMMANDS

AT+CGMI

AT+CGMM

AT+CGMR

AT+CGSN ……….IME informacija

AT+CIMI

AT+CCID

NETWORK REGISTRATION COMMANDS

AT+CPIN ................Vpis kode PIN

AT+CREG ................Pregled št. bazne postaje

AT+COPS AT+CSQ ..................Kvaliteta signala.0-30..od -113do -53dBm

AT+CCED

SERIAL LINK CONTROL COMMANDS

ATE

ATQ

ATV

AT&C

AT&D

AT&S AT+IPR ....................Nastavitev Baud rate (9600)

AT+ICF

AT+IFC CALL CONTROL COMMANDS

AT+CICB

ATD; .........................Klicanje Voice

AT+SPEAKER

AT+VGR ..................Nastavitev glasnosti zvočnika

AT+VGT ..................Nastavitev glasnosti mikrofona

AT+VTS

AT+VTD

AT+SIDET

AT+ECHO

ATD ...........................Klicanje na telefonsko številko

ATDL

ATA ............................Javljanje na telefonski klic

ATS0...........................Nastavitev avtomatsdkega javljanja št. pozivov ATH ............................Prekinitev zveze

+++ .............................Prehod v AT mode

ATO

AT+CBST

AT%C

AT+DS AT\N

Remote disconnection

CALL INFORMATION COMMANDS

AT+CR

AT+CRC AT+ILRR

AT+DR

CALL SETTING COMMANDS AT+CCFC

AT+CCWA

AT+CLIP .....................Nastavitev CLIP prikaza tel. št. klicočega

AT+CLIR ....................Nastavitev CLIR skrita številka

AT+COLP

Page 86: Seminar Publikacija

86 GSM modem Falcom A2 (A2D, Wavecom) | Bascom AVR za začetnike

PHONEBOOK COMMANDS

AT+CPBS

AT+CPBR ...................Iskanje imenika po poziciji

AT+CPBF .....................Iskanje imenika po tekstu

AT+CPBW ...................Pisanje v imenik

MESSAGE HANDLING COMMANDS

AT+CSCA……………. Nastavitev številke SMS centra mobilnega operaterja prednastavljen Mobitel

AT+CMGL

AT+CMGR .................Branje SMS sporočila

AT+CMGS .................Pošiljanje SMS sporočila

AT+CMSS

AT+CMGW

AT+CMGD

MESSAGE SETTING COMMANDS

AT+CSMS

AT+CPMS

AT+CMGF ..................Nastavitev načina pošiljanja SMS TEXT/PDU

AT+CSMP

AT+CSDH

AT+CSCS

AT+CNMI

AT+CSCB

FAX CLASS 1 COMMANDS AT+FCLASS

AT+FTM

AT+FRM AT+FTH

AT+FRH AT+FTS

AT+FRS

FAX CLASS 2 COMMANDS

AT+FDT

AT+FDR

AT+FET

AT+FPTS

AT+FK

AT+FBOR

AT+FBUF

AT+FCQ

AT+FCR

AT+FDIS

AT+FDCC

AT+FLID

AT+FPHCTO

Fax Class 2 indication messages

FUNCTIONALITY COMMANDS

A/

AT+GCAP

AT+CLCK

AT+CPWD

AT+CFUN AT+CPAS

AT+CPOF

STORING/RESTORING COMMANDS AT&W ............................Shranitev vseh parametrov

AT&F ..............................Nastavitev privzetih vrednosti

AT+CSAS

AT+CRES

Page 87: Seminar Publikacija

Bascom AVR za začetnike | GSM modem Falcom A2 (A2D, Wavecom) 87

Opomba: S sivo barvo so označeni vsi AT ukazi, ki jih pogosteje uporabljamo. Podrobnejši opis najdete v »datasheet«-u.

GSM data services 300...14400 BPS, asynchronous, transparent and non-transparent (V.21, V.22, V.23, V.22bis, V.26ter, V.32, V.34, V.110)

Page 88: Seminar Publikacija

88 MiniPin in SMS | Bascom AVR za začetnike

MiniPin in SMS

Matjaž Skubic

Uvod

MiniPin je postal široko namembno orodje. Na njega se lahko priključi veliko število naprav. Grafični LCD prikazovalnik, Touch screen, SD kartica, 1 Wire, i2C naprave, … V tem prispevku želim prikazati še eno možnost- priklop GSM modema na MiniPin in pošiljanje ter branje SMS sporočil.

Skozi članke v reviji Svet Elektronike je bilo objavljenih veliko rešitev, kaj in na kakšen način lahko priključimo na MiniPin. Če smo izmerili temperaturo s sondo DS1820 smo lahko rezultat prikazali na LCD prikazovalniku, pritisk tipke oz. stanje določenega izhoda/vhoda na led diodi…

Vse to lahko sedaj pošljemo preko modema v obliki SMS sporočila, lahko pa preberemo SMS in s tem sprožimo določeno akcijo.

Primer pošiljanja SMS:

Stanje Alarma na vikendu je:

Dimni senzor: OK

PIR senzor : OK

Napetost 230V: Prisotna

Peč-delovanje: Vključena

T emperatura je: 42 st.C.

Primer Sprejema SMS :

SMS pošljemo na GSM modem- MiniPin

Vklop port

Izklop port

Primer s tem ukazom postavimo PortB na 00000000 oz 11111111. LED diode na portu B svetijo takrat, ko je portB »0« - nizko stanje izhoda

Page 89: Seminar Publikacija

Bascom AVR za začetnike | MiniPin in SMS 89

Priklop Falcom modema na MiniPin

Na MiniPin priključimo GSM modem Falcom A2D

z namenskim kablom na konektor K1. (tam kjer imamo RS232 port). Modem ima že vgrajen konverter signalov RS232 – MAX232, zato moramo na ploščici MiniPin uporabiti port, ki je povezan na integrirano vezje MAX232 in nastaviti ustrezne mostičke.

Pred vklopom napetosti je potrebno v modem vložiti veljavno SIM kartico. Nosilec za SIM kartico se nahaja na spodnji strani GSM modema.

Priporočljivo je da pred vstavitvijo SIM kartice v modem izključite PIN kodo. To pomeni, da se bo modem po priklopu na napajanje sam prijavil na mobilno omrežje. V tem primeru ne pričakuje ukaza AT+CPIN =XXXX. To je zelo pomembno v primeru, ko pišemo program v mikrokontroler. Zgodi se namreč lahko, da se PIN pravilno ne bo vpisal. Postopek ponovimo 3 krat, potem pa se lahko SIM kartica zaklene. Za odklep je potrebna potem PUK koda. Postopek ni problematičen, le zavedati se moramo, kaj delamo.

Prav tako se prepričajte, da je na kartici SIM nastavljena številka SMS centra (Mobitel: +38641001333, Simobil: +38640441000).

Na modemu je prednastavljen SMS center Mobitel. V kolikor uporabljate SIM kartico drugega operaterja (Simobil) je potrebno spremeniti številko SMS centra (+38640441000). Nastavitev preverimo z ukazom:

AT+CSCA?

Vrne številko SMS centra.

Page 90: Seminar Publikacija

90 MiniPin in SMS | Bascom AVR za začetnike

Številko SMS centra spremenimo z naslednjim ukazom:

AT+CSCA="Številka"

Vnos številke SMS centra (prej uporabi ukaz CMGF=1).

Za testiranje je dobro uporabiti predplačniško SIM kartico, ker nam na primer ob nekontrolirani uporabi Loop zanke lahko povzroči največ 5 EUR škode.

Na konektor modema ( Interface D) priključimo 50 Ohm anteno z ženskim FME konektorjem.

Napajanje modema priključimo s posebnim kablom na interface A modema Pin 1 3 in 4 pri čemer moramo paziti da so:

PIN 1- GND

PIN3-(ignition) + 10.8- 31.2V DC

PIN4 (power) + 10.8- 31.2V DC

Napajalni kabel povežemo z napajalnim konektorjem razvojnega orodja MiniPin. Priporočljiva napetost napajanja je 12VDC. To je tudi napetost, s katero lahko brez težav napajamo MiniPin. Zaradi GSM modema je potrebno uporabiti zunanji napajalnik. MiniPin v kombinaciji programatorja že ponuja napajanje +5V preko USB povezave.

Ko priključimo napajanje na modem se na njem (Interface C) prižge rumena LED dioda. Če je SIM kartica veljavna pa po cca. 10 sekundah začne utripati zelena LED dioda. To je tudi znak, da se je modem pravilno prijavil v GSM omrežje.

Modem smo priključili na napajanje. Če se je povezal na omrežje GSM (rumena sveti, zelena led utripa) je potrebno napisati program, ki bo poslal oz, sprejel SMS sporočilo. Preden smo GSM modem priključili na MiniPin je potrebno v modem vpisati določene inicializacijske parametre. Te vpisujemo preko AT ukazov.

Komunikacija modemov GSM z osebnim računalnikom ali mikrokontrolerjem namreč poteka ob pomoči Hayesovih ukazov oziroma ukazov AT. Gospod Hayes je leta 1977 postavil temelj modemski komunikaciji. Načelo le-te temelji na izmenjevanju podatkovnega (data mode) in ukaznega (command mode) prenosa podatkov. Ukaze AT pošiljamo v ukaznem načinu za inicializacijo začetnih nastavitev, spreminjanje hitrosti prenosa podatkov, klic nove telefonske številke itn. V podatkovnem načinu prenašamo čiste podatke, na primer prenos datotek in elektronsko pošto.

Page 91: Seminar Publikacija

Bascom AVR za začetnike | MiniPin in SMS 91

Ukaz AT izhaja od angleške besede attention (pozor) in opozarja, da za nizom AT sledi ukaz modemu. Inicializacijo lahko izvedemo na dva načina:

1. PC računalnik - Pri nastavitvah, lahko uporabimo širok nabor AT ukazov za modem. To lahko

storimo tako, da osnovne nastavitve modema izvedemo kar s pomočjo PC računalnika in

uporabo terminal emulatorja (Hyper terminal, secure CRT, Terminal Bray, …)

2. Mikrokontroler - Možno pa je vse te ukaze vpisati miokrokontroler. Pri priklopu napajanja se

vsakokrat izvede vpis vseh parametrov, ki jih nastavimo. Tukaj je dobro biti previden, ker je

število vpisov v interni pomnilnik modema omejeno. To pomeni, da če želimo vsakokrat, ko

vključimo modem shraniti njegove nastavitve uporabimo en cikel pisanja.

Verjetno je bolje, če modem pred uporabo nastavitmo preko serijskega kabla in terminal emulatorja, v mikrokontrolerju pa sprotno dodelimo posamezne (ne sistemske) ukaze, ki jih modem opravi za vsako našo operacijo posebej.

Modem je prednastavljen na 9600, 8,n,1. Teh parametrov v principu ni potrebno spreminjati. Hitrosti prenosa (baudrate 9600) ustrezajo, ker pri pošiljanju in sprejemu SMS sporočil (max 160 znakov s presledki) ne potrebujemo posebno velike hitrosti prenosa.

Modem (interface B) povežemo z MiniPinom s povezovalnim kablom.

Kabel je IDC-> D-SUB9 M pri čemer so uporabljeni le trije pini (2-Tx, 3-Rx, in 5-GND)

Page 92: Seminar Publikacija

92 MiniPin in SMS | Bascom AVR za začetnike

Pošiljanje SMS sporočila

Za pošiljanje sporočila SMS potrebujemo le dva osnovna ukaza AT. (AT+CMGF=1, AT+SMGS=''tel stevilka'')

Nastavitve modema in serijkega porta MiniPin naj bodo naslednje:

Baudna hitrost: 9600

Število podatkovnih bitov: 8

Število končnih bitov: 1

Pariteta: nobena

$crystal = 11059200 $baud = 9600

Nastaviti je potrebno pravilni Baud rate. V tem primeru 9600.

Tp3 Alias Pind.2 definicija tipke (če uporabimo zunanjo prekinitev to ni potrebno) Definiramo tipko za pošiljanje SMS sporočila (Int0).

On Int0 Send_sms Enable Int0

Z ukazom »AT+CMGF=1« izberemo tekstovni način pošiljanja SMS sporočil. (1 – tekstovni način, 0- PDU način) Print "AT+CMGF=1" 'definiram SMS nacin

Ukaz za pošiljanje SMS sporočila. Print "AT+CMGS=" ; Chr(34) ; "041999888" ; Chr(34)

Chr(34) pomeni '' (dvopičje) – Telefonsko številko moramo modemu poslati kot tekst v narekovajih. Po ukazu za pošiljanje je potrebno počakati cca 100ms in za tem lahko napišemo naše sporočilo. S pritiskom na tipko T3 sprožimo pošiljanje SMS sporočila. Print "Stanje PORTB " ; Portb ;

V tem primeru pošiljamo tekst "Stanje PORTB " in stanje PortB. Vsak del teksta je zapisan v novi vrstici. Na koncu pošljemo še ukaz za zaključek pošiljanja SMS sporočila: Print Chr(26)

Chr(26)pomeni ^Z (ctrl+Z) Tekst, ki ga sprejmemo na telefonskem aparatu GSM kot SMS sporočilo je prikazan:

Stanje PORTB 11111111

Page 93: Seminar Publikacija

Bascom AVR za začetnike | MiniPin in SMS 93

Sprejem SMS sporočila

Za sprejem sporočila je uporabljena funkcija Getline. Funkcija omogoča branje vsega, kar prispe na serijski port mikrokontrolerja. Program je napisan tako, da prebere prvih pet SMS sporočil shranjenih na SIM kartici. Ciklično bere pet SMS sporočil. V kolikor se pojavi tekst sporočila »Vklop port« ali »Izklop port« se prižgejo LED diode na PortuB - MiniPin.

Ker program uporablja samo prvih pet SMS sporočil je potrebno prvih pet sporočil izbrisati. To storimo s pritiskom na tipko T4.

Pri sprejemu podatkov je uporabljen serijski buffer velikosti 100 znakov.

Config Serialin = Buffered , Size = 100

Tukaj je j potrebno povdariti, da buffer zasede RAM. To pomeni, da moramo optimalno določiti velikost bufferja. Funkcija Getline prebere vse znake do konca, dokler se ne pojavi CRLF. Če želimo sprejeti 2 vrstico, kličemo funkcijo dvakrat.

Znotraj funkcije Getline je uporabljena For zanka, ki omogoča izstop iz funkcije, kljub temu, da se na koncu ni pojavil CRLF. To je pomembno, ker bi se drugače program zazankal v neskončni zanki (če bi uporabili Do-Loop).

Iz celotnega SMS sporočila izrežemo uporabno informacijo:

Gsm = Mid(sret , 20 , 12)

GSM številko pošiljatelja dolžine 12 znakov na poziciji 20. Ukaz = Mid(sret , 1 , 12)

Ukaz je spremenljivka tipa String, ki omogoča sprejem ukaza, ki ga napišemo v SMS sporočilu. Tukaj je določena dolžina 12 znakov.

Znotraj glavne zanke sta uporabljena dva if stavka, ki prižigata LED diode portB glede na SMS sporočilo:

If Ukaz = "Vklop port" Then Portc = &B00000000 'Led sveti End If If Ukaz = "Izklop port" Then Portc = &B11111111 'Led ne sveti End If

Pritisk tipk »Pošiljanje SMS«-T3 in »Brisanje SMS« -T4 je izveden z zunanjo prekinitvijo.

On Int0 Send_sms Enable Int0 On Int1 Delete_sms Enable Int1

Vse skupaj se prikazuje tudi na LCD prikazovalniku 16x2.

V tem prispevku je bil namen prikazati enostaven način, kako lahko pošljete, preberete in na koncu izbrišete SMS sporočilo. Od primera do primera pa je odvisno, kako boste zadevo uporabili. Vsak si bo to prikrojil po svojih željah in potrebah.

Page 94: Seminar Publikacija

94 Kabel tester | Bascom AVR za začetnike

Kabel tester

Matjaž Skubic

Uvod

Velikokrat se nam pri priključevanju naprav na lokalno mrežo, ISDN modem ali telefon zgodi, da kaj ne deluje. Prvo je potrebno preveriti kabel. Največkrat je napaka na konektorju, ali pa je izbran napačen kabel. Kako najhitreje odpraviti takšne težave? Uporabiti univerzalni tester za kable.

Pred nekaj časa se mi je zgodilo, da sem priključil računalnik na LAN mrežo preko UTP CAT-5 kabla. Ker povezava ni in ni uspela, sem pomislil, da je napaka v napačni nastavitvi gonilnikov na PC računalniku. Toda po daljšem eksperimentiranju sem ugotovil, da je napaka le na kabelski povezavi. Ko sem želel premeriti kabel sem naletel na naslednji problem, ker univerzalni merilnik (Ohm-meter) nima tako tankih priključnih pipetk, da bi lahko ohmsko pomeril posamezne pine. Z nekaj težavami sem potem le rešil problem. Seveda napaka je bila v kabelski povezavi, točneje kabel je bil prekinjen v določenem položaju. Sklenil sem, da si izdelam tester za kable, da bom v bodoče lažje reševal tovrstne probleme. Tako je tudi nastala ta rešitev. Napravica se mi zdi zanimiva. Mislim, da bi še komu prišla prav, zato objavljam njen podroben opis.

Page 95: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 95

Tester omogoča testiranje naslednjih kablov:

• UTP 100

• UTP 10

• UTP cross connect

• ISDN

• Telefon

• Testiranje posameznih PIN-ov

Ostale funkcije pa so:

• Test RS232

• PIEZZO

Kabel tester je sestavljen iz dveh osnovnih delov ter dveh dodatnih vezij.

• mikroprocesorska enota

• oddaljena enota z LED diodami

• vmesnik RS232

• kabel za testiranje kratkega stika

Naprava deluje tako, da med glavno enoto in oddaljeno enoto priključimo kabel, ki ga želimo testirati. Preko sistema menijev izberemo tip testa in poženemo meritev. Na glavni enoti se prikazuje status meritve, na oddaljeni enoti pa se po vrstnem redu prižigajo led diode. Če se led diode ne prižigajo po označenem vrstnem redu ali svetita dve led diodi hkrati ali ne sveti nobena, pomeni, da je s kablom nekaj narobe (napačna povezava, kratek stik, prekinjen kabel).

Mikroprocesorska enota

Glavna mikroprocesorska enota skrbi za vse funkcije, ki jih ima kabel tester. Preko tipk na enoti lahko izbiramo med posameznimi tipi kablov. Za nastavitev testiranja, izbiro menijev in postopek merjenja nam je v pomoč dvovrstični LCD prikazovalnik, preko katerega lahko preberemo trenutno stanje in vidimo, kateri pin je trenutno pri meritvi aktiven.

Priključek za kabel na napravi je standardni konektor z oznako RJ-45, v katerega lahko priključimo UTP, ISDN, telefonski kabel ali dodatka za testiranje RS232 in merjenje kratkega stika.

Za napajanje glavne enote se uporablja 9V baterija z oznako 9V 6LR61 in se nahaja v notranjosti naprave. Na napravo je možno priključiti poleg baterije zunanji vir napajanja (12V). Priključek se nahaja na zgornji strani naprave. Naprava ima na spodnji strani konektor z ISP vodilom, preko katerega lahko napravo programiramo.

Page 96: Seminar Publikacija

96 Kabel tester | Bascom AVR za začetnike

O sestavnih delih glavne enote, tu ni kaj veliko povedati. Največ pove električna shema na sliki4. Enota je sestavljena iz šestih sklopov in sicer:

- Tipke za izbiro menija - Napajalni del s napetostnim stabilizatorjem 7805 - Piezzo vezje - LCD prikazovalnik - LED dioda za prikaz statusa delovanja - Mikrokontroler AT mega 8515

Srce testerja je Atmelov mikrokontroler AT-MEGA8515. Velikost programskega pomnilnika je 8Kb, kar zadošča željenim funkcijam, ki so izvedene z BASCOM AVR. Če bi uporabili kateri drug mikrokontroler (MEGA 16 ali Mega128), bi lahko s tem testerjem poleg ostalega, merili tudi napetost, temperaturo,...

Podrobnejši opis mikrokontrolerja AT-MEGA 8515 si lahko ogledate na

http://www.atmel.com/dyn/general/site_search.asp

Slika1: Pinout mikrokontrolerja

LED dioda Status je dvobarvna in je vezana med PortD4 in PortD5. Polariteta izhoda pa določa barvo. Zelena/Rdeča. Zelena prikaže vklop naprave, rdeča pa sveti takrat, ko se meritev izvaja.

Uporabljeni upori v vezju so SMD, kar je zmanjšalo velikost vezja. Priključki mikrokontrolerja so varovani z upori 220 ohm.

Page 97: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 97

Opis delovanja

Glavna mikrokontrolerska enota vsebuje sistem menijev, preko katerih se premikamo spomočjo tipke Tp3 (MENU/END).

S pritiskom na tipko Tp4 (START) začnemo z meritvijo. LED dioda spremeni barvo iz zelene v rdečo. Na glavni enoti se prikaže status izhoda.

Primer prikaza za merjenje UTP 100 kabla:

Slika2: LCD prikazovalnik testiranja UTP100 kabla

V zgornji vrstici prikazovalnika vidimo:

- tip kabla, - barvo parice, - kratek opis signala, - številka pina, ki se trenutno testira

V spodnji vrstici prikazovalnika vidimo, kateri pin je trenutno aktiven.

Številka pina ponazarja številko priključka, ki mora ustrezati LED diodi oddaljene enote, ki takrat sveti. Meritev poteka avtomatsko. To pomeni, da se izhodi zaporedno (odvisno od izbranega tipa kabla) postavljajo na »1«. Vsak naslednji izhod spremeni stanje po 1 sekundi.

Za končanje meritve ponovno pritisnemo tipko Tp3 (MENU/END).

Vsebina prikazovalnika je pri testu UTP 10, ISDN, Telephone podobna, le da so tu uporabljeni samo tisti pini konektorja, ki jih potrebujemo za posamezen kabel.

Testiranje UTP cross kabla je podobna UTP 100. Tukaj je zaporedje vključevanja pinov zaradi križnih povezav drugačno.

Za UTP cross sta izbrani dve varianti. Ena ima v primerjavi z drugo, zrcalno povezane pine. V praksi sem uporabil oba tipa in delujeta v redu.

UTP cross A – 7 8 1 4 5 2 3 6

UTP cross B – 3 6 1 4 5 2 7 8

Page 98: Seminar Publikacija

98 Kabel tester | Bascom AVR za začetnike

Posebnost testa je izbira menija TEST PIN. Tu imamo poleg tipk Tp4 (START) in TP3 (MENU/END) na voljo še tipko TP1-SELECT, s katero se premikamo po posameznih pin-ih. Prednost takšnega testa je, da lahko pregledamo vsako povezavo posebej poljubno dolgo, ker testiranje ne poteka avtomatsko. V spodnji vrstici prikazovalnika za vsak položaj testa utripa segment, ki ponazarja LED diodo. Testiranje zaključimo s hkratnim pritiskom na tipki TP1 (SELECT) in TP3 (MENU/END).

Slika3: LCD prikazovalnik Test PIN

LED dioda Status je pri vsakem aktivnem izhodu rdeče barve.

Slika4: Shema glavne mikroprocesorske enote

LCD Display

Page 99: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 99

Delovanje izhodov testerja

Vsi kabli, ki jih lahko testiramo s testerjem so simetrični in nimajo opleta. To pomeni, da je potrebno za vklop npr. 8.LED diode na oddaljeni enoti postaviti vse pine od 0-6 na logično »0«, pin 7 pa postaviti na logično »1«. Tak postopek je izbran za vsako LED diodo posebej.

Konektor je priključen na PortC mikrokontrolerja AT MEGA 8515. Izhodi so varovani z upori 220E. To verjetno ne bi bilo dovolj, če bi napravo priključili na »živ« ISDN priključek. Napetosti na njem se gibljejo okrog 100V. Izhode bi v tem primeru morali zaščititi z zener ali supressor diodami (6,8V).

Kot je že opisano zgoraj, LED diode prižigamo s kombinacijo logičnih »1« in »0« direktno med pini mikrokontrolerja. Takšna rešitev ne bo delovala z uporabo mikrokontrolerja družine 8051. Tu je potrebno LED diodo priključiti med (+) plus in izhodnim pin-om kontrolerja. Iz tega razloga je za enostavnejšo rešitev, uporabljen mikrokontroler družine AVR.

Tiskano vezje in montažna shema glavne enote

Slika5: Tiskano vezje in montažna shema glavne enote

Page 100: Seminar Publikacija

100 Kabel tester | Bascom AVR za začetnike

Oddaljena enota z LED diodami

Oddaljena enota je sestavljena iz osmih LED diod. Tu ne potrebujemo dodatnega napajanja, ker se celotno vezje napaja iz glavne enote. LED diode so postavljene v vrsto. Označene so od 1 do 8. Ko je bil preizkušen izbran kabel in je bilo njegovo ožičenje ustrezno, se LED diode prižigajo naraščajoče po vrstnem redu. To je tudi znak, da so povezave v kablu pravilne. V kolikor povezave niso v redu, se LED diode ne prižigajo po vrstnem redu. Lahko hkrati svetita dve LED (kratek stik med pinoma) ali pa zaradi prekinitve v kablu LED sploh ne zasveti.

Vsaka LED dioda ima paralelno vezano diodo 1N4148. Dioda omogoča sklenitev tokokroga z glavno enoto.

Slika6. Vezava LED diod oddaljene enote testerja.

Page 101: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 101

Tiskano vezje im montažna shema oddaljene enote

Slika7: Tiskano vezje in montažna shema oddaljene enote

Page 102: Seminar Publikacija

102 Kabel tester | Bascom AVR za začetnike

Vmesnik RS232

Velikokrat se zgodi, da želimo na hitro preizkusiti serijski RS232 port. Potrebno je sprogramirati kratko proceduro in uporabiti testno vezje. Za takšno testiranje se porabi kaj nekaj časa in dodatnega hardware-a. S pomočjo tega dodatka pa sedaj to lahko storimo kar s tem testerjem.

Glede na to, da je za priklop uporabljen konektor RJ-45, je možno poleg Ethernet kabla priključiti še dodatna vezja. Ker je v testerju uporabljen zmogljivejši mikrokontroler in je v njem ostalo še nekaj prostega programskega pomnilnika, sem se potem dodal še ta dodatek. Pri samem vezju ni kaj veliko dodati. Na mikrokontrolerju je izbran Software-ski UART, kateremu nastavljamo Baud rate med 1200b/s do 19200b/s, za serijsko komunikacijo pa je uporabljen MAX-ov MAX232.

Slika8: Dodatno vezje za RS232 adapter

Delovanje

V testni konektor RJ45 priključimo vezje RS232, in vse skupaj povežemo z osebnim računalnikom. V meniju izberemo RS232 in pritisnemo tipko SELECT.

Slika9: LCD prikazovalnik RS232

S tem nastavimo Baud rate. S potrditvijo izbire hitrosti prenosa, se na serijskem vmesniku pojavi 100 vrstic zapisov teksta. Po zadnjem izpisu lahko preko terminal emulatorja pošljemo željeni string na LCD zaslon.

Page 103: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 103

Tiskano vezje RS232 adapterja

Slika10: Tiskano vezje za RS232 adapter

Kabel za testiranje kratkega stika

Poleg vsega naštetega, sem dodal še funkcijo merjenja kratkega stika (piezzo), ki jo uporablja večina univerzalnih inštrumentov. S tem dodatkom lahko enostavno testiramo povezavo.

Slika11: Dodatek za merjenje kratkega stika

Tester testira kratek stik med PortC.3 in portC.4. Kabel nima nobenega dodatnega vezja.

Slika12: LCD prikazovalnik Piezzo

Page 104: Seminar Publikacija

104 Kabel tester | Bascom AVR za začetnike

Priključni konektor

Kabel, ki ga vključimo na napravo mora imeti RJ45 konektor. Pini priključkov se štejejo, kot je označeno na sliki13:

Pregled povezav posameznih kablov

UTP kabel

je 8 (osem) žilni, povezava je pin

Bascom AVR za začetnike

Kabel, ki ga vključimo na napravo mora imeti RJ45 konektor. Pini priključkov se štejejo, kot je

Slika13: Konektor RJ45

egled povezav posameznih kablov

povezava je pin-pin.

Slika14: UTP kabel 100

Kabel, ki ga vključimo na napravo mora imeti RJ45 konektor. Pini priključkov se štejejo, kot je

Page 105: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 105

UTP Cross kabel

Slika15: UTP cross kabel

UTP 10

Slika 16: UTP kabel 10

ISDN

Slika 17: ISDN kabel

Page 106: Seminar Publikacija

106 Kabel tester | Bascom AVR za začetnike

Telefon

Slika 18: Telefonski kabel

Poraba in napajanje vezja

Glavno mikrokontrolersko vezje je napajano z baterijo 9V. Zaradi manjše porabe, so vsa oddaljena vezja brez napajanja. Napajajo se iz mikroprocesorske enote.

Upori oddaljene enote so velikosti 1K8, kar zadostuje za tok:

(5V-0'7)/(1K8+1K8+220E+220E)= 1.0mA.

To je tudi dovolj, če uporabimo visokosvetlečo rdečo LED diodo. Klasična LED dioda porabi za normalno svetilnost od 5-10mA.

Skupna poraba pri delovanju z alfanumeričnim LCD prikazovalnikom znaša okoli 14mA. Predvidena je tudi uporaba NiCd ali NiMHbaterije, ki jo lahko napolnimo. Za to moramo uporabiti še dodatek k vezju. Tega dodatka ni na tiskanem vezju.

Z inštrumentom DMM 750 sem pomeril tok naprave ter najmanjši in največji tok Dobil sem naslednji rezultat:

Page 107: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester

Kot lahko vidimo, se poraba vezja giblje med 13.07 in 13.51mA. Tako bo 9V baterija zadostovala za približno 50 ur delovanja (750mAh).

Zunanji napajalnik uporabimo v primeru, kadar nimamo pri roki ustrezne baterije ali pa želimo baterijo napolniti. V tem primeru moramo uporabiti NiCd baterije je bil dodan šele po tem, ko je bilo že vse zmontirano v ohišje, zato ga na tiskanem vezju ni.

Slika 20: Dodatmo vezje za polnjenje NiMh ali NiCd baterij.

Vrednost upora je določena, če imamo vir

R= (12V-0.7V-Ubat)/ Ipolnjenja

Kabel tester

Slika 19: Poraba testerja

ezja giblje med 13.07 in 13.51mA. Tako bo 9V baterija zadostovala za približno 50 ur delovanja (750mAh).

Zunanji napajalnik uporabimo v primeru, kadar nimamo pri roki ustrezne baterije ali pa želimo baterijo napolniti. V tem primeru moramo uporabiti NiCd ali NiMh baterijo. Konektor za polnjenje baterije je bil dodan šele po tem, ko je bilo že vse zmontirano v ohišje, zato ga na tiskanem vezju ni.

Slika 20: Dodatmo vezje za polnjenje NiMh ali NiCd baterij.

Vrednost upora je določena, če imamo vir napetosti 12V:

107

ezja giblje med 13.07 in 13.51mA. Tako bo 9V baterija zadostovala za

Zunanji napajalnik uporabimo v primeru, kadar nimamo pri roki ustrezne baterije ali pa želimo ali NiMh baterijo. Konektor za polnjenje

baterije je bil dodan šele po tem, ko je bilo že vse zmontirano v ohišje, zato ga na tiskanem vezju ni.

Page 108: Seminar Publikacija

108 Kabel tester | Bascom AVR za začetnike

Shema celotnega vezja

Slika 21: Shema celotnega vezja

LCD Display

Page 109: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 109

Seznam materiala

K_tester1.pcb

======================================

Št.komp Ime Value

------ --------------- ---------------

1 C200 100uF/16V

1 CAP200 Quarz 4Mhz

1 CAP400 Piezzo

1 CON2M Konektor za TIV

1 DIP40 ATMega8515

1 LCD_CHR LCD 2x16

8 LEDV 8 x LED rdeca v

1 LEDV LED 2-barvna

6 R_B_SMD 6 x 10K

8 R_B_SMD 8 x SMD 1k8

8 R_B_SMD 8 X SMD 1N4148

8 R_B_SMD 8xSMD 220E

2 R_B_SMD SMD 1K

3 R_B_SMD SMD 100nF

5 TIPRES 5 x Tipka

1 TO35A BC547

1 TO220 7805

1 TRPOT_M 47K

Page 110: Seminar Publikacija

110 Kabel tester | Bascom AVR za začetnike

Opis programa

Sedaj pa še nekaj besed o programu.

Program je napisan z BASCOM-AVR IDE Version : 1.11.7.4.

Velikost programa je nekaj manj kot 8kB, iz česar je razvidno, da bo potrebno uporabiti licenčno verzijo programa BASCOM AVR.

Na začetku je potrebno opraviti inicializacijo sistema. Ker v vezju ni uporabljen Quarz oscilator, je potrebno nastaviti frekvenco notranjega oscilatorja. Ta je privzeto nastavljena na 1.000.000 MHz. Če želite spremeniti frekvenco je potrebno spremeniti ustrezne Fuse bite v mikrokontrolerju.

Ker je uporabljen tudi serijski port, je potrebno nastaviti tudi Baud rate. V našem primeru 9600, za kar je potrebno nastaviti vrednost Osccal=181.Ta vrednost je privzeto nastavljena. Kasneje si bomo ogledali, kako jo spremeniti med delovanjem.

$regfile = "m8515.dat" $crystal = 1000000 $baud = 9600 : Osccal = 181

Nastavimo še pine LCD prkazovalnika:

Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 Config Lcdbus = 4 Cursor Off Noblink Cls

Na LCD prikazovalnik sem izrisal tudi nekaj simbolov:

Deflcdchar 0 , 32 , 14 , 17 , 17 , 17 , 14 , 32 , 32 ' LED OFF Deflcdchar 1 , 32 , 14 , 31 , 31 , 31 , 14 , 32 , 32 ' LED ON Deflcdchar 2 , 3 , 5 , 25 , 25 , 25 , 5 , 3 , 32 ' ZVOCNIK Deflcdchar 3 , 32 , 10 , 20 , 32 , 10 , 20 , 32 , 32 ' Krivulja Cls

Na koncu ne smemo pozabiti na ukaz »CLS«, ker drugače prikazovalnik ne bo deloval pravilno.

Page 111: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 111

Potem moramo nastaviti še vhodno izhodne porte mikrokontrolerja. To je potrebno storiti, zaradi pravilnega delovanja LED diod. Nastaviti je potrebno registre za posamezni port.

Ddrd = &B01110000 'config PD Portd = &B10111111 Ddrb = &B00000000 'config PB Portb = &B11111111 Ddrc = &B11111111 'config PC Portc = &B11111111 Ddra = &B11111111 'config PA Porta = &B11111111

Glavni program je namenjen izbiri kabla in prikaza menijev na prikazovalniku. Izbira menijev je narejena s Case stavkom. Za prikaz stanja glavne enote je uporabljena dvobarvna LED dioda. Pri vklopu je zelene barve, v stanju meritve pa rdeče barve.

Select Case Menu Case 1 : Gosub Utp100 Case 2 : Gosub Utpcrossx Case 3 : Gosub Utpcross Case 4 : Gosub Utp10 Case 5 : Gosub Isdn Case 6 : Gosub Telefon Case 7 : Gosub Tst_pin Case 8 : Gosub Rs232 Case 9 : Gosub Piezzo1 End Select

Podprogram za vklop LED diode oz. postavitev pinov mikrokontrolerja v pravilno stanje je napisan z več procedurami. S tem je koda optimizirana, saj drugače ne bi bilo mogoče programa »spraviti« v mikrokontroler Mega 8515.

Pin1: Portc = 0 Set Conn1 Reset Conn2 Gosub Lcd_p Locate 2 , 1 : Gosub Lcd1 Gosub Tmdl Locate 2 , 1 : Gosub Lcd0 Gosub Tmdl Return

Za vsak pin posebej je izdelana takšna procedura. Testiranje pinov je izvedeno avtomatsko. To pomeni, da se led dioda prižiga po vrsti od prve do osme in potem zopet od začetka. Če želimo testirati vsak pin posebej, izberemo meni Tst_pin. Tu moramo za vsako naslednje stanje pritisniti tipko Tp_1.

Page 112: Seminar Publikacija

112 Kabel tester | Bascom AVR za začetnike

Do Portc = 0 Set Conn1 Reset Conn2 Pin = "1-2" Pinx = 1 Barva = "Or-Be" Gosub Lcd_p Locate 2 , 1 : Gosub Lcd1 Gosub Tmdl If Tp1 = 0 Then Exit Do Locate 2 , 1 : Gosub Lcd0 Gosub Tmdl If Tp1 = 0 Then Exit Do Loop

Za vsak pin posebej je izdelana neskončna zanka, ki jo lahko zapustimo s pritiskom na tipko Tp1.

Testiranje seriskega porta RS 232

Adapter RS232 je namenjen testianju serijskega porta. Napajanje + 5V za vezje MAX 232 dobimo na portu PortC.1, 0V pa na portu Portc.6.

Pri nastavitvi serijskega porta moramo z menijem nastaviti Baud rate. To storimo tako, da med delovanjem spremenimo registre portov.

Ddrc = &B11101111 'config PD6 as input Portc = &B00011010

Nastaviti je potrebno tudi software-ski UART. To storimo z ukazom »OPEN«.

Open "comc.4:9600,8,n,1" For Output As #1 Open "comc.3:9600,8,n,1" For Input As #2

Privzeto je nastavljena hitrost 9600 b/s.

S pomočjo »CASE« stavka nastavimo hitrost prenosa na želeno vrednost, pri čemer pomeni vrednost spremenljivke Brr vrednost registra OSCCAL. Vrednost OSCCAL pa določa Baud rate.

Page 113: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 113

Select Case Baudr Case 1 : Locate 1 , 6 Baudstr = "1200,8,N,1 " Baud #1 , 1200 Baud #2 , 1200 Brr = 178 Lcd Baudstr Case 2 :

.

.

.

End Select

Na koncu testa je potrebno registre porta ponovno nastaviti na začetno vrednost, nato pobrišemo še prikazovalnik.

Ddrc = &B11111111 'config PC Portc = &B11111111 Locate 2 , 1 : Lcd Spc(16)

Piezzo

Testiranje kratkega stika je izvršeno preko pinov 4 in 5. Opozoriti je treba, da je ta meritev namenjena samo merjenju kratkega stika. Pini mikrokontrolerja niso zaščiteni proti visokim napetostim, zato je potrebna previdnost pri uporabi takšnega merjenja. Piskač piezzo zapiska tudi pri meritvi večje upornosti do 20K ohm.

Če bi želeli natančnejšo meritev, bi bilo potrebno prag aktiviranja prestaviti na vsega nekaj deset ohm-ov.

Piezzo1:

While Pinc.3 = 0 Gosub Lrdec Set Piezzo Locate 1 , 15 : Lcd Chr(3) Locate 2 , 7 : Gosub Lcd1 Locate 2 , 9 : Gosub Lcd1 Wend …

Page 114: Seminar Publikacija

114 Kabel tester | Bascom AVR za začetnike

Tu kaj posebnega ni dodati. Za zvočno signalizacijo je uporabljen Piezzo SEP2242 z vgrajenim oscilatorjem. Priključen je na Portd.6. Ko želimo generirati zvočni signal, piezzo priključimo na enosmerno napetost +5V. To storimo s pomočjo tranzistorja BC517. Vključimo ga z ukazom »set piezzo« in izključimo z »reset piezzo«. Na LCD prikazovalniku pa prikažemo zvočnik in krivuljo (Slika 12).

Ohišje

Še nekaj besed o ohišju. Ohišje lahko najdete v dobro založeni trgovini z elektro materialom. Dimenzija ohišja je:

Glavna enota:

13 X 6 X 3 cm. Dobro je, da ima predpripravljen prostor za 9V baterijo.

Oddaljena enota:

5,5 X 5,5 X 3 cm.

Za lepši izgled ohišja je priložena maska prve strani.

Menu/End StartSelect StatusOFF/ON

Cable tester KT804Cable tester KT804 DSMDSM

RJ-45

DC 12V

Page 115: Seminar Publikacija

Bascom AVR za začetnike | Kabel tester 115

1 2 3 4 5 6 7 8

DSMDSM

RJ-45

Slika 22: Prednja maska za ohišje glavne enote in oddaljene enote

In še za konec. Z manjšimi modifikacijami, si boste lahko zgradili sistem po vaši meri. Ostali uporabni dodatki testerja bi bili lahko še:

merjenje temperature,

napetosti,

frekvence, …

S tem bi to postal že univerzalni inštrument. Vsekakor pa bi za to potrebovali zmogljivejši mikrokontroler.

Skratka upam, da boste ob gradnji Kabel testerja uživali, z njegovo uporabo pa rešili marsikateri problem pri postavitvi LAN mrež, vključitvi ISDN telefona, …

Page 116: Seminar Publikacija

116 Velike številke na prikazovalniku LCD-2x16 | Bascom AVR za začetnike

Velike številke na prikazovalniku LCD-

2x16

Matjaž Skubic

Cene LCD prikazovalnikov so se v zadnjem času zelo znižale. To verjetno botruje veliki porabi tovrstnih prikazovalnikov in nenazadnje tudi enostavnost uporabe.

V veliki večini elektronskih vezij je dandanes prikazovalnik nepogrešljiv element. Ko sem se pri popravilu naprave za doziranje soočil s problemom prikaza velikih številk (prvotno je imela naprava velik LED prikazovalnik) sem bil v veliki dilemi, ali napravo popraviti, ali pa kar narediti novo. Uporabnik je želel imeti čimbolj podoben vmesnik, ker ga je bil navajen. Izdelal sem novo napravo, LED prikazovalnik pa sem nadomestil z 2x16 LCD prikazovalnikom. To je bil za mene izziv, da na prikazovalnik prikažem velike številke.

Standardni LCD prikazovalnik ima v mikrokontrolerju shranjen nabor ASCII znakov. Odvisno od tipa prikazovalnika se nekateri znaki, predvsem posebni, lahko razlikujejo. Proizvajalci so prikazovalnik naredili tako, da lahko programer zgradi do 8 svojih znakov. Pri tem smo omejeni na 8x5 pik, kar pa ni veliko. Znake lahko vpišemo v pomnilnik, ki se imenuje CG RAM.

CG RAM je pomnilnik prikazovalnika LCD in ima na voljo 8 naslovov, kamor lahko vpišemo (narišemo) poljuben element z ločljivostjo 8x5 pik. Možno je izrisati tudi večji znak, kjer predvidimo N x 8x5 znakov (N ni večji od osem). Pri tem imamo med posameznimi polji presledek. Zadeva je lahko moteča pri večjih prikazovalnikih, ker je tam tudi razmik med polji 8x5 večji. Če želimo narisati znak v polje 8x 5 pik, si lahko pomagamo na več načinov. Lahko v CG RAM vpišemo posamezen naslov in njegovo vrednost. Takšen postopek se je uporabljal pri uporabi Assemblerja. Težava je bila v tem, ker do vpisa programa v mikrokontroler nismo vedeli, kako bo takšen zank dejansko prikazan na prikazovalniku.

V Bascomu je ta rešitev enostavna in uporabniško prijazna. Za to je v Bascomu pripravljeno posebno orodje, ki ga najdemo v meniju »Tools« z imenom LCD Designer. Orodje nam omogoča, da na zelo

Page 117: Seminar Publikacija

Bascom AVR za začetnike | Velike številke na prikazovalniku LCD-2x16 117

enostaven način narišemo znak, pri tem pa vizualno lahko preverimo, kako bo ta znak dejansko prikazan na prikazovalniku. Ko je znak narisan, nam orodje vrne že pripravljeno kodo. Vse kar moramo storiti ob tem je, da določimo naslov (0-7) na pozicijo, kamor je postavljen vprašaj (?).

Primer:

Deflcdchar ?,4,4,4,4,21,14,4,32' replace ? with number (0-7)

Ko želimo znak prikazati na prikazovalniku, moramo določiti lokacijo na prikazovalniku, in znak.

Primer:

Locate 1,3:LCD chr(2)

Pri čemer je 1, vrstica prikazovalnika, 3 zaporedna pozicija znaka v vrstici ter 2 naslov znaka, ki smo ga določili pri risanju- vrednost, ki jo postavimo na mesto vprašaja (?)

Če želimo prikazati večje znake/številke moramo uporabiti več polj 8x5 in jih pravilno razvrstiti, da dobimo želeno številko. Pri prikazovalnikih tipa 2x16 je možno prikazati velike številke čez dve vrstici. Kako to izvedemo?

Pri načrtovanju znakov moramo biti pazljivi, da se zgradijo vsi elementi, ki zadostujejo izrisu vseh številk od 0-9. Če si želimo prihraniti delo pri programiranju, izberemo 8 znakov. Rešitev je možna tudi z izbiro večih znakov, le da je tu potrebno vsebino CG RAM-a LCD prikazovalnika ves čas spreminjati.

Izris vseh številk od 0-9 je sorazmerno težavno delo, če uporabimo samo 8 znakov s katerimi izrišemo vseh deset številk. Po dolgotrajnem risanju, kombiniranju in preizkušanju sem uspel najti 8 znakov, s katerimi je možno izrisati dokaj prepoznavne številke. Znake sem razvrstil v dve kategoriji in sicer »normal« in »bold« pri čemer sem v obeh primerih uporabil enak koncept znakov.

Page 118: Seminar Publikacija

118 Velike številke na prikazovalniku LCD

Spodnji sliki ponazarjata uporabo znakov in prikaz številk »normal« in »bold«

Deflcdchar 0 , 1 , 1 , 1 Deflcdchar 1 , 31 , 1 , 1 Deflcdchar 2 , 31 , 16 , Deflcdchar 3 , 31 , 1 , 1 Deflcdchar 4 , 17 , 17 , Deflcdchar 5 , 31 , 17 , Deflcdchar 6 , 31 , 17 , Deflcdchar 7 , 31 , 16 ,

Primer priprave znakov za izris BOLD

Deflcdchar 0 , 3 , 3 , 3 Deflcdchar 1 , 30 , 31 , 3 Deflcdchar 2 , 15 , 31 , Deflcdchar 3 , 30 , 31 , 3 Deflcdchar 4 , 27 , 27 , Deflcdchar 5 , 14 , 31 , Deflcdchar 6 , 14 , 31 , Deflcdchar 7 , 15 , 31 ,

Pri definiciji znakov lahko hkrati uporabimo samo eno izmed tabel (normalje potrebno izdelati program, ki bo te kombinacije znakov pozicioniral na pravo mesto LCD

Velike številke na prikazovalniku LCD-2x16 | Bascom AVR za začetnike

Spodnji sliki ponazarjata uporabo znakov in prikaz številk »normal« in »bold«

1 , 1 , 1 , 1 , 1 , 1 1 , 1 , 1 , 1 , 1 , 1 16 , 16 , 16 , 16 , 16 , 31

1 , 1 , 1 , 1 , 1 , 31 17 , 17 , 17 , 17 , 17 , 31 17 , 17 , 17 , 17 , 17 , 31 17 , 17 , 17 , 17 , 17 , 17

16 , 16 , 16 , 16 , 16 , 16

Primer priprave znakov za izris BOLD

3 , 3 , 3 , 3 , 3 , 3 3 , 3 , 3 , 3 , 3 , 3

24 , 24 , 24 , 24 , 31 , 15 3 , 3 , 3 , 3 , 31 , 30 27 , 27 , 27 , 27 , 31 , 14 27 , 27 , 27 , 27 , 31 , 14 27 , 27 , 27 , 27 , 27 , 27

24 , 24 , 24 , 24 , 24 , 24

Pri definiciji znakov lahko hkrati uporabimo samo eno izmed tabel (normal- bold). je potrebno izdelati program, ki bo te kombinacije znakov pozicioniral na pravo mesto LCD

1 ' | 1 ' T

31 ' C 31 ' C inv

31 ' U 31 ' O 17 ' n

16 ' L inv

3 ' | 3 ' T

15 ' C 30 ' C inv

14 ' U 14 ' O 27 ' n

24 ' L inv

bold). Ko so znaki izrisani je potrebno izdelati program, ki bo te kombinacije znakov pozicioniral na pravo mesto LCD

Page 119: Seminar Publikacija

Bascom AVR za začetnike | Velike številke na prikazovalniku LCD-2x16 119

prikazovalnika, da bo vidna uporabna informacija. Za prikaz številke je potrebno napisati podprogram, ki ga kličemo, ko želimo prikazati številko.

Opis programa:

St_stevilka je tipa Sring

Big_disp1: St_stevilka = Str(stevilka1) Dol = Len(st_stevilka) For I = 1 To Dol Z = Mid(st_stevilka , I , 1) Zn = Val(z) B1 = Lookup(zn , Dta1) B2 = Lookup(zn , Dta2) Locate 1 , I : Lcd Chr(b1) Locate 2 , I : Lcd Chr(b2) Next Locate 1 , I : Lcd Chr(223) Ix = I + 1 Locate 1 , Ix : Lcd Chr(2) Return

Dta1: ‘ prva vrstica

Data 6 , 0 , 1 , 1 , 4 , 7 , 2 , 1 , 5 , 6 , 6

Dta2: ‘ druga vrstica

Data 4 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 3 , 4

1. Številko spremenimo v tip »String«. Če imamo številko tipa byte, integer, word, spremenimo številko v string – znak

2. 3. Preverimo dolžino spremenljivke (koliko mestna je številka). To je pomembno, da se izriše

ustrezno število številk na prikazovalniku

4. Z zanko »For« določimo kako »daleč« se bo izpis zgodil. Ko imamo definirano dolžino številke (primer 2 znaka) z zanko »For- Next« izvedemo izpis na LCD prikazovalniku.

5. Izberemo vsak znak posebej. Za vsak znak posebej pogledamo v tabelo »Data1« in »Data2« - za prvo in drugo vrstico na isti poziciji, kjer se nahaja ustrezen znak za izris določene številke.

6. Pretvorimo znak v številko

7. Pogledamo v tabelo, kateri znak je to (od 0-9)

Page 120: Seminar Publikacija

120 Velike številke na prikazovalniku LCD-2x16 | Bascom AVR za začetnike

8. Narišemo znak v vsako vrstico posebej.

Za vsako številko je potrebno ponoviti podprogram in upoštevati tudi presledke. Prednost uporabe LCD alfanumeričnega prikazovalnika je v tem, da poleg velikih številk lahko prikažemo tudi ostale informacije v klasični velikosti.

Primer uporabe: Stevec.bas

Namerno je števcu na konec dodeljen simbol za stopinje Celzija. Tu gre za primer, če bi npr. merili temperaturo.

Velike številke je možno prikazati tudi na LCD prikazovalnikih z večimi vrsticami. Primer 4x20. Tu je problem podoben, le da za izris ene številke potrebujemo 3 polja horizontalno in 4 vertikalno po 8x5 pik. Program je temu primeru zahtevnejši. V nadaljevanju je prikazana določitev znakov za prikaz številk. Na osnovi definicije znakov si boste lahko izdelali svojo proceduro, ki bo omogočala izris številk v odvisnosti od potreb in vaših želja.

Primer izrisa znakov na prikazovalniku 20x4

Deflcdchar 0 , 32 , 32 , 32 , 1 , 3 , 7 , 15 , 31 ' Linv Deflcdchar 1 , 32 , 32 , 32 , 31 , 31 , 31 , 31 , 31 ' [] Deflcdchar 2 , 31 , 31 , 31 , 31 , 32 , 32 , 32 , 32 ' [] Deflcdchar 3 , 32 , 32 , 32 , 16 , 24 , 28 , 30 , 31 ' L

Deflcdchar 4 , 31 , 15 , 7 , 3 , 1 , 32 , 32 , 32 ' T1) Deflcdchar 5 , 31 , 30 , 28 , 24 , 16 , 32 , 32 , 32 ' T2) Deflcdchar 6 , 31 , 31 , 31 , 31 , 30 , 28 , 24 , 16 ' Zn1 Deflcdchar 7 , 16 , 24 , 28 , 30 , 31 , 31 , 31 , 31 ' Zn2

'prikaz LCD 1-5:

Page 121: Seminar Publikacija

Bascom AVR za začetnike | Velike številke na prikazovalniku LCD-2x16 121

Deflcdchar 4 , 31 , 15 , 7 , 3 , 32 , 32 , 32 , 32 ' T1

Deflcdchar 5 , 31 , 30 , 28 , 24 , 32 , 32 , 32 , 32 ' T2

Na spodnjih slikah je prikazano nekaj primerov uporabe velikih številk na alfanumeričnih LCD prikazovalnikih 20x4.

Page 122: Seminar Publikacija

122 Velike številke na prikazovalniku LCD-2x16 | Bascom AVR za začetnike

Poleg zankov lahko na LCD prikazovalnik narišemo tudi slike. Slike so velikost 8 x 8x5 pik. To nazorno prikazuje „Aapplication note” AN# 162 na strani MCS Electronic.

http://www.mcselec.com/index.php?option=com_content&task=view&id=231&Itemid=57

Prikaz je uporaben kot primer logotipa, ki se prikaže, ko vključimo napravo na napajanje.

Primer:

Možno je izdelati tudi animacijo, slik polj 8 x 8 x 5.

Uporaba LCD prikazovalnikov je cenejša in enostavnejša. Velikokrat je rešitev takšne uporabe elegantnejša od uporabe LED prikazovalnika, kje je za prikaz potreben multiplex oz. uporaba integriranih vezij (SAA1064, …). Poleg tega pa lahko na prikazovalnik 2x16 oz 4x 20 prikažemo še dodatne uporabne informacije. Mogoče bo ob tem kdo dobil nove ideje, kako posodobiti svojo napravo in jo s tem narediti uporabniku še prijaznejšo.

Page 123: Seminar Publikacija

Bascom AVR za začetnike | AVR-DOS datotečni sistem (AVR-DOS File System) 123

AVR-DOS datotečni sistem (AVR-DOS

File System)

Vilko Sustič

Obvezni uvod Datotečni sistem AVR-DOS je napisal Josef Franz Vögel. Ni dovoljeno uporabljati v komercialne namene. V takem slučaju potrebujete posebno licenco.

Sistem deluje z Compact – Flash Cards in je namenjen za vgrajene sisteme (embedded systems) za vodenje dnevnika podatkov. (for data logging).

Neobvezni uvod Če sestavljate napravo, ki naj bi trajno delovala, recimo upravljala vašo hišo, delavnico, varovala pred vlomi, vdorom vlage ali ognja, potem potrebujete voditi dnevnik dogajanja za morebitno kasnejšo analizo incidenta. Vedeti želite, kdaj se je pooblaščena oseba prijavila preko kode, ki jo je vtipkala v tipkovnico, kdaj je zmanjkalo električne energije, kdaj se je sprožilo alarmiranje in zaradi katerega senzorja in podobno.

Ali pa, če sestavljate napravo, ki vodi vstop v skupno parkirišče, kdaj je kdo parkiral in ali je uporabil več kot en parkirni prostor.

Moj projekt je bil vodenje sistema centralne kurjave, in poleg vodenja evidence posameznih temperature in vklopom in izklopov naprav (kotla, obtočnih črpalk, mešalnega ventila ) sem imel tudi prav neprijetno dogajanje, - nekajkrat dnevno se mi je mikroprocesor resetiral, in iz samega študija programa nisem mogel ugotoviti, zakaj.

V program sem dodal dodatno pisanje na MMC kartico s pomočjo AVR-DOS-a kjer sem beležil vsak vstop v kak podprogram in vsak izstop tako, da sem na začetku in koncu dodal odgovarjajoči Print ukaz, recimo tako:

Branjetemp: Print #2 , Hex(sph) ; Hex(spl) ; " E: Branjetemp" . . . . Print #2 , Hex(sph) ; Hex(spl) ; " R: Branjetemp T="; temperatura Return

Kot vidite (Hex(sph) ; Hex(spl)) sem želel celo vedeti, kako je z odložiščem, ali se mi odložišče kako pokvari, kajti sumil sem celo, da se tam kaj sfiži.

Page 124: Seminar Publikacija

124 AVR-DOS datotečni sistem (AVR-DOS File System) | Bascom AVR za začetnike

In v ta namen sem uporabil spominsko kartico, podobno, kot jo imajo fotoaparati, ima veliko kapaciteto, vanjo lahko pišem cel mesec, in ne bo polna. A je zato potrebno programje – AVR-DOS.

Na žalost pa, AVR-DOS potrebuje tudi precej RAM prostora, tako da je možno to uporabiti na mikroprocesorjih z dovolj RAM-a. Jaz sem uporabil ATMEGA32.

Povezava MMC kartice z mikroprocesorjem

Na levi je 10-pinski IDC Speedy konektor za povezavo z Minipin testnim okoljem, na desni je MMC-konektor s kartico.

MMC kartica se napaja s 3V. Torej če naš mikroprocesor dela na 5V, tedaj je potreben regulator napetosti na 3V, na primer GL1117. Tudi signali, ki prihajajo iz mikroprocesorja, (SS, MOSI, CLK) so z uporovnimi delilniki prilagojeni MMC kartici. Signal ki gre iz MMC kartice k mikroprocesorju (MISO) je že tako na treh voltih, in to naš mikroprocesor že bere kot 1.

Vsi ti štirje signali (MISO, MOSI, CLK in SS) vežemo na poljubne proste vhodno-izhodne pine mikroprocesorja, kasneje bomo AVR-DOS informirali, kako smo jih vezali.

Led dioda in tipka nista potrebni. Lahko na pa led dioda pokaže, kdaj je MMC kart v povezavi z AVR-DOSom, se pravi dela, in je ne smemo izvleči. Tipko pa za krmiljenje programa v mikroprocesorju, recimo, da pritisk na tipko zaključi delo z MMC kartico, (CLOSE FILE) led dioda ugasne in kartico lahko izvlečemo.

Page 125: Seminar Publikacija

Bascom AVR za začetnike | AVR-DOS datotečni sistem (AVR-DOS File System) 125

Povezava kartice z AVR-DOS programjem

Najprej moramo definirati, kam smo vezali kontakte MMC kartice. V pomoč nam je priložena datoteka Config_MMC.bas ki jo seveda lahko imenujete tudi kako drugače, a v vaš program jo potegnete z $include ukazom. Pred tem jo morate malo prirediti.

Datoteka ima dve sekciji, HW in SW, vedno se izbere le ena od obeh in to pri definiciji konstante:

Const Cmmc_soft = 1

Potem pa se z

#if Cmmc_soft = 0

Izbere ena ali druga sekcija. Testiral sem samo z software varianto . V tej sekciji definiramo, kam smo vezali katere kontakte mikroprocesorja:

#else ' Config here SPI pins, if not using HW SPI ' --------- Start of Section for Soft-SPI --------------------------------- ' Chip Select Pin => Pin 1 of MMC/SD Config Pina.0 = Output Mmc_cs Alias Porta.0 Set Mmc_cs ' MOSI - Pin => Pin 2 of MMC/SD Config Pina.1 = Output Set Pina.1 Mmc_portmosi Alias Porta Bmmc_mosi Alias 1 ' MISO - Pin => Pin 7 of MMC/SD Config Pina.3 = Input Mmc_portmiso Alias Pina Bmmc_miso Alias 3 ' SCK - Pin => Pin 1 of MMC/SD Config Pina.2 = Output Set Pina.2 Mmc_portsck Alias Porta Bmmc_sck Alias 2 ' --------- End of Section for Soft-SPI -----------------------------------

Debelo natiskane besede (Številke) je potrebno prirediti našemu vezju.

Kot vidite je PinA.0 je chip select, PinA.1 MOSI, PinA.2 SCK, PinA3. MISO, prav tako kot na shemi, če seveda vtaknemo adapter v tisti IDC10 konektor Minipina, ki odgovarja Portu 0 oziroma A.

Ko smo tako datoteko Config_MMC.bas priredili našem vezju in jo spravili na disk, gremo naprej. S sledečim $include ukazom potegnemo v program AVR-DOS

$include "Config_AVR-DOS.BAS"

Page 126: Seminar Publikacija

126 AVR-DOS datotečni sistem (AVR-DOS File System) | Bascom AVR za začetnike

In sedaj se mora avr-dos seznaniti z MMC kartico:

Gbdriveerror = Driveinit()

Spremenljivka Gbdriveerror je že definirana v prej vključenih .bas datotekah in je ni potrebno definirati. Moramo pa jo spraševati, ali je vse v redu:

If Gbdriveerror <> 0 Then Print "Napaka Config " ; Gbdriveerror

Kode napak dobite v Help-u.

In če je vse v redu, gremo lahko naprej z drugimi avr-dos ukazi, ki jih je kar nekaj.

INITFILESYSTEM , OPEN , CLOSE, FLUSH , PRINT, LINE INPUT, LOC, LOF , EOF , FREEFILE , FILEATTR , SEEK , BSAVE , BLOAD , KILL , DISKFREE , DISKSIZE , GET , PUT ,FILEDATE , FILETIME , FILEDATETIME , DIR , WRITE , INPUT , FILELEN

V tem prispevku bomo uporabili tisto nujno, kar je potrebno za to, da napišemo datoteko na MMC disk. To so Initfilesystem, open, close in print. Ostalo boste po vaših potrebah sami naštudirali iz help-a.

Initfilesystem je prva funkcija, ki jo moramo klicati, in tudi je lahko uspešna ali pa ne.

I = Initfilesystem(1) 'init file system If I <> 0 Then Print 'Init filesystem napaka', I End End if

Sedaj lahko odpremo datoteko na 'disku', MMC kartica se obnaša kot disk pod DOS sistemom.

Open "Data.txt" For Append As #9 'create file in MMC

Ime datoteke seveda lahko določimo po potrebi, tudi v samem programu, tako da sestavimo ime datotek v spremenljivki tipa String in potem je ime te spremenljivke prvi parameter ukaza Open, ime datoteke pa vsebina spremenljivke tipa String

Sedaj lahko najlaže s Print ukazi pišem kakršnokoli vsebino v odprto datoteko. Le nekaj je potrebno vedeti. Datoteka mora biti zaključena z Close ukazom. Če se mikroprocesor kakorkoli sfiži zaradi napake v programu, ali motnje od zunaj, datoteke ne bomo videli na MMC-u.

Ko program zaključi delo s Close ukazom, lahko vzamemo MMC kartico iz ležišča, jo vtaknemo v čitalnik MMC kartic, ki je vezan na PC in tam se MMC kartica odpre kot izmenljiv disk, na njemu poiščemo našo datoteko in jo odpremo z wordpad ali notepade windows programom, lahko tudi z word-om in si jo ogledamo.

Če smo recimo imeli mikroprocesor zadolžen za beleženje raznih meteoroloških veličin, temperature, vlažnost, smer in hitrost vetra, in podobno, lahko že s Print ukazi priredimo stavke datoteke tako, da jih beremo recimo z excel programom, ki potem iz teh veličin naredi grafe.. Možnosti je toliko, kolikor vam jih fantazija da.

V prilogi imate nekaj programov za vzorec.

Page 127: Seminar Publikacija

Bascom AVR za začetnike | AVR-DOS datotečni sistem (AVR-DOS File System) 127

Opis programa test6.bas

Poleg že omenjenih ukazov Driveinit, Initfilesystem, open, itd, vsebuje

Timer prekinitveni podprogram, ki se aktivira vsakih 500 msec in postavi zastavico – bit tiflag.

Timer1_isr: Load Timer1 , Timer1reload Incr Ticntr Set Tiflag Return

V zanki glavnega programa se sprašujemo, ali je ta zastavica postavljena, in če je, povečamo števec i in zapišemo in na MMC disk in pomožni izhod (Software uart)

Do If Tiflag = 1 Then Print #9 , I Print #2 , I Incr I Reset Tiflag End If

V zanki glavnega programa tudi poskrbimo za utripanje ledice:

Fazapisem = I.0

In za odtipavanje tipke:

Debounce Tipka , 0 , Tipkasr , Sr Config Tipka = Output

V slučaju pritiska na tipko, to zapišemo in postavimo števec i na vrednost, ki pomeni konec dela:

Tipkasr: Print #2 , "tipka konec" Print #9 , "tipka" I = 50 Return

Page 128: Seminar Publikacija

128 AVR-DOS datotečni sistem (AVR-DOS File System) | Bascom AVR za začetnike

Zaključek

Pisanje podatkov in beleženje dogodkov na MMC kartico se mi je izkazalo kot odličen pripomoček za sledenje dogajanja v programu, bodisi za iskanje napak v programu, bodisi za beleženje 'poslovnih' dogodkov recimo v alarmni napravi, kdaj je kdo aktiviral stražo alarmne naprave, kateri dogodek je sprožil alarm, in podobno. Na žalost pa je za to potreben procesor z veliko RAM-a, o čemer se lahko prepričate v poročilu (Report-u), ki vam ga generira Bascom pri vsakem prevajanju.

Page 129: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 129

Grafični LCD občutljiv na dotik

Jure Mikeln

Bascom-AVR je že stalnica v naši reviji Svet Elektronike. Kako tudi ne bi bil, če pa je simpatično in zmogljivo orodje za relativno malo denarja. Kakšne bombončke v sebi skriva Bascom tudi v uredništvu ugotavljamo z uporabo različnih elektronskih elementov. Zadnje čase so v Sloveniji zelo popularni grafični LCD-ji s t.i. »touchscreen« zasloni. Zadevo sem malce pregledal in nastal je članek o uporabi grafičnega LCD-ja.

O grafičnih LCD-jih ne kaže izgubljati besed. Večina nas ve, da po grafičnih LCD-jih lahko po mili volji rišemo svoje znake, prikazujemo slike in podobno. Hkrati pa lahko na njih prikazujemo tudi tekst, podobno kot na alfanumeričnih LCD-jih. O grafičnem LCD-ju smo v naši reviji prvič pisali daljnega leta 1999, v letu 2000 pa je mag. Mitrović objavil serijo člankov o krmilniku grafičnega LCD-ja z malim AT89C2051. Vendar so bili takrat grafični LCD-ji težko dobavljivi in tudi cenovno neugodni, Bascom takrat še ni ponujal toliko orodij, kot smo jih deležni danes.

V Sloveniji v maloprodaji lahko kupimo LGM12864B2−NSW−BBS in ustrezno folijo občutljivo na dotik. Grafični prikazovalnik ima resolucijo 128x64 pik in je enobarven. Moja verzija prikazovalnika sveti modro, vendar so tudi rumeno/zeleni popolnoma primerni in funkcionalno popolnoma enaki. Za krmiljenje prikazovalnika in občutljive folije bomo uporabili Atmelov mikrokontroler ATMega16. Grafični prikazovalnik ima 8 podatkovnih priključkov in še nekaj kontrolnih.

Vezava prikazovalnika in občutljive folije je prikazana na sliki 1.

Page 130: Seminar Publikacija

130 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

Slika 1: Vezava grafičnega prikazovalnika in občutljive folije

Folija občutljiva na dotik deluje na principu merjenja upornosti. Predstavljajte si 4 upore, vezane tako, kot vidite na sliki 1. Z mikrokontrolerjem analogne napetosti digitaliziramo in na podlagi te informacije točno vemo, na katerem delu zaslona smo pritisnili folijo.

Page 131: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 131

Slika 2: Folijo prilepimo na LCD

Folija je samostojna in ima na spodnji strani že predvideno lepilo, s katerim jo nalepimo na LCD. Preden jo nalepimo, je potrebno temeljito očistiti LCD zaslon kot tudi folijo. Za čiščenje ne uporabljajte alkohola ali drugih kemikalij, pač pa mehko krpico, ki jo rahlo navlažite z destilirano vodo. Folija se lepo prilega LCD-ju, kot vidite na sliki 2.

V uredništvu Svet Elektronike smo pripravlili adapter za MiniPin, s katerim boste enostavno priključili LCD s folijo na razširitvene konektorje MiniPin-a.

Bascom program

Zdaj je pa zadeva že resna, saj bomo pričeli s programiranjem. V kolikor ne boste uporabili adapterja za MiniPin si dobro poglejte shemo vezave na sliki 1. Na spletu obstaja veliko vezav LCD-ja in veliko teh shem je pomanjkljivo narisanih. To sem ugotovil po mučnih trenutkih, ko prikazovalnik ni in ni hotel prikazovati podatkov. Šele ko sem trimer za kontrast vezal tako, kot je prikazano na sliki 1, je displej na moje veliko olajšanje oživel! Pri foliji je potrebno dodati serijske upore, predvsem zaradi zaščite občutljive folije pred neželenimi kratkimi stiki. Izhod iz folije priključimo na A/D vhode mikrokontrolerja (PortA), podatkovne in kontrolne priključke grafičnega LCD-ja pa vežemo na PortB in PortC:

Celotno nastavitev displeja opravimo z eno vrstico Bascom programa

Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4 , Mode = 8

V tej vrstici Bascomu dopovemo, da gre za LCD s 128x64 pikami, nadalje definiramo izhode za podatke in kontrolo LCD-ja in to je vse. Imena priključkov na LCD-ju se sicer ne ujemajo z imeni v Bascomu, vendar naj nas to ne moti. Bascom pa nam nudi še več: v Bascomu je vgrajeno simpatično

Page 132: Seminar Publikacija

132 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

orodje, ki se imenuje Graphic Converter (najdemo ga v zavihku Tools). To orodje pretvori BMP datoteko, ki jo narišemo v slikarju (ali katerem drugem programu za risanje slik) v BFG datoteko. Sliko shranimo v BMP datoteko, nastavimo črno bele barve in velikost (jasno!) na 128x64. Z Bascomovim Graphic Converter orodjem sliko pretvorimo v BGF datoteko, ki jo kasneje vgradimo v Bascom program in jo kličemo podobno kot subrutino. Seveda lahko v program shranimo več slik in jih kličemo ter prikazujemo po potrebi.

Showpic 0 , 0 , Logose 'prikaži sliko z imenom Logose .... .... Logose: 'definicija se nahaja tukaj $bgf "logose.bgf"

Pri pretvorbi z Graphic Converter orodjem moramo paziti na dvoje: potrebno je nastaviti velikost displeja na 128x64 in odkljukati moramo SED series, kot prikazuje slika 3.

Slika 3: Nastavitve Graphic Converter orodja

Page 133: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 133

Dobro, zdaj znamo sliko iz BMP datoteke pretvoriti v BGF datoteko in jo vpisati v Bascom program. Kako pa prikazujemo tekst? Zadeva je malce bolj komplicirana in se vedno ne izide z našimi željami. Velikost besedila je lahko najmanj 6 pik, drugače je besedilo težko berljivo ali celo neberljivo. Položaj teksta nastavimo z ukazom:

'Lcdat 4 , 70 , "TEXT" 'SAMO VELIKE ČRKE!!

Kot vidite iz komentarja, lahko s tem ukazom uporabljamo samo velike črke. Sintaksa ukaza je sledeča:

LCDAT y , x , var [ , inv]

kjer vidimo, da prva številka pomeni Y, druga pa X koordinato na displeju. INV v oklepaju pomeni, da se prikazuje karakter invertirano, v kolikor namesto »inv« napišemo število 1. Moram povedati, da številke za Y ne ustrezajo položaju na prikazovalniku, kot bi pričakovali. Pravzaprav je logično, da je tako, saj smo definirali velikost fonta 8x8 (pik). V resnici je vsak karakter visok 7 pik. Vsak font se torej prične v večkratniku števila 8. Ker imamo na voljo 64 pik, lahko na LCD zapišemo 8 vrstic fontov z enim presledkom med vrsticami.

Krmiljenje na dotik občutljive folije

Bascom se je spet pokazal kot odlično orodje pri tej nalogi. Vse opravimo v subrutini Readtouch:

Readtouch: 'beri touch Config Porta.3 = Output 'pin1 (Y1) Config Porta.1 = Output ' PIN3 (Y2) Set Porta.1 'PIN2 (X1) Reset Porta.3 'PIN4 (X2) Config Pina.2 = Input 'postavi kot vhod Config Pina.0 = Input ' Waitms 20 'pocakaj, da se port stabilizira Y = Getadc(0) 'preberi vrednost A/D Y = 1024 - Y 'jo invertiraj Config Porta.2 = Output 'ponovi isto za X koordinato Config Porta.0 = Output ' Reset Porta.0 Set Porta.2 Config Pina.1 = Input Config Pina.3 = Input Waitms 20 X = Getadc(3) ' X = 1024 - X Return

V kratki subrutini vidimo, da za vsako os (x oziroma y) posebej postavimo logično stanje na priključke folije, nato pa beremo izhodno napetost, ki jo dobimo iz A/D pretvornika. Izhodi so pač neke številke, ki nam enoznačno pomenijo točno določen položaj na foliji. Pri tej foliji velja opozoriti, da najbolje dela, če na njo pritiskamo s trdim predmetom, kot npr. plastična (ne ostra!) paličica oziroma kakšnim drugim neostrim predmetom, ki ne poškoduje folije. Seveda lahko po foliji pritiskamo tudi s prsti, vendar boste opazili, da pritisk s prstom ni dovolj natančen tako glede pritiska na folijo kot tudi pritiska na točno določeno mesto – še posebej, če imate velike prste. Za določanje koordinat pritiska

Page 134: Seminar Publikacija

134 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

sem si naredil enostaven program, s katerim sem na prikazovalnik narisal koordinatno mrežo in izpisoval izmerjeno število mesta na foliji, kjer sem pritisnil. S pomočjo tega števila lahko s programom določamo naslednje korake. Za ta namen smo uporabili subrutino Whichkey, kjer določimo vrstico in stolpec v navidezni mreži na foliji:

Whichkey: 'sub, kjer ugotovimo, kje je bil pritisnjen touchscreen Select Case X ' razlicne vrednosti X Case 300 To 480 : Col = 10 ' 'Case 341 To 486 : Col = 20 ' 'Case 487 To 635 : Col = 30 'Case 636 To 774 : Col = 40 Case Else Col = 0 'ce ni nic pritisnjeno End Select ' vrednosti za Y koordinato Select Case Y 'razlicne vrednosti Y Case 200 To 250 : Row = 1 ' Case 260 To 290 : Row = 2 ' Case 300 To 330 : Row = 3 'ce ni nic pritisnjeno Case Else Row = 0 End Select Key = Col + Row 'sestejemo, da dobimo vrednost If Key > 0 Then 'Touchscreen Je Pritisnjen Keyarray(keylus) = Key 'ce zelimo debounce ' Incr Keylus ' If Keylus > 3 Then Keylus = 1 ' If Keyarray(1) = Keyarray(2) Then ' If Keyarray(2) = Keyarray(3) Then '3x preberemo 'Sound Speaker , 1 , 65000 'zapiskaj Keypressed = Key 'Timecount = 0 ' End If ' End If End If Return

Deli subrutine, ki so komentirani so namenjeni ugotavljanju debounce efekta. Če želite, ga uporabite, jaz ga pri testiranju nisem uporabil. V subrutini Whichkey je zanimiva uporaba ukaza Select case, kjer se vrednosti Case gibljejo v določenem razponu. To še kako pride prav pri foliji, saj nikoli ne pritisnemo na isto mesto, pač pa pritiskamo v nekem širšem območju.

Page 135: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 135

Zaključek

Grafični LCD prikazovalnik in folija občutljiva na dotik nista več nedosegljiva, pravzaprav ravno nasprotno: lepo in enostavno je delati z njima. Seveda je potrebno veliko dela, da nam bo naša aplikacija zaživela na polno, kar pomeni veliko narisanih predlog, ki jih izrisujemo na LCD-ju in jih v kombinaciji s folijo občutljivo na dotik ustrezno prikazujemo. Verjamem, da bo grafični LCD našel prostor v vaših naslednjih napravah.

Page 136: Seminar Publikacija

136 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

Pomagala, ki mi pomagajo pri delu z

mikroprocesorji Vilko Sustič

Moja praksa z mikroprocesorji sicer ni bogvekaj, a do nekaterih ugotovitev sem prišel, in sem zadovoljen z njimi. S tem papirjem jih dajem na razpolago tudi drugim, saj če vam bo všeč boste morda kopirali, v najslabšem slučaju boste zamahnili z roko in šli dalje.

3-pinski konektor

Prišel sem do zaključka, da na vsakem tiskanem vezju, ki ga krmili mikroprocesor, dodam še enega ali dva 3-pinska konektorja, ki jih sicer pri samem delovanju naprave ne potrebujem, ampak kar tako, 'za vsak slučaj'. Pri tem se držim vedno enakega razporeda kontaktov.

1- +5v 2- Nek prost vhodno/izhodni pin mikroprocesorja, ki ga sicer ne rabim 3- Masa

Tak konektor naknadno lahko uporabim na različne načine, nanj priklopim dodatno led diodo, tipko, lahko z njim krmilim naprej kako drugo napravo, kar v prvem konceptu nisem imel v mislih in podobno.

Na sledeči sliki je napravica z dvema takima konektorjema. Enostavno prost prostor na tiskanem vezju sem zapolnil s konektorejma in ju povezal s prostima pinoma mikroprocesorja.

Page 137: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 137

V programu predvideti programska pomagala za lažje odkrivanje napak.

Kdor dela, dela napake. Kdor programira, vgrajuje v program tudi napake. In potem jih skuša odpraviti. Če samo gledamo v čip mikroprocesorja lahko samo ugibamo, kaj se v njem dogaja, ugibanje pa nas samo počasi pripelje do resnice. Da pridemo do resnice prej, vgradimo v program ukaze, s katerimi nas program obvešča, kaj se v mikroprocesorju dogaja. Če ima naprava LCD ali kako drugo izhodno enoto na kateri se pojavljajo obvestila uporabniku, potem programiramo izpis takih testnih obvestil pač na tako napravo. Ko smo z delovanjem programa zadovoljni, tedaj taka pomožna obvestila odstranimo iz programa.

V Bascomu bi to naredili morda tako.

.. ' nekje definiramo konstano test ' const test = 1 . . ' potem vgradimo izpis pomožnih informacij If test = 1 then Lcd 'Stevec = ';stevec End if . ' ali pa #if test = 1 Lcd 'Stevec = ';stevec #endif

Seveda se da to narediti v kateremkoli programskem jeziku, le pravila so drugačna, a podobna. Ko smo s programom zadovoljni, enostavno spremenimo konstanto test v 0 in ponovno prevedemo program.

Naj še omenim razliko med Bascom ukazoma if in #if. Med tem, ko se preverjanje pogoja pri ukazu if dogaja v mikroprocesorju med izvajanjem programa, se preverjanje pogoja pri ukazi #if izvaja že v fazi prevajanja programa na PC-u, in tedaj se pogojna koda, če pogoj ni izpolnjen, sploh ne vgradi v mikroprocesorski program.

Kaj pa če naprava nima LCD-a ali neke druge primerne enote za komuniciranje z človekom? Tedaj pride prav prej omenjeni 3-pinski konektor kamor vklopimo kabel za povezavo s PC-jem. Tedaj bomo ekran PC-a uporabili kot enoto, kamor bo naš program pisal obvestila nam, ko bomo testirali program. Ko bomo s programom zadovoljni, potem bomo enostavno kabel izvlekli iz konektorja in napravo vgradili tja, kjer bo upravljala ali nadzirala tisto, za kar je namenjena.

V ta namen imata Bascom8051 in BascomAVR takoimenovani softverski uart, ki ga definiramo z

Open "com1.6:9600" For Output As #2

ali

Open "comd.2:9600,8,n,1" For Output As #2

Page 138: Seminar Publikacija

138 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

Detajle Open ukaza si oglejte v Bascom Help-u!

Seveda že iz definicije pina vidimo, da je prvi ukaz za 8051 mikroprocesor, kajti le on ima pin P1.6 drugi pa je za AVR mikroprocesor, ker le on ima PinD.2

Seveda je to pin, ki je vezan na kontakt 2 3-polnega pomožnega konektorja, ki sem ga na začetku omenil. Sedaj lahko v Bascomu AVR lepo pišemo testne pomožne informacije

Recimo

Print #2, "Stanje števca = "; Števec

In stanje števca se bo pojavilo v novi vrstici na ekranu PC-a, če bomo seveda pravilno povezali PC z našim 3-pinskim konektorjem, a o tem kasneje. No, v Bascom8051 ne moremo pisati tako, ker pozna za softwarski uart samo ukaze Put, ki prenašajo samo en bajt, ne pa tudi ukaze Print, kjer lahko pišemo cele vrstice. Pa si potem naredimo podprogram, ki nam bo nadomestil ukaz Print, vsebino, ki jo želimo napisati pa sestavimo v spremenljivki tipa niz.

Page 139: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 139

Recimo

Dim S As String * 16 'Področje za swuart ' splošne deloven spremenljivke programa Dim i as byte Dim j as byte Dim k as byte Open "com1.6:9600" For Output As #2 S = "Stevec = " + Str(Stevec) Gosub Suartprint

Podprogram Suartprint pa bo bajt po bajt spremenljivke S prenesel na softwareuart:

Suartprint: ' Suartprint push {i} push {j} push {k} I = Len(s) If I > 16 Then I = 16 End If ' Pišem niz: For J = 1 To I K = J + 1 Put #2 , X(k) Next ' in zaključim z CR/NL Put #2 , 10 Put #2 , 13 pop {k} pop {j} pop {i} Waitms 10 Return

Podprogram najprej spravi vsebino delovnih spremenljivk i,j in k na odložišče (stack), da ne bi s spremembo vsebine teh spremenljivk pokvaril delovanje glavnega programa, saj le ta ima lahko v njih važno vsebino. Potem ugotavlja, koliko znakov je potrebno oddati, potem v for zanki te znake odda, in potem odda še dva znaka, ki jih PC potem obravnava kot konec vrstice.

Pri Bascom8051 imamo še eno neprijazno zadevo: ti mikroprocesorji imajo zelo malo delovnega pomnilnika RAMa, in z

Dim S as string * 16 ga morda preveč obremenimo, tedaj, je potrebno pač manjše dimenzije niza, in paziti pri sestavljanju niza na prekoračitev in pisati (klicati podprogram) pogosteje.

Page 140: Seminar Publikacija

140 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

Seveda še nismo končali. Sedaj so ti znaki šele na kontaktu 2 3-pinskega konektorja. Kako pridejo na ekran PC-a? Najprej je potrebno 3-pinski konektor z neko vmesno napravico (interface, vmesnik) povezati s Serial Portom PC-a ali kot rečemo z Com portom. V ta namen sem si izdelal napravico po tej shemi:

(priznam shemo si nisem izmislil sam, temveč sem jo našel na internetu na http://chaokhun.kmitl.ac.th/~kswichit/Rs232_web/Rs232.html )

Na levi je 9-pinski DB9 ženski konektor, ki paše na konektor PC-a. Na desni priklopimo ta vmesnik na 3-pinski konektor naše naprave, kjer s pomočjo softare-uarta pišemo serijsko podatke, in jih dajemo na fotodiodo optospojke. Kot vidite je levi del vmesnika popolnoma galvansko ločen od desnega, in tako je PC zaščiten pred električnimi udarci, ki bi ga lahko udarili zaradi kake električne napake iz naše naprave. Levi del vmesnika je napajan iz RTS kontakta 9-polnega konektorja, in tranzistor optospojke prenaša optični signal v električni na RXD kontakt COM porta.

Page 141: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 141

Napravico sem naredil na testni ploščici (proto board-u) in izgleda tako:

Lepo se vidi ploski kabel, ki se konča s 3-polno vtičnico za omenjeni 3-polni konektor, čeprav potrebujemo samo dve žili, +5V in pin.

Sedaj je potrebno le še to informacijo prenesti na ekran. To naredi na PC-u program, ki mu rečemo terminal emulator. Takih programov je več, a po mojih izkušnjah je najboljši sad domače slovenske pameti, naredil ga je in dal na splošno brezplačno uporabo v osebne namene gospod Vlado Brajer, dobite ga pa na spletni strani http://braypp.googlepages.com/terminal

Page 142: Seminar Publikacija

142 Grafični LCD občutljiv na dotik | Bascom AVR za začetnike

Ko instalirate in poženete program, boste dobili približno tako sliko:

In sedaj važno: potem ko ste nastavili hitrost na 9600 (kot pri open ukazu v Bascomu ), potem, ko ste izbrali COMport (PC jih lahko ima več), in ko ste kliknili na Connect, morate zagotoviti vmesniku napajanje preko RTS signala tako, da kliknete na RTS tipko na desnem robu okna. In to je to.

To seveda vse lepo deluje, če testiramo napravo na naši delovni mizi, kjer imamo tudi osebni računalnik z ekranom. Pokaže pa se tudi potrebna, da iščemo napake v programu tudi kasneje, ko je stvar že instalirana nekje recimo v kurilnici, ali na podstrešju, kjer ne moremo z osebnim računalnikom zraven.

Page 143: Seminar Publikacija

Bascom AVR za začetnike | Grafični LCD občutljiv na dotik 143

V ta namen sem si naredil posebno mikroprocesorsko ploščico po sledeči shemi:

(Tudi ta se napaja kar iz napetosti 3-polnega konektorja)

Kot je videti, imamo samo mikroprocesor, ki daje na LCD podatke, ki jih prebere iz pina 2 3-polnega konektorja. Seveda stvar še daleč ni tako udobna, kot ekran PC-a, saj imamo le dve kratki vrstici podatkov na LCD-u. Vsaka nova vrstica se pojavi na LCD-u spodaj, stara vrstica se premakne navzgor. Morda bi bilo smiselno uporabiti v ta namen kak močnejši avr mikroprocesor in LCD z več vrsticami, a nekaj moram pustiti tudi vam, da imate veselje naprej delati, kaj ne?

Page 144: Seminar Publikacija

144 Internetni naslovi | Bascom AVR za začetnike

Internetni naslovi

Splošni linki

http://www.atmel.com/products/avr/default.asp Originalna stran proizvajalca ATMEL, kjer lahko najdemo datasheete vseh AVRjev, program za programiranje (AVR Studio) itd.

http://www.mcselec.com/ Originalna stran Bascom AVR / 8051

http://www.avrfreaks.net/ Stran za AVR navdušence!

http://www.avrprojects.net/ Stran z zanimivimi projekti, primerna za začetnike!

Spletni forumi

http://www.elektronik.si/phpBB2/index.php Verjetno največji slovenski forum, namenjen vsemu povezanim z elektroniko.

http://www.svet-el.si/phpBB2/index.php Forum revije Svet elektronike; še en slovenski elektro forum

http://www.elektron.si/forum/ Slovenski elektro forum v nastajanju (na bazi elektro-n foruma)

http://www.mcselec.com/index2.php?option=com_forum&Itemid=59

Forum uporabnikov Bascoma (v sklopu strani www.mcselec.com)

Spletne trgovine

http://trgovina.svet-el.si/ Svet elektronike; literatura, programi, elementi (pretežno za projekte, objavljene v SE), mikroprocesorji, KIT kompleti

http://www.hte.si/ HTE (Ljubljana, Maribor, Celje); elementi

http://www.ic-elect.si/ http://www.ic-elect.si/

http://www.just.si/ Just; orodje, merilna oprema, elementi

Page 145: Seminar Publikacija

Bascom AVR za začetnike | Informacije o pogostih kontrolerjih 145

Informacije o pogostih kontrolerjih

Razpored pinov, posebne funkcije, velikost FLASH, SRAM, EEPROM pomnilnika in še mnogo drugih, uporabnih informacij iščemo v proizvajalčevem tehničnem katalogu (morda prevod ni najustreznejši – če rečem datasheet boste razumeli ...). Sledenjega najlažje dobimo kar na domači strani proizvajalca (torej www.atmel.com). Da pa na bo potrebno za vsako vezavo gledati omenjenih publikacij, smo v tej publikaciji izbrali nekaj najpogosteje uporabljenih AVR mikrokontrolerjev, od najšibkejših do najzmogljivejših.

AT Tiny 2313 Flash: 2k SRAM: 128 EEPROM: 128 Pinov: 20 Drugo: 2xINT, 1xUART* *4MHz notranji oscilator ni točen, za UART komunikacijo uporabi 8MHz int. oscilator ali kristal.

AT Tiny 45 Flash: 4k SRAM: 256 EEPROM: Pinov: 8 Drugo: 3xADC, 3x INT

AT Mega 8515 Flash: 8k SRAM: 512 EEPROM: 512 Pinov: 40 Drugo: 2x INT, 1x UART

Page 146: Seminar Publikacija

146 Informacije o pogostih kontrolerjih | Bascom AVR za začetnike

AT Mega 8 Flash: 8k SRAM: 1024 EEPROM: 512 Pinov: 28 Drugo: 6xADC, 2x INT, 1x UART

AT Mega 16 <Flash: 16k SRAM: 1024 EEPROM: 512 Pinov: 40 Drugo: 8xADC, 1xUART, 2xINT

AT Mega 128 Flash: 128k SRAM: 4096 EEPROM: 4096 Pinov: 64 Drugo: 8xADC, 8xINT, 2xUART

AT Mega 2560 Flash: 256k SRAM: 8192 EEPROM: 4096 Pinov: 100 Drugo: 16xADC, 8xINT, 4xUART

Page 147: Seminar Publikacija

Bascom AVR za začetnike | O publikaciji 147

O publikaciji

Publikacija: Bascom AVR za vse

Avtorji: Vilko Sustič, Gregor Maček, Jure Mikeln, Matjaž Skubic, Bojan Kovač

Uredil: Gregor Maček

Natisnil: Lado Železnik

Naklada: 30 izvodov Zgodovina: 1.3.2008 Izid publikacije (seminar Bascom) 10.7.2008 Dopolnitev (Pomagala, ki mi pomagajo pri delu z mikroprocesorji) 21.3.2009 Dopolnitev (Nadaljevalni seminar Bascom)

© Dovoljeno kopiranje publikacije ali dela le-te v elektronski ali papirni obliki,

pri čemer prosim navedite tudi vir in avtorje!

Page 148: Seminar Publikacija

148 Kazalo | Bascom AVR za začetnike

Kazalo

Vsebina priročnika Bascom AVR

Uvod ........................................................................................................................................................ 3

Uvod v publikacijo ............................................................................................................................... 3

AVR mikrokontrolerji ........................................................................................................................... 3

Program Bascom AVR .............................................................................................................................. 6

Predstavitev razvojnega okolja Bascom-AVR ...................................................................................... 6

Prvi program ........................................................................................................................................ 8

Simulator v Bascom-u .......................................................................................................................... 9

Simulator in UART ......................................................................................................................... 10

Programiranje AVR mikrokontrolerjev .................................................................................................. 11

Opis MiniPin razvojnega orodja in programiranje ............................................................................ 11

Fuse in Lock biti ..................................................................................................................................... 16

Priklop periferije na mikrokontroler...................................................................................................... 20

Vezava tipke ...................................................................................................................................... 20

Vezava LED diode .............................................................................................................................. 21

Vezava PFET in NFET tranzistorja ...................................................................................................... 22

Vezava LDC prikazovalnika ................................................................................................................ 23

Krmiljenje DC motorja ....................................................................................................................... 24

Uporaba izhodov ................................................................................................................................... 25

Direktno naslavljanje ......................................................................................................................... 26

Uporaba vhodov .................................................................................................................................... 27

Branje vhoda z ukazom IF-Then ........................................................................................................ 27

Branje vhoda z ukazom DEBOUNCE .................................................................................................. 28

Uporaba tekstovnega LCD zaslona ........................................................................................................ 29

Konfiguracija zaslona ......................................................................................................................... 29

Izpis na zaslon – ukaz LCD ................................................................................................................. 29

Pozicioniranje teksta na zaslon – ukaz LOCATE ................................................................................. 30

Premik teksta po zaslonu v levo ali desno – ukaz SHIFTLCD ............................................................. 31

Kreiranje lastnih znakov .................................................................................................................... 32

Inicializacija zaslona med delovanjem programa – ukaz INITLCD ..................................................... 32

Komunikacija – UART pošiljanje ............................................................................................................ 33

Page 149: Seminar Publikacija

Bascom AVR za začetnike | Kazalo 149

RS-232 protokol ................................................................................................................................. 33

Komunikacijske nastavitve v Bascomu .............................................................................................. 34

Pošiljanje podatkov – PRINT .............................................................................................................. 35

Pošiljanje podatkov v binarni in šesdesetiški obliki........................................................................... 36

Komunikacija – UART sprejemanje........................................................................................................ 37

Sprejem podatkov z ukazoma INKEY, WAITKEY ................................................................................ 37

Sprejem podatkov z ukazom INPUT .................................................................................................. 37

Multipleksiranje – 7 segmentni LED ...................................................................................................... 38

Prekinitve (Interrupti) ............................................................................................................................ 46

1-wire protokol in termometer DS1820 ................................................................................................ 48

Stack – odložišče .................................................................................................................................... 51

EEPROM – pisanje in branje .................................................................................................................. 60

Zapisovanje v EEPROM in branje le-tega preko ERAM spremenljivk ................................................ 61

Zapisovanje v EEPROM in branje le-tega preko ukazov READEEPROM in WRITEEEPROM ............... 62

$eeprom ........................................................................................................................................ 62

Readeeprom .................................................................................................................................. 62

Writeeeprom ................................................................................................................................. 62

433 MHz komunikacija preko RFM12B modulov .................................................................................. 63

Splošen opis ...................................................................................................................................... 63

Tipični primeri uporabe ..................................................................................................................... 64

Glavne značilnosti oddajnika ............................................................................................................. 64

Glavne značilnosti sprejemnika ......................................................................................................... 64

Opis vezja........................................................................................................................................... 65

Opis oddajnega programa ................................................................................................................. 66

Opis sprejemnega programa ............................................................................................................. 68

Komunikacija preko LAN omrežja (modul MOXA NE-4100 serija) ........................................................ 70

Spletni vmesnik modula - nastavljanje .............................................................................................. 72

Testiranje TCP/IP povezave med računalnikom in modulom ........................................................... 75

Polja spremenljivk ................................................................................................................................. 76

GSM modem Falcom A2 (A2D, Wavecom) ............................................................................................ 80

Opis vmesnikov za Modem Falcom: .................................................................................................. 81

Interface A - Napajanje sistema .................................................................................................... 81

Interface B – Seijski vmesnik V24 RS232 ....................................................................................... 81

Interface C – RJ45 Vmesnik za Audio in opcijsko RS232 ................................................................ 82

Interface D – GSM antena ............................................................................................................. 82

Reset tipka ......................................................................................................................................... 83

Tehnični podatki modema Falcom .................................................................................................... 84

Page 150: Seminar Publikacija

150 Kazalo | Bascom AVR za začetnike

Kratice ................................................................................................................................................ 84

Priklop modema ................................................................................................................................ 84

AT UKAZI ............................................................................................................................................ 85

GSM data services ............................................................................................................................. 87

MiniPin in SMS ....................................................................................................................................... 88

Uvod .................................................................................................................................................. 88

Priklop Falcom modema na MiniPin ................................................................................................. 89

Pošiljanje SMS sporočila .................................................................................................................... 92

Sprejem SMS sporočila ...................................................................................................................... 93

Kabel tester ........................................................................................................................................... 94

Uvod .................................................................................................................................................. 94

Mikroprocesorska enota ................................................................................................................... 95

Opis delovanja ................................................................................................................................... 97

Delovanje izhodov testerja ................................................................................................................ 99

Tiskano vezje in montažna shema glavne enote ........................................................................... 99

Oddaljena enota z LED diodami ...................................................................................................... 100

Tiskano vezje im montažna shema oddaljene enote .................................................................. 101

Vmesnik RS232 ................................................................................................................................ 102

Delovanje ..................................................................................................................................... 102

Tiskano vezje RS232 adapterja .................................................................................................... 103

Kabel za testiranje kratkega stika .................................................................................................... 103

Priključni konektor ....................................................................................................................... 104

Pregled povezav posameznih kablov .............................................................................................. 104

UTP kabel ..................................................................................................................................... 104

UTP Cross kabel ........................................................................................................................... 105

UTP 10 ......................................................................................................................................... 105

ISDN ............................................................................................................................................. 105

Telefon ......................................................................................................................................... 106

Poraba in napajanje vezja ................................................................................................................ 106

Shema celotnega vezja .................................................................................................................... 108

Seznam materiala ............................................................................................................................ 109

Opis programa ................................................................................................................................. 110

Testiranje seriskega porta RS 232 ............................................................................................... 112

Piezzo ........................................................................................................................................... 113

Ohišje ............................................................................................................................................... 114

Velike številke na prikazovalniku LCD-2x16 ........................................................................................ 116

AVR-DOS datotečni sistem (AVR-DOS File System) .......................................................................... 123

Page 151: Seminar Publikacija

Bascom AVR za začetnike | Kazalo 151

Obvezni uvod ................................................................................................................................... 123

Neobvezni uvod ............................................................................................................................... 123

Povezava MMC kartice z mikroprocesorjem ................................................................................... 124

Povezava kartice z AVR-DOS programjem ....................................................................................... 125

Zaključek .......................................................................................................................................... 128

Grafični LCD občutljiv na dotik ............................................................................................................ 129

Bascom program ............................................................................................................................. 131

Krmiljenje na dotik občutljive folije ................................................................................................. 133

Zaključek .......................................................................................................................................... 135

Pomagala, ki mi pomagajo pri delu z mikroprocesorji ........................................................................ 136

3-pinski konektor ............................................................................................................................. 136

V programu predvideti programska pomagala za lažje odkrivanje napak. ..................................... 137

Internetni naslovi ................................................................................................................................ 144

Splošni linki ...................................................................................................................................... 144

Spletni forumi .................................................................................................................................. 144

Spletne trgovine .............................................................................................................................. 144

Informacije o pogostih kontrolerjih .................................................................................................... 145

AT Tiny 2313 ................................................................................................................................... 145

AT Tiny 45 ........................................................................................................................................ 145

AT Mega 8515 .................................................................................................................................. 145

AT Mega 8 ........................................................................................................................................ 146

AT Mega 16 ...................................................................................................................................... 146

AT Mega 128 .................................................................................................................................... 146

AT Mega 2560 .................................................................................................................................. 146

O publikaciji ......................................................................................................................................... 147

Kazalo .................................................................................................................................................. 148

Page 152: Seminar Publikacija

152 Kazalo | Bascom AVR za začetnike

Gregor MAČEK, Vilko SUSTIČ,

Jure MIKELN, Matjaž SKUBIC, Bojan KOVAČ

Bascom AVR za začetnike