Nastavitve zaslonskega programa
Primerjava ATmega163 in ATmega323
Pred nami
je »Interpreter« , procesor z vgrajenim učinkovitim interpreterskim jezikom. Za
programiranje rabimo računalnik s prostim serijskim priključkom in enega od
standardnih zaslonskih programov. Z uporabo npr. HiperTerminala, ki je
standarden program Windows operacijskega sistema, lahko zaslonsko upravljamo
»interpreter«. Enostavna in zelo učinkovita sintaksa omogoča enostavno in hitro
učenje in pisanje programov. Programe pišemo z enim od standardnih ASCII
urejevalnikov. Seveda nas prav nič ne omejuje za delo pod katerim koli
operacijskim sistemom. Številni zgledi pomagajo hitremu prvemu programu potem
pa gre ponavadi pospešeno naprej. »Interpreter« na enostaven in pregleden
način rešuje analogne, digitalne in časovne probleme.
Program je napisan v Bacicu, z
uporabo Bascom-AVR
prevajalnika . Program je razvit s pomočjo Atmelove
razvojno ploščico STK500. Napravo z vgrajenim interpreterjem lahko
prosto programiramo, izvajamo program in spremljamo spremenljivke, vse to preko
serijskega porta. Hex
koda
programa je prosto dostopna.
Zaslonski program moramo nastaviti
na 9600 bit/S, podatkovni biti 8, Parnost brez, nadzor pretoka ni nadzora.
Dodatno moramo pri ASCI nastavitvi prenosa nastaviti Zakasnitev vrstic na 150
mS, kolikor procesor rabi da spravi vrstico z ukazi v svoj EEPROM pomnilnik.
Za povezavo serijske komunikacije
rabimo tri žice. Če je povezava izvedena po RS 232C
standardu uporabimo direktno povezavo brez prepletanja, to pomeni Pin 2 na
strani računalnika gre na Pin 2 na strani Interpreterja, Pin 3 na strani
računalnika gre na Pin 3 na strani Interpreterja in Pin 5 na strani računalnika
gre na Pin 5 na strani Interpreterja.
Seveda je projektiranje naprav veliko bolj kreativen in odprt proces. V
realni napravi moramo poskrbeti še za ISP in funkcionalne dodatke, ki napravo naredijo uporabno.
Pin |
Ime |
Pin |
Ime |
1 |
Prosto |
6 |
Prosto |
2 |
TX(Procesor tu oddaja - RX
od PC) |
7 |
Prosto |
3 |
RX(Procesor tu sprejema –
TX od PC) |
8 |
Prosto |
4 |
Prosto |
9 |
Prosto |
5 |
GND |
|
|
AVR 8-bit RICS
tehnologijo uporablja Atmel na celi paleti procesorjev.
Atmelova procesorja ATmega163
in ATmega323
sta v 40 DIP in 44 TQFP ohišju. Slika nam prikazuje 40 DIP ohišje, nogice in
imena za oba procesorja. Razporeditev nogic pri obeh omenjenih procesorjih je
enaka.
Interpreter je procesor ATmega163
ali ATmega323, ustrezen program in ustrezna strojna osnova. Strojna osnova je
4MHz glavni kristal, 32768 urni kristal, 4 polna (GND, VCC, SDA, SCL) povezava
s panelnim prikazovalnikom in RS232C standardna serijska povezava.
Pin |
Ime |
Uporaba |
Pin |
Ime |
Uporaba |
1 |
PB0 |
Digitalni
izhod o0 |
21 |
PD7 |
Digitalni
vhod i3 |
2 |
PB1 |
Digitalni
izhod o1 |
22 |
PC0 |
Serijska
ura (SCL) |
3 |
PB2 |
Digitalni
izhod o2 |
23 |
PC1 |
Serijski
podatki (SDA) |
4 |
PB3 |
Digitalni
izhod o3 |
24 |
PC2 |
Digitalni
vhod i4 |
5 |
PB4 |
Digitalni
izhod o4 |
25 |
PC3 |
Digitalni
vhod i5 |
6 |
PB5 |
Digitalni
izhod o5 |
26 |
PC4 |
Digitalni
vhod i6 |
7 |
PB6 |
Digitalni
izhod o6 |
27 |
PC5 |
Digitalni
vhod i7 |
8 |
PB7 |
Digitalni
izhod o7 |
28 |
PC6 |
Kristal
32768 Hz |
9 |
RESET |
100
uF proti GND |
29 |
PC7 |
Kristal
32768 Hz |
10 |
VCC |
+
4 .. 5,5V |
30 |
AVCC |
Analogni
+4 .. 5,5V |
11 |
GND |
Digitalna
masa |
31 |
AGND |
Analogna
masa |
12 |
XTAL2 |
Kristal
4MHz,20pF na GND |
32 |
AREF |
Prosto |
13 |
XTAL1 |
Kristal
4MHz,20pF na GND |
33 |
PA7 |
Analogni
vhod u7 |
14 |
PD0 |
Serijski
sprejem (RXD) |
34 |
PA6 |
Analogni
vhod u6 |
15 |
PD1 |
Serijska
oddaja (TXD) |
35 |
PA5 |
Analogni
vhod u5 |
16 |
PD2 |
Digitalni
vhod i0 |
36 |
PA4 |
Analogni
vhod u4 |
17 |
PD3 |
Digitalni
vhod i1 |
37 |
PA3 |
Analogni
vhod u3 |
18 |
PD4 |
Napetostni
PWM izhod Ui1 |
38 |
PA2 |
Analogni
vhod u2 |
19 |
PD5 |
Napetostni
PWM izhod Ui2 |
39 |
PA1 |
Analogni
vhod u1 |
20 |
PD6 |
Digitalni
vhod i2 |
40 |
PA0 |
Analogni
vhod u0 |
Interpreter ima 8 digitalnih
vhodov, 8 analognih 10 bitnih vhodov, 8 digitalnih izhodov in 2 digitalna 10
bit PWM izhoda.
Procesor |
Flash |
EEPROM |
SRAM |
ATmega163 |
16
kB |
512
B |
1
kB |
ATmega323 |
32
kB |
1
kB |
2
kB |
ATmega323 ima glede na mlajšega
brata ATmega163 dvakrat več vseh spominov. Zato ima ATmega323 večje
zmogljivosti. Programa v obeh procesorjih sta navzdol kompatibilna. To pomeni
da ima ATmega323 nekatere dodane funkcije , ki jih v ATmega163, preprosto
zaradi premalo spomina, ni bilo mogoče vgraditi. Možnosti ki so dosegljive samo
v ATmega323 procesorju so posebej označene. Predvsem so to funkcije skaliranja,
komuniciranje s panelnimi prikazovalniki, časovno tabeliranje, časovno
registriranje, več spremenjivk in večja zmogljivost programskega pomnilnika.
Atmega163 in Atmega323 sta moderno
zasnovana procesorja z RISC jedrom. Vgrajeni mehanizmi omogočajo večji nadzor
porabe toka. Ko poženemo program z
ukazom c3 ni dileme, procesor mora delati s svojo polno močjo in porabi 20 mA
pri napetosti napajanja 5V. Ko program zaustavimo z ukazom c2 se poraba spusti
na 10mA pri napetosti napajanja 5V. Takrat se tudi ustavi odštevanje časovnikov
t0 - t9 in preračunavanje PI regulatorja. Seveda so to podatki za porabo
procesorja, če ni zunanjih porabnikov.
Sintaksa
jezika interpreter je izredno enostavna. Sestavljena je iz dvo znakovnih
spremenljivk in osnovnih matematičnih operacij. Spremenljivke so predznačene
celoštevilčne in bolean. Predznačene celoštevilčne spremenljivke imajo zalogo
vrednosti –32768 do +32767. Boolean spremenljivke imajo zalogo vrednosti 0 in 1.
Ukazovna vrstica je lahko dolga 14 znakov.
»Interpreter« pozna dva osnovna stanja: run in stp. Ko je »interpreter«
v stanju run se izvaja program. Na terminalu izgine značilen znak »>«. Med
izvajanjem programa lahko povsem brez omejitev izvajamo ročne komande. Ročna
komanda ima prednost pred napisanim programom. seveda je problematičen izpis na
terminal, če namreč naš program neprestano nekaj izpisuje na terminal, bo
mešanica programiranih izpisov in našega tipkanja precej pokvarila zaslonsko
sliko. Izvajanje programa zaustavimo s sistemskim ukazom c2(stp). Na terminalu
se pojavi značilen znak »>«.
Programirati začnemo s sistemskim
ukazom c1. Nato vpisujemo programske vrstice. Programska vrstica je lahko dolga
do 14 znakov. ATmega163 sprejme do 30, ATmega323 pa do 58 programskih vrstic.
Programiranje zaključimo s sistemskim ukazom c2. Za hitrejše programiranje je
smiselno napisati ASCII datoteko v katerem od standardnih ASCII urejevalnikov.
Microsoftov Notepad je tudi primeren. Nato v zaslonskem programu izberemo
pošiljanje tekstualne datoteke. Datoteko pošljemo na »interpreter«. Nastavitev
terminala mora zagotavljati 150 mS premora med pošiljanjem posameznih vrstic.
Ta čas je potreben, da procesor zapiše ukazno vrstico v svoj EEROM. Vrstice v
datoteki kamor pišemo program so lahko dolge do 30 znakov. »Interpreter« bo vse
znake od petnajstega dalje enostavno ignoriral.
>c1
t0:t0=10
c2
>
Napisan program izpišemo s
sistemskim ukazom c4. Program lahko izpišemo tudi če izvajamo program. Vedeti
moramo le na to, da vsi ukazi ki veliko izpisujejo (tudi c5, ki izpiše
vrednosti vseh spremenljivk), za trenutek ustavijo izvajanje programa, če se ta
izvaja.
>c4
t0:t0=16
o0=t0<16
o1=t0<14
o2=t0<12
o3=t0<10
o4=t0<8
o5=t0<6
o6=t0<4
o7=t0<2
>
Napisan program poženemo s
sistemskim ukazom c3. Na zaslonu izgine značilen znak >, kar je znak, da se
izvaja program. Med izvajanjem programa lahko neovirano izvajamo svoje komande,
ki imajo tudi prednost izvajanjem programa. Težava nastopi le, če naš program
nekaj izpisuje na zaslon. V takem primeru naše komande pokvarijo zaslonsko
sliko. Izvajanje programa zaustavimo s sistemskim ukazom c2. Ko se program
izvaja se status izvajanja zapiše v procesorjev EEROM, zato se program izvaja
tudi če vmes procesor ponovno poženemo.
>c3
Ukaz ki je
sestavljen iz imena spremenljivke nam izpiše vrednost le-te. Drugi znak imena
spremenljivke je vedno številka od 0 do 9, ki nam označuje zaporedno številko
spremenljivke. Za izpis prav vseh spremenljivk imamo na voljo sistemski ukaz
c5.
>c5
r=0,0,0,0,0,0,0,0,0,0,
s=0,0,0,0,0,0,0,0,0,0,
e=40,0,0,0,0,0,0,0,0,0,
f=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
t=0,0,0,0,0,0,0,0,0,0,
p=-1,-1,-1,-1,-1,-1,0,0,0,0,
u=360,333,357,254,214,195,236,290,0,0,
i=1,1,1,1,1,1,1,1,1,1,
o=1,1,1,1,1,1,1,1,1,1,
b=0,0,0,0,0,0,0,0,0,0,
h=0,0,0,0,0,0,0,0,0,0,
>
V formulah
lahko uporabljamo pet osnovnih matematičnih operacij in dve primerjanji .
|
Funkcija |
Komentar |
+ |
Seštevanje |
Vsota dveh spremenljivk |
- |
Odštevanje |
Razlika dveh spremenljivk |
* |
Množenje |
Množenje dveh spremenljivk |
/ |
Deljenje |
rezultat celoštevilčnega deljenja |
\ |
Deljenje po modulu |
celoštevilčni ostanek |
> |
Večje kot |
Prvi večji kot drugi, rezultat 1 |
< |
Manjše kot |
Drugi manjši kot drugi, rezultat
1 |
Ukaz priredi
spremenljivki r0 vrednost 1234. Prirejanje celo številčnih spremenljivk je v
mejah –32768 do +32767. Pri celoštevilčnem izračunavanju moramo paziti na
kolobarjenje celoštevilčnega števila. Spremenljivke tipa boolean imajo vrednost
0 ali ena. Če je rezultat izraza različen od 0 dobi boolean spremenljivka
vrednost 1 drugače pa 0.
Zgornja
formula se računa od znaka = na desno stran. Prioriteta računanja odstopa od
matematičnih pravil in je sledeča. Najprej je izraz vrednost spremenljivke r0,
nato se izrazu prišteje vrednost 12 in končno se vsota r0 + 12 pomnoži z
vrednostjo r1. Poenostavljeno povedano izraz se računa od znaka = na desno brez
upoštevanja matematičnih prioritet.
V izrazu
lahko uporabimo zaviti oklepaj. Prioriteta računanja je v tem primeru sledeča.
Najprej je izraz vrednost spremenljivke r0 , nato se izrazu prišteje vrednost
12. Dobimo vrednost znotraj oklepaja , ki je r0 + 12. Končno to vrednost
pomnožimo z vrednostjo r1. Interpreter pozna samo eno globino oklepajev
V primeru,
da uporabljamo tako kratke ukaze, da jih lahko dva ali več napišemo v eno
vrstico , moramo ukaze ločiti z znakom ; .
Ukaz ali
ukazi za : se izvede(jo) če je vrednost spremenljivke r0 enaka 0.
Ukaz ali
ukazi za ! se izvede(jo) če je vrednost spremenljivke r0 različna 0.
b0=r0<r1
b0 je odvisen od vrednosti števil r0 in r1. Če je
r0 manjše od r1 potem dobi b0 vrednost 1 , v nasprotnem primeru pa 0
r0=b0-b1>b5
r0 se
izračuna na sledeč način. Od b0 se odšteje vrednost b1. b0 minus b1 nam da
vrednosti 1, 0 ali –1. Če je razlika b0 minus b1 večja od b5 potem dobi r0
vrednost 1 v nasprotnem primeru pa 0.
V primeru
da želimo imeti res kratek komentar po koncu našega ukaza ukaz zaključimo z %.
To »interpreter« razume kot brezpogojni konec vrstice. Če uporabljamo v
originalnem programu vrstice dolžine do 30 znakov in imamo od 15 znaka dalje
svoje dolge komentarje (do 15 znakov) je dobro ukaz zaključiti s %, ker s tem
preprečimo interpretiranje presledkov, kar seveda upočasni izvajanje programa.
Bolova
algebra je rešena z uporabo matematičnih znakov. Obratna vrednost se napiše z
veliko črko imena spremenljivke. Poljubno lahko mešamo celoštevilčne in boolean
spremenljivke.
Spremenljivke
b so ram biti. Zgornji izraz je ena če sta bita b1 in b2 enaka 1 drugače je
rezultat množenja nič.
Zgornji
izraz je ena če je bit b1 ali bit b2 enak 1. Pri spremenljivkah tipa bit velja,
da dobijo vrednost ena če je rezultat izraza različen od nič (lahko je tudi
negativen) in je nič če je rezultat enak 0.
Če
spremenljivko tipa bit napišemo z veliko črko to pomeni njeno obratno vrednost.
Zgornji izraz priredi spremenljivki b0 obratno vrednost spremenljivke b3.
Bitna
spremenljivka dobi vrednost i0. i0 je spremenljivka direktno vezana na
digitalni vhod . Če v izrazu uporabimo veliko črko I pomeni to negirano vhodno
vrednost. Vhodne spremenljivke i ne moremo nastavljati.
Ime
spremenljivke |
Funkcija |
Port |
i0 |
Digitalni vhod |
Pind.2 |
i1 |
Digitalni vhod |
Pind.3 |
i2 |
Digitalni vhod |
Pind.6 |
i3 |
Digitalni vhod |
Pind.7 |
i4 |
Digitalni vhod |
Pinc.2 |
i5 |
Digitalni vhod |
Pinc.3 |
i6 |
Digitalni vhod |
Pinc.4 |
i7 |
Digitalni vhod |
Pinc.5 |
i8 |
Pulz vsako sekundo |
|
i9 |
Pulz vsako minuto |
|
o0 je
spremenljivka direktno vezana na izhod . Če v izrazu uporabimo veliko črko O
pomeni to obratno izhodno vrednost.
Ime
spremenljivke |
Funkcija |
Port |
o0 |
Digitalni izhod |
Portb.0 |
o1 |
Digitalni izhod |
Portb.1 |
o2 |
Digitalni izhod |
Portb.2 |
o3 |
Digitalni izhod |
Portb.3 |
o4 |
Digitalni izhod |
Portb.4 |
o5 |
Digitalni izhod |
Portb.5 |
o6 |
Digitalni izhod |
Portb.6 |
o7 |
Digitalni izhod |
Portb.7 |
o8 |
Rezervirano |
Rezervirano |
o9 |
Rezervirano |
Rezervirano |
Prvi ukaz
postavi vrednost vhodnega bita i0 v ram bit b0. Drugi ukaz se izvede če je
dinamični bit d0 različen od 0 in postavi časovnik t0 v vrednost 10. d
dinamični biti so vezani na b ram bite.d je ena samo takrat ko je bilo stanje
ustreznega b bita ob prejšnji uporabi bita d različno od sedanjega.
Interpreter
omogoča povsem preprosto mešanje bitnih in celoštevilčnih spremenljivk. Izraz
ima vrednost r0 od katere odštejemo 0 ali 1 , pač glede na vrednost
spremenljivke b1. nato vse skupaj pomnožimo z 0 ali 1, glede na vrednost bitne
spremenljivke b2. B0 , kar je obratna vrednost spremenljivke b0, dobi vrednost
0 če je skupni izraz 0 in vrednost 1 če je skupni izraz različen od nič.
»Interpreter«
ima vgrajena dva PI regulatorja. Vsak PI regulator ima svoj izhod neposredno
vezan na 10 bitni PWM izhod (PD4 in PD5). Regulatorja se izračunavata časovno enakomerno v
prekinitvenem programu. Oba regulatorja se izračunata vsake 0,131072 S, pri
frekvenci kristala 4 MHz.
V
spremenljivkah u0 do u7 imamo vrednosti 10 bitne AD pretvorbe. 0 pomeni 0V na
vhodu in 1023 pomeni natančno 2.5575V na vhodu. Napetost lahko merimo na 2.5 mV
natančno. Če dodamo na vhod upor 100 E lahko merimo tokove 0 – 25,6 mA, kar je
ravno primerno za industrijski standard 4-20 mA
Ime
spremenljivke |
Funkcija |
Port |
u0 |
Napetostni vhod U0 |
Pina.0 |
u1 |
Napetostni vhod U1 |
Pina.1 |
u2 |
Napetostni vhod U2 |
Pina.2 |
u3 |
Napetostni vhod U3 |
Pina.3 |
u4 |
Napetostni vhod U4 |
Pina.4 |
u5 |
Napetostni vhod U5 |
Pina.5 |
u6 |
Napetostni vhod U6 |
Pina.6 |
u7 |
Napetostni vhod U7 |
Pina.7 |
V spremenljivkah
u8 in u9 imamo izhode obeh PID regulatorjev. Izhodi so v mejah 0 do 1023 kar je
primerno za dva PWM (Pulse Wide Modulation) izhoda. Vrednosti spremenljivk u8
in u9 se avtomatsko preneseta na ta dva PWM izhoda. S pomočjo zunanjega
analognega filtra 1. reda lahko zelo enostavno dobimo napetostni izhod v mejah
0V do napajalne napetosti.
Ime
spremenljivke |
Funkcija |
Port |
u8 |
Napetostni PWM izhod Ui1 |
Portd.4 |
u9 |
Napetostni PWM izhod Ui2 |
Portd.5 |
PI parametri
dveh regulatorjev so spravljeni v spremenljivkah p0 do p3. To so celoštevilčne
Eram spremenljivke. Razlika Reference in vhoda PI regulatorja je programsko
limitirana na -+166. P in I parametra sta lahko v mejah -+99. Če postavimo I
parameter na 0 se integralni člen postavi na nič, to pomeni, da predhodno
stanje integralnega člena ne vpliva na izhod PI regulatorja.
Pod pojmom funkcije razumemo
program, ki ga pokličemo z uporabo posebnih spremenljivk. Rezultat, ki se
zapiše v posebno spremenljivko ob njeni uporabi je posledica preračunavanj
formule z vhodnimi parametri. Vhodni parametri so ustrezne navadne
spremenljivke. Ko uporabljamo posebne spremenljivke, se za vhodni parameter
vedno uporabi ustrezna navadna spremenljivka z istim indexom.
Vhod : r,s in e
Izhod: h ali H
h so posebne spremenljivke in so
biti histereze. Na bit h je vezana spremenljivka r , s in e. Ob zagonu so h
biti nič. Biti h dobijo vrednost ena ko je s in e manjše od r. Biti h dobijo vrednost
nič ko je s minus e večje od r. Če ima spremenljivka e manjšo vrednost od 0
dobi ob prvi uporabi h bita vrednost 0. h0 ustrezajo vrednosti s0, r0 in e0.
podobno velja za vse naslednje h bite.
Vhod: b
Izhod: d ali D
d so posebne spremenljivke in so
dinamični biti vezani na stanje b ram bitov. d je ena samo takrat ko se je
vrednost ustreznega bita b spremenila glede na stanje ob predhodni uporabi
spremenljivke d.
r je celoštevilčna ram
spremenljivka. Ob zagonu ali prekinitvi napajanja se postavijo vrednosti na
nič.
s je
celoštevilčna ram spremenljivka. Ob zagonu ali prekinitvi napajanja se
postavijo vrednosti na nič.
e je celoštevilčna Eram
spremenljivka. Ob zagonu ali prekinitvi napajanja ohranja svojo vrednost.
Zaradi narave EEROM pomnilnika, ki ga lahko vpišemo samo 100.000 krat,
spremenljivke ne smemo dinamično spreminjati. Seveda jo lahko neomejeno beremo.
f je celoštevilčna Eram
spremenljivka. Ob zagonu ali prekinitvi napajanja ohranja svojo vrednost.
Zaradi narave EEROM pomnilnika, ki ga lahko vpišemo samo 100.000 krat,
spremenljivke ne smemo dinamično spreminjati. Seveda jo lahko neomejeno beremo.
t je
celoštevilčen ram časovnik. Ko postavimo t na neko vrednost , začne časovnik
avtomatsko odštevati do 0. t uporabljamo za relativna merjenja čas. Časovniki
se zmanjšajo za ena ob prekinitvi na vsake 0,065536 Sek pri frekvenci kristala
4 MHz.
p so parametri
dveh PID regulatorjev. p0 do p5 se vpise v Eram. PID regulatorja imata izhod
direktno na PWM izhod. Vrednost lahko preberemo v spremenljivkah u8 in u9.
|
Funkcija |
Limite |
p0 |
P člen 1.PID regulatorja |
+99 .. –99 (vpis v eram) |
p1 |
P člen 2.PID regulatorja |
+99 .. –99 (vpis v eram) |
p2 |
I člen 1.PID regulatorja |
+99 .. –99 (vpis v eram) |
p3 |
I člen 2.PID regulatorja |
+99 .. –99 (vpis v eram) |
p4 |
eram spremenljivka |
|
p5 |
eram spremenljivka |
|
p6 |
Referenca 1.PID regulatorja |
0 .. 1023 |
p7 |
Referenca 2.PID regulatorja |
0 .. 1023 |
p8 |
Vhod 1.PID regulatorja |
0 .. 1023 |
p9 |
Vhod 2.PID regulatorja |
0 .. 1023 |
u so
spremenljivke, ki jih lahko samo beremo.
|
Funkcija |
Limite |
u0 |
Napetostni vhod U0 |
0 .. 1023 (0 .. 2,56 V) |
u1 |
Napetostni vhod U1 |
0 .. 1023 (0 .. 2,56 V) |
u2 |
Napetostni vhod U2 |
0 .. 1023 (0 .. 2,56 V) |
u3 |
Napetostni vhod U3 |
0 .. 1023 (0 .. 2,56 V) |
u4 |
Napetostni vhod U4 |
0 .. 1023 (0 .. 2,56 V) |
u5 |
Napetostni vhod U5 |
0 .. 1023 (0 .. 2,56 V) |
u6 |
Napetostni vhod U6 |
0 .. 1023 (0 .. 2,56 V) |
u7 |
Napetostni vhod U7 |
0 .. 1023 (0 .. 2,56 V) |
u8 |
Napetostni izhod PID-a Ui1 |
0 .. 1023 (0 .. Vcc) |
u9 |
Napetostni izhod PID-a Ui2 |
0 .. 1023 (0 .. Vcc) |
i so
neposredno vhodni biti. Vrednosti se ne shranjujejo tako , da se prebere stanje
vhoda vedno ko spremenljivko uporabimo v formuli. Spremenljivki ne moremo
nastavljati vrednosti. Če v formuli uporabimo veliko črko I to pomeni obratno
vrednost.
o so
neposredno izhodni biti. Vrednosti se ne shranjujejo tako , da se stanje izhoda
spremeni takoj ko spremenljivko
uporabimo v formuli. Če v formuli uporabimo veliko črko O to pomeni obratno
vrednost.
b so ram
biti. Če v formuli uporabimo veliko črko B to pomeni obratno vrednost. Na b so
vezani dinamični biti d .
d so posebne spremenljivke in so
dinamični biti vezani na stanje b ram bitov. d je ena samo takrat ko se je
vrednost ustreznega bita b spremenila glede na stanje ob predhodni uporabi
spremenljivke d.
h so
posebne spremenljivke in so biti histereze. Na bit h je vezana spremenljivka r
, s in e. Ob vklopu so h biti nič. Biti h dobijo vrednost ena ko je s in e
manjše od r. Biti h dobijo vrednost nič ko je s minus e večje od r. Če ima
spremenljivka e manjšo vrednost od 0 dobi ob prvi uporabi h bita vrednost 0. h0
ustrezajo vrednosti s0, r0 in e0. podobno velja za vse naslednje h bite.
c so
posebne »spremenljivke« ki so namenjene sistemskim ukazom.
|
Funkcija |
Opombe |
c0 |
Pomoč,
spisek posebnih funkcij , spisek spremenljivk |
Lahko
odtipkamo tudi samo c |
c1 |
Začetek
programiranja |
Program
je lahko dolg do 28 programskih vrstic dolžine 14 znakov |
c2 |
Konec
programiranja ali zaustavitev izvajanja programa , stop |
|
c3 |
Izvajanje
programa , run |
|
c4 |
Izpis
programa , list |
|
c5 |
Izpis
vrednosti vseh spremenljivk |
|
c6 |
Izpis
časa |
format
hh:mm:ss |
c7 |
Izpis
datuma |
format
mm/dd/yy |
c8 |
Vrtenje
bitov o0 .. o7 levo |
o7 se
preslika v o0 |
c9 |
Vrtenje
bitov o0 .. o7 desno |
o0 se
preslika v o7 |
Najprej
ustavimo izvajanje programa z ukazom »c2«. Nato začnemo vpisovati nov program z
ukazom »c1«. Ukaz o0=i0*i1 pomeni logični in vhodov i0 in i0 v izhod o0. Ukaz
o0=i0+i1 pomeni logični ali vhodov i0 in i0 v izhod o0. Program zaključimo z
ukazom »c2«. Program poženemo z ukazom »c3«.
Pri
pisanju programov moramo upoštevati, da je lahko ena ukazna vrstica dolga 14
znakov, komentar pa lahko pišemo do 30. vrstice. Napišemo lahko do 29 vrstic ,
dolgih do 14 znakov, programa. Programe imamo lahko spravljene na računalniku
in jih po potrebi vpišemo v »interpreter«
Zgornji
program nam demonstrira prižiganje in ugašanje digitalnih izhodov o0 do o4
glede na stanje digitalnih vhodov i0 do i3.
Najprej ustavimo izvajanje programa z ukazom »c2«. Z drugim ukazom nastavimo števec r1 na 0 Tu vidimo, da lahko nastavitve spremenljivk opravimo preden vpišemo nov program. Nato začnemo vpisovati nov program z ukazom »c1«. Prva vrstica programa b0=i0;O0=t0 vpise vrednost digitalne vhodne spremenljivke i0 v bitno ram spremenljivko b0 in postavi obratni digitalni izhod O0 na vrednost časovnika t0. To pomeni da je vrednost O0 enaka 0 če je časovnik t0 enak 0 in je O0 enak 1 če je časovnik t0 različen od nič. Druga vrstica programa d0!t0=100 je pogojni stavek. časovnik t0 se postavi v vrednost 100 če je d0 enak 1 (različen od nič). do je dinamičen bit vezan na ram bit b0. Ko se vrednost b0 spremeni glede na prejšnjo uporabo dinamičnega bita do, dobi samo ob prvi uporabi d0 vrednost 1.
Zgornji program se izvaja približno na 4 mS
Primer 3
so leteče lučke. Ob prehodu digitalnega vhoda i0 iz 1 v 0 se sproži vlak ničel
od b0 do b7. Še morda komentar k drugemu ukazu b8=d0*B0. b8 bo 1 takrat,
ko bo ena d0 in B0,to je pa ob prehodu bita b0 iz 1 v 0. Zadnji trije ukazi nam vsakih 100
izvajanj programa izpišejo tekočo relativno uro v formatu hh:mm:ss. Med
izvajanjem programa lahko seveda beremo in spreminjamo vrednosti katere koli
spremenljivke.
Pri tem programu
gre za nastavljanje parametrov, vhodne vrednosti in reference za oba PI
regulatorja. Sam program izpisuje izhodne vrednosti PI regulatorja u8 in u9.
Primer je uporaba P regulatorja zato se vrednosti s časom ne spreminjajo.
Pri tem
programu gre za nastavljanje parametrov, vhodne vrednosti in reference za oba PI
regulatorja. Sam program izpisuje izhodne vrednosti PI regulatorja u8 in u9.
Primer je uporaba I regulatorja zato se vrednosti s časom spreminjajo od 0 do
največje vrednosti regulatorja to je 1023.
c2% stp
c1% prg
i8!t0=5% vsako sek
O0=t0% 1/3 sek on
i9!t1=15% vsako min
O1=t1% 1/60 min on
r0!r0=r0-1
r0:r1=r1+1
ro:r0=100;c6
c2% stp
c3% run
Prve dve vrstici programa prižigata
izhodni bit o0 vsako sekundo za 1/3 sekunde, tretja in četrta vrstica prižigata
izhodni bit o1 vsako minuto za 1 sekundo. Zadnje vrstice vsakih 100 ciklov
izpišejo trenutno uro v obliki hh:mm:ss.
c2% stp
c1% prg
t0:t0=16
o0=t0<16
o1=t0<14
o2=t0<12
o3=t0<10
o4=t0<8
o5=t0<6
o6=t0<4
o7=t0<2
c2% stp
c3% run
Prvi ukaz nam v primeru , da je
časovnik t0 enak 0 nastavi vrednost le-tega na 16. Ostalih osem ukazov prižiga
izhodne bite o0 do o7, pač glede na vrednost časovnika t0.
c2% stp
e0=20
c1% prg
h0:r0=r0+1
h0!r0=r0-1
o0=h0
c2% stp
c3% run
Najprej
nastavimo vrednost spremenljivke e0 na 20. Prva vrstica programa nam, dokler je
histerezni bit h0 enak 0, prišteva spremenljivko r0 za ena. Ko je izpolnjen
pogoj s0 + e0 < r0 dobi h0 vrednost 1. Druga ukazna vrstica odšteva ena od
spremenljivke r0 , če je h0 različen od nič. Tretji ukaz preslika vrednost
histereznega bita h0 v izhodni bit o0. Izhodni bit utripa v frekvenci
preklapljanja histereznega bita h0. Frekvenco lahko spreminjamo s spreminjanjem
spremenljivke e0.
Zelo
neresno bi bilo kakršno koli razmišljanje v smislu opravljenega dela.
»interpreter« je šele začetek zelo obsežnega dela, ki mu ni videti konca. Pomaga
pa lahko s svojo eleganco in enostavnostjo rešiti marsikateri razvojni problem
in nas hitreje postavi pred nov problem. Majhne spremembe postanejo izredno
nevarne, to je pa že dober znak, za naprej.
Boštjan
Šuhel
Laško ,
september 2001