Professional Documents
Culture Documents
Dopolnjena izdaja!
Gregor MAEK, Vilko SUSTI, Jure MIKELN, Matja SKUBIC, Bojan KOVA Bascom AVR za zaetnike
Uvod
Jure Mikeln
Uvod v publikacijo
Prie smo silnemu napredku na vseh podrojih tehninih znanosti. Novodobne tehnine znanosti se imajo temu napredku zahvaliti predvsem razvoju procesorske moi osebnih raunalnikov, kar je omogoilo 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 tehninem podroju. 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 zameajmo izrazov: v PC-ju ne deluje mikrokontroler, pa pa zmogljiv procesor (64-bitni), ki signale po vodilu poilja 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 teaju, ki je pred vami, se z ARM mikrokontrolerji ne bomo spoznavali, pa pa smo pripravili osnovne informacije, ki naj bi jih poznal zaetnik - programer, da bi lahko suvereno zael programirati mikrokontrolerje druine AVR. Taken mikrokontroler bo brez teav poganjal motorje, vklapljal ter izklapljal releje, sprejemal signale z razlinih senzorjev in tipk, signale obdeloval ter s pomojo LCDprikazovalnika prikazoval podatke in sodeloval z drugimi mikrokontrolerji ter tako predstavljal mikrokontrolerski sistem tudi za veje zahteve. Po potrebi bo alarmiral oskrbovalce sistema bodisi zvono, bodisi preko mobilnih telefonov ali radijskih postaj.
AVR mikrokontrolerji
AVR mikrokontrolerji so eni izmed popularnih mikrokontrolerjev, ki so dobavljivi e priblino 10 let. Mikrokontroler si predstavljajmo kot rno katlo, ki ima vhodne in izhodne prikljuke. Mikrokontroler brez programa je mrtev in kot tak res neuporaben. Zaivi le, ko se v njem vpisani program prine izvajati. Jasno pa je, da je za to potrebna tudi napajalna napetost. Mikrokontrolerje dandanes uporabljamo v praktino vsaki napravi, bodisi da je to igraa 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 32bitni, redko pa e kakni 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 pomojo programatorja naloimo na program, ki ga v zaporednih korakih izvaja ALU. V/I porti so veinoma dvosmerni s tem, da moramo s programom definirati ali bo posamezni pin vhodni ali izhodni. Mikrokontroler za svoje delovanje potrebuje napajalno napetost in veinoma tudi kvarni kristal oziroma keramini resonator, ki ALU-ju daje t.i. Bascom AVR za zaetnike | Uvod 3
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 doloenih primerih pa tudi kvarni kristal ali resonator nista potrebna, saj imajo AVR mikrokontrolerji vgrajen t.i. RC oscilator, ki daje takt ALU-ju in s tem omogoa delovanje mikrokontrolerja. Izbor med RC oscilatorjem ali zunanjim kvarnim 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 naim programom.
Program v mikrokontrolerju se odvija glede na ukaze t.i. strojne kode, ki ALU-ju doloa, kaj bo naredila. Ker ALU deluje z binarno matematiko je ukaz v strojni kodi sestavljen iz niel in enic pa v binarni kodi. V zaetkih mikrokontrolerjev so programerji za programiranje uporabljali strojno kodo, vendar so kmalu ugotovili, da je to izredno nepraktino. Zato so prieli uporabljati zbirnik (v tuji literaturi se uporablja izraz assembler), dandanes pa vedno bolj posegamo po vijih programerskih jezikih, kot so C, razline 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 viji programski jeziki) svoje prednosti in slabosti, vendar trdno stojim za staliem, da je Bascom idealno programsko orodje za zaetnike 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!
Preden bomo zaeli s programiranjem, se podrobno spoznajmo e z izrazi bit in byte. Oba izraza smo sreali 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 prinemo s programiranjem. Za zaetek si zapomnimo enega najpogostejih ukazov: Do Loop. Ta ukaz pomeni, da se program, ki je napisan med Do in Loop teoretino odvija v neskonnost. Prine 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 nelogino, vendar vam bom pokazal, da se veina programov odvija v Do Loop zanki, izjemno redki programski primeri so narejeni brez Do Loop zanke.
Prvi program
Prvi program bo izjemno enostaven. Na mikrokontroler bomo prikljuili LED-ice (enostavno povedano so to polprevodnike luke, ki se v primerjavi z lukami z areo nitko izjemno malo grejejo in so tudi fizino 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 slui za ustrezno resetiranje mikrokontrolerja, resonator slui generiranju takta, ki ga za svoje delovanje potrebuje ALU, ostali upori sluijo omejitvi toka, ki tee skozi LED-ice. Vezju je e dodan konektor za programiranje mikrokontrolerja in s tem je osnovni opis vezja zakljuen. 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 doloen port vhodni ali izhodni. V naem 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 prikljuimo na kateri koli prosti port mikrokontrolerja in to definiramo v programu kar je s stalia izdelave vezja zelo praktino. Pri zahtevnejih projektih je namre teje 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 poaka 1 sekundo. Enostaven program bo povzroil, da bo LEDica utripala v 1 sekundnem taktu.
Simulator v Bascom-u
V tem delu seminarja vam bomo prikazali uporabo Simulatorja v Bascomu. Bascom ima vgrajen softverski simulator, ki nam pomaga pri razhroevanju programa. Simulator je zgolj enostaven pripomoek in ne 100% zanesljivo orodje, saj v simulatorju ne moremo dobro simulirati prekinitev, asovnih zank in drugih zahtevnejih 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 sproimo na dva naina: tekoe ali po korakih. e izberemo tekoe izvajanje progama bomo izredno teko spremljali, kaj se dogaja s programom, saj se bo program odvijal zelo hitro in tako bo spremljanje praktino nemogoe. 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 doloene sprejemljivke kliknemo v okno Variables in rono vpiemo ime sprejemljivke oziroma jo izberemo iz padajoega menija. Potrdimo z Enter in v oknu Value vpiemo vrednost spremenljivke ter potrdimo z Enter. Nato lahko spet izvajamo program v simulatorju po korakih. V kolikor pa se izkae, da je izvajanje programa dolgo, lahko izberemo tekoe izvajanje programa. V tem primeru si v oknu s programom oznaimo t.i. Break toke, kjer se izvajanje simulatorja ustavi. break toke postavimo tako, da z desnim gumbom mike kliknemo pri odseku programa, kjer elimo imeti Break toko in kliknemo Toggle Break point. Na isti nain Break toko tudi odstranimo.
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 logina 1 vklopi LEDico. Ker vemo, da to ne ustreza realnim mikrokontrolerjem je spodaj levo okno, kjer odkljukamo Invert in s tem prepreimo to obnaanje simulatorja.
10
MiniPin napajamo z enosmerno ali izmenino 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 poloaj AVR in e smo pripravljeni, da poveemo MiniPin s programatorjem in sprogramiramo mikrokontroler. Bascom AVR za zaetnike | Programiranje AVR mikrokontrolerjev 11
Za programator lahko uporabimo Proggy programator ali pa si sami naredimo programator po nartu, ki ga vidite na sliki 4.
Tako Proggy kot Sample programator poveemo na MiniPin na konektor K6. V Bascomu je potrebno nastaviti (Options/Programmer) izbrani programator, kot vidite na sliki 5.
12
Nastavitev programatorja
V nastavitvah LPT-address morate nastaviti ustrezen naslov, ki ga najdete v BIOS nastavitvah. V koliko boste uporabljali Proggy svetujem, da najprej naloite program AVR Studio, kjer boste nastavili Tools/ProgramAVR/Connect in nastavili program, kot kae spodnja slika:
13
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 konnico HEX.+ Podobno doseemo, 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.
14
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 zaetnikih povzroiti kar nekaj teav. 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.
15
Iz Bascom-AVR programa ni mono nastavljati tako imenovane Fuse in Lock bitov. Zato za ta namen uporabimo AVR Studio. Tipini izgled okna, kjer nastavljamo Fuse bite vidimo na sliki:
16
Ko odpremo AVR Studio kliknemo na zavihek Fuses. V tem oknu lahko nastavljamo sledee: Bootloader (BOOTSZ in BOOTRST) Onemogoanje reset-a (RSTDISBL) Omogoanje debugWIRE (DWEN) Omogoanje Watch Dog timerja (WDTON) Prepreitev brisanja EEPROM-a med programiranjem mikrokontrolerja (EESAVE) Vklop Brown-out detektorja in nastavitev BOD napetosti (BODLEVEL) Deljenje internega oscilatorja z 8 (CKDIV8) Omogoanje Clock signala (CKOUT) Izbira vira takta (SUT_CKSEL)
Najvekrat uporabljamo zadnji Fuse bit, kjer spreminjamo vir taktne ure za mikrokontroler. Izbiramo lahko med velikim tevilom monih virov takta. Pri izbiri moramo biti IZJEMNO previdni, da mikrokontrolerja po nesrei 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.
17
Lock biti so namenjeni zaklepanju mikrokontrolerja pred nepooblaenim branjem programa iz mikrokontrolerja tako preko Boot loaderja kot tudi preko paralelno/serijskega naina branja. Po navadi uporabimo LB bit, kjer izberemo monost: Further programming and verification disabled.
18
19
Vezava tipke
Tipko lahko veemo 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 spuene 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 druine 8051. Priklop na druino AVR je enak.
20
Tudi LED diodo lahko veemo proti masi ali proti VCC (kot na zgornji sliki); v slednjem sluaju bo LED prigana, ko bo izhod na logini 0, ugasnjena pa, ko bo izhod na logini 1. e pa veemo LED med izhod in maso, pa je LED prigana, ko je izhod na logini 1, ugasnjena pa, ko je izhod na logini 0. AVR druina mikrokontrolerjev je sposobna na izhodu direktno poganjati najve 20mA toka, ne glede na to ali veemo breme proti masi ali proti VCC. Kontrolerji prejnje, 8051 druine, pa so lahko taken 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 uniimo kontroler in/ali LED diodo.
*Opomba: Na sliki je prikazan procesor z druine 8051. Priklop na druino AVR je enak.
21
22
*Opomba: Na sliki je prikazan procesor z druine 8051. Priklop na druino AVR je enak.
23
Krmiljenje DC motorja
DC motor lahko krmilimo zgolj preko tranzistorja (vklop/izklop), e pa elimo nadzorovati tudi smer vrtenja pa ga najlaje krmilimo preko namenskega vezja L272M. Omenjeno integrirno vezje omogoa krmiljenje izhoda z maksimalnim tokom 1A, pred preobremenitvijo pa je zaiten tudi s posebnim vezjem, ki izklopi izhod, e se vezje pregreje.
*Opomba: Na sliki je prikazan procesor z druine 8051. Priklop na druino AVR je enak.
24
Uporaba izhodov
Gregor Maek
Mikrokontrolerji imajo razlino tevilo vhodov in izhodov. Navadno je v portu, ki ga oznaujemo 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 loginega vhoda ali izhoda (0/1), lahko pa taisti pin omogoa 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 piemo 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:
25
'Lahko nastavimo cel register kot output 'Lahko pa tudi zgolj posamezni pin iz registra
Z ukazom SET postavimo izhod na 1 (izhod na logini 1; +5V), z RESET pa na 0 (izhod na logini 0 GND). Naredimo enostavno zanko, kjer bo LED dioda na portu A.0 utripala:
Do Set Porta.0 Wait 1 Reset Porta.0 Wait 1 Loop 'Zaetek zanke 'Vklopim LED 'Poakam sekundo (ukaz wait; lahko tudi waitms ali waitus, max. vrednost pri posameznem ukazu je 255!) 'Izklopim LED 'Poakam sekundo 'Se vrnem na zaetek zanke
Direktno naslavljanje
V doloenih primerih je nastavljanje porta po posameznih pinih zamudno. In tudi nepotrebno... Uporabimo lahko namre ukaz za direktno naslavljanje &B:
Do Porta = Wait Porta = Wait Loop &B00000000 1 &B11111111 1 'Biti od 0-7 v portu A so izklopljeni 'Biti od 0-7 v portu A so vklopljeni
Sedaj lahko naredimo enostavni light-show s poljubnim zaporedjem utripanja in poljubno hitrostjo, na primer:
Do Porta = &B01010101 Waitms 250 Waitms 250 Porta = &B10101010 Waitms 250 Waitms 250 Loop 'Maksimalna vrednost za wait/waitms-/waitus je 255 'zato za as 500ms uporabimo 2 ukaza waitms 250
26
Uporaba vhodov
Gregor Maek
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 Config Portb.0 = Input 'Lahko nastavimo cel port kot output 'Lahko pa tudi zgolj posamezni pin iz porta
Slabost omenjene reitve je, da tipka lahko pri pritisku/spustu odskakuje in v aplikacijah, kjer tejemo tevilo pritiskov itd. lahko dobimo napaen rezultat. Problem lahko reimo tako, da po prvem prebiranju tipke poakamo nekaj asa in nato e enkrat preverimo stanje tipke in ele e obe stanji sovpadata, izvrimo dejanje.
Do If Pinb.0 = 1 Then Waitms 50 If Pinb.0 = 1 Then . . . End If End If Loop 'malo poakamo 'ponovno preverimo stanje in e je tipka e vedno pritisnjena... 'naredimo eljeno operacijo
27
Main: 'Kazalec glavne zanke Do 'Zanka za preverjanje pritisnjene tipke Debounce Pinb.0 , 1 , Program 'Sintaksa: pin, stanje za aktiviranje, 'podprogram, kamor naj skoim ob 'izvrenem pogoju Loop Program: Set Portc.0 Wait 1 Reset Portc.0 Goto Main 'Podprogram, kamor skoim ob pritisku na tipko 'Prigem in ugasnem LED na C.0 'Vrnem se nazaj v glavno zanko
V programih se GOTO ukaza skuamo izogibati, saj potek programa z ve GOTO ukazi postane zelo nepregleden; raji uporabimo skok podprogram, iz katerega se z ukazom RETURN vrnemo tja, s kjer smo skoili:
Config portb.0 = input Config portc.0 = output Config Debounce = 40 Do 'Port b.0 konfiguriramo kot vhod 'Port c.0 konfiguriramo kot izhod 'Najprej konfiguriramo as, po katerem je pritisk tipke veljeven; v tem primeru 40ms
'Zanka za preverjanje pritisnjene tipke Debounce Pinb.0 , 1 , Program , Sub Loop Program: Set Portc.0 Wait 1 Reset Portc.0 Return 'Podprogram, kamor skoim ob pritisku na tipko 'Prigem in ugasnem LED na C.0 'Vrnem se nazaj v glavno zanko
28
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 prikljuke uporabljamo. Ostale nastavitve pustimo takne, kot so. V samem zaetku programa zaslon "pobriemo" z ukazom CLS in izklopimo kurzor (e ga ne rabimo):
Cls Cursor Off 'Pobriemo zaslon 'Izklopimo prikaz kurzorja
e sedaj poljemo e en tekst, se zane pisati tam, kjer se je pisanje prvega nehalo:
Lcd "Nadaljujem"
Tega navadno ne elimo. Zato lahko, e elimo izpisati nov zaslon, le-tega najprej pobriemo in nato zapiemo
Cls Lcd "Nadaljujem 2"
29
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 dvovrstinem zaslonu). V samih programih se nam dostikrat pojavi problem, ker se doloen tekst na zaslonu ne izpie. Najpogosteje je vzrok temu program, ki tee v zanki in v kateri imamo tudi ukaz CLS, ki zaslon izbrie. Ker zanka tee 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 statino vsebino - v narekovajih. Pri prikazu spremenljivk je zadeva podobna, le da spremenljivko ne napiemo v "narekovaje"
Dim A As Byte A = 0 Cls Do Incr A Locate 1 , 1 Lcd A Wait 1 Loop Until A = 30 'poveam A za 1 (isto kot bi napisal A = A + 1)
30
31
Vpraaj 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
Pri emer smo znak za stopinje naredili sami. Vloga dvopija je ista kot da bi pisali vsako postavko v novo vrstico, le pregledneje je tako.
32
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 dalje kable ali v okolju motnje, uporabimo napetostni pretvornik.
Kot primer uporabimo MAX232, s katerim doseemo nivoje, potrebne za RS232 komunikacijo (Reccomended Standard 232), ki navadno uporablja +/-22V napetostne nivoje. Ker prenaamo vije napetosti je tudi vpliv motenj na samo komunikacijo manji. RS232 je tudi vmesnik, ki ga imamo najvekrat na razvojni ploi...
33
AVR mikroprocesorji imajo navadno 1 UART vmesnik (TX/RX), doloeni veji 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.
Torej, ko smo opravili nastavitve komunikacije, poskusimo nekaj poslati na UART oziroma RS-232 izhod (na razvojni ploi je e MAX232, ki poskrbi za pretvorbo napetostnih nivojev). To storimo z enostavnim ukazom PRINT.
34
Zgornji program vsake 3 sekunde polje omenjeno sporoilo na RS232 port in v kolikor imamo raunalnik pravilno nastavljen (izbran pravilni port in hitrost) ter pravilno narejeno povezavo se le to prikae v oknu programa. Prazno vrstico enostavno kreiramo s praznim ukazom PRINT, torej:
Do Print "test" Print Print "test2" Wait 3 Loop 'prazna vrstica
e elimo ve vrednosti poslati v eni vrstici (brez CR), kot loilo uporabimo podpije:
Do Print "test " ; "naprej " ; "v eni " ; "vrstici" Wait 3 Loop
Isto kot pri izpisu na LCD za fiksne vrednosti uporabimo narekovaje, pri poiljanju spremenljivk pa lete izpustimo.
35
36
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.
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
37
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:
38
Uporabili smo 8 + 4 = 12 izhodov mikroprocesorja, in upravljamo z 8 x 4 = 32 diodami. Lahko prigemo 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 ploe. 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 sledeo tabelo: Dioda A B C D E F G Dp Port Portb.7 Portb.1 Portb.5 Portb.4 Portb.2 Portb.3 Portb.0 Portb.6 0 x x x x x x 1 x x 2 x x x x x 3 x 4 x x x x x x 5 x x x x x 6 x x x x x x 7 x x x 8 x x x x x x x 9 x x x x x x
x x
Ni pa ne bo narobe, e se o tem prepriamo. Naredimo si program, ki bo dajal na 0V ciklino vsak portpin posebej, in istoasno 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 ploi tudi pravilno postaviti, sicer ne bo ni videti. In potem poenemo program vaja2.bas:
39
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 ? Obrezloim na primeru: 'elimo prikazati recimo tevilko 1 'Da bo vidna tevilka ena, morata goreti diodi, ki odgovarjata pinom 1 in 5
'Odgovarjajoa 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 zaeti z kombinacijo, ki odgovarja nili, 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 nartu. Vendar ne odgovarja, ker sem pri prenaanju narta v tabelo namerno naredil napako, prosim popravite jo. e veete v vaem projektu diode drugae, boste pa tudi krmilili malo drugae. In sedaj moramo dosei, da na 7-segmentnem prikazovalniku ne bo svetila samo ena dioda, temve, da bodo svetile vse tiste diode, ki bodo skupaj optino priarale vsebino, ki jo elimo prikazati. e elimo prikazati enojko, morata svetiti diodi B in C, e hoemo 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 odgovarjajoe bite na 0, ostale bite na 1. Razloim 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 : 40 Multipleksiranje 7 segmentni LED | Bascom AVR za zaetnike
7 6 5 4 1 1 0 1 D
3 2 1 0 1 1 0 1 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
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: Bascom AVR za zaetnike | Multipleksiranje 7 segmentni LED 41
I J K L S
As As As As As
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 Razlinimi 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 zmanjamo, bo oko videlo, kot da delajo vsi hkrati, in to vztrajnost oesa uporabimo pri kot reemo mulitpleksiranemu krmiljenju 7-segmentnih prikazovalnikov. Vendar prikazati moramo neko vsebino! Prikaimo vsebino spremenljivke I!
' V zanki iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni ' in le te prikaemo: Eni Des Des Sto Sto Tis = = = = = = I Mod 10 I Mod 100 Des / 10 I Mod 1000 Sto / 100 I / 1000
42
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 Waitms 5 Next experimentiraj z razlinimi zakasnitvami
Opazimo, da s pritiskom na tipko malo zmotimo prikazovanje, svetloba prikazovalnikov utripne. Se da to popraviti? Izboljati? Odgovor je seveda ja. A v ta namen si moramo pomagati z asovno prekinitvijo, timer interruptom. Mikroprocesor ima napravo, asovnik ali angleko timer. Le ta sicer ne meri asa, teme utripe kristala oziroma oscilatorja, ki poganja mikroprocesor, kar je pravzaprav nekaj podobnega.
43
Zaenkrat se ne bomo spuali v veliko teorijo o tem, temve si bomo pomagali s programom ki ga je prijazno dal brezplano 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 iemo:
44
To kodo enostavno prenesemo v na program. Seveda pa moramo sami napisati v asovno prekinitveni podprogram, kaj naj naredi. Na prekinitveni podprogram naj prikae eno dekado, in se vrne, drugi drugo in tako naprej.
' PREKINITVENI PODPROGRAM Vaja 6 Timer0_isr: Load Timer0 , Timer0reload ' V prekinitveni rutini vsakokrat prikaemo eno od 4 tevilk ' in to neodvisno od dela glavnega programa, zato ni utripanja, kadar ' glavni program dela kaj drugega Dim Tis As Word 'Tisoice 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 prikaemo: 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.
45
Prekinitve (Interrupti)
Vilko Susti
Mikroprocesorji omogoajo prekinitve delovanja glavnega programa. Zakaj? Vasih je nujno potrebno narediti kako malenkost takoj, in ne akati, da bo mikroprocesor po programu zakljuil 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 povzroena lahko na razline naine, lahko je asovna prekinitev, ki nastopi, ko mine doloen as, lahko je zunanja prekinitev, ki nastopi ob spremembi nivoja napetosti na kakem vhodu mikroprocesorja (port-pinu), lahko se proi, ko UART zazna in prebere nek bajt, ki pride po komunikacijski liniji v mikroprocesorski medspomin buffer. V splonem velja, da se prekinitev izvede tako, da se najprej spravi vse bistvene podatke o dogajanju v mikroprocesorju zaradi delovanja glavnega programa na odloie (stack) in se ele potem poene prekinitveni podprogram. Ko prekinitveni program zakljui svoje delo z ukazom Return, se potem iz odloia 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 upotevati. Zato velja naelo: prekinitveni podprogram bodi v naelu im bolj kratek, naj odvzame im manj asa glavnemu programu. Prekinitev bomo uporabili tudi v kasnejem 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 obiajno 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 prejnjem 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 poene tetje. Ker merimo sekunde z ukazom wait 1 tisti as, ko je program v zanki, ki jo povzroi wait, ne zazna pritiska tipke.
46
Sedaj ni problema z detektiranjem tipke, saj kadarkoli pritisnemo tipko, program takoj reagira. Toda e vedno je problem tako natannega tetja, kot tudi zaustavljanja tetja v trenutku, ko velja wait 1.
V vaja3.bas smo odpravili tudi to slabost. Da dokaemo, smo se odloili teti kar stotinke sekunde in imamo sedaj neke vrste uro toparico. Za tetje asa smo zadolili kar prekinitveni podprogram, ki je dolan 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 sluajnostno tevilo nekje med 0 in v funkciji omenjeno zgornjo mejo. Ko pretee ta sluajnostni as, se meritev zane, kar vidi testiranec tako, da zane tei prikaz na prikazovalniku. Sedaj mora im hitreje pritisniti tipko in s tem ustaviti tetje, in odmerjeni as si potem lahko na prikazovalniku ogleda.
47
Ista ica lahko slui 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, loimo med seboj po unikatni identifikacijski oznaki, ki je vpisana v ROM naprave, termometra na primer in jo moramo poznati, e prikljuimo na ico ve kot eno napravo.
asovni diagrami, ki se jih je potrebno drati, da je komunikacija uspena, so dovolj zapleteni in doloeni: 48 1-wire protokol in termometer DS1820 | Bascom AVR za zaetnike
A za programerja, ki programira v Bascomu, za vse to poskrbi Bascom sam. Drugae 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 1wwrite &H44 Wait 1 'skip ROM velja za vse, ki ste na liniji 'merite temperaturo 'dajem vam as za merjenje
Ko DS1820 prejme tak ukaz, potrebuje energijo za delo, ki jo dobi tako, da mi drimo signal visok. as je lahko razlien, a najve asa, ki ga za to potrebuje je 750msec. Ko pretee ta as, damo ukaz: daj nam meritev.
1wreset 1wwrite &HCC 1wwrite &HBE 'reset 'skip ROM velja za vse, a je samo eden na liniji 'dajte podatke
Program DS1820-1 je primer branja temperature, e je na liniji en sam termometer Program DS1820-2 je izboljan v toliko, da uporablja timer namesto wait za zagotavljanje potrebnega asa za konverzijo rezultata v DS1820 Bascom AVR za zaetnike | 1-wire protokol in termometer DS1820 49
Program DS1820-3 je izboljan 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 prikljuimo, poenemo 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'
50
Stack odloie
Vilko Susti
Morda beseda odloie ni najbolja, toda smatram, da primerno pomensko odgovarja, kar bomo videli, ko si bomo ogledali stack - odloie v funkciji. V splonem 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 doloen prostor v pomnilniku (RAM-u) ni dovolj velik, se dogode nepredvidljive zadeve in program obiajno umre brez karknekoli diagnoze. Boste videli zakaj.
Najbolj tipina uporaba odloia je, kadar kliemo v glavnem programu podprogram, ali tudi v podprogramu e en podprogram. S klicem podprograma, glavni program, ali program vijega nivoja preda upravo podprogramu. To lahko naredi vekrat na razlinih mestih. Podprogram v splonem ne ve, od kod je bil klican. Ve pa, da je glavni program v samem klicu podprograma dal naslov predaje na odloie. Ko podprogram ree Return, dejansko skoi na naslov, ki ga najde na odloiu.
Odloie 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, napane vsebine in program gre v maloro. Temu reemo LIFO , kar je kratica za Last in first out, ali tisti ki zadnji pride, prvi odide. Bascom AVR razlikuje tri delovna podroja, ki so razvrema na sam vrh pomnilnika, hwstack, swstack in frame.
51
Dim Reg14 As Iram Byte At 14 Overlay Dim Dim Dim Dim Dim I J K L M As As As As As Byte Byte Byte Byte 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 J K L M = = = = = &H11 &H12 &H13 &H14 &H1567 "Smo v Hex(i) A "Smo v Hex(i) glavnem programu" ; " " ; Hex(j) ; " " ; Hex(k) ; " " glavnem programu" ; " " ; Hex(j) ; " " ; Hex(k) ; " "
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 I = &H21 : J Print Hex(i) Gosub Aa Print "Smo v Print Hex(i) podprogramu A" = &H22 ; " " ; Hex(j) podprogramu A"
52
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
53
Ko ga prevedemo si oglejmo poroilo prevajalnika (compilerja). Vedno je priporoljivo, da si ogledamo poroilo (report) saj v njem dobimo zanimive podatke o naem programu. Poroilo o naem programu je skrajano sledee:
Report Date Time Compiler Processor SRAM EEPROM ROMSIZE ROMIMAGE ROMIMAGE FLASH USED BAUD XTAL BAUD error Stack start Stack size S-Stacksize S-Stackstart Framesize Framestart Space left : STACK : 02-13-2008 : 10:59:40 : : : : : : : : : : : : : : : : : : BASCOM-AVR LIBRARY V 1.11.8.5 M162 400 hex 200 hex 4000 hex 3F6 hex -> Will fit into ROM 1014 dec 6 % 9600 Baud 4000000 Hz 0.16% 4FF hex 40 hex 40 hex 4C0 hex 40 hex 47F hex 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
in ima mikrokrmilnik najviji naslov H4FF smo s tem definirali 54 Stack odloie | Bascom AVR za zaetnike
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 pokae na program in zraven e vsebino pomnilnika-rama. Program poenemo poasi, korak po korak F8. Opazimo, da se nam pomnilnik pobrie na nile 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 pokae IO vsebine. Izgledalo bo nekako tako:
55
Rad bi vas opozoril na SPL in SPH. To sta dva bajta, ki skupaj kaeta lokacijo v odloiu (stack-u) na sledee prosto mesto, angl. Stackpointer. V naem primeru je to naslov &H04FF To pa je v tem primeru tudi konni naslov pomnilnika, saj toliko pomnilnika ima programirani mikrokrmilnik.
56
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 klie 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 podroju Frame kot delovni pomnilnik.
57
Stackpointer sedaj kae &H04FD, dva bajta nie! 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 poasi analizirajte delovanje naprej, korak po korak, dokler ne pridete to konca programa.
58
Zakljuek 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 najvijega 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 splonem potrebuje mikroprocesor po dva bajta tega podroja 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 veine registrov, (vseh je 32!) NOSAVE opcijo pa si lahko privoite 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 podroje in za lokalno v subroutini ali funkciji definirane spremenljivke. Take spremenljivke so v podroju Frame, njih naslovi v swstack.
59
SRAM pomnilnik, v katerem se shranjujejo podatki s katerimi operiramo, ima to slabo lastnost, da se ob izgubi napajanja izbrie. e elimo doloene 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 doloeno koliino EEPROM pomnilnika e znotraj samega procesorja, e pa elimo pa lahko dodatni EEPROM poveemo s kontrolerjem preko I2C (ali drugega) protokola in tako poveamo prostor, namenjen podatkom. Da pa ne bo vse tako enostavno je potrebno omeniti neprijetno lastnost EEPROM pomnilnika, pravzaprav dve. Prva je relativno poasno branje in predvsem pisanje (napram SRAM pomnilniku), ki pa nam navadno ne povzroa vejih preglavic. Veja teava 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 mogoe. 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 monih reitev naj navedem reitev 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, zapiemo 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 prepiemo nazaj spremenljivkam v SRAMu in program se nadaljuje. Druga, elegantneja (programska) metoda je, da spremenljivke zapisujemo le tedaj, ko se res spremenijo, ne pa ob vsakem prehodu do-loop zanke.
60
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
Torej povsem enostavno! Sedaj lahko npr. naredimo enostaven termometer, ki najvijo in najnijo izmerjeno temperaturo hrani tudi ob izpadu napajanja. Vkolikor imamo v EEPROMu shranjene doloene parametre programa (npr. telefonske tevilke, nastavitve) je potrebno paziti pri (pre)programiranju mikrokontrolerja, saj je pri veini programatorjev privzeto nastavljeno, da se prepie/izbrie tudi EEPROM pomnilnik. Vkolikor vrednosti v EEPROMu elimo obdrati, omenjeno monost izklopimo. Naj e enkrat opozorim, da ima EEPROM pomnilnik omejeno tevilo vpisov, zato je potrebno paziti na sam program, da v EEPROM ne piemo prepogosto.
61
$eeprom Z vkljuitvijo omenjenega ukaza v program prevajalniku povemo, da bomo deklarirali konstante, ki bodo vpisane v EEPROM pomnilnik. Prevajalnik generira EPP datoteko, ki jo s programatorjem zapiemo v EEPROM mikrokontrolerja.
$eeprom P_eeprom: Data 1 , 2 , 3 , 4 , 5 $data 'Zapisujemo v EEPROM 'Deklariramo podatkovno polje P_eeprom ' in mu vnesemo podatke. 'Preklopimo nazaj v FLASH nain!
Vkolikor bi bili sedaj v Do-Loop zanki, bi prebrali vse vrednosti iz polja Polje_eeprom, ob vsakem prehodu naslednjo vrednost.
62
Sploen opis
Raziritveni modul s transceiver modulom RFM12B uporabnikom Minipin razvojnega sistema ponuja osnovo za hiter razvoj poceni in zanesljive reitve brezinega prenosa blokov podatkov, predvsem zaradi monosti dvosmerne izmenjave podatkov.
Modul RFM12B je low-power razliica 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 zdrueni v enem vezju, tako da imamo monost razvoja dimenzijsko majhnih in zmogljivih brezinih aplikacij. Gre za ozkopasovni sprejemnik/oddajnik, zato imamo monost ustvarjanja razlinih frekvennih kanalov znotraj dovoljenega frekvennega pasu, ki med sabo nimajo vpliva. S tem se izognemo motnjam, slabljenju in interferenci med kanali in doseemo robustnejo brezino zvezo. Poleg low-power razliice modula sicer obstajata e standardna razliica RF12 in monostna RF12BP, ki ob prej omenjenem napajanju zmore celih 500 mW oddajne moi. al je monost legalne uporabe teh modulov zaradi tolikne moi omejena le na frekvenni pas 868 MHz.
63
64
Opis vezja
Raziritveni modul nam omogoa sprejemanje in poiljanje blokov sporoil (nizov znakov). Zanesljivost prenosa oziroma verodostojnost preneenih podatkov je v veji meri odvisna od dobre antene, razdalje med sprejemnikom in oddajnikom in trenutnih motenj na doloenem komunikacijskem kanalu. V odvisnosti od tega, kaken niz smo sprejeli, se ob delnem ali popolnem ujemanju niza lahko aktivirajo funkcije, ki nam na razline naine aktivirajo izhode. Sprejemno-oddajna antena je v naem primeru izvedena na tiskanem vezju, kar bo za testiranja povsem zadostovalo. Modul prikljuimo 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 tovarniko doloene 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 monosti uporabe prekinitvenih rutin. Kot indikacija VF sprejemanja je vgrajena zelena, za VF oddajanje pa rdea LED dioda. Tipki uporabljamo za poiljanje znakovnih nizov v oddajnem nainu. Dodatni LED diodi sta namenjeni prikazu aktivnosti izhodov glede na sprejeti niz
Istoasno lahko na Minipinu uporabljamo le en RFM12 raziritveni modul. Za razline potrebe naloimo razline programe. Na voljo sta programa za oddajo in sprejem znakovnega niza. Primeren program, ki bo zdrueval funkcionalnost obeh, si iz predloenega gradiva in primerov lahko izdelate sami. Za preizkuanje komunikacije je najbolj prirono uporabiti dva Minipin razvojna sistema, saj bomo istoasno delali na vsaj dveh Bascom programih (oddajni in sprejemni). Na teajih Bascoma je to preprosto, saj se po dva in dva teajnika poveeta na isti frekvenci, s tem, da eden oddaja, drugi pa sprejema odposlane nize. Prikaz sprejetega niza prikaemo tudi na LCD displayu. e gre za dogovorjen niz, ki pripada tipki 1 ali tipki 2, se niza prikaeta za prvo tipko v zgornji in za drugo tipko v spodnji vrstici. Pred vsakim nazadnje sprejetim nizom se prikae znakec za anteno. V nizu poiljamo tudi zaporedno tevilko oddanega niza za pripadajoo tipko in sicer do niza 255, potem zanemo od zaetka. e sprejmemo niz, ki ni dogovorjen, ga ignoriramo, vendar vseeno izpiemo na LCD display v prvo vrstico. Pred taknim nizom je znakec za slab sprejem. Nakljune nize lahko pogosto sprejmemo, saj je radijska dejavnost na 433 Mhz vasih zelo ivahna. Naa naloga je sprejeti pravi niz, ga analizirati in izvriti naloge, ki so na sprejemni strani za posamezen niz predvidene.
65
Konfiguracija modula za oddajanje To naredimo isto na zaetku 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 vpiemo za komunikacijo na posameznem kanalu in pomeni frekvenco, na kateri bo modul oddajal. Sprejemnik mora imeti za uspeno sprejemanje v ta registervvpisano enako vrednost.
Oznaka konca konfiguracije Zatem kot signalizacijo prigemo in ugasnemo Tx in Rx LED diodi, s karterima oznaujemo sprejemanje, oziroma oddajanje
66
Vrtimo se v glavni programski zanki Preberemo stanje vhodov. Ugotovimo stanje tipk. e ugotovimo pritisk tipke, potem izvrimo njej doloen podprogram. e ni pritisnjena nobena od tipk, se vrnemo na zaetek glavne programske zanke
kratek opis podprogramov: Podprogram za 1. Tipko (odpolje niz le enkrat in poaka, da spustimo tipko) Odpoljemo niz T1 on :...., izpiemo isti niz na LCD display Preverimo stanje tipke 1 Poakamo, dokler ni tipka spuena Vrnemo se v glavno programsko zanko
Podprogram za 2. Tipko (poilja niz toliko asa, dokler ne spustimo tipke) Odpoljemo niz T2 on : ...., izpiemo isti niz na LCD display Preverimo stanje tipke 2 e je tipka e pritisnjena, gremo spet na zaetek tega podprograma e tipka ni ve pritisnjena, se vrnemo v glavno programsko zanko
67
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.
68
Konfiguracija modula za sprejem To naredimo isto na zaetku 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 vpiemo za komunikacijo na posameznem kanalu in pomeni frekvenco, na kateri bo modul sprejemal. Oddajnik mora imeti za uspeno komunikacijo v ta register vpisano enako vrednost. Oznaka konca konfiguracije Zatem kot signalizacijo prigemo in ugasnemo Tx in Rx LED diodi, s karterima oznaujemo sprejemanje, oziroma oddajanje niza.
Vrtimo se v glavni programski zanki Preverjamo Test bit, ki oznauje, da smo sprejeli zakljuen niz e ta bit ni postavljen, se vrnemo na zaetek 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, zaetne vrednosti spremenljivk) Izloimo karakteristini 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 izpiemo na LCD display izbriemo Test bit in postavimo tevec znakov na zaetno vrednost Vrnemo se v glavno programsko zanko
69
obstojee reitve, narejene z mikrokontrolerjem, je lahko enostavna ali pa tudi ne. No, v primeru uporabe MOXA modulov, ki sem jih sluajno nael, ko sem zase iskal hitro reitev za integracijo obstojee aplikacije v LAN okolje, je to povsem enostavno. Od takrat sem te modulke uporabil v ve deset aplikacijah in lahko reem, da delujejo bp od prvega do zadnjega! Obstaja ve tipov modulov, pa odvisno od namena uporabe. Tako imajo nekateri moduli e vgrajeno RJ-45 vtinico, obstajajo tipi za razline tipe komunikacij (RS232, RS485, isti UART) in izberemo pa takega, ki nam glede na nae potrebe najbolj ustreza. e e nimamo razvitega tiskanega vezja, priporoam model NE4100-T, ki ima UART kompatibilni vmesnik (torej priklop direktno na DATA pina mikrokontrolerja) ter je brez RJ vtinice, ki jo pa damo na nae vezje. Sam modulek pa na nae vezje fiksiramo z dvema 2,54 letvicama.
70
/Komunikacija preko LAN omreja (modul MOXA NE-4100 serija) | Bascom AVR za zaetnike
Sam modulek, glede na svojo velikost, v sebi skriva veliko. Na omreju se predstavlja kot svoj strenik in lahko podatke poilja in prejema v ve nainih: TCP server (do 4 povezave), V tem nainu smo omejeni, da se lahko hkrati na modul priklopijo do tirje klientje in prejemajo ter poiljajo podatke po poljubnem portu. Dobra stran te reitve je, da je sistem neodvisen od klientov in deluje tudi, e klientov ni. TCP client, V tem nainu modul deluje kot TCP/IP klient in za poiljanje/prejemanje podatkov potrebuje imeti definiran strenik(e), kamor se povee. Slabost te reitve je, da smo omejeni na vnaprej tono doloene strenike, katerih delovanje je pogoj za prenos podatkov. Virtual COM port, V tem nainu na poljubnem raunalniku v omreju naloimo programsko opremo, ki ustvari virtualna COM vrata. Karkoli sprejme modul, se pokae na teh vratih (in obratho) torej, kot bi imeli kontroler priklopljen direktno na raunalnik. UDP mode. Nain poiljanja UDP paketov po celotnem omreju (je potrebno posluati na pravem naslovu).
Bascom AVR za zaetnike | /Komunikacija preko LAN omreja (modul MOXA NE-4100 serija)
71
Da ne bo zmede, gremo kar od zaetka. Torej pred seboj imamo omenjeni modul, ki za delovanje potrebuje naslednje povezava: Napajanje +5V Povezavo na LAN omreje TX in RX povezavo na mikrokontroler (ob predpostavki, da je GND od napajanja skupni tako mikrokontrolerju kot LAN modulku, 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).
Izpiejo 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.
72
/Komunikacija preko LAN omreja (modul MOXA NE-4100 serija) | Bascom AVR za zaetnike
V mrenih nastavitvah doloimo, kako se modul predstavlja v omreju. Omogoa tako statino naslavljanje kot DHCP, kot bombonek pa omogoa tudi poiljanje 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 naemu mikrokontrolerju pa v skladu z naimi nastavitvami komunikacije kontrolerja.
Bascom AVR za zaetnike | /Komunikacija preko LAN omreja (modul MOXA NE-4100 serija)
73
Monosti delovanja tu lahko nastavimo e prej omenjene naine delovanja samega modula. Najvekrat bomo verjetno uporabili kar TCP Server, kjer moramo nastaviti tudi port!
e en bombonek modula: Modul ima e sam vgrajen 4 vhodno-izhodne pine, ki jih lahko programsko doloimo kot digitalni vhod ali izhod ter preko WEB vmesnika nadzorujemo ali spreminjamo. Torej, e imamo potrebo le po prenosu tirih signalov, ne potrebujemo niesar razen modula in stabilnega 5V napajanja!
74
/Komunikacija preko LAN omreja (modul MOXA NE-4100 serija) | Bascom AVR za zaetnike
e smo modul konfigurirali kot Server, v polje Host adress vpiemo 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 naega kontrolerja in jih seveda (e nam napisan program to omogoa) tudi poiljati. e pa smo modul konfigurirali kot Client, pa smo morali samemu v nastavitvah samega modula doloiti IP strenika, ki je v tem primeru na raunalnik. V tem sluaju moramo v HyperTerminal kot Host adress napisati 127.0.0.1 (oz. njegov lasten IP), saj mora raunalnik delovati v tem primeru kot strenik. Od tu naprej ni ve problemov! e beseda ali dve o virtualnem COM portu, ki je tudi ena izmed monosti. Vsekakor je za zaetnika najenostavneja (saj dejansko deluje, kot bi imeli kontroler fizino priklopljen na raunalnik), vendar jo odsvetujem, saj je potrebno na vsakem raunalniku, kjer bi eleli dostopati do modula, intalirati tovrstno programsko opremo. Je pa to monost za izkoristiti, e elimo na mreo povezati kakno napravo, ki sedaj z nadzornim raunalnikom komunicira preko RS232 (UPS ...) v tem primeru ni potrebne nobene spremembe originalnega programa (npr. UPSa), ta pa lahko tee na katerem koli raunalniku razdalja ni ve problem!
Bascom AVR za zaetnike | /Komunikacija preko LAN omreja (modul MOXA NE-4100 serija)
75
Polja spremenljivk
Vilko Susti
76
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 doloiti popolnoma natanno ( vrednost 1/3 lahko samo z omejeno natannostjo napiemo, da je 0.33 ) tako tudi v tem zapisu le z omejeno natannostjo 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 obe je to dovolj natanno. e pa ne, lahko izberemo Double ki zapie 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 zakljuen z bajtom vsebine 0. To se pravi, e damo v spremenljivko stavek Dober dan, alost. ki ima z loili 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 sluajih smo porabili 3 krat 2 bajta. No, ne gre za prihranek pri porabi bajtov ampak pri nainu programiranja. Sedaj lahko programiramo tako, da s pomojo dodatnega parametra indeksa, iste podprograme (podprogram za meritev temperature, podprogram za izpis temperature) uporabimo za obdelavo razlinih temperatur, termometrov. Primer:
Pri tako majcenem podprogramu ni videti velike prednosti, a pri bolj obsenih podprogrami se esto tak nain programiranja izplaa.
77
Je pa potrebno pri takem nainu paziti, da nam indeks ne 'uide' iz z definicijami doloenih 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 sledee mesto, na mesto, kjer bi sicer bilo etrto mesto v spominu, in bo s tem prekril tam definirano spremenljivko. V naem sluaju je to spremenljivka X. Preverite to na simulatorju. Pri uporabljanju spremenljivk z indeksi, take napake povzroe spremembe podatkov v pomnilniku, ki si jih ne znamo razloiti in jih je teko najti, ko so enkrat vgrajene v program. Program in mikroprocesor z njim 'podivja', in se nesmiselno obnaa. Viji programski jeziki poznajo vedimenzionalna polja, kjer spremenljivko oznaimo 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 drugae informacijo 'elena temperatura je 22C' ki jo preberemo seveda v spremenljivko tipa String. Ne vemo natanno, kje v nizu se nahaja tevilo, ki je dejansko krmilna informacija. Moramo jo izluiti. Morda tako:
78
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 prikaem pogost nain obravnavanja vsebine v poljih tipa String in sicer direktno znak po znak na osnovi poloaja znaka v samem nizu. Na ta nain lahko tudi sestavljamo informacijo znak po znak v nizu, ne smemo pa pozabiti, da mora biti niz zakljuen z znakom &H00 in paziti moramo, da nam indeks 'ne uide' iz okvira doloenega v definicijah.
79
Falcom
A2
(A2D,
GSM modem je zunanja naprava, ki jo prikljuite na raunalnik preko standardne RS232 povezave. V splonem je naprava narejena za povezavo dveh naprav, lahko pa se ga uporablja v kombinaciji s strenikom z ustrezno aplikacijo, ki generira SMS sporoila - SMS strenik. Modem uporablja standardni vmesnik RS232, zato je enostaven za priklop na mikrokontrolerske sisteme. Modem ima: Prikljuek za anteno Prikljuek za napajanje DSUB9 konektor (Rs232 vmesnik) RJ45 konektor priklop slualke in mikrofona.
Za kontrolo delovanja sta na RJ45 konektorju montirani dve LED diodi rumena - napajanje zelena signal GSM (ko je sistem povezan z omrejem zelena LED dioda utripa)
80
Modem vkljuimo v delovanje, ko pin3 Ignition in pin4 prikljuimo 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 raunalnikom potrebujemo klasini povezovalni kabel RS232C. Zadostuje e, da poveemo Pin2 (Txd), Pin3 (Rxd) in Pin5 (GND). e se modem prikljui na mikrokontrolerski sistem je potrebno uporabiti RS232 vmesnik (integrirano vezje MAX 232) za prilagoditev elektrinih nivojev med modemom in mikrokontrolesko napravo. Opcijsko je mono preko konektorja prikljuiti tudi napajalno napetost. To je odvisno od tipa modema in je potrebno pred priklopom obvezno preveriti.
81
Audiointerface:
Na vmesnik C se lahko prikljuijo audio naprave mikrofon in slualka/zvonik. V kolikor se modem prikljuuje na neko drugo napravo je potrebno upotevati dejstvo, da je izhod simetrien, zato je potrebno vmesnik prilagoditi z napravo. e prikljuujemo interface C na mikrokontroleski sistem (DTMF sprejemnik) je potrebno vhod naprave prilagoditi. Ena izmed reitev je uporaba loilnega transformatorja.
Odvisno od kvalitete signala GSM omreja se izbere ustrezna antena. 82 GSM modem Falcom A2 (A2D, Wavecom) | Bascom AVR za zaetnike
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:
83
Kratice
ETSI GSM IMEI ME PLMN PIN PUK RP RXQUAL SIM SMS SMS/PP TA TE TP European Telecommunications Standards Institute Global Systemfor Mobile communications International Mobilestation Equipment Identity Mobile Equipment Public Land Mobile Network Personal Identification Number Personal Unblocking Key Receive Protocol Received Signal Quality Subscriber Identity Module Short Message Service Short Message Service/Point-to-Point Terminal Adapter Terminal Equipment Transmit Protocol
Priklop modema
Pred prvo uporabo je potrebno modem nastaviti. Za to se uporabljajo Hayes compatibil AT ukazi, ki jih poznamo tudi iz klasinih modemov. Podrobneji opis AT ukazov najdete na : http://www.bonusdata.ch/GSMModem/a2dman.pdf oz na priloenem CD-ju.
84
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 zvonika 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. klicoega AT+CLIR ....................Nastavitev CLIR skrita tevilka AT+COLP
85
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 sporoila AT+CMGS .................Poiljanje SMS sporoila AT+CMSS AT+CMGW AT+CMGD MESSAGE SETTING COMMANDS AT+CSMS AT+CPMS AT+CMGF ..................Nastavitev naina poiljanja 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
86
Opomba: S sivo barvo so oznaeni vsi AT ukazi, ki jih pogosteje uporabljamo. Podrobneji opis najdete v datasheet-u.
87
MiniPin in SMS
Matja Skubic
Uvod
MiniPin je postal iroko namembno orodje. Na njega se lahko prikljui veliko tevilo naprav. Grafini LCD prikazovalnik, Touch screen, SD kartica, 1 Wire, i2C naprave, V tem prispevku elim prikazati e eno monost- priklop GSM modema na MiniPin in poiljanje ter branje SMS sporoil. Skozi lanke v reviji Svet Elektronike je bilo objavljenih veliko reitev, kaj in na kaken nain lahko prikljuimo na MiniPin. e smo izmerili temperaturo s sondo DS1820 smo lahko rezultat prikazali na LCD prikazovalniku, pritisk tipke oz. stanje doloenega izhoda/vhoda na led diodi Vse to lahko sedaj poljemo preko modema v obliki SMS sporoila, lahko pa preberemo SMS in s tem sproimo doloeno akcijo.
Primer s tem ukazom postavimo PortB na 00000000 oz 11111111. LED diode na portu B svetijo takrat, ko je portB 0 - nizko stanje izhoda
88
z namenskim kablom na konektor K1. (tam kjer imamo RS232 port). Modem ima e vgrajen konverter signalov RS232 MAX232, zato moramo na ploici MiniPin uporabiti port, ki je povezan na integrirano vezje MAX232 in nastaviti ustrezne mostike. Pred vklopom napetosti je potrebno v modem vloiti veljavno SIM kartico. Nosilec za SIM kartico se nahaja na spodnji strani GSM modema.
Priporoljivo je da pred vstavitvijo SIM kartice v modem izkljuite PIN kodo. To pomeni, da se bo modem po priklopu na napajanje sam prijavil na mobilno omreje. V tem primeru ne priakuje ukaza AT+CPIN =XXXX. To je zelo pomembno v primeru, ko piemo 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 problematien, le zavedati se moramo, kaj delamo. Prav tako se prepriajte, 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.
89
Za testiranje je dobro uporabiti predplaniko SIM kartico, ker nam na primer ob nekontrolirani uporabi Loop zanke lahko povzroi najve 5 EUR kode. Na konektor modema ( Interface D) prikljuimo 50 Ohm anteno z enskim FME konektorjem. Napajanje modema prikljuimo 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 poveemo z napajalnim konektorjem razvojnega orodja MiniPin. Priporoljiva napetost napajanja je 12VDC. To je tudi napetost, s katero lahko brez teav napajamo MiniPin. Zaradi GSM modema je potrebno uporabiti zunanji napajalnik. MiniPin v kombinaciji programatorja e ponuja napajanje +5V preko USB povezave. Ko prikljuimo napajanje na modem se na njem (Interface C) prige rumena LED dioda. e je SIM kartica veljavna pa po cca. 10 sekundah zane utripati zelena LED dioda. To je tudi znak, da se je modem pravilno prijavil v GSM omreje. Modem smo prikljuili na napajanje. e se je povezal na omreje GSM (rumena sveti, zelena led utripa) je potrebno napisati program, ki bo poslal oz, sprejel SMS sporoilo. Preden smo GSM modem prikljuili na MiniPin je potrebno v modem vpisati doloene inicializacijske parametre. Te vpisujemo preko AT ukazov. Komunikacija modemov GSM z osebnim raunalnikom ali mikrokontrolerjem namre poteka ob pomoi Hayesovih ukazov oziroma ukazov AT. Gospod Hayes je leta 1977 postavil temelj modemski komunikaciji. Naelo le-te temelji na izmenjevanju podatkovnega (data mode) in ukaznega (command mode) prenosa podatkov. Ukaze AT poiljamo v ukaznem nainu za inicializacijo zaetnih nastavitev, spreminjanje hitrosti prenosa podatkov, klic nove telefonske tevilke itn. V podatkovnem nainu prenaamo iste podatke, na primer prenos datotek in elektronsko poto. 90 MiniPin in SMS | Bascom AVR za zaetnike
Ukaz AT izhaja od angleke besede attention (pozor) in opozarja, da za nizom AT sledi ukaz modemu. Inicializacijo lahko izvedemo na dva naina: 1. PC raunalnik - Pri nastavitvah, lahko uporabimo irok nabor AT ukazov za modem. To lahko storimo tako, da osnovne nastavitve modema izvedemo kar s pomojo PC raunalnika in uporabo terminal emulatorja (Hyper terminal, secure CRT, Terminal Bray, ) 2. Mikrokontroler - Mono 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 vkljuimo 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 nao operacijo posebej. Modem je prednastavljen na 9600, 8,n,1. Teh parametrov v principu ni potrebno spreminjati. Hitrosti prenosa (baudrate 9600) ustrezajo, ker pri poiljanju in sprejemu SMS sporoil (max 160 znakov s presledki) ne potrebujemo posebno velike hitrosti prenosa. Modem (interface B) poveemo 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)
91
Z ukazom AT+CMGF=1 izberemo tekstovni nain poiljanja SMS sporoil. (1 tekstovni nain, 0PDU nain)
Print "AT+CMGF=1" 'definiram SMS nacin
pomeni '' (dvopije) Telefonsko tevilko moramo modemu poslati kot tekst v narekovajih. Po ukazu za poiljanje je potrebno poakati cca 100ms in za tem lahko napiemo nae sporoilo. S pritiskom na tipko T3 sproimo poiljanje SMS sporoila.
" ; Portb ;
V tem primeru poiljamo tekst "Stanje PORTB " in stanje PortB. Vsak del teksta je zapisan v novi vrstici. Na koncu poljemo e ukaz za zakljuek poiljanja SMS sporoila:
Print Chr(26) Chr(26)pomeni ^Z (ctrl+Z)
92
Tukaj je j potrebno povdariti, da buffer zasede RAM. To pomeni, da moramo optimalno doloiti velikost bufferja. Funkcija Getline prebere vse znake do konca, dokler se ne pojavi CRLF. e elimo sprejeti 2 vrstico, kliemo funkcijo dvakrat. Znotraj funkcije Getline je uporabljena For zanka, ki omogoa izstop iz funkcije, kljub temu, da se na koncu ni pojavil CRLF. To je pomembno, ker bi se drugae program zazankal v neskonni zanki (e bi uporabili Do-Loop). Iz celotnega SMS sporoila izreemo uporabno informacijo:
Gsm = Mid(sret , 20 , 12)
Ukaz je spremenljivka tipa String, ki omogoa sprejem ukaza, ki ga napiemo v SMS sporoilu. Tukaj je doloena dolina 12 znakov. Znotraj glavne zanke sta uporabljena dva if stavka, ki priigata LED diode portB glede na SMS sporoilo:
If Ukaz = "Vklop port" Then Portc = &B00000000 End If If Ukaz = "Izklop port" Then Portc = &B11111111 End If 'Led sveti
'Led ne sveti
Pritisk tipk Poiljanje 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 nain, kako lahko poljete, preberete in na koncu izbriete SMS sporoilo. Od primera do primera pa je odvisno, kako boste zadevo uporabili. Vsak si bo to prikrojil po svojih eljah in potrebah. Bascom AVR za zaetnike | MiniPin in SMS 93
Kabel tester
Matja Skubic
Uvod
Velikokrat se nam pri prikljuevanju naprav na lokalno mreo, ISDN modem ali telefon zgodi, da kaj ne deluje. Prvo je potrebno preveriti kabel. Najvekrat je napaka na konektorju, ali pa je izbran napaen kabel. Kako najhitreje odpraviti takne teave? Uporabiti univerzalni tester za kable. Pred nekaj asa se mi je zgodilo, da sem prikljuil raunalnik na LAN mreo preko UTP CAT-5 kabla. Ker povezava ni in ni uspela, sem pomislil, da je napaka v napani nastavitvi gonilnikov na PC raunalniku. Toda po daljem 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 prikljunih pipetk, da bi lahko ohmsko pomeril posamezne pine. Z nekaj teavami sem potem le reil problem. Seveda napaka je bila v kabelski povezavi, toneje kabel je bil prekinjen v doloenem poloaju. Sklenil sem, da si izdelam tester za kable, da bom v bodoe laje reeval tovrstne probleme. Tako je tudi nastala ta reitev. Napravica se mi zdi zanimiva. Mislim, da bi e komu prila prav, zato objavljam njen podroben opis.
94
Tester omogoa testiranje naslednjih kablov: UTP 100 UTP 10 UTP cross connect ISDN Telefon Testiranje posameznih PIN-ov
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 prikljuimo kabel, ki ga elimo testirati. Preko sistema menijev izberemo tip testa in poenemo meritev. Na glavni enoti se prikazuje status meritve, na oddaljeni enoti pa se po vrstnem redu priigajo led diode. e se led diode ne priigajo po oznaenem vrstnem redu ali svetita dve led diodi hkrati ali ne sveti nobena, pomeni, da je s kablom nekaj narobe (napana 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 dvovrstini LCD prikazovalnik, preko katerega lahko preberemo trenutno stanje in vidimo, kateri pin je trenutno pri meritvi aktiven. Prikljuek za kabel na napravi je standardni konektor z oznako RJ-45, v katerega lahko prikljuimo 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 mono prikljuiti poleg baterije zunanji vir napajanja (12V). Prikljuek se nahaja na zgornji strani naprave. Naprava ima na spodnji strani konektor z ISP vodilom, preko katerega lahko napravo programiramo.
95
O sestavnih delih glavne enote, tu ni kaj veliko povedati. Najve pove elektrina 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 zadoa 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,...
Slika1: Pinout mikrokontrolerja LED dioda Status je dvobarvna in je vezana med PortD4 in PortD5. Polariteta izhoda pa doloa barvo. Zelena/Rdea. Zelena prikae vklop naprave, rdea pa sveti takrat, ko se meritev izvaja. Uporabljeni upori v vezju so SMD, kar je zmanjalo velikost vezja. Prikljuki mikrokontrolerja so varovani z upori 220 ohm. 96 Kabel tester | Bascom AVR za zaetnike
Opis delovanja
Glavna mikrokontrolerska enota vsebuje sistem menijev, preko katerih se premikamo spomojo tipke Tp3 (MENU/END). S pritiskom na tipko Tp4 (START) zanemo z meritvijo. LED dioda spremeni barvo iz zelene v rdeo. Na glavni enoti se prikae status izhoda.
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 prikljuka, 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.
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 vkljuevanja pinov zaradi krinih povezav drugano. 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
97
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 taknega testa je, da lahko pregledamo vsako povezavo posebej poljubno dolgo, ker testiranje ne poteka avtomatsko. V spodnji vrstici prikazovalnika za vsak poloaj testa utripa segment, ki ponazarja LED diodo. Testiranje zakljuimo s hkratnim pritiskom na tipki TP1 (SELECT) in TP3 (MENU/END).
LCD Display
98
Konektor je prikljuen na PortC mikrokontrolerja AT MEGA 8515. Izhodi so varovani z upori 220E. To verjetno ne bi bilo dovolj, e bi napravo prikljuili na iv ISDN prikljuek. Napetosti na njem se gibljejo okrog 100V. Izhode bi v tem primeru morali zaititi z zener ali supressor diodami (6,8V).
Kot je e opisano zgoraj, LED diode priigamo s kombinacijo loginih 1 in 0 direktno med pini mikrokontrolerja. Takna reitev ne bo delovala z uporabo mikrokontrolerja druine 8051. Tu je potrebno LED diodo prikljuiti med (+) plus in izhodnim pin-om kontrolerja. Iz tega razloga je za enostavnejo reitev, uporabljen mikrokontroler druine AVR.
Slika5: Tiskano vezje in montana shema glavne enote Bascom AVR za zaetnike | Kabel tester 99
100
101
Vmesnik RS232
Velikokrat se zgodi, da elimo na hitro preizkusiti serijski RS232 port. Potrebno je sprogramirati kratko proceduro in uporabiti testno vezje. Za takno testiranje se porabi kaj nekaj asa in dodatnega hardware-a. S pomojo tega dodatka pa sedaj to lahko storimo kar s tem testerjem.
Glede na to, da je za priklop uporabljen konektor RJ-45, je mono poleg Ethernet kabla prikljuiti e dodatna vezja. Ker je v testerju uporabljen zmogljiveji 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.
Delovanje V testni konektor RJ45 prikljuimo vezje RS232, in vse skupaj poveemo z osebnim raunalnikom. 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 poljemo eljeni string na LCD zaslon. 102 Kabel tester | Bascom AVR za zaetnike
Tester testira kratek stik med PortC.3 in portC.4. Kabel nima nobenega dodatnega vezja.
103
Prikljuni konektor Kabel, ki ga vkljuimo na napravo mora imeti RJ45 konektor. Pini prikljukov se tejejo, kot je oznaeno na sliki13:
104
UTP 10
105
Telefon
(5V-0'7)/(1K8+1K8+220E+220E)= 1.0mA.
To je tudi dovolj, e uporabimo visokosvetleo rdeo LED diodo. Klasina LED dioda porabi za normalno svetilnost od 5-10mA.
Skupna poraba pri delovanju z alfanumerinim LCD prikazovalnikom znaa 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 intrumentom DMM 750 sem pomeril tok naprave ter najmanji in najveji tok Dobil sem naslednji rezultat:
106
ezja Kot lahko vidimo, se poraba vezja giblje med 13.07 in 13.51mA. Tako bo 9V baterija zadostovala za priblino 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 ohije, zato ga na tiskanem vezju ni.
107
LCD Display
108
Seznam materiala
K_tester1.pcb ======================================
t.komp Ime
Value
1 C200 1 CAP200 1 CAP400 1 CON2M 1 DIP40 1 LCD_CHR 8 LEDV 1 LEDV 6 R_B_SMD 8 R_B_SMD 8 R_B_SMD 8 R_B_SMD 2 R_B_SMD 3 R_B_SMD 5 TIPRES 1 TO35A 1 TO220 1 TRPOT_M
100uF/16V Quarz 4Mhz Piezzo Konektor za TIV ATMega8515 LCD 2x16 8 x LED rdeca v LED 2-barvna 6 x 10K 8 x SMD 1k8 8 X SMD 1N4148 8xSMD 220E SMD 1K SMD 100nF 5 x Tipka BC547 7805 47K
109
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 licenno verzijo programa BASCOM AVR.
Na zaetku 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 naem primeru 9600, za kar je potrebno nastaviti vrednost Osccal=181.Ta vrednost je privzeto nastavljena. Kasneje si bomo ogledali, kako jo spremeniti med delovanjem.
= = 9600 = : Osccal
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 koncu ne smemo pozabiti na ukaz CLS, ker drugae prikazovalnik ne bo deloval pravilno.
110
Potem moramo nastaviti e vhodno izhodne porte mikrokontrolerja. To je potrebno storiti, zaradi pravilnega delovanja LED diod. Nastaviti je potrebno registre za posamezni port.
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 rdee barve.
Select Case Case Case Case Case Case Case Case Case End
1 2 3 4 5 6 7 8 9
Case : : : : : : : : :
Menu Utp100 Utpcrossx Utpcross Utp10 Isdn Telefon Tst_pin Rs232 Piezzo1 Select
Podprogram za vklop LED diode oz. postavitev pinov mikrokontrolerja v pravilno stanje je napisan z ve procedurami. S tem je koda optimizirana, saj drugae ne bi bilo mogoe programa spraviti v mikrokontroler Mega 8515.
Pin1: Portc Set Reset Gosub Locate Gosub Locate Gosub Return
2 2
, ,
1 1
: :
Gosub Gosub
Za vsak pin posebej je izdelana takna procedura. Testiranje pinov je izvedeno avtomatsko. To pomeni, da se led dioda priiga po vrsti od prve do osme in potem zopet od zaetka. e elimo testirati vsak pin posebej, izberemo meni Tst_pin. Tu moramo za vsako naslednje stanje pritisniti tipko Tp_1. Bascom AVR za zaetnike | Kabel tester 111
Do Portc Set Reset Pin Pinx Barva Gosub Locate Gosub Tp1 Locate Gosub Tp1 2 = 2 = , 0 , 0 1 = = = = 1 : Then : Then 0 Conn1 Conn2 "1-2" 1 "Or-Be" Lcd_p Lcd1 Tmdl Do Lcd0 Tmdl Do
If
If Loop
Za vsak pin posebej je izdelana neskonna 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.
Open Open
"comc.4:9600,8,n,1" "comc.3:9600,8,n,1"
For For
Output Input
As As
#1 #2
S pomojo CASE stavka nastavimo hitrost prenosa na eleno vrednost, pri emer pomeni vrednost spremenljivke Brr vrednost registra OSCCAL. Vrednost OSCCAL pa doloa Baud rate.
112
Select Case
Case Locate = #1 #2 =
1 "1200,8,N,1 , ,
Case 2 :
End Select
Na koncu testa je potrebno registre porta ponovno nastaviti na zaetno vrednost, nato pobriemo e prikazovalnik.
Ddrc = &B11111111 Portc Locate 2 'config PC &B11111111 Spc(16)
= , 1 : Lcd
Piezzo Testiranje kratkega stika je izvreno preko pinov 4 in 5. Opozoriti je treba, da je ta meritev namenjena samo merjenju kratkega stika. Pini mikrokontrolerja niso zaiteni proti visokim napetostim, zato je potrebna previdnost pri uporabi taknega merjenja. Piska piezzo zapiska tudi pri meritvi veje upornosti do 20K ohm.
e bi eleli natannejo meritev, bi bilo potrebno prag aktiviranja prestaviti na vsega nekaj deset ohm-ov.
Piezzo1: While Gosub Set Locate Locate Locate Wend 1 2 2 Pinc.3 , , , 15 7 9 : : : = 0 Lrdec Piezzo Chr(3) Lcd1 Lcd1
113
Tu kaj posebnega ni dodati. Za zvono signalizacijo je uporabljen Piezzo SEP2242 z vgrajenim oscilatorjem. Prikljuen je na Portd.6. Ko elimo generirati zvoni signal, piezzo prikljuimo na enosmerno napetost +5V. To storimo s pomojo tranzistorja BC517. Vkljuimo ga z ukazom set piezzo in izkljuimo z reset piezzo. Na LCD prikazovalniku pa prikaemo zvonik in krivuljo (Slika 12).
Ohije
e nekaj besed o ohiju. Ohije lahko najdete v dobro zaloeni trgovini z elektro materialom. Dimenzija ohija 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.
D 12V C
DSM
RJ -45
O /O FF N
S le e ct
M nu/E e nd
Sar tt
Sat t us
114
DSM
1 2 3 4 5 6 7 8
In e za konec. Z manjimi modifikacijami, si boste lahko zgradili sistem po vai meri. Ostali uporabni dodatki testerja bi bili lahko e: merjenje temperature, napetosti, frekvence,
S tem bi to postal e univerzalni intrument. Vsekakor pa bi za to potrebovali zmogljiveji mikrokontroler. Skratka upam, da boste ob gradnji Kabel testerja uivali, z njegovo uporabo pa reili marsikateri problem pri postavitvi LAN mre, vkljuitvi ISDN telefona,
RJ -45
115
Cene LCD prikazovalnikov so se v zadnjem asu zelo zniale. To verjetno botruje veliki porabi tovrstnih prikazovalnikov in nenazadnje tudi enostavnost uporabe. V veliki veini elektronskih vezij je dandanes prikazovalnik nepogreljiv element. Ko sem se pri popravilu naprave za doziranje sooil 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 prikaem 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 vpiemo v pomnilnik, ki se imenuje CG RAM.
CG RAM je pomnilnik prikazovalnika LCD in ima na voljo 8 naslovov, kamor lahko vpiemo (nariemo) poljuben element z loljivostjo 8x5 pik. Mono je izrisati tudi veji znak, kjer predvidimo N x 8x5 znakov (N ni veji od osem). Pri tem imamo med posameznimi polji presledek. Zadeva je lahko motea pri vejih prikazovalnikih, ker je tam tudi razmik med polji 8x5 veji. e elimo narisati znak v polje 8x 5 pik, si lahko pomagamo na ve nainov. Lahko v CG RAM vpiemo posamezen naslov in njegovo vrednost. Taken postopek se je uporabljal pri uporabi Assemblerja. Teava je bila v tem, ker do vpisa programa v mikrokontroler nismo vedeli, kako bo taken zank dejansko prikazan na prikazovalniku.
V Bascomu je ta reitev enostavna in uporabniko prijazna. Za to je v Bascomu pripravljeno posebno orodje, ki ga najdemo v meniju Tools z imenom LCD Designer. Orodje nam omogoa, da na zelo 116 Velike tevilke na prikazovalniku LCD-2x16 | Bascom AVR za zaetnike
enostaven nain nariemo 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 doloimo naslov (0-7) na pozicijo, kamor je postavljen vpraaj (?).
Primer:
Ko elimo znak prikazati na prikazovalniku, moramo doloiti 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 doloili pri risanju- vrednost, ki jo postavimo na mesto vpraaja (?)
e elimo prikazati veje znake/tevilke moramo uporabiti ve polj 8x5 in jih pravilno razvrstiti, da dobimo eleno tevilko. Pri prikazovalnikih tipa 2x16 je mono prikazati velike tevilke ez dve vrstici. Kako to izvedemo?
Pri nartovanju 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. Reitev je mona tudi z izbiro veih znakov, le da je tu potrebno vsebino CG RAM-a LCD prikazovalnika ves as spreminjati. Izris vseh tevilk od 0-9 je sorazmerno teavno delo, e uporabimo samo 8 znakov s katerimi izriemo vseh deset tevilk. Po dolgotrajnem risanju, kombiniranju in preizkuanju sem uspel najti 8 znakov, s katerimi je mono 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. Bascom AVR za zaetnike | Velike tevilke na prikazovalniku LCD-2x16 117
0 , 1 , 1 , 1 , 1 1 , 31 , 1 , 1 , 1 2 , 31 , 16 , 16 3 , 31 , 1 , 1 , 1 4 , 17 , 17 , 17 5 , 31 , 17 , 17 6 , 31 , 17 , 17 7 , 31 , 16 , 16 ,
, , , , , ,
, 1 , 1 , 1 , 16 , 16 1 , 1 , 17 , 17 17 , 17 17 , 17 16 , 16 ,
1 , 1 , 16 , 16 1 , 31 , 17 , 17 , 17 , 17 , 17 , 17 16 , 16 , 1
31 '
, 31 , 31 , 17 16
'
0 , 3 , 3 , 3 , 3 , 3 , 1 , 30 , 31 , 3 , 3 , 3 2 , 15 , 31 , 24 , 24 3 , 30 , 31 , 3 , 3 , 3 4 , 27 , 27 , 27 , 27 5 , 14 , 31 , 27 , 27 6 , 14 , 31 , 27 , 27 7 , 15 , 31 , 24 , 24 ,
3 , 3 , 3 , 3 , 3 , , 24 , 24 , 3 , 31 , , 27 , 27 , 27 , 27 , 27 , 27 24 , 24 ,
3 , 30 , 31 , 31 , 27 24 , , 14 , 14 , 27 24 31 , 15 '
'
Pri definiciji znakov lahko hkrati uporabimo samo eno izmed tabel (normal bold). Ko so znaki izrisani (normalje potrebno izdelati program, ki bo te kombinacije znakov pozicioniral na pravo mesto LCD 118 Velike tevilke na prikazovalniku LCD LCD-2x16 | Bascom AVR za zaetnike
prikazovalnika, da bo vidna uporabna informacija. Za prikaz tevilke je potrebno napisati podprogram, ki ga kliemo, ko elimo prikazati tevilko. Opis programa:
Big_disp1: St_stevilka Dol For Z = Zn B1 B2 Locate Locate Next Locate Ix Locate Return
I = = 1 2 1
1 ,
: : : :
Str(stevilka1) Len(st_stevilka) To Dol I , 1) Val(z) , Dta1) , Dta2) Lcd Chr(b1) Lcd Chr(b2) Lcd + Lcd Chr(223) 1 Chr(2)
vrstica 6 , 6 vrstica
1. tevilko spremenimo v tip String. e imamo tevilko tipa byte, integer, word, spremenimo tevilko v string znak 2. 3. Preverimo dolino spremenljivke (koliko mestna je tevilka). To je pomembno, da se izrie ustrezno tevilo tevilk na prikazovalniku 4. Z zanko For doloimo kako dale se bo izpis zgodil. Ko imamo definirano dolino 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 doloene tevilke. 6. Pretvorimo znak v tevilko 7. Pogledamo v tabelo, kateri znak je to (od 0-9) Bascom AVR za zaetnike | Velike tevilke na prikazovalniku LCD-2x16 119
8. Nariemo znak v vsako vrstico posebej. Za vsako tevilko je potrebno ponoviti podprogram in upotevati tudi presledke. Prednost uporabe LCD alfanumerinega prikazovalnika je v tem, da poleg velikih tevilk lahko prikaemo tudi ostale informacije v klasini velikosti.
Namerno je tevcu na konec dodeljen simbol za stopinje Celzija. Tu gre za primer, e bi npr. merili temperaturo.
Velike tevilke je mono prikazati tudi na LCD prikazovalnikih z veimi 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 zahtevneji. V nadaljevanju je prikazana doloitev znakov za prikaz tevilk. Na osnovi definicije znakov si boste lahko izdelali svojo proceduro, ki bo omogoala izris tevilk v odvisnosti od potreb in vaih elja.
3 , , 28
7 , 3 , 28 , 24 31 , 31 28 , 30
120
Deflcdchar 4 , 31 , 15 , 7 , 3 , 32 , 32 , 32 , 32 Deflcdchar 5 , 31 , 30 , 28 , 24 , 32 , 32 , 32 , 32
' T1 ' T2
Na spodnjih slikah je prikazano nekaj primerov uporabe velikih tevilk na alfanumerinih LCD prikazovalnikih 20x4.
121
Poleg zankov lahko na LCD prikazovalnik nariemo 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
Primer:
Uporaba LCD prikazovalnikov je ceneja in enostavneja. Velikokrat je reitev takne uporabe elegantneja 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 prikaemo e dodatne uporabne informacije. Mogoe bo ob tem kdo dobil nove ideje, kako posodobiti svojo napravo in jo s tem narediti uporabniku e prijaznejo.
122
(AVR-DOS
Obvezni uvod
Datoteni sistem AVR-DOS je napisal Josef Franz Vgel. Ni dovoljeno uporabljati v komercialne namene. V takem sluaju 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 vao hio, delavnico, varovala pred vlomi, vdorom vlage ali ognja, potem potrebujete voditi dnevnik dogajanja za morebitno kasnejo analizo incidenta. Vedeti elite, kdaj se je pooblaena oseba prijavila preko kode, ki jo je vtipkala v tipkovnico, kdaj je zmanjkalo elektrine energije, kdaj se je sproilo alarmiranje in zaradi katerega senzorja in podobno. Ali pa, e sestavljate napravo, ki vodi vstop v skupno parkirie, 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, obtonih rpalk, mealnega 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 pomojo AVR-DOS-a kjer sem beleil vsak vstop v kak podprogram in vsak izstop tako, da sem na zaetku in koncu dodal odgovarjajoi Print ukaz, recimo tako: Branjetemp: Print #2 , Hex(sph) ; Hex(spl) ; " E: Branjetemp" .... Print #2 , Return Hex(sph) ; Hex(spl) ; " R: Branjetemp T="; temperatura
Kot vidite (Hex(sph) ; Hex(spl)) sem elel celo vedeti, kako je z odloiem, ali se mi odloie kako pokvari, kajti sumil sem celo, da se tam kaj sfii.
123
In v ta namen sem uporabil spominsko kartico, podobno, kot jo imajo fotoaparati, ima veliko kapaciteto, vanjo lahko piem 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 mono to uporabiti na mikroprocesorjih z dovolj RAM-a. Jaz sem uporabil ATMEGA32.
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) veemo 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 pokae, kdaj je MMC kart v povezavi z AVR-DOSom, se pravi dela, in je ne smemo izvlei. Tipko pa za krmiljenje programa v mikroprocesorju, recimo, da pritisk na tipko zakljui delo z MMC kartico, (CLOSE FILE) led dioda ugasne in kartico lahko izvleemo.
124
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 naemu 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 naem vezju in jo spravili na disk, gremo naprej. S sledeim $include ukazom potegnemo v program AVR-DOS $include "Config_AVR-DOS.BAS"
125
Spremenljivka Gbdriveerror je e definirana v prej vkljuenih .bas datotekah in je ni potrebno definirati. Moramo pa jo spraevati, ali je vse v redu:
If Gbdriveerror <> 0 Then 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 napiemo datoteko na MMC disk. To so Initfilesystem, open, close in print. Ostalo boste po vaih potrebah sami natudirali iz help-a. Initfilesystem je prva funkcija, ki jo moramo klicati, in tudi je lahko uspena ali pa ne. I = Initfilesystem(1) If I <> 0 Then Print 'Init filesystem napaka', I End End if 'init file system Print "Napaka Config " ; Gbdriveerror
Sedaj lahko odpremo datoteko na 'disku', MMC kartica se obnaa kot disk pod DOS sistemom.
Open "Data.txt" For Append As #9 'create file in MMC
Ime datoteke seveda lahko doloimo 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 najlae s Print ukazi piem kakrnokoli vsebino v odprto datoteko. Le nekaj je potrebno vedeti. Datoteka mora biti zakljuena z Close ukazom. e se mikroprocesor kakorkoli sfii zaradi napake v programu, ali motnje od zunaj, datoteke ne bomo videli na MMC-u. Ko program zakljui delo s Close ukazom, lahko vzamemo MMC kartico iz leia, jo vtaknemo v italnik MMC kartic, ki je vezan na PC in tam se MMC kartica odpre kot izmenljiv disk, na njemu poiemo nao datoteko in jo odpremo z wordpad ali notepade windows programom, lahko tudi z word-om in si jo ogledamo.
e smo recimo imeli mikroprocesor zadolen za beleenje raznih meteorolokih veliin, temperature, vlanost, 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 veliin naredi grafe.. Monosti je toliko, kolikor vam jih fantazija da.
V prilogi imate nekaj programov za vzorec. 126 AVR-DOS datoteni sistem (AVR-DOS File System) | Bascom AVR za zaetnike
Poleg e omenjenih ukazov Driveinit, Initfilesystem, open, itd, vsebuje Timer prekinitveni podprogram, ki se aktivira vsakih 500 msec in postavi zastavico bit tiflag.
V zanki glavnega programa se spraujemo, ali je ta zastavica postavljena, in e je, poveamo tevec i in zapiemo in na MMC disk in pomoni izhod (Software uart)
Do If Tiflag = 1 Then Print #9 , I Print #2 , I Incr I Reset Tiflag End If
In za odtipavanje tipke:
Debounce Tipka , 0 , Tipkasr , Sr Config Tipka = Output V sluaju pritiska na tipko, to zapiemo in postavimo tevec i na vrednost, ki pomeni konec dela: Tipkasr: Print #2 , "tipka konec" Print #9 , "tipka" I = 50 Return
127
Zakljuek
Pisanje podatkov in beleenje dogodkov na MMC kartico se mi je izkazalo kot odlien pripomoek za sledenje dogajanja v programu, bodisi za iskanje napak v programu, bodisi za beleenje 'poslovnih' dogodkov recimo v alarmni napravi, kdaj je kdo aktiviral strao alarmne naprave, kateri dogodek je sproil alarm, in podobno. Na alost pa je za to potreben procesor z veliko RAM-a, o emer se lahko prepriate v poroilu (Report-u), ki vam ga generira Bascom pri vsakem prevajanju.
128
Bascom-AVR je e stalnica v nai reviji Svet Elektronike. Kako tudi ne bi bil, e pa je simpatino in zmogljivo orodje za relativno malo denarja. Kakne bombonke v sebi skriva Bascom tudi v urednitvu ugotavljamo z uporabo razlinih elektronskih elementov. Zadnje ase so v Sloveniji zelo popularni grafini LCD-ji s t.i. touchscreen zasloni. Zadevo sem malce pregledal in nastal je lanek o uporabi grafinega LCD-ja.
O grafinih LCD-jih ne kae izgubljati besed. Veina nas ve, da po grafinih LCD-jih lahko po mili volji riemo svoje znake, prikazujemo slike in podobno. Hkrati pa lahko na njih prikazujemo tudi tekst, podobno kot na alfanumerinih LCD-jih. O grafinem LCD-ju smo v nai reviji prvi pisali daljnega leta 1999, v letu 2000 pa je mag. Mitrovi objavil serijo lankov o krmilniku grafinega LCD-ja z malim AT89C2051. Vendar so bili takrat grafini LCD-ji teko dobavljivi in tudi cenovno neugodni, Bascom takrat e ni ponujal toliko orodij, kot smo jih deleni danes. V Sloveniji v maloprodaji lahko kupimo LGM12864B2NSWBBS in ustrezno folijo obutljivo na dotik. Grafini 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 obutljive folije bomo uporabili Atmelov mikrokontroler ATMega16. Grafini prikazovalnik ima 8 podatkovnih prikljukov in e nekaj kontrolnih.
129
Folija obutljiva 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 tono vemo, na katerem delu zaslona smo pritisnili folijo.
130
Folija je samostojna in ima na spodnji strani e predvideno lepilo, s katerim jo nalepimo na LCD. Preden jo nalepimo, je potrebno temeljito oistiti LCD zaslon kot tudi folijo. Za ienje ne uporabljajte alkohola ali drugih kemikalij, pa pa mehko krpico, ki jo rahlo navlaite z destilirano vodo. Folija se lepo prilega LCD-ju, kot vidite na sliki 2. V urednitvu Svet Elektronike smo pripravlili adapter za MiniPin, s katerim boste enostavno prikljuili LCD s folijo na raziritvene konektorje MiniPin-a.
Bascom program
Zdaj je pa zadeva e resna, saj bomo prieli 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 munih 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 olajanje oivel! Pri foliji je potrebno dodati serijske upore, predvsem zaradi zaite obutljive folije pred neelenimi kratkimi stiki. Izhod iz folije prikljuimo na A/D vhode mikrokontrolerja (PortA), podatkovne in kontrolne prikljuke grafinega LCD-ja pa veemo 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 prikljukov 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 simpatino Bascom AVR za zaetnike | Grafini LCD obutljiv na dotik 131
orodje, ki se imenuje Graphic Converter (najdemo ga v zavihku Tools). To orodje pretvori BMP datoteko, ki jo nariemo 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 kliemo podobno kot subrutino. Seveda lahko v program shranimo ve slik in jih kliemo ter prikazujemo po potrebi.
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.
132
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 naimi eljami. Velikost besedila je lahko najmanj 6 pik, drugae je besedilo teko berljivo ali celo neberljivo. Poloaj 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 sledea:
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 napiemo tevilo 1. Moram povedati, da tevilke za Y ne ustrezajo poloaju na prikazovalniku, kot bi priakovali. Pravzaprav je logino, da je tako, saj smo definirali velikost fonta 8x8 (pik). V resnici je vsak karakter visok 7 pik. Vsak font se torej prine v vekratniku tevila 8. Ker imamo na voljo 64 pik, lahko na LCD zapiemo 8 vrstic fontov z enim presledkom med vrsticami.
'
V kratki subrutini vidimo, da za vsako os (x oziroma y) posebej postavimo logino stanje na prikljuke folije, nato pa beremo izhodno napetost, ki jo dobimo iz A/D pretvornika. Izhodi so pa neke tevilke, ki nam enoznano pomenijo tono doloen poloaj na foliji. Pri tej foliji velja opozoriti, da najbolje dela, e na njo pritiskamo s trdim predmetom, kot npr. plastina (ne ostra!) paliica oziroma kaknim drugim neostrim predmetom, ki ne pokoduje folije. Seveda lahko po foliji pritiskamo tudi s prsti, vendar boste opazili, da pritisk s prstom ni dovolj natanen tako glede pritiska na folijo kot tudi pritiska na tono doloeno mesto e posebej, e imate velike prste. Za doloanje koordinat pritiska Bascom AVR za zaetnike | Grafini LCD obutljiv na dotik 133
sem si naredil enostaven program, s katerim sem na prikazovalnik narisal koordinatno mreo in izpisoval izmerjeno tevilo mesta na foliji, kjer sem pritisnil. S pomojo tega tevila lahko s programom doloamo naslednje korake. Za ta namen smo uporabili subrutino Whichkey, kjer doloimo vrstico in stolpec v navidezni mrei na foliji:
Whichkey: ugotovimo, kje je bil pritisnjen touchscreen Select Case X 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 pritisnjeno End Select Y koordinato Select Case Y vrednosti Y Case 200 To 250 : Row = 1 Case 260 To 290 : Row = 2 Case 300 To 330 : Row = 3 pritisnjeno Case Else Row = 0 End Select Key = Col + Row dobimo vrednost If Key > 0 Then Pritisnjen Keyarray(keylus) = Key debounce ' Incr Keylus ' If Keylus > 3 Then Keylus = 1 ' If Keyarray(1) = Keyarray(2) Then ' If Keyarray(2) = Keyarray(3) Then 'Sound Speaker , 1 , 65000 Keypressed = Key 'Timecount = 0 ' End If ' End If End If Return 'sub, kjer ' razlicne ' ' 'ce ni nic ' vrednosti za 'razlicne ' ' 'ce ni nic
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 doloenem razponu. To e kako pride prav pri foliji, saj nikoli ne pritisnemo na isto mesto, pa pa pritiskamo v nekem irem obmoju.
134
Zakljuek
Grafini LCD prikazovalnik in folija obutljiva na dotik nista ve nedosegljiva, pravzaprav ravno nasprotno: lepo in enostavno je delati z njima. Seveda je potrebno veliko dela, da nam bo naa aplikacija zaivela na polno, kar pomeni veliko narisanih predlog, ki jih izrisujemo na LCD-ju in jih v kombinaciji s folijo obutljivo na dotik ustrezno prikazujemo. Verjamem, da bo grafini LCD nael prostor v vaih naslednjih napravah.
135
3-pinski konektor
Priel sem do zakljuka, 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 sluaj'. Pri tem se drim 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 razline naine, 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 sledei sliki je napravica z dvema takima konektorjema. Enostavno prost prostor na tiskanem vezju sem zapolnil s konektorejma in ju povezal s prostima pinoma mikroprocesorja.
136
Seveda se da to narediti v kateremkoli programskem jeziku, le pravila so drugana, 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.
ali
Open "comd.2:9600,8,n,1" For Output As #2
137
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 pomonega konektorja, ki sem ga na zaetku omenil. Sedaj lahko v Bascomu AVR lepo piemo testne pomone informacije Recimo
In stanje tevca se bo pojavilo v novi vrstici na ekranu PC-a, e bomo seveda pravilno povezali PC z naim 3-pinskim konektorjem, a o tem kasneje. No, v Bascom8051 ne moremo pisati tako, ker pozna za softwarski uart samo ukaze Put, ki prenaajo samo en bajt, ne pa tudi ukaze Print, kjer lahko piemo cele vrstice. Pa si potem naredimo podprogram, ki nam bo nadomestil ukaz Print, vsebino, ki jo elimo napisati pa sestavimo v spremenljivki tipa niz.
138
Recimo
Dim S As String * 16 'Podroje za swuart ' splone 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 najprej spravi vsebino delovnih spremenljivk i,j in k na odloie (stack), da ne bi s spremembo vsebine teh spremenljivk pokvaril delovanje glavnega programa, saj le ta ima lahko v njih vano 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 manje dimenzije niza, in paziti pri sestavljanju niza na prekoraitev in pisati (klicati podprogram) pogosteje.
139
Seveda e nismo konali. 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 reemo z Com portom. V ta namen sem si izdelal napravico po tej shemi: (priznam shemo si nisem izmislil sam, temve sem http://chaokhun.kmitl.ac.th/~kswichit/Rs232_web/Rs232.html ) jo nael na internetu na
Na levi je 9-pinski DB9 enski konektor, ki pae na konektor PC-a. Na desni priklopimo ta vmesnik na 3-pinski konektor nae naprave, kjer s pomojo softare-uarta piemo serijsko podatke, in jih dajemo na fotodiodo optospojke. Kot vidite je levi del vmesnika popolnoma galvansko loen od desnega, in tako je PC zaiten pred elektrinimi udarci, ki bi ga lahko udarili zaradi kake elektrine napake iz nae naprave. Levi del vmesnika je napajan iz RTS kontakta 9-polnega konektorja, in tranzistor optospojke prenaa optini signal v elektrini na RXD kontakt COM porta.
140
Lepo se vidi ploski kabel, ki se kona s 3-polno vtinico 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 reemo terminal emulator. Takih programov je ve, a po mojih izkunjah je najbolji sad domae slovenske pameti, naredil ga je in dal na splono brezplano uporabo v osebne namene gospod Vlado Brajer, dobite ga pa na spletni strani http://braypp.googlepages.com/terminal
141
In sedaj vano: 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 nai delovni mizi, kjer imamo tudi osebni raunalnik z ekranom. Pokae pa se tudi potrebna, da iemo napake v programu tudi kasneje, ko je stvar e instalirana nekje recimo v kurilnici, ali na podstreju, kjer ne moremo z osebnim raunalnikom zraven.
142
V ta namen sem si naredil posebno mikroprocesorsko ploico po sledei 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 moneji avr mikroprocesor in LCD z ve vrsticami, a nekaj moram pustiti tudi vam, da imate veselje naprej delati, kaj ne?
143
Internetni naslovi
Sploni 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. Originalna stran Bascom AVR / 8051 Stran za AVR navduence! Stran z zanimivimi projekti, primerna za zaetnike!
Spletni forumi
http://www.elektronik.si/phpBB2/index.php http://www.svet-el.si/phpBB2/index.php http://www.elektron.si/forum/ http://www.mcselec.com/index2.php?option=com _forum&Itemid=59 Verjetno najveji slovenski forum, namenjen vsemu povezanim z elektroniko. Forum revije Svet elektronike; e en slovenski elektro forum Slovenski elektro forum v nastajanju (na bazi elektro-n foruma) Forum uporabnikov Bascoma (v sklopu strani www.mcselec.com)
Spletne trgovine
http://trgovina.svet-el.si/ Svet elektronike; literatura, programi, elementi (preteno za projekte, objavljene v SE), mikroprocesorji, KIT kompleti HTE (Ljubljana, Maribor, Celje); elementi http://www.ic-elect.si/ Just; orodje, merilna oprema, elementi
144
AT Tiny 2313
Flash: 2k SRAM: 128 EEPROM: 128 Pinov: 20 Drugo: 2xINT, 1xUART* *4MHz notranji oscilator ni toen, 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
145
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
146
O publikaciji
Publikacija: Avtorji: Uredil: Natisnil: Naklada: Zgodovina: Bascom AVR za vse Vilko Susti, Gregor Maek, Jure Mikeln, Matja Skubic, Bojan Kova Gregor Maek Lado eleznik 30 izvodov 1.3.2008 10.7.2008 21.3.2009 Izid publikacije (seminar Bascom) Dopolnitev (Pomagala, ki mi pomagajo pri delu z mikroprocesorji) Dopolnitev (Nadaljevalni seminar Bascom)
Dovoljeno kopiranje publikacije ali dela le-te v elektronski ali papirni obliki, pri emer prosim navedite tudi vir in avtorje!
147
Kazalo
Vsebina prironika 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 poiljanje ............................................................................................................ 33 148 Kazalo | Bascom AVR za zaetnike
RS-232 protokol ................................................................................................................................. 33 Komunikacijske nastavitve v Bascomu .............................................................................................. 34 Poiljanje podatkov PRINT .............................................................................................................. 35 Poiljanje podatkov v binarni in esdesetiki 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 odloie.................................................................................................................................... 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 Sploen opis ...................................................................................................................................... 63 Tipini primeri uporabe ..................................................................................................................... 64 Glavne znailnosti oddajnika ............................................................................................................. 64 Glavne znailnosti sprejemnika ......................................................................................................... 64 Opis vezja........................................................................................................................................... 65 Opis oddajnega programa ................................................................................................................. 66 Opis sprejemnega programa ............................................................................................................. 68 Komunikacija preko LAN omreja (modul MOXA NE-4100 serija) ........................................................ 70 Spletni vmesnik modula - nastavljanje .............................................................................................. 72 Testiranje TCP/IP povezave med raunalnikom 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 Tehnini podatki modema Falcom .................................................................................................... 84 Bascom AVR za zaetnike | Kazalo 149
Kratice................................................................................................................................................ 84 Priklop modema ................................................................................................................................ 84 AT UKAZI ............................................................................................................................................ 85 GSM data services ............................................................................................................................. 87 MiniPin in SMS....................................................................................................................................... 88 Uvod .................................................................................................................................................. 88 Priklop Falcom modema na MiniPin ................................................................................................. 89 Poiljanje SMS sporoila .................................................................................................................... 92 Sprejem SMS sporoila ...................................................................................................................... 93 Kabel tester ........................................................................................................................................... 94 Uvod .................................................................................................................................................. 94 Mikroprocesorska enota ................................................................................................................... 95 Opis delovanja ................................................................................................................................... 97 Delovanje izhodov testerja ................................................................................................................ 99 Tiskano vezje in montana shema glavne enote ........................................................................... 99 Oddaljena enota z LED diodami ...................................................................................................... 100 Tiskano vezje im montana shema oddaljene enote .................................................................. 101 Vmesnik RS232 ................................................................................................................................ 102 Delovanje ..................................................................................................................................... 102 Tiskano vezje RS232 adapterja .................................................................................................... 103 Kabel za testiranje kratkega stika .................................................................................................... 103 Prikljuni 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 Ohije ............................................................................................................................................... 114 Velike tevilke na prikazovalniku LCD-2x16 ........................................................................................ 116 AVR-DOS datoteni sistem (AVR-DOS File System) .......................................................................... 123 150 Kazalo | Bascom AVR za zaetnike
Obvezni uvod ................................................................................................................................... 123 Neobvezni uvod ............................................................................................................................... 123 Povezava MMC kartice z mikroprocesorjem ................................................................................... 124 Povezava kartice z AVR-DOS programjem....................................................................................... 125 Zakljuek .......................................................................................................................................... 128 Grafini LCD obutljiv na dotik ............................................................................................................ 129 Bascom program ............................................................................................................................. 131 Krmiljenje na dotik obutljive folije................................................................................................. 133 Zakljuek .......................................................................................................................................... 135 Pomagala, ki mi pomagajo pri delu z mikroprocesorji ........................................................................ 136 3-pinski konektor ............................................................................................................................. 136 V programu predvideti programska pomagala za laje odkrivanje napak. ..................................... 137 Internetni naslovi ................................................................................................................................ 144 Sploni 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
151
152