bascom avr začetni tečaj - arnes.sisspbvrec/umn/11_12/seminar__bascom... · gregor ma Ček, vilko...

73
Gregor MAČEK, Vilko SUSTIČ, Jure MIKELN Bascom AVR začetni tečaj, marec 2008 Bascom AVR začetni tečaj Delovno gradivo

Upload: lydiep

Post on 11-Mar-2018

261 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Gregor MAČEK, Vilko SUSTIČ, Jure MIKELN

Bascom AVR začetni tečaj, marec 2008

Bascom AVR začetni tečaj

Delovno gradivo

Page 2: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

2 Bascom AVR začetni tečaj, marec 2008

Page 3: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Uvod

Jure Mikeln

Uvod v publikacijo

Priče smo silnemu napredku na vseh področjih tehničnih znanosti. Novodobne tehnične znanosti se

imajo temu napredku zahvaliti predvsem razvoju procesorske moči osebnih računalnikov, kar je

omogočilo razvoj novih zmogljivih programskih orodij. Elektroniki poznamo veliko programskih

orodij, brez katerih si sodobnega dela ne znamo več predstavljati. Podobno velja tudi za moderne

elektronske komponente, izmed katerih bi poudaril mikrokontrolerje, ki so v zadnjih 15 letih tudi

naredili ogromen korak naprej. Ta napredek se vidi na cenovnem, predvsem pa na tehničnem

področju. Tako danes za nekaj evrov dobimo izredno zmogljiv ARM mikrokontroler (32-bitni

mikrokontroler), ki ima izredno zmogljivo periferijo, kot so analogni/digitalni in digitalno/analogni

(A/D in D/A) pretvorniki, Ethernet, CAN ter USB vmesniki, krmilniki za motorje, moduli za realno uro

in podobno. Pri tem pa ne zamešajmo izrazov: v PC-ju ne deluje mikrokontroler, pač pa zmogljiv

procesor (64-bitni), ki signale po vodilu pošilja na razne enote, kot so video, spominska, krmilnik trdih

diskov itd. Razlika med procesorjem in mikrokontrolerjem je v tem, da procesor nima vgrajene

periferije.

V tečaju, ki je pred vami, se z ARM mikrokontrolerji ne bomo spoznavali, pač pa smo pripravili

osnovne informacije, ki naj bi jih poznal začetnik - programer, da bi lahko suvereno začel programirati

mikrokontrolerje družine AVR. Takšen mikrokontroler bo brez težav poganjal motorje, vklapljal ter

izklapljal releje, sprejemal signale z različnih senzorjev in tipk, signale obdeloval ter s pomočjo LCD-

prikazovalnika prikazoval podatke in sodeloval z drugimi mikrokontrolerji ter tako predstavljal

mikrokontrolerski sistem tudi za večje zahteve. Po potrebi bo alarmiral oskrbovalce sistema bodisi

zvočno, bodisi preko mobilnih telefonov ali radijskih postaj.

AVR mikrokontrolerji

AVR mikrokontrolerji so eni izmed popularnih mikrokontrolerjev, ki so dobavljivi že približno 10 let.

Mikrokontroler si predstavljajmo kot “črno škatlo“, ki ima vhodne in izhodne priključke.

Mikrokontroler brez programa je mrtev in kot tak res neuporaben. Zaživi le, ko se v njem vpisani

program prične izvajati. Jasno pa je, da je za to potrebna tudi napajalna napetost. Mikrokontrolerje

dandanes uporabljamo v praktično vsaki napravi, bodisi da je to igrača ali zahteven industrijski PLC

krmilnik. V vseh teh napravah je vsaj en mikrokontroler, vemo pa, da v sodobnih avtomobilih deluje

več mikrokontrolerjev.

Obstaja več vrst mikrokontrolerjev, od 1, 4, 8 pa tja do 32-bitnih. Danes se največ uporabljajo 8 in 32-

bitni, redko pa še kakšni drugi. Mikrokontrolerji, o katerih bo govora v seriji člankov so 8-bitni. AVR

mikrokontroler vsebuje ALU (arithmetical logical unit) enoto, več vhodno/izhodnih (V/I, v tuji

literaturi je uveljavljen izraz I/O – input/output port) vrat ali portov, FLASH spomin in še več enot, o

Page 4: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

4 Bascom AVR začetni tečaj, marec 2008

katerih bo govora kasneje. V FLASH spomin s pomočjo programatorja naložimo naš program, ki ga v

zaporednih korakih izvaja ALU. V/I porti so večinoma dvosmerni s tem, da moramo s programom

definirati ali bo posamezni pin vhodni ali izhodni. Mikrokontroler za svoje delovanje potrebuje

napajalno napetost in večinoma tudi kvarčni kristal oziroma keramični resonator, ki ALU-ju daje t.i.

taktni signal, s katerim ALU izvaja programsko kodo. V kolikor ALU nima takta se njeno delovanje

ustavi in se spet nadaljuje, ko obnovimo taktni signal. V določenih primerih pa tudi kvarčni kristal ali

resonator nista potrebna, saj imajo AVR mikrokontrolerji vgrajen t.i. RC oscilator, ki daje takt ALU-ju

in s tem omogoča delovanje mikrokontrolerja. Izbor med RC oscilatorjem ali zunanjim kvarčnim

kristalom oz. resonatorjem definiramo med postopkom programiranja.

Notranja blok shema mikrokontrolerja ATTiny2313

Page 5: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Kot vidite je v notranjosti mikrokontrolerja veliko blokov, o katerih ne bomo izgubljali besed.

Zaenkrat naj bo mikrokontroler za nas črna škatla z vhodi in izhodi, ki jo bomo sprogramirali z našim

programom.

Program v mikrokontrolerju se odvija glede na ukaze t.i. strojne kode, ki ALU-ju določa, kaj bo

naredila. Ker ALU deluje z binarno matematiko je ukaz v strojni kodi sestavljen iz ničel in enic – pač v

binarni kodi. V začetkih mikrokontrolerjev so programerji za programiranje uporabljali strojno kodo,

vendar so kmalu ugotovili, da je to izredno nepraktično. Zato so pričeli uporabljati zbirnik (v tuji

literaturi se uporablja izraz assembler), dandanes pa vedno bolj posegamo po višjih programerskih

jezikih, kot so C, različne vrste „visual basic“ programov ter basic programov, ki programsko kodo

napisano v basic-u prevedejo v strojno kodo.

Med basic programe spada tudi programski jezik Bascom, ki se je v Evropi, pa tudi v Sloveniji lepo

uveljavil. Zavedamo se, da ima Bascom (kot tudi drugi višji programski jeziki) svoje prednosti in

slabosti, vendar trdno stojim za stališčem, da je Bascom idealno programsko orodje za začetnike v

programiranju, kar bo pokazano v nadaljevanju.

© Dovoljeno kopiranje publikacije ali dela le-te, pri čemer navedite tudi vir in avtorje!

Page 6: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

6 Bascom AVR začetni tečaj, marec 2008

Bascom AVR

Jure Mikeln

Predstavitev razvojnega okolja Bascom-AVR

Bascom trenutno obstaja v dveh verzijah: Bascom-AVR in Bascom-8051. Končnica nam nakazuje, za

katero vrsto mikrokontrolerjev je namenjen prevajalnik. Mi bomo seveda uporabljali Bascom-AVR, ki

si ga lahko brezplačno snamete s spletne strani www.mcselec.com. Z navedene spletne strani si

snemite DEMO verzijo, ki je popolnoma delujoča verzija z omejitvijo velikosti programske kode, ki jo

lahko prevedemo. Kot programerji – začetniki nam bo DEMO verzija popolnoma zadostovala, saj

bodo naši programi kratki in ne bodo dosegali omejitve DEMO verzije.

Bascom je identičen večini programov, ki tečejo v MS Oknih (Windows), zato tukaj ne bi izgubljali

besed. Ker je Bascom-AVR programsko orodje je prav, da se spoznamo z vrstami števil - spremenljivk,

