-    URNIK

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.

 

rainbow140.gif (2707 bytes)


-    INICIALIZACIJA

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.

rainbow140.gif (2707 bytes)


-   ŠTETJE IMPULZOV

   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 )
 

rainbow140.gif (2707 bytes)


-    PREMIKANJE PO OSEH
 

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.

rainbow140.gif (2707 bytes)

-    SERIJSKA KOMUNIKACIJA

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 :-) .

rainbow140.gif (2707 bytes)

-    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.