Urnik je ena taka žival, ki ti marsikatero stvar
olajša ( pri programiranju HC 11 seveda )
Marsikdaj pa ti zagreni življenje in drastično podaljša čas, ki si ga pripravljen
porabiti pred računalnikom.
Sestavljen je iz prekinitvenih rutin, ki se vmešavajo v življenje navadnega programa.
Prekenitvene rutine se izvajajo 64-krat v sekundi ( glej skripto od prof Tume )
Vanj sva vključila naslednja opravila:
- štetje impulzov
- SCI komunikacijo
Ti dve opravili sta edini, ki se morata izvajati vedno, ne glede na potek programa.
Prvega moramo vključiti dovolj pogosto, da lahko določimo pozicijo roke dvigala, drugega
pa zato, da
pri serijski komunikaciji nemoteno sprejemamo in pošiljamo podatke in se le ti ne
izgubijo.
Inicializacijo sva v večji meri prevzela iz testne
naloge z LED displejčki in tipkovnico.
Vsekakor sva jo morala temeljito predelati, da sva lahko inicializirala PIO vmesnik za
uporabo dvigala.
( preden sva to naredila ni delalo nič ). V tem delu sva nato postavila na
začetno vrednost še nekatere
spremenljivke, ki sva jih uporabljala v programu in dvigalo sva zapeljala v začetno lego
( postopek je opisan
kasneje v dokumentu ) Ta del ni bil tako težak.
To opravilo se je izvajalo v urniku. S
štetjem impulzov impulznega dajalnika smo lahko vedno določili
lego roke dvigala in če se je premikala, še njeno smer. Na razpolago sva imela dva vlaka impulzov, ki
sta med seboj zamaknjena za 90°.
Ko ugotovimo, v kakšnem
zaporedju si impulzi obeh kanalov sledijo, lahko določimo smer premikanja. npr. če je
kanal A na 1 in B na 0
in je v naslednjem trenutku kanal A na 1 in B na 1 potem določimo, da se zadeva premika
naprej in
števcu v tej smeri prištevamo impulze, v nasprotnem primeru pa se premika nazaj in
števcu v tej smeri
odštevamo impulze ( skoraj ne bi verjeli a ).
Če zadeve ne razumeš, si poglej program, se poglobi za 1 urco vanj in vse ti bo jasno. V
nasprotnem
primeru pa koga vprašaj ( mogoče celo enega od avtorjev tega projekta )
To naj bi bil najtežji del naloge, ampak ne bi vedel zakaj, saj sva ga napisala v 15 min.
( in sicer po 1 urni poglobljeni študiji dajalnikov )
Premikanje po oseh je bilo izvedeno na podlagi
štetja impulzov in odčitavanja stanja končnih stikal.
Premik v izhodišče sva izvedla že pri inicializaciji ( glej zgoraj v dokumentu )
in sicer s tem,
da sva motorčke, ki premikajo roko pognala v eno smer in preverjala stanje končnih
stikal.
Ko sta bili desno in spodnje stikalo sklenjeni, je bila roka v izhodišču in lahko se je
začelo
štetje impulzov, ki nam posredno posredujejo trenutni položaj roke dvigala.
Za premikanje v pravo smer moramo določiti ali je trenutno stanje števca položaja roke
dvigala večje, manjše ali enako željeni poziciji. Od tega je odvisno kateri motorček
bomo prižgali
V dve spremenljivki shranimo vrednost, do katere želimo priti in nato samo preverjamo ali
je trenutna vrednost večja,
manjša ali enaka željeni. V prvem primeru mora biti motorček v tej smeri še vedno
prižgan,
v drugih dveh pa ga moramo ugasniti. Tako pridemo do željene lege postopek ponovimo še
na drugi osi.
To je bil najtežji del programa. ( beri: Delala
sva ga najdlje in po dolgih mukah ugotovila, da je skrivnost
v razumevanju delovanja SCSI registra :-)). Bistvo tega podprogramčka je ciklični FIFO
buffer v katerega
zlagamo vse prispele znake, ki jih kasneje obdelamo. Serijski terminal, preko katerega
komuniciramo z
mikroprocesorjem je že del razvojnega sistema. Rutina mora dovolj hitro pregledovati ali
je prispel kakšen
nov znak. Zato smo jo vključili v urnik enkrat, kar je dovolj pogosto, saj verjetno
nihče ne tipka 64 znakov
na sekundo :-) .
-
LOGISTIKA (prestavljanje kontejnerjev )
To je bila kar težka naloga. Odločila sva se, da
bova naredila 3D skladišče. Najprej sva določila prostor
velikosti približno 3x3 kontejnerje ( kocke :-)) Nato sva določila še mesta v
pomnilniku za prvo in drugo
nadstropje. Na ta mesta se shranjuje številka kocke, tako da jo program pri iznosu najde
in pripelje roko
na pravo (!!!!) mesto. Potem ko prispe na pravo mesto, se zažene podprogram, za dviganje
in spuščanje
roke in vklop ali izklop magneta. Tako kocko dvignemo in roko potem peljemo na lokacijo,
kjer je tovornjak
in tam kocko izpustimo.Če pa želimo kocko vnesti, podprogramček najde prvo prazno mesto
in vanj vloži
kocko. Težko je bilo narediti le prelaganje, kjer je potrebno, če je kocka v drugem
nadstropju in želimo
na tovornjak naložiti kocko pod njo, to kocko na vrhu preložiti. Prelaga po enaki
proceduri, kot vlaga kocke
Paziti je potrebno le na to, da kocke, ki smo jo dvignili ne postavimo spet nazaj na isto
mesto.