ki jih lahko uporabljamo v naših programih. Na voljo so nam spremenljivke Bit (1 bit), Byte (8 bitov =

1 byte), Integer (2 byte, vrednost spremenljivke je lahko od -32,768 do +32,767), Word (2 byte,

vrednost spremenljivke je lahko od 0 do 65535), Long (4 byte, vrednost spremenljivke je lahko od -

2147483648 do 2147483647, Single (32 bitov, vrednost spremenljivke je lahko od 1.5 x 10^–45 do 3.4

x 10^38), Double (64 bitov, vrednost spremenljivke je lahko od 5.0 x 10^–324 do 1.7 x 10^308) in

String (do 264 byte, spremenljivke so tipa byte z dodatnim byte-om vrednosti nič na koncu).

Spremenljivke lahko imajo poljubna imena, ki jih ponavadi izberemo tako, da so med programiranjem

prepoznavna. Načeloma lahko spremenljivke poimenujmo X1, X2, X3 itd., vendar bomo med

programiranjem lažje razumeli program, če bomo spremenljivko, ki ponazarja vklop/izklop npr. releja

poimenovali Rele. Vsekakor pa ne smemo uporabljati t.i. rezerviranih imen. Teh je preveč za ta

prispevek, zato si jih le oglejte v Help-u. Nekaj teh imen pa lahko naštejem za boljši občutek: OFF, ON,

OR, OUT, OUTPUT, LCASE, LCD, LCDAT, LEFT, LEFT, LEN, LINE in podobno.

Page 7: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Shema vezave mikrokontrolerja

Preden bomo začeli s programiranjem, se podrobno spoznajmo še z izrazi bit in byte. Oba izraza smo

srečali že v osnovni šoli v predmetu matematika, kjer smo spoznavali binarni številski sistem, ki ima

samo dve števili: 0 in 1. Spremenljivka vrste bit ima tudi dve vrednosti 0 ali 1. Medtem ko ima število

vrste byte vrednosti med 0 do 255 (binarno: 00000000 do 11111111).

Zdaj ko smo spoznali nekaj osnov pa lahko že pričnemo s programiranjem. Za začetek si zapomnimo

enega najpogostejših ukazov: Do Loop. Ta ukaz pomeni, da se program, ki je napisan med Do in Loop

teoretično odvija v neskončnost. Prične se pri Do, ko pa med izvajanjem od ukaza do ukaza pride do

Loop se vrne na Do in tako naprej dokler ne izklopimo napajalne napetosti. Morda se bo komu to

zdelo nelogično, vendar vam bom pokazal, da se večina programov odvija v Do Loop zanki, izjemno

redki programski primeri so narejeni brez Do Loop zanke.

Prvi program

Prvi program bo izjemno enostaven. Na mikrokontroler bomo priključili LED-ice (enostavno povedano

so to polprevodniške lučke, ki se v primerjavi z lučkami z žarečo nitko izjemno malo grejejo in so tudi

fizično majhne), ki jih bomo z ustreznim programom vklapljali in izklapljali. LED-ice so zelo primerne

za krmiljenje z mikrokontrolerjem saj za normalno svetilnost potrebujejo le nekaj voltov napetosti in

nekaj mA toka, kar mikrokontroler, ki ga bomo obravnavali, z lahkoto zagotovi. Pozorni bralci bodo

na shemi poleg mikrokontrolerja in LED-ic opazili tudi upore in resonator. Upor R1 služi za ustrezno

Page 8: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

8 Bascom AVR začetni tečaj, marec 2008

resetiranje mikrokontrolerja, resonator služi generiranju takta, ki ga za svoje delovanje potrebuje

ALU, ostali upori služijo omejitvi toka, ki teče skozi LED-ice. Vezju je še dodan konektor za

programiranje mikrokontrolerja in s tem je osnovni opis vezja zaključen.

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

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

V tem programu smo najprej definirali vrsto spremenljivke, ki jo bomo uporabili. Ker vklapljamo

oziroma izklapljamo samo eno LEDico, je dovolj, da imamo spremenljivko vrste Bit.

Sledi Do-Loop zanka, v kateri ni skoraj nič programa. Najprej je potrebno definirati ali je določen port

vhodni ali izhodni. V našem primeru je izhodni, zato smo ga tako tudi definirali. Nadalje smo definirali

na katerem V/I portu se nahaja ta LEDica. V principu lahko LEDico priključimo na kateri koli prosti

port mikrokontrolerja in to definiramo v programu – kar je s stališča izdelave vezja zelo praktično. Pri

zahtevnejih projektih je namreč težje narediti enostavno tiskano vezje, kot pa spremeniti program.

Sledi ukaz

Ledica = Not Ledica in Wait 1

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

Wait 1

je trivialen in pomeni, da mikrokontroler na tem mestu v programu počaka 1 sekundo. Enostaven

program bo povzročil, da bo LEDica utripala v 1 sekundnem taktu.

Page 9: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Simulator v Bascom-u

V tem delu seminarja vam bomo prikazali uporabo Simulatorja v Bascomu. Bascom ima vgrajen

softverski simulator, ki nam pomaga pri razhroščevanju programa. Simulator je zgolj enostaven

pripomoček in ne 100% zanesljivo orodje, saj v simulatorju ne moremo dobro simulirati prekinitev,

časovnih zank in drugih zahtevnejših operacij. V simulatorju bomo lahko spremljali potek programa,

vpisovali vrednosti spremenljivk med izvajanjem simulatorja ter na podlagi tega spremljali odziv na

LCD simulatorju kot tudi na LEDicah.

Simulator je razdeljen na več oken. V glavnem oknu vidimo naš program oziroma le del programa, saj

za celoten program ni dovolj prostora v oknu. Nadalje vidimo okno, kjer so zavihki Variable, Locals,

Watch, uP, Interrupts. Nadalje je tukaj še okno Interrupts in okno z zavihkoma UART0/UART1.

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

UART zavihkoma.

V prvem oknu bomo spremljali potek izvajanja programa. Izvajanje programa lahko sprožimo na dva

načina: tekoče ali po korakih. Če izberemo tekoče izvajanje progama bomo izredno težko spremljali,

kaj se dogaja s programom, saj se bo program odvijal zelo hitro in tako bo spremljanje praktično

nemogoče. Zato ponavadi izberemo izvajanje po korakih (F8). Vsakič ko pritisnemo tipko F8 se bo

kazalec pri vrstici programa premaknil za eno vrstico naprej in izvedel napisan ukaz. Če želimo v tem

trenutku spremeniti vrednost določene sprejemljivke kliknemo v okno Variables in ročno vpišemo

ime sprejemljivke oziroma jo izberemo iz padajočega menija. Potrdimo z Enter in v oknu Value

vpišemo vrednost spremenljivke ter potrdimo z Enter. Nato lahko spet izvajamo program v

simulatorju po korakih. V kolikor pa se izkaže, da je izvajanje programa dolgo, lahko izberemo tekoče

izvajanje programa. V tem primeru si v oknu s programom označimo t.i. Break točke, kjer se izvajanje

simulatorja ustavi. break točke postavimo tako, da z desnim gumbom miške kliknemo pri odseku

programa, kjer želimo imeti Break točko in kliknemo Toggle Break point. Na isti način Break točko

tudi odstranimo.

Page 10: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

10 Bascom AVR začetni tečaj, marec 2008

Simulator in UART

Simulator lahko s pridom uporabljamo pri simulaciji RS232 komunikacije. Za ta namen je pripravljeno

okno UART, v katerem se bo izpisovala vsebina (podatki), ki bi se sicer izpisovali na terminalu. V okno

UART lahko tudi vnesemo spremenljivke, ki jih sprejemamo po UART-u – recimo iz tipkovnice.

Simulator in LCD/LED

Simulator lahko prikazuje izpis na LCD-ju oziroma na LEDicah. Kliknemo na ikono LCD in odprlo se bo

okno, kot ga vidimo na sliki:

Okno LCD in LED simulatorja

Simulator bo stanje na LEDicah izpisoval tako, da logična 1 „vklopi“ LEDico. Ker vemo, da to ne

ustreza realnim mikrokontrolerjem je spodaj levo okno, kjer odkljukamo Invert in s tem preprečimo

to obnašanje simulatorja.

Page 11: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Programiranje AVR mikrokontrolerjev

Jure Mikeln

Opis MiniPin razvojnega orodja in programiranje

MiniPin razvojno orodje ni nič drugega kot ploščica tiskanega vezja, na katerem so že prispajkani

določeni elektronski elementi, ki jih programer, ko programira mikrokontroler, s pridom uporablja.

MiniPin lahko uporabimo tako za 20 kot tudi 40-pin mikrokontrolerje družine 8051 in AVR. Ker v

našem nadaljevanju teče beseda o programiranju AVR-jev, se bomo osredotočili na AVR-je. Nadalje je

na MiniPin že predviden prostor za kvarčni kristal oziroma 3-pin keramični resonator, ki ga lahko

uporabimo namesto kvarčnega kristala. Na vezju najdemo 4x8 LEDic (ki so vezane tako, kot je

prikazano na Sliki 2), 4 tipke + 1 reset tipko, priključke za LED in LCD prikazovalnike, 1Wire elemente,

I2C spominske elemente, RS232, RS485 ter integriran regulator napetosti, s katerim napajalno

napetost mikrokontrolerja nastavimo na 5V ali na vedno bolj popularnih 3,3V. MiniPin ima tudi več

razširitvenih konektorjev, ki jih bomo spoznali sproti.

Fotografija MiniPin z označenimi elementi

Page 12: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

12 Bascom AVR začetni tečaj, marec 2008

MiniPin napajamo z enosmerno ali izmenično napetostjo od 9-15V. V vezje vtaknemo mikrokontroler

ATTiny2313-20PU na mesto IC6, na mesto U1 vtaknemo 12 MHz kvarc ali resonator, stikalo S3

preklopimo v položaj AVR in že smo pripravljeni, da povežemo MiniPin s programatorjem in

sprogramiramo mikrokontroler.

Za programator lahko uporabimo Proggy programator ali pa si sami naredimo programator po

načrtu, ki ga vidite na sliki 4.

Shema Sample programatorja

Tako Proggy kot Sample programator povežemo na MiniPin na konektor K6. V Bascomu je potrebno

nastaviti (Options/Programmer) izbrani programator, kot vidite na sliki 5.

Page 13: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Nastavitev programatorja

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

V koliko boste uporabljali Proggy svetujem, da najprej naložite program AVR Studio, kjer boste

nastavili Tools/ProgramAVR/Connect in nastavili program, kot kaže spodnja slika:

Page 14: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

14 Bascom AVR začetni tečaj, marec 2008

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

Proggy je pripravljen za programiranje v AVR Studiu

Zdaj smo pa že res pri koncu nastavitev strojne in programske opreme. Program, ki smo ga napisali v

Bascom-u prevedemo (Compile ali tipka F7) in v primeru, da uporabljamo Sample programator

kliknemo ikono Program Chip ali pritisnemo F4. Če pa uporabljamo Proggy v

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

Podobno dosežemo, če v Bascomu namesto Sample programatorja nastavimo STK500 in v oknu

SKT500EXE izberemo, kje se nahaja exe datoteka za STK500 program. Pred tem še odstranimo

kljukice pri Auto Program in Auto Verify ter postavimo kljukico na Upload Code and Data.

Page 15: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Ne glede na uporabljeni programator nastavimo mikrokontroler, ki ga programiramo (ATTiny2313) in

kliknemo Program. S tem smo sprogramirali mikrokontroler!

Preden gremo na samo programiranje in Bascom se še malce ustavimo na t.i. Fuse in Lock bitih, ki

znajo pri začetnikih povzročiti kar nekaj težav. Fuse in Lock biti so posebni – recimo temu

konfiguracijski biti, ki (na žalost) niso nastavljivi iz programske kode pač pa jih nastavljamo ob

postopku programiranja.

Lock biti

Lock biti so – kar že samo ime pove, biti, ki zaklenejo mikrokontroler. Zakleniti mikrokontroler

pomeni, da ga ne morete prebrati, programirati oziroma niti programirati niti verificirati. S tem lahko

vsebino kontrolerja (program) zaščitimo pred kopiranjem. V enem delu Lock bitov so tudi biti, s

katerimi določamo t.i Bootloader s katerim se bomo ukvarjali v nadaljevalnem tečaju. Na kratko,

bootloader omogoči, da posodobimo program v mikrokontrolerju kar preko UART vmesnika, ne da bi

potrebovali programator.

Fuse biti

Fuse biti pa nastavljajo sledeče: WatchDog timer (Vklop/Izklop), Bootloader Flash prostor, Brown out

detektor (Vklop/Izklop) ter izbor oscilatorja mikrokontrolerja, ki je lahko zunanji, notranji RC ali

zunanji kvarčni z različnimi frekvencami.

Page 16: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

16 Bascom AVR začetni tečaj, marec 2008

Priklop periferije na mikrokontroler

Jure Mikeln, Gregor Maček

Vezava tipke

Tipko lahko vežemo v t.i. pull-up vezavi (ko je tipka pritisnjena, je sklenjena proti masi, sicer pa preko

10k »pull up« upora proti VCC – vhod ima pri pritisnjeni tipki vrednost 0) ali pull-down vezavi (ko je

tipka pritisnjena, je sklenjena proti VCC, sicer pa preko 10k »pull down« upora proti masi – vhod ima

pri pritisnjeni tipki vrednost 1).

Omenjeni upori so namenjeni definiranju stanja spuščene tipke, saj se sicer lahko zgodi, da vhod

»zaplava« in menja stanja brez, da bi bilo karkoli pritisnjeno. Na zgornji sliki je narisana pull up vezava

(R1 na sliki je na primer tak pull up upor).

Page 17: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Vezava LED diode

Tudi LED diodo lahko vežemo proti masi ali proti VCC (kot na zgornji sliki); v slednjem slučaju

bo LED prižgana, ko bo izhod na logični 0, ugasnjena pa, ko bo izhod na logični 1.

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

pa, ko je izhod na logični 0.

AVR družina mikrokontrolerjev je sposobna na izhodu direktno poganjati največ 20mA toka,

ne glede na to ali vežemo breme proti masi ali proti VCC. Kontrolerji prejšnje, 8051 družine,

pa so lahko takšen tok zagotovili le pri vezavi bremena proti VCC, ne pa tudi proti masi.

V vsakem primeru moramo zaporedno z LED diodo vezati upor, s katerim omejimo tok skozi

diodo, saj lahko v nasprotnem primeru uničimo kontroler in/ali LED diodo.

Page 18: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

18 Bascom AVR začetni tečaj, marec 2008

Vezava PFET in NFET tranzistorja

Mikrokontroler ima prešibke izhode za krmiljenje močnejših porabnikov - Rt (npr. relejev, žarnic itd.),

zato moramo njihov izhod „ojačiti“. To ponavadi naredimo s tranzistorjem, v zadnjem času so

popularni FET tranzistorji, zato bomo prikazali vezavo FET-ov. Pri programiranju bodimo pozorni:

NFET vklapljamo z logično 1, PFET pa z logično 0.

Page 19: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Vezava LDC prikazovalnika

V tem seminarju bomo predstavili uporabo 2x16 LCD prikazovalnika, ki je nekako najbolj razširjen. Vsi

tekstovni zasloni, ne glede na velikost, se priklapljajo enako, potrebno pa je preveriti v dokumentaciji

posameznega zaslona, kje imajo pine za krmiljenje, saj razpored ni povsem standarden (predvsem kje

je pin 1, pini v nadaljevanju so navadno po standardnem razporedu).

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

zaslona.

Navadno tekstovni LCD uporabljamo v t.i. 4 bitnem načinu, kjer imamo med kontrolerjem in

zaslonom 6 linij: 4 data linije, enable in reset. Obstaja pa tudi 8 bitni način naslavljanja, kjer imamo 8

data linij ter enable in reset (torej skupno 10 linij).

Page 20: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

20 Bascom AVR začetni tečaj, marec 2008

Krmiljenje DC motorja

DC motor lahko krmilimo zgolj preko tranzistorja (vklop/izklop), če pa želimo nadzorovati tudi smer

vrtenja pa ga najlažje krmilimo preko namenskega vezja L272M. Omenjeno integrirno vezje omogoča

krmiljenje izhoda z maksimalnim tokom 1A, pred preobremenitvijo pa je zaščiten tudi s posebnim

vezjem, ki izklopi izhod, če se vezje pregreje.

Page 21: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Uporaba izhodov

Gregor Maček

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

Za informacije o dodatnih funkcijah posameznih pinov imamo v datasheetu vsak register posebej detajlno opisan. Ko pišemo program, moramo najprej konfigurirati posamezne porte/pine tako, da prevajalnik ve, ali bomo posamezni pin/port uporabili kot vhod ali kot izhod. Izhode konfiguriramo z ukazom CONFIG: Config Porta = Output 'Lahko nastavimo cel register kot output Config Portb.0 = Output 'Lahko pa tudi zgolj posamezni pin iz registra Config Portb.1 = Output

Page 22: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

22 Bascom AVR začetni tečaj, marec 2008

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

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

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

Page 23: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Uporaba vhodov

Gregor Maček

Najprej moramo v programu konfigurirati posamezne porte/pine tako, da prevajalnik ve, ali bomo

posamezni pin/port uporabili kot vhod ali kot izhod. Vhode tako kot izhode konfiguriramo z ukazom

CONFIG:

Config Porta = Input 'Lahko nastavimo cel port kot output

Config Portb.0 = Input 'Lahko pa tudi zgolj posamezni pin iz porta

Da bomo lahko gledali spremembe, potrebujemo tudi kakšen izhod...

Config Portc = Output

Branje vhoda z ukazom IF-Then

Najenostavneje beremo stanje vhoda z IF stavkom. Naredimo program, ki prižge LED na pinu C.0, če

pritisnemo tipko na pinu B.0

Do If Pinb.0 = 1 Then 'Pogojni stavek: če je pin B.0 na stanju 1 (+5V - tipka stisnjena), potem ... Set Portc.0 'prižgem LED diodo na C.0 ... Else '... sicer ... Reset Portc.0 'ugasnem LED diodo na C.0 End If 'Konec pogojnega stavka Loop

Slabost omenjene rešitve je, da tipka lahko pri pritisku/spustu odskakuje in v aplikacijah, kjer štejemo

število pritiskov itd. lahko dobimo napačen rezultat. Problem lahko rešimo tako, da po prvem

prebiranju tipke počakamo nekaj časa in nato še enkrat preverimo stanje tipke in šele če obe stanji

sovpadata, izvršimo dejanje.

Do If Pinb.0 = 1 Then Waitms 50 'malo počakamo If Pinb.0 = 1 Then 'ponovno preverimo stanje in če je tipka še vedno pritisnjena... . . . 'naredimo željeno operacijo End If End If Loop

Page 24: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

24 Bascom AVR začetni tečaj, marec 2008

Branje vhoda z ukazom DEBOUNCE

Bascom pa omogoča taisto zadevo še enostavneje, s posebnim ukazom "debounce" – ta ukaz ob

pritisku tipke samodejno počaka prednastavljeno časovno periodo, nato stanje tipke preveri še

enkrat in vkolikor ugotovi, da je tipka dejansko pritisnjena, skoči na nastavljeni kazalec oz. v

podprogram (če je dodan še SUB parameter):

Config portb.0 = input 'Port b.0 konfiguriramo kot vhod Config portc.0 = output 'Port c.0 konfiguriramo kot izhod Config Debounce = 40 'Najprej konfiguriramo čas, po katerem je pritisk tipke veljeven; v tem primeru 40ms

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

V programih se GOTO ukaza skušamo izogibati, saj potek programa z več GOTO ukazi postane zelo

nepregleden; rajši uporabimo skok podprogram, iz katerega se z ukazom RETURN vrnemo tja, s kjer

smo skočili:

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

Page 25: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Uporaba tekstovnega LCD zaslona

Gregor Maček

Konfiguracija zaslona

Zaslon moramo najprej konfigurirati - Bascomu povedati, katere pine uporabljati. To storimo v

Options - Compiler – LCD. Navadno moramo nastaviti le tip - velikost LCDja ter katere priključke

uporabljamo. Ostale nastavitve pustimo takšne, kot so.

V samem začetku programa zaslon "pobrišemo" z ukazom CLS in izklopimo kurzor (če ga ne rabimo):

Cls 'Pobrišemo zaslon Cursor Off 'Izklopimo prikaz kurzorja

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

Izpis na zaslon – ukaz LCD Lcd "Testiranje"

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

Lcd "Nadaljujem"

Tega navadno ne želimo. Zato lahko, če želimo izpisati nov zaslon, le-tega najprej pobrišemo in nato

zapišemo

Cls Lcd "Nadaljujem 2"

Pozicioniranje teksta na zaslon – ukaz LOCATE

ali pa povemo, na kateri poziciji zaslona želimo pisati z ukazom LOCATE Y , X. Če želimo npr. izpisati

tekst "test" na 3. polju v 2. vrstici, to storimo tako:

Cls Locate 2 , 3 Lcd "test"

Lahko uporabljamo tudi ukaze LOWERLINE, THIRDLINE in FOURTHLINE, s katerimi se

pomaknemo v izbrano vrstico - npr.

Page 26: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

26 Bascom AVR začetni tečaj, marec 2008

Cls Lcd "1. vrstica" Lowerline Lcd "2. vrstica"

Seveda lahko uporabimo prej omenjene ukaze glede na velikost LCD zaslona, ki ga uporabljamo (ne

moremo npr. uporabljati ukaza THIRDLINE pri dvovrstičnem zaslonu).

V samih programih se nam dostikrat pojavi problem, ker se določen tekst na zaslonu ne izpiše.

Najpogosteje je vzrok temu program, ki teče v zanki in v kateri imamo tudi ukaz CLS, ki zaslon izbriše.

Ker zanka teče zelo hitro, izpisanega teksta ne vidimo, saj je prej izbrisan. Pri vsakem brisanju zaslona

(CLS) zaslon tudi utripne, zato se ukaza CLS v zanki poskusimo čimbolj izogibati in raje tekste in

spremenljivke zgolj prepisujmo (uporabimo tudi ukaz LOCATE).

Sedaj smo prikazovali statično vsebino - v narekovajih. Pri prikazu spremenljivk je zadeva podobna, le

da spremenljivko ne napišemo v "narekovaje"

Dim A As Byte A = 0 Cls Do Incr A 'povečam A za 1 (isto kot bi napisal A = A + 1) Locate 1 , 1 Lcd A Wait 1 Loop Until A = 30

Premik teksta po zaslonu v levo ali desno – ukaz SHIFTLCD

Z ukazoma SHIFTLCD lahko vsebino zaslona premikamo po zaslonu levo/desno

A = 1 'spremenljivka za premikanje Cls Lcd “Tekst na LCD” For A = 1 To 10 Shiftlcd Left 'premikamo v levo .... 'Shiftlcd Right '... ali desno ... Wait 1 'vsako sekundo za 1 znak Next

Page 27: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Kreiranje lastnih znakov

V kolikor želimo kreirati kakšen poseben znak, ki ni v ASCII tabeli, to lahko storimo z Bascom orodjem

LCD designer: Tools -> LCD Designer Še prej se postavimo v prazno vrstico programa, kjer bo nato

vnešena koda za nov znak; najbolje, da je to v začetku programa (poleg konfiguracije zaslona). Odpre

se nam okno, kjer lahko s klikanjem naredimo željen znak. Ko kliknemo OK, se nam v izbrano vrstico

izpiše naslednja koda: (variira glede na narejeni karakter)

Deflcdchar ?,16,16,8,8,4,4,3,3' replace ? with number (0-7)

Vprašaj moramo zamenjati za številko od 0 do 7 (kreiramo lahko 8 svojih znakov),

torej naredimo npr.

Deflcdchar 1 , 32 , 7 , 5 , 7 , 32 , 32 , 32 , 32 'znak za stopinje

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

Lcd Chr(1)

Izpis v tekstu pač naredimo povsem navadno, kot izpis na LCD:

Lcd "Temp je 12" : Lcd Chr(1) : Lcd " Celzija"

Zgornji program izpiše: Temp je 12° Celzija

Pri čemer smo znak za stopinje naredili sami.

Vloga dvopičja je ista kot da bi pisali vsako postavko v novo vrstico, le pregledneje je tako.

Inicializacija zaslona med delovanjem programa – ukaz INITLCD Vkolikor naredimo aplikacijo, kjer LCD priklopimo zgolj občasno (npr. ko želimo preveriti določene

parametre), nam le-ta pri »on-line« priključitvi ne bo deloval. Vzrok temu je to, da zaslon ni

inicializiran, kar se zgodi ob zagonu programa (Bascom prevede kodo tako, da v začetek programa

postavi tudi inicializacijo samega displaya tudi, če INITLCD ne uporabomo).

Če pa v program vključimo omenjeno funkcijo, se zaslon inicializira tudi tekom delovanja programa

in ga potemtakem lahko priključimo med delovanjem same aplikacije.

Page 28: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

28 Bascom AVR začetni tečaj, marec 2008

Komunikacija – UART pošiljanje

Gregor Maček

Za komunikacijo s perifernimi napravami (GSM modem, GPS ...) največkrat uporabljamo UART

vmesnik. UART je kratica za universal asynchronous receiver/transmitter - torej univerzalni asinhroni

prenos (pošiljanje/sprejem) podatkov. Več o samem standardu lahko zveste na Internetu.

RS-232 protokol

S pretvorniki (npr. MAX232, MAX485) lahko napetosti prilagodimo aplikaciji, ki jo delamo. Za kratke

razdalje lahko uporabljamo kar direkten priklop UART <-> UART, vkolikor pa imamo vmes daljše kable

ali v okolju motnje, uporabimo napetostni pretvornik.

Kot primer uporabimo MAX232, s katerim dosežemo nivoje, potrebne za RS232 komunikacijo

(Reccomended Standard 232), ki navadno uporablja +/-22V napetostne nivoje. Ker prenašamo višje

napetosti je tudi vpliv motenj na samo komunikacijo manjši. RS232 je tudi vmesnik, ki ga imamo

največkrat na razvojni plošči...

Page 29: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

AVR mikroprocesorji imajo navadno 1 UART vmesnik (TX/RX), določeni večji modeli pa tudi po več (2

ali celo 4). Mi se bomo tokrat omejili le na en vmesnik, prav nič bistveno bolj pa ni komplicirana

uporaba dveh ali več.

Komunikacijske nastavitve v Bascomu

V Bascomu moramo najprej nastaviti parametre komunikacije. To storimo v Options -> Compiler ->

Communication.Tu izberemo hitrost, s katero želimo komunicirati (baudrate) in nastavimo frekvenco

procesorja. Vkolikor uporabljamo interni oscilator (1/4/8 MHz) nastavimo to vrednost, če pa

uporabljamo kristal, pa nastavimo frekvenco kristala. Če se malo igramo z nastavitvami, vidimo da je

faktor napake najmanjši (oz. ga sploh ni) pri frekvenci kristala 11,059MHz. Vkolikor uporabljamo

drugo frekvenco, je vedno neka napaka (ki se seveda veča z višanjem hitrosti prenosa), a vrednosti

pod 5% so največkrat sprejemljive. Vse omenjene nastavitve lahko vpišemo tudi direktno v program

in tako vpisane imajo prednost pred nastavitvami, izbranimi v meniju. Ravno tako lahko v sam

program vključimo ostale informacije (o procesorju, pinih LCDja itd.) Primer:

$regfile = "m16def.dat" $crystal = 8000000 $baud = 19200 $hwstack = 32 $swstack = 8 $framesize = 24

Torej, ko smo opravili nastavitve komunikacije, poskusimo nekaj poslati na UART oziroma RS-232

izhod (na razvojni plošči je že MAX232, ki poskrbi za pretvorbo napetostnih nivojev). To storimo z

enostavnim ukazom PRINT.

Pošiljanje podatkov – PRINT

Da bomo imeli kje spremljati komunikacijo, bomo RS232 vmesnik na razvojni plošči morali povezati z

RS232 vmesnikom na računalniku. Kabel mora biti t.i. crossover – TX pin (izhod) mora biti povezan z

RX pinom(vhod) računalnika in obratno. Potem lahko komuniciramo z uporabo HyperTerminala (del

Windows XP) oz. uporabimo naprednejši program kot je npr. Brayev terminal. Slednji je priporočljiv

tudi zato, ker HyperTerminal ne pokaže vsega, kar se dogaja na ravni protokola (CR, LF ...).

Do Print "Posiljam podatke preko RS232 vmesnika" Wait 3 Loop

Zgornji program vsake 3 sekunde pošlje omenjeno sporočilo na RS232 port in v kolikor imamo

računalnik pravilno nastavljen (izbran pravilni port in hitrost) ter pravilno narejeno povezavo se le to

prikaže v oknu programa.

Page 30: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

30 Bascom AVR začetni tečaj, marec 2008

Prazno vrstico enostavno kreiramo s praznim ukazom PRINT, torej:

Do Print "test" Print 'prazna vrstica Print "test2" Wait 3 Loop

Če želimo več vrednosti poslati v eni vrstici (brez CR), kot ločilo uporabimo podpičje:

Do Print "test " ; "naprej " ; "v eni " ; "vrstici" Wait 3 Loop

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

te izpustimo.

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

Če želimo izpisati šesdesetiško ali binarno vrednost spremenljivke, to storimo z ukazoma PRINT HEX

oz. PRINT BIN:

Dim A As Byte A = 20 Do Print Bin(A) 'pošljem A kot binarno vrednost Wait 3 Print Hex(A) 'pošljem A kot šesdesetiško vrednost Wait 3 Loop

Page 31: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Komunikacija – UART sprejemanje

Gregor Maček

Sprejem podatkov z ukazoma INKEY, WAITKEY

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

gre.

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

Podoben ukaz kot INKEY je tudi WAITKEY, s to razliko, da se v primeru uporabe WAITKEY program na

tem mestu ustavi in stoji, dokler nekaj ne prejmemo.

Sprejem podatkov z ukazom INPUT

Tega ukaza se največkrat poslužimo, če želimo narediti komunikacijo med Hyperterminalom in našo

aplikacijo z namenom spreminjanja parametrov sistema itd. Program

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

Wait 3

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

Page 32: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

32 Bascom AVR začetni tečaj, marec 2008

Multipleksiranje – 7 segmentni LED

Vilko Sustič

Svetleča dioda sveti, če teče skozi njo tok v prevodni smeri. Običajno tok sklenemo in prekinjamo na

strani katode, tako da potencial katode damo na 0V, med tem ko je anoda vezana na stalni vir

energije +5V.

POZOR, na slikah ni narisan upor, ki se veže v serijo z diodami, za omejitev toka, kajti 5V je

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

razlago delovanja.

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

Na strani anode si pomagamo s PNP tranzistorjem, ki ga odpremo z tokom skozi bazo, ki ga ustvarimo

tako, da damo drugo stran upora na nizek potencial 0V . Da bo dioda svetila morata torej biti oba

izhoda iz mikroprocesorja na nizkem potencialu.

Ta koncept uporabimo, kadar želimo upravljati z velikim številom diod:

Page 33: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Uporabili smo 8 + 4 = 12 izhodov mikroprocesorja, in upravljamo z 8 x 4 = 32 diodami. Lahko

prižgemo katerokoli diodo, če le pravilno vzbujamo izhode s katerimi krmilimo potenciale na diodah.

Problem postane, kadar bi radi, da bi svetilo več diod hkrati. To se da samo takrat, če so diode, ki naj

bi hkrati svetile bodisi v isti vrstici, bodisi v isti koloni.

Oglejmo si vezje Minipin plošče. Na njej so štirje 7-segmentni prikazovalniki, od katerih ima vsak 8

diod in vse imajo skupno anodo, prav tako, kot ima 8 diod vezano skupaj anode na zgornji sliki.

Katode so speljane ven, vsaka za en segment in ena za diodo, ki predstavlja

decimalno piko. Vsaka dioda ima tudi svoje ime, pravzaprav črko:

.

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

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

A Portb.7 x x x x x x x x

B Portb.1 x x x x x x x

C Portb.5 x x x x x x x x

D Portb.4 x x x x x x x

Page 34: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

34 Bascom AVR začetni tečaj, marec 2008

E Portb.2 x x x x x

F Portb.3 x x x x x x x

G Portb.0 x x x x x x x

Dp Portb.6

Nič pa ne bo narobe, če se o tem prepričamo. Naredimo si program, ki bo dajal na 0V ciklično vsak

portpin posebej, in istočasno bomo odprli tok skozi enega od tranzistorjev:

Reset Portd.7

Do

For I = 0 To 7

Portb = 255

Portb.i = 0

Wait 3

Next

Loop

Seveda moramo jumperje na Minipin plošči tudi pravilno postaviti, sicer ne bo nič videti. In potem

poženemo program vaja2.bas:

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

Page 35: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

0 1 2 3 4 5 6 7 'Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D 8 9 A B C D E F 'Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

To, kar vidimo, mora odgovarjati načrtu. Vendar ne odgovarja, ker sem pri prenašanju načrta v

tabelo namerno naredil napako, prosim popravite jo.

Če vežete v vašem projektu diode drugače, boste pač tudi krmilili malo drugače.

In sedaj moramo doseči, da na 7-segmentnem prikazovalniku ne bo svetila samo ena dioda, temveč,

da bodo svetile vse tiste diode, ki bodo skupaj optično pričarale vsebino, ki jo želimo prikazati. Če

želimo prikazati enojko, morata svetiti diodi B in C, če hočemo prikazati trojko, potem morajo svetiti

diode A,F,G,E,D. in tako naprej za vse znake, ki jih želimo prikazati. Kako to naredimo?

Za vsako vrednost spremenljivke, ki jo želimo prikazati, se pravi od 0 do 9, no morda do 15, naredimo

bajt, ki ima odgovarjajoče bite na 0, ostale bite na 1.

Razložim na primeru enice:

Pri enici naj svetita samo diodi B in C, ki sta vezani na Portb.1 in Portb.5

Portb ima osem bitov ki so numerirani tako :

7 6 5 4 3 2 1 0 in vsebina le teh za enico bodi:

1 1 0 1 1 1 0 1 kar heksadecimalno zapišemo kot

D D

Tako moramo priti do vsej 10 (ali 15) konstant in jih postavimo v vrsto:

Minipin7seg:

' 0 1 2 3 4 5 6 7

Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D

' 8 9 A B C D E F

Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

In potem z lookup ukazom potegnemo iz te vrste tistega, ki odgovarja spremenljivki:

Portb = Lookup(i , Minipin7seg)

Preverimo to s programom vaja3.bas:

Dim I As Byte

Dim J As Byte

Dim K As Byte

Dim L As Byte

Dim S As String * 16

Config Portb = Output

Page 36: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

36 Bascom AVR začetni tečaj, marec 2008

'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:

Dim I As Byte

Dim J As Byte

Dim K As Byte

Dim L As Byte

Dim S As String * 16

Config Portb = Output

'dodamo 7seg displey na PD.7

Config Portd = Output

Do

For I = 0 To 3

Portb = Lookup(i , Minipin7seg)

Portd = 255

Page 37: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

If I = 0 Then Reset Portd.4

If I = 1 Then Reset Portd.5

If I = 2 Then Reset Portd.7

If I = 3 Then Reset Portd.3

Wait 1

'Eksperimentiraj Z Različnimi Zakasnitvami

Waitms 5

Next

Loop

Minipin7seg:

' 0 1 2 3 4 5 6 7

Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H4A , &H42 , &H5D

' 8 9 A B C D E F

Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72

Sedaj se prikazovalniki prikazujejo eden po eden po vrsti. Če zakasnitveni čas primerno zmanjšamo,

bo oko videlo, kot da delajo vsi hkrati, in to vztrajnost očesa uporabimo pri kot rečemo

mulitpleksiranemu krmiljenju 7-segmentnih prikazovalnikov.

Vendar prikazati moramo neko vsebino! Prikažimo vsebino spremenljivke I!

' V zanki iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni

' in le te prikažemo:

Eni = I Mod 10

Des = I Mod 100

Des = Des / 10

Sto = I Mod 1000

Sto = Sto / 100

Tis = I / 1000

For K = 0 To 3

Portb = Lookup(i , Minipin7seg)

Portd = 255

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

Page 38: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

38 Bascom AVR začetni tečaj, marec 2008

Portb = Lookup(eni , Minipin7seg)

End If

'Wait 2 experimentiraj z različnimi zakasnitvami

Waitms 5

Next

In dodamo še preprosto spreminjanje vrednosti spremenljivke I .

Če pritisnemo tipko, se vrednost poveča za 1:

Tipka1 Alias Pind.0

Config Pind.0 = Input

Debounce Tipka1 , 0 , Dodaj

Goto Preskok2

Dodaj:

Incr I

Preskok2:

Opazimo, da s pritiskom na tipko malo zmotimo prikazovanje, svetloba prikazovalnikov utripne. Se da

to popraviti? Izboljšati? Odgovor je seveda ja.

A v ta namen si moramo pomagati z časovno prekinitvijo, timer interruptom. Mikroprocesor ima

napravo, časovnik ali angleško timer. Le ta sicer ne meri časa, temeč utripe kristala oziroma

oscilatorja, ki poganja mikroprocesor, kar je pravzaprav nekaj podobnega.

Page 39: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Zaenkrat se ne bomo spuščali v veliko teorijo o tem, temveč si bomo pomagali s programom ki ga je

prijazno dal brezplačno na voljo gospod Ian Dobson. V okno ki izgleda tako:

Vtipkamo frekvenco kristala ali oscilatorja in želeni čas prekinitve in že nam ponudi bascom avr kodo,

ki jo iščemo:

Page 40: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

40 Bascom AVR začetni tečaj, marec 2008

To kodo enostavno prenesemo v naš program. Seveda pa moramo sami napisati v časovno

prekinitveni podprogram, kaj naj naredi.

Naš prekinitveni podprogram naj prikaže eno dekado, in se vrne, drugič drugo in tako naprej.

' PREKINITVENI PODPROGRAM – Vaja 6

Timer0_isr:

Load Timer0 , Timer0reload

' V prekinitveni rutini vsakokrat prikažemo eno od 4 številk

' in to neodvisno od dela glavnega programa, zato ni utripanja, kadar

' glavni program dela kaj drugega

Dim Tis As Word 'Tisočice

Dim Sto As Word 'Stotice

Dim Des As Word 'Desetice

Dim Eni As Word 'Enice

'Iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni

' in le te prikažemo:

Eni = I Mod 10

Des = I Mod 100

Des = Des / 10

Sto = I Mod 1000

Sto = Sto / 100

Tis = I / 1000

Incr K

If K > 3 Then K = 0

Portb = Lookup(i , Minipin7seg)

Portd = 255

If K = 0 Then

' vsak displej posebej vklopimo

Reset Portd.4

' in za vsak displej vzamemo svojo vrednost za prikaz

Portb = Lookup(tis , Minipin7seg)

End If

If K = 1 Then

Reset Portd.5

Portb = Lookup(sto , Minipin7seg)

End If

If K = 2 Then

Reset Portd.7

Portb = Lookup(des , Minipin7seg)

End If

If K = 3 Then

Reset Portd.3

Portb = Lookup(eni , Minipin7seg)

End If

Return

Glavni program sedaj se ne ukvarja več z prikazovanjem na 7 segmentne prikazovalnike, temveč se

ukvarja za bistvenimi zadevami, rezulat da v spremenljivko I, prikazovanje le te pa opravi

podprogram. Opazimo sedaj, da pritisk na tipko ne zaustavlja prikazovanja in svetloba ob pritisku na

tipko ne utripne.

Page 41: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Prekinitve (Interrupti)

Vilko Sustič

Mikroprocesorji omogočajo prekinitve delovanja glavnega programa. Zakaj? Včasih je nujno

potrebno narediti kako malenkost takoj, in ne čakati, da bo mikroprocesor po programu zaključil

nekaj, za kar potrebuje še nekaj časa, kajti takrat zna biti prepozno. Zato je prekinitev vedno vezana

na mali podprogram, v katerem smo programirali, kaj je potrebno tako nujno narediti. Prekinitev je

povzročena lahko na različne načine, lahko je časovna prekinitev, ki nastopi, ko mine določen čas,

lahko je zunanja prekinitev, ki nastopi ob spremembi nivoja napetosti na kakem vhodu

mikroprocesorja (port-pinu), lahko se proži, ko UART zazna in prebere nek bajt, ki pride po

komunikacijski liniji v mikroprocesorski medspomin – buffer.

V splošnem velja, da se prekinitev izvede tako, da se najprej spravi vse bistvene podatke o dogajanju

v mikroprocesorju zaradi delovanja glavnega programa na odložišče (stack) in se šele potem požene

prekinitveni podprogram. Ko prekinitveni program zaključi svoje delo z ukazom Return, se potem iz

odložišča spet napolnijo vsi registri mikroprocesorja in glavni program nadaljuje svoje delo, kot da se

ni nič zgodilo. No, je pa preteklo nekaj časa, in že samo to dejstvo lahko slabo vpliva na delovanje

glavnega program, če recimo glavni program v tem času ni opazil kake bistvene spremembe, ki bi jo

bil moral upoštevati. Zato velja načelo: prekinitveni podprogram bodi v načelu čim bolj kratek, naj

odvzame čim manj časa glavnemu programu.

Prekinitev bomo uporabili tudi v kasnejšem programu za prikazovanje na 7-segmentnem

prikazovalniku. Pa nadaljujmo kar z časovno prekinitvijo ali timer-interruptom.

Časovnik ni pravzaprav nič drugega kot števec impulzov, ki prihajajo na vhod števca. Le ti so običajno

kar impulzi istega oscilatorja, ki poganja mikroprocesor, ali pa impulzi, ki prihajajo iz zunanjega vira

preko vhodov T0 ali T1 (PB0 ali PB1) To smo že uporabili pri prejšnjem poglavju o multipleksiranju.

Vaja1.bas program v novi varianti, ki prikazuje vsebino števca sekund na 7-segmentni prikazovalnik in

vsak pritisk na tipko zaustavi ali požene štetje. Ker merimo sekunde z ukazom wait 1 tisti čas, ko je

program v zanki, ki jo povzroči wait, ne zazna pritiska tipke.

Page 42: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

42 Bascom AVR začetni tečaj, marec 2008

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

Config Int0 = Falling

On Int0 Int0_int

Enable Int0

Sedaj ni problema z detektiranjem tipke, saj kadarkoli pritisnemo tipko, program takoj reagira. Toda

še vedno je problem tako natančnega štetja, kot tudi zaustavljanja štetja v trenutku, ko velja wait 1.

V vaja3.bas smo odpravili tudi to slabost. Da dokažemo, smo se odločili šteti kar stotinke sekunde in

imamo sedaj neke vrste uro štoparico. Za štetje časa smo zadolžili kar prekinitveni podprogram, ki je

dolžan prikazovati številke na 7-segmentni prikazovalnik.

Glavni program sedaj ne dela drugega, kot da popravi šteto vrednost. In sedaj ga lahko obremenimo

še z drugimi nalogami, ki ne bodo zaustavljane z raznimi wait ukazi.

V programu vaja4.bas smo iz te ure naredili merilnik odzivnega časa. Ko je števec na 0, tedaj gremo v

čakanje za neznano število sekund. To število dobimo z ukazom

J = Rnd(17)

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

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

Page 43: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

1-wire protokol in termometer DS1820

Vilko Sustič

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

sami žici.

Ista žica lahko služi za napajanje, kot tudi za komunikacijo. Ko ne komuniciramo, je žica na high,

visoko, in napaja naprave, ki si energijo akumulirajo, tako da so napajane še tisti čas, ko signal na žici

utripa v ritmu komunikacije.

Naprave, ki jih je na žici lahko več, ločimo med seboj po unikatni identifikacijski oznaki, ki je vpisana v

ROM naprave, termometra na primer in jo moramo poznati, če priključimo na žico več kot eno

napravo.

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

določeni:

Page 44: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

44 Bascom AVR začetni tečaj, marec 2008

A za programerja, ki programira v Bascomu, za vse to poskrbi Bascom sam. Drugače je za

programerja, ki programira v zbirniku, assemblerju. Programer v Bascomu mora samo toliko biti

previden, da ne zavira izvajanje programa s kakimi prekinitvenimi podprogramu, kajti to lahko

pokvari časovni potek komunikacije, kadar se ta izvaja v glavnem programu.

Merjenje temperature gre tako: Najprej zahtevamo, da DS1820 izmeri temperaturo in si rezultat

spravi v svoj pomnilnik.

1wreset

1wwrite &HCC 'skip ROM – velja za vse, ki ste na liniji

1wwrite &H44 'merite temperaturo

Wait 1 'dajem vam čas za merjenje

Ko DS1820 prejme tak ukaz, potrebuje energijo za delo, ki jo dobi tako, da mi držimo signal visok. Čas

je lahko različen, a največ časa, ki ga za to potrebuje je 750msec. Ko preteče ta čas, damo ukaz: daj

nam meritev.

1wreset 'reset

1wwrite &HCC 'skip ROM – velja za vse, a je samo eden na liniji

1wwrite &HBE 'dajte podatke

Podatek o temperaturi dobimo v polovičkah stopinje in ga daje v obliki dveh bajtov

T = 1wread(2) 'Beremo podatke, prva dva bajta sta temperatura

' T je tipa integer

Page 45: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

1wreset

T = T / 2 'Temperaturo dobimo v polovičkah stopinje

Program DS1820-1 je primer branja temperature, če je na liniji en sam termometer

Program DS1820-2 je izboljšan v toliko, da uporablja timer namesto wait za zagotavljanje potrebnega

časa za konverzijo rezultata v DS1820

Program DS1820-3 je izboljšan v toliko, da bere celotno vsebino, ki jo daje DS1820 in preverja

dobljeno vsebino po CRC8 Vsebina, ki jo dobimo je:

Če želimo imeti več termometrov, potem potrebujemo za vsak termometer njegovo identifikacijo.

Dobimo jo tako, da vsak termometer posebej priključimo, poženemo program DS1820-4 in

informacijo, ki jo dobimo, prenesemo v program, ki bo zahteval temperaturo od konkretnega

termometra.

Program DS1820-5 je primer branja temperature konkretnega termometra

Program DS1820-6 je primer branja temperature iz treh termometrov

Beri tudi Bascp, AVR Help 'Using the 1 WIRE protocol'

Page 46: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

46 Bascom AVR začetni tečaj, marec 2008

Stack – odložišče

Vilko Sustič

Morda beseda odložišče ni najboljša, toda smatram, da primerno pomensko odgovarja, kar bomo

videli, ko si bomo ogledali stack - odložišče v funkciji.

V splošnem se programerji ne ukvarjamo dosti s tem orodjem, uporablja ga mikrokrmilnik sam,

(hardware stack) oziroma Bascom sam, (software stack). Nerodno je le to, da nam o tem dosti ne

pove, in če v ta namen določen prostor v pomnilniku (RAM-u) ni dovolj velik, se dogode

nepredvidljive zadeve in program običajno umre brez karkšnekoli diagnoze. Boste videli zakaj.

Najbolj tipična uporaba odložišča je, kadar kličemo v glavnem programu podprogram, ali tudi v

podprogramu še en podprogram. S klicem podprograma, glavni program, ali program višjega nivoja

preda upravo podprogramu. To lahko naredi večkrat na različnih mestih. Podprogram v splošnem ne

ve, od kod je bil klican. Ve pa, da je glavni program v samem klicu podprograma dal naslov predaje

na odložišče. Ko podprogram reče Return, dejansko skoči na naslov, ki ga najde na odložišču.

Odložišče ali stack si je potrebno predsavljati kot skladovnico, kjer vedno odlagamo na vrh

skladovnice in vedno jemljemo iz vrha, bajt po bajt. Če se pri tem zaporedju zmotimo, dobimo, ko

jemljemo podatke nazaj, napačne vsebine in program gre v maloro. Temu rečemo LIFO , kar je

kratica za Last in – first out, ali tisti ki zadnji pride, prvi odide.

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

swstack in frame.

Page 47: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Oglejmo si na programu stack-bas:

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

Page 48: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

48 Bascom AVR začetni tečaj, marec 2008

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

Page 49: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Ko ga prevedemo si oglejmo poročilo prevajalnika (compilerja). Vedno je priporočljivo, da si

ogledamo poročilo (report) saj v njem dobimo zanimive podatke o našem programu. Poročilo o

našem programu je skrajšano sledeče:

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

Glede na to, da smo definirali:

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

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

Page 50: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

50 Bascom AVR začetni tečaj, marec 2008

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

Delovanje program si bomo ogledali na simulatorju, ker tam lahko izvajamo instrukcijo po instrukcijo

in si ogledujemo, kaj se dogaja v mikroprocesorju.

Startamo simulator in vidimo nekaj takega:

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

Program poženemo počasi, korak po korak F8. Opazimo, da se nam pomnilnik pobriše na ničle šele,

ko naredimo prvi korak v program. To je programirano v Bascomu.

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

postala H11.

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

Page 51: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Rad bi vas opozoril na SPL in SPH. To sta dva bajta, ki skupaj kažeta lokacijo v odložišču (stack-u) na

sledeče prosto mesto, angl. Stackpointer. V našem primeru je to naslov &H04FF

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

mikrokrmilnik.

Page 52: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

52 Bascom AVR začetni tečaj, marec 2008

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

To sta bila dva print ukaza in vsebina je vidna lepo na simulatorju. Opazimo pa še nekaj: vsebina

bajtov okoli naslova 04ff se je spremenila! Nekdo je uporabil stack! Ja, seveda, bascom sam pri

zahtevnih ukazih, kot so print tudi kliče svoje podprograme, in pri vsakem klicu se naslov povratka iz

podprograma spravi v stack. Oglejmo si sedaj spet Stackpoiner! (SPH in SPL v IO!) Le ta je lepo na

04FF, kot da se ni nič zgodilo. To je zato, ker smo spet v glavnem programu in uporabljeni bajti v

stacku so dani nazaj na razpolago, no niso pa brisani na 0, ker to nima pomena.

Če se vrnemo na okno pomnilnika, opazimo tudi, da je bascom spremenil tri bajte na naslovu &H440:

in to v &H31 (znak enojka) &H33 (znak trojka) in &H00 (konec niza). To so zadnji znaki, ki so izpisani v

oknu komunikacije in so bili zaukazani z ukazom Print. Kot vidimo je bascom uporabil tri bajte v

področju Frame kot delovni pomnilnik.

Page 53: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

In sedaj še enkrat pritisnimo F8!

Stackpointer sedaj kaže &H04FD, dva bajta niže! To je zato, ker se nahajamo v podprogramu A in je

tam spravljen naslov povratka v glavni program, ki ga bomo še rabili. Ko bomo rekli Return, se bo

od tam vzel naslov, kam se vrniti, in prostor v Stacku se bo sprostil.

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

Page 54: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

54 Bascom AVR začetni tečaj, marec 2008

Zaključek mora biti sledeč:

Hwstack upravljam mikroprocesor na osnovi LIFO principa, vanj spravlja in jemlje informacije,

predvsem naslove, pri klicanju podprogramov in funkcij, lahko tudi implicitno (Print recimo).

Hwstack se polni od najvišjega naslova RAM-a navzdol, ne glede, ali je tam kaj programer pomotoma

pisal. Ko se naslovi spet uporabijo, se prostor sprosti. Če je programer na te naslove neprevidno

napisal kake podatke, bo mikroprocesor z veliko verjetnostjo smatral te podatke kot naslove, kam

nadaljevati program, in tako bo program se odvil v gozd in umrl.

V splošnem potrebuje mikroprocesor po dva bajta tega področja za vsak gosub ali klic podprograma

ali funkcije. Veliko več pa potrebuje, kadar se starta prekinitveni podprogram brez NOSAVE opcije.

Takrat se spravi na stack poleg naslova povratka tudi vsebina večine registrov, (vseh je 32!) NOSAVE

opcijo pa si lahko privoščite le, če potem sami v prekinitvenem podprogramu spravite na stack vse

tiste registre, ki jih uporabite. Ker pa Bascom programerji ne vemo, katere registre uporabi Bascom,

je tak nasvet brez smisla.

Software stack uporablja Bascom za naslove spremenljivk podanih kot paramater pri klicu

Subroutine ali Funkcije. Pa tudi za vsako v subrutini ali funkciji definirano lokalno spremenljivko.

Frame uporablja Bascom kot delovno področje in za lokalno v subroutini ali funkciji definirane

spremenljivke. Take spremenljivke so v področju Frame, njih naslovi v swstack.

Page 55: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

EEPROM – pisanje in branje

Gregor Maček

SRAM pomnilnik, v katerem se shranjujejo podatki s katerimi operiramo, ima to slabo lastnost, da se

ob izgubi napajanja izbriše. Če želimo določene podatke, parametre itn. shraniti tako, da ob izgubi

napajanja podatki ostanejo, jih shranimo pomnilnik EEPROM. EEPROM je kratica za Electrically

Erasable Programmable Read-Only Memory.

AVR mikroprocesorji imajo določeno količino EEPROM pomnilnika že znotraj samega procesorja, če

pa želimo pa lahko dodatni EEPROM povežemo s kontrolerjem preko I2C (ali drugega) protokola in

tako povečamo prostor, namenjen podatkom.

Da pa ne bo vse tako enostavno je potrebno omeniti neprijetno lastnost EEPROM pomnilnika,

pravzaprav dve. Prva je relativno počasno branje in predvsem pisanje (napram SRAM pomnilniku), ki

pa nam navadno ne povzroča večjih preglavic.

Večja težava je omejeno število prepisovanj pomnilnika, saj se po cca 10.000 – 100.000 zapisih mesto

v EEPROM pomnilniku »obrabi« do te mere, da zapisovanje in branje s tega mesta ni več mogoče.

Temu se izognemo s pametno narejenim programom, ki spremenljivke v EEPROM zapisuje le tedaj,

ko je to potrebno, sicer pa z njimi izvajamo operacije le v SRAMu.

Kot eno izmed možnih rešitev naj navedem rešitev napajanje mikroprocesorja tako, da je v napajalni

veji tudi dioda in visokokapacitativni kondenzator, z enim od vhodov pa vseskozi tipamo prisotnost

glavnega napajanja naprave. Vkolikor glavno napajanje izgine, zapišemo spremenljivke v EEPROM in

procesor zaustavimo (napajanje nikakor ne sme izginiti med samim pisanjem v EEPROM!) dokler se

glavno napajanje ne vrne. Tedaj vrednost spremenljivk iz EEPROM pomnilnika prepišemo nazaj

spremenljivkam v SRAMu in program se nadaljuje. Druga, elegantnejša (programska) metoda je, da

spremenljivke zapisujemo le tedaj, ko se res spremenijo, ne pa ob vsakem prehodu do-loop zanke.

Page 56: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

56 Bascom AVR začetni tečaj, marec 2008

Zapisovanje v EEPROM in branje le-tega preko ERAM spremenljivk

Najenostavnejša varianta zapisovanja in branja pomnilnika EEPROM za začetnika je preko začasnih

t.i. ERAM (EEPROM RAM) spremenljivk. Postopek je sledeč:

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

Dim XXX as Word

2. Kreiramo še dodatno EEPROM spremenljivko eXXX (ime je lahko poljubno). Tip spremenljivke

ERAM mora biti enak tipu spremenljivke SRAM!

Dim eXXX As ERAM Word

3. Ko želimo spremenljivko iz delovnega (SRAM) pomnilnika prepisati v EEPROM pomnilnik

(torej pisanje v EEPROM), to enostavno storimo z:

eXXX = XXX

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

XXX = eXXX

Torej povsem enostavno! Sedaj lahko npr. naredimo enostaven termometer, ki najvišjo in najnižjo

izmerjeno temperaturo hrani tudi ob izpadu napajanja.

Vkolikor imamo v EEPROMu shranjene določene parametre programa (npr. telefonske številke,

nastavitve) je potrebno paziti pri (pre)programiranju mikrokontrolerja, saj je pri večini

programatorjev privzeto nastavljeno, da se prepiše/izbriše tudi EEPROM pomnilnik. Vkolikor

vrednosti v EEPROMu želimo obdržati, omenjeno možnost izklopimo.

Naj še enkrat opozorim, da ima EEPROM pomnilnik omejeno število vpisov, zato je potrebno paziti na

sam program, da v EEPROM ne pišemo prepogosto.

Page 57: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

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

WRITEEEPROM

Bascom pa omogoča tudi drug, naprednejši način pisanja in branja EEPROMa preko ukazov

WRITEEEPROM in READEEPROM ter direktno pisanje konstant v EEPROM s pomočjo $eeprom ukaza.

$eeprom

Z vključitvijo omenjenega ukaza v program prevajalniku povemo, da bomo deklarirali konstante, ki

bodo vpisane v EEPROM pomnilnik. Prevajalnik generira EPP datoteko, ki jo s programatorjem

zapišemo v EEPROM mikrokontrolerja.

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

Readeeprom

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

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

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

prehodu naslednjo vrednost.

Writeeeprom

V EEPROM lahko tudi pišemo:

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

Page 58: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

58 Bascom AVR začetni tečaj, marec 2008

Pomagala, ki mi pomagajo pri delu z

mikroprocesorji

Vilko Sustič

Moja praksa z mikroprocesorji sicer ni bogvekaj, a do nekaterih ugotovitev sem prišel, in sem

zadovoljen z njimi. S tem papirjem jih dajem na razpolago tudi drugim, saj če vam bo všeč boste

morda kopirali, v najslabšem slučaju boste zamahnili z roko in šli dalje.

3-pinski konektor

Prišel sem do zaključka, da na vsakem tiskanem vezju, ki ga krmili mikroprocesor, dodam še enega ali

dva 3-pinska konektorja, ki jih sicer pri samem delovanju naprave ne potrebujem, ampak kar tako, 'za

vsak slučaj'. Pri tem se držim vedno enakega razporeda kontaktov.

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

Tak konektor naknadno lahko uporabim na različne načine, nanj priklopim dodatno led diodo, tipko,

lahko z njim krmilim naprej kako drugo napravo, kar v prvem konceptu nisem imel v mislih in

podobno.

Na sledeči sliki je napravica z dvema takima konektorjema. Enostavno prost prostor na tiskanem

vezju sem zapolnil s konektorejma in ju povezal s prostima pinoma mikroprocesorja.

Page 59: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

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

Kdor dela, dela napake. Kdor programira, vgrajuje v program tudi napake. In potem jih skuša

odpraviti. Če samo gledamo v čip mikroprocesorja lahko samo ugibamo, kaj se v njem dogaja,

ugibanje pa nas samo počasi pripelje do resnice. Da pridemo do resnice prej, vgradimo v program

ukaze, s katerimi nas program obvešča, kaj se v mikroprocesorju dogaja. Če ima naprava LCD ali kako

drugo izhodno enoto na kateri se pojavljajo obvestila uporabniku, potem programiramo izpis takih

testnih obvestil pač na tako napravo. Ko smo z delovanjem programa zadovoljni, tedaj taka

pomožna obvestila odstranimo iz programa.

V Bascomu bi to naredili morda tako.

..

' nekje definiramo konstano test

' const test = 1

.

.

' potem vgradimo izpis pomožnih informacij

If test = 1 then

Lcd 'Stevec = ';stevec

End if

.

' ali pa

#if test = 1

Lcd 'Stevec = ';stevec

#endif

Seveda se da to narediti v kateremkoli programskem jeziku, le pravila so drugačna, a podobna. Ko

smo s programom zadovoljni, enostavno spremenimo konstanto test v 0 in ponovno prevedemo

program.

Naj še omenim razliko med Bascom ukazoma if in #if. Med tem, ko se preverjanje pogoja pri ukazu if

dogaja v mikroprocesorju med izvajanjem programa, se preverjanje pogoja pri ukazi #if izvaja že v fazi

prevajanja programa na PC-u, in tedaj se pogojna koda, če pogoj ni izpolnjen, sploh ne vgradi v

mikroprocesorski program.

Kaj pa če naprava nima LCD-a ali neke druge primerne enote za komuniciranje z človekom? Tedaj

pride prav prej omenjeni 3-pinski konektor kamor vklopimo kabel za povezavo s PC-jem. Tedaj bomo

ekran PC-a uporabili kot enoto, kamor bo naš program pisal obvestila nam, ko bomo testirali

program. Ko bomo s programom zadovoljni, potem bomo enostavno kabel izvlekli iz konektorja in

napravo vgradili tja, kjer bo upravljala ali nadzirala tisto, za kar je namenjena.

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

Page 60: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

60 Bascom AVR začetni tečaj, marec 2008

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

ali

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

Detajle Open ukaza si oglejte v Bascom Help-u!

Seveda že iz definicije pina vidimo, da je prvi ukaz za 8051 mikroprocesor, kajti le on ima pin P1.6

drugi pa je za AVR mikroprocesor, ker le on ima PinD.2

Seveda je to pin, ki je vezan na kontakt 2 3-polnega pomožnega konektorja, ki sem ga na začetku

omenil. Sedaj lahko v Bascomu AVR lepo pišemo testne pomožne informacije

Recimo

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

In stanje števca se bo pojavilo v novi vrstici na ekranu PC-a, če bomo seveda pravilno povezali PC z

našim 3-pinskim konektorjem, a o tem kasneje. No, v Bascom8051 ne moremo pisati tako, ker pozna

za softwarski uart samo ukaze Put, ki prenašajo samo en bajt, ne pa tudi ukaze Print, kjer lahko

pišemo cele vrstice. Pa si potem naredimo podprogram, ki nam bo nadomestil ukaz Print, vsebino, ki

jo želimo napisati pa sestavimo v spremenljivki tipa niz.

Page 61: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Recimo

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

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

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

Podprogram najprej spravi vsebino delovnih spremenljivk i,j in k na odložišče (stack), da ne bi s

spremembo vsebine teh spremenljivk pokvaril delovanje glavnega programa, saj le ta ima lahko v njih

važno vsebino. Potem ugotavlja, koliko znakov je potrebno oddati, potem v for zanki te znake odda,

in potem odda še dva znaka, ki jih PC potem obravnava kot konec vrstice.

Pri Bascom8051 imamo še eno neprijazno zadevo: ti mikroprocesorji imajo zelo malo delovnega

pomnilnika RAMa, in z

Dim S as string * 16 ga morda preveč obremenimo, tedaj, je potrebno pač manjše dimenzije niza, in

paziti pri sestavljanju niza na prekoračitev in pisati (klicati podprogram) pogosteje.

Page 62: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

62 Bascom AVR začetni tečaj, marec 2008

Seveda še nismo končali. Sedaj so ti znaki šele na kontaktu 2 3-pinskega konektorja. Kako pridejo na

ekran PC-a? Najprej je potrebno 3-pinski konektor z neko vmesno napravico (interface, vmesnik)

povezati s Serial Portom PC-a ali kot rečemo z Com portom. V ta namen sem si izdelal napravico po

tej shemi:

(priznam shemo si nisem izmislil sam, temveč sem jo našel na internetu na

http://chaokhun.kmitl.ac.th/~kswichit/Rs232_web/Rs232.html )

Na levi je 9-pinski DB9 ženski konektor, ki paše na konektor PC-a. Na desni priklopimo ta vmesnik na

3-pinski konektor naše naprave, kjer s pomočjo softare-uarta pišemo serijsko podatke, in jih dajemo

na fotodiodo optospojke. Kot vidite je levi del vmesnika popolnoma galvansko ločen od desnega, in

tako je PC zaščiten pred električnimi udarci, ki bi ga lahko udarili zaradi kake električne napake iz naše

naprave. Levi del vmesnika je napajan iz RTS kontakta 9-polnega konektorja, in tranzistor optospojke

prenaša optični signal v električni na RXD kontakt COM porta.

Page 63: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

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

Lepo se vidi ploski kabel, ki se konča s 3-polno vtičnico za omenjeni 3-polni konektor, čeprav

potrebujemo samo dve žili, +5V in pin.

Sedaj je potrebno le še to informacijo prenesti na ekran. To naredi na PC-u program, ki mu rečemo

terminal emulator. Takih programov je več, a po mojih izkušnjah je najboljši sad domače slovenske

pameti, naredil ga je in dal na splošno brezplačno uporabo v osebne namene gospod Vlado Brajer,

dobite ga pa na spletni strani http://braypp.googlepages.com/terminal

Page 64: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

64 Bascom AVR začetni tečaj, marec 2008

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

In sedaj važno: potem ko ste nastavili hitrost na 9600 (kot pri open ukazu v Bascomu ), potem, ko ste

izbrali COMport (PC jih lahko ima več), in ko ste kliknili na Connect, morate zagotoviti vmesniku

napajanje preko RTS signala tako, da kliknete na RTS tipko na desnem robu okna. In to je to.

To seveda vse lepo deluje, če testiramo napravo na naši delovni mizi, kjer imamo tudi osebni

računalnik z ekranom. Pokaže pa se tudi potrebna, da iščemo napake v programu tudi kasneje, ko je

stvar že instalirana nekje recimo v kurilnici, ali na podstrešju, kjer ne moremo z osebnim

računalnikom zraven.

Page 65: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

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

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

Kot je videti, imamo samo mikroprocesor, ki daje na LCD podatke, ki jih prebere iz pina 2 3-polnega

konektorja. Seveda stvar še daleč ni tako udobna, kot ekran PC-a, saj imamo le dve kratki vrstici

podatkov na LCD-u. Vsaka nova vrstica se pojavi na LCD-u spodaj, stara vrstica se premakne navzgor.

Morda bi bilo smiselno uporabiti v ta namen kak močnejši avr mikroprocesor in LCD z več vrsticami, a

nekaj moram pustiti tudi vam, da imate veselje naprej delati, kaj ne?

Page 66: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

66 Bascom AVR začetni tečaj, marec 2008

Internetni naslovi

Splošni linki

http://www.atmel.com/products/avr/default.asp Originalna stran proizvajalca ATMEL, kjer lahko

najdemo datasheete vseh AVRjev, program za

programiranje (AVR Studio) itd.

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

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

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

začetnike!

Spletni forumi

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

vsemu povezanim z elektroniko.

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

elektro forum

http://www.elektron.si/forum/ Slovenski elektro forum v nastajanju (na bazi

elektro-n foruma)

http://www.mcselec.com/index2.php?option=com

_forum&Itemid=59

Forum uporabnikov Bascoma (v sklopu strani

www.mcselec.com)

Spletne trgovine

http://trgovina.svet-el.si/ Svet elektronike; literatura, programi,

elementi (pretežno za projekte, objavljene v

SE), mikroprocesorji, KIT kompleti

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

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

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

Page 67: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Informacije o pogostih kontrolerjih

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

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

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

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

Page 68: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

68 Bascom AVR začetni tečaj, marec 2008

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

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

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

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

Page 69: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

O publikaciji

Publikacija: Bascom AVR začetni tečaj

Avtorji: Vilko Sustič, Gregor Maček, Jure Mikeln

Uredil: Gregor Maček

Natisnil: Lado Železnik

Naklada: 40 izvodov

Zgodovina: 1.3.2008 Izid publikacije (seminar Bascom)

10.7.2008 Dopolnitev (Pomagala, ki mi pomagajo pri delu z mikroprocesorji)

© Dovoljeno kopiranje publikacije ali dela le-te, pri čemer navedite tudi vir in avtorje!

Page 70: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

70 Bascom AVR začetni tečaj, marec 2008

Kazalo

Vsebina priročnika Bascom AVR začetni tečaj

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

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

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

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

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

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

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

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

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

Lock biti ......................................................................................................................................... 15

Fuse biti ......................................................................................................................................... 15

Priklop periferije na mikrokontroler...................................................................................................... 16

Vezava tipke ...................................................................................................................................... 16

Vezava LED diode .............................................................................................................................. 17

Vezava PFET in NFET tranzistorja ...................................................................................................... 18

Vezava LDC prikazovalnika ................................................................................................................ 19

Krmiljenje DC motorja ....................................................................................................................... 20

Uporaba izhodov ................................................................................................................................... 21

Direktno naslavljanje ......................................................................................................................... 22

Uporaba vhodov .................................................................................................................................... 23

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

Branje vhoda z ukazom DEBOUNCE .................................................................................................. 24

Uporaba tekstovnega LCD zaslona ........................................................................................................ 25

Konfiguracija zaslona ......................................................................................................................... 25

Izpis na zaslon – ukaz LCD ................................................................................................................. 25

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

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

Kreiranje lastnih znakov .................................................................................................................... 27

Page 71: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

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

Komunikacija – UART pošiljanje ............................................................................................................ 28

RS-232 protokol ................................................................................................................................. 28

Komunikacijske nastavitve v Bascomu .............................................................................................. 29

Pošiljanje podatkov – PRINT .............................................................................................................. 29

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

Komunikacija – UART sprejemanje........................................................................................................ 31

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

Sprejem podatkov z ukazom INPUT .................................................................................................. 31

Multipleksiranje – 7 segmentni LED ...................................................................................................... 32

Prekinitve (Interrupti) ............................................................................................................................ 41

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

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

EEPROM – pisanje in branje .................................................................................................................. 55

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

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

$eeprom ........................................................................................................................................ 57

Readeeprom .................................................................................................................................. 57

Writeeeprom ................................................................................................................................. 57

3-pinski konektor ........................................................................................................................... 58

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

Internetni naslovi .................................................................................................................................. 66

Splošni linki ........................................................................................................................................ 66

Spletni forumi .................................................................................................................................... 66

Spletne trgovine ................................................................................................................................ 66

Informacije o pogostih kontrolerjih ...................................................................................................... 67

AT Tiny 2313 ..................................................................................................................................... 67

AT Tiny 45 .......................................................................................................................................... 67

AT Mega 8515 .................................................................................................................................... 67

AT Mega 8 .......................................................................................................................................... 68

AT Mega 16 ........................................................................................................................................ 68

AT Mega 128 ...................................................................................................................................... 68

AT Mega 2560 .................................................................................................................................... 68

O publikaciji ........................................................................................................................................... 69

Page 72: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

72 Bascom AVR začetni tečaj, marec 2008

Kazalo .................................................................................................................................................... 70

Page 73: Bascom AVR začetni tečaj - arnes.sisspbvrec/UMN/11_12/seminar__BASCOM... · Gregor MA ČEK, Vilko SUSTI Č, Jure MIKELN Bascom AVR za četni te čaj, marec 2008 Bascom AVR začetni

Gregor MAČEK, Vilko SUSTIČ, Jure MIKELN

Bascom AVR začetni tečaj, marec 2008