UNIVERZA V LJUBLJANI

FAKULTETA ZA ELEKTROTEHNIKO

Seminar za predmeta Računalni?ko načrtovanje vezij II in Mikroprocesorji v elektroniki

Dvoosna detekcija premika s sistemom HC11

Avtorja: Matja? Lotrič, Danijel Hude


Najna naloga je bilo izdelati vezje, ki detektira premike v oseh X in Y. Ti premiki se ka?ejo kot spreminjanje vsebine nekih ?tevcev, ki ?tejejo navzgor oz. navzdol odvisno od premikanja. Vrednosti ?tevcev beremo z sistemom HC11 in jih lahko poljubno obdelamo. V principu je to realizacija računalni?ke mi?ke, le da je tu vse izdelano z analognimi in diskretnimi elementi. Sam projekt je sestavljen iz treh večjih sklopov: senzorskega dela, dveh 16 bitnih ?tevcev ter dekoderja in zapahov. V nadaljevanju bova posamezne sklope vezja ter "driver" za najin projekt predstavila bolj podrobno.


1.Detekcija premika oz. SENZORSKI DEL

Detekcija premika je izvedena z oddajno IR diodo in foto tranzistorjem, ki je občutljiv na IR svetlobo. Med diodo in tranzistor je vstavljena vrtljiva zaslonka.
Izgled zaslonke

Slika1: Izgled zaslonke

Zaslonko predstavlja kolut z ?estimi odprtinami kota a=30°. Odprtine se nahajajo na vsakih 60°. ( Slika1 ) Ker ?elimo detektirati tudi smer premika potrebujemo dva para IR senzorjev, ki ju je potrebno pravilno namestiti.( Slika2 ) Smer določimo s pomočjo signalov, ki ju dobimo iz senzorjev (foto tranzistorjev) in D pomnilne celice. Na vhoda D celice ( CD4013 ) D in CLK pripeljemo signala iz senzorjev, izhod Q pa je odvisen od vrednosti na vhoda D, ki se prenese na izhod ob prednji fronti ure.
Izgled izhodnih signalov iz senzorjev

Slika2: Postavitev senzorjev in izgled izhodnih signalov

Bistvo za delovanje pa je, da sta signala med sabo zamaknjena za pol periode, kar zagotovimo s samo mehansko postavitvijo senzorjev.( Slika3 ) Signale iz senzorja potrebujemo za krmiljenje logičnih vezij, ki potrebujejo za pravilno delovanje ustrezne napetostne nivoje. Te dose?emo z vezjem na sliki4. Vezje deluje kot komparator, kar je realizirano pomočjo operacijskega
Realizacija smeri ?tetja z D flip-flopom

Slika3: Realizacija smeri ?tetja z D flip-flopom

ojačevalnika ( LM324 ), kateremu lahko z uporom R1 nastavimo nivo pro?enja. Na izhodu operacijskega ojačevalnika tako dobimo ustrezne napetosti (+3.7V, 0.8V), ki predstavljajo logične nivoje ( '1' , '0' ). Potrebujemo 4 tak?na vezja za vsak signal iz senzorjev (po dva za vsako koordinato), pri čemer so vse neinvertirajoče sponke ?tirih operacijskih ojačevalnikov vezane na
Senzorsko vezje

Slika4: Senzorsko vezje

srednjo sponko potenciometra. Ob samem testiranju vezja pa so se pojavljale te?ave zaradi "glich-ev", ki so se pojavljali povsem naključno v signalu za določanje smeri ?tetja ( Up/Down ) ?tevcev. Neza?eljeno spreminjanje smeri ?tetja je kritično predvsem pri prehodih posameznih ?tevcev iz '1111' v '0000', saj so ?tevci vezani v kaskado. Napaka, ki nastane pri tem je,da se zgornjih 8 bitov nekontrolirano spreminja. To te?avo sva odpravila z dodatnjim vezjem. (Slika5) Vezje vsebuje integrirano vezje (CD 4093) z čisto navadnimi NAND vrati z histerezo, kar nam oblikuje signal in ga hkrati filtrira tako, da razna neza?eljena nihanja ob preklopih ne vplivajo na D celico, ki nam določa krmilni signal za ?tevce. Tudi urin signal oblikujemo z vrati 4093, ter ga obenem zakasnimo, tako da ne prehiteva signala Up/Down, ki mora iti preko vrat IC CD4093 ter D celice IC 4013.


2. Izvedba ?tevcev

Merjenje premika sva realizirala z ?tetjem impulzov, ki se tvorijo pri vrtenju zaslonke. Zaslonka ima re?e, skozi katere IR svetloba odpira fototranzistor, to pa na izhodu komparatorja povzroči '1'. Dobimo vlak impulzov, ki predstavlja CLK signal za ?tevce. Za vsako od osi (X in Y) sva predvidela 16-bitni binarni ?tevec, ki je realiziran z ?tirimi 4-bitnimi binarnimi ?tevci (IC: CD4029). Ti so vezani kaskado tako, da vsak prehod iz '1111' v '0000' predhodne stopnje poveča vrednost naslednji stopnji za 1. (Slika6) ?tevci podpirajo ?tetje gor in dol, saj se zaslonka lahko vrti naprej in nazaj. Signal, ki preklaplja smer ?tetja dobiva na način kot je opisano v zgornjem odstavku. Izhodi ?tevcev so vezani na vhode zapahov in se v odvisnosti od programa spu?čajo na podatkovno vodilo.


3. Dekoder in latch-i

Iz 16 bitnih ?tevcev dobimo 16 bitni podatek, ki določa pozicijo X smeri in 16 bitni podatek za Y smer. Ker ima sistem HC11 le 8 bitno podatkovno vodilo, je treba 16 bitne podatke razdeliti na 2 x po 8 bitov. ( LSB in MSB ) Le te nato spu?čava preko zapahov 74HC373 na podatkovno vodilo. Izhod zapaha ima lahko tri stanja: '1', '0', ali Z. V primeru da zapah ni aktiven, ima izhode v stanju visoke impedance Z, to pa zato da ne pride do nesoglasji na vodilu. Vpis podatkov na podatkovno vodilo poteka v dveh korakih: v prvem koraku podatke pripeljemo na vhode zapaha in jih vpi?emo v D celice, ki jih vsebuje IC 74HC373, v drugem koraku pa podatke spustimo na podatkovno vodilo.

Kaj se bo zgodilo pa je odvisno od krmilnih impulzov. Kdaj se podatki vpi?ejo v latch in kdaj jih spustimo na vodilo nam določa program, ki prek 16 bitnega naslovnega vodila krmili dekoder, le ta pa krmili posamezne zapahe.


Pomnilni?ki prostor na na?em sistemu razdeljen tako, da je v spominu nezaseden prostor od naslova $4000 do $9000. Najino vezje sva priklopila na naslove od $4000 do $4004. Za dekoder sva uporabila EPROM 27512, ki ima 16 naslovnih vhodov in 8 izhodov. Vzrok da sva se odločila za EPROM je preprost, saj to predstavlja najla?jo re?itev (samo en IC) (Slika7). Seveda pa to ni optimalna re?itev saj je EPROM dokaj počasno vezje in vna?a zakasnitve. EPROM je programiran tako, da ob naslovih $x000 do $x007 da na enem od osmih izhodih da logično '1'.(x od 4 do 9). Izgled kako sva sprogramirala EPROM, prikazuje slika8, dodana pa je tudi datoteka Eprom.bin z najnim programom. Z tako sprogramiranim EPROM-om sva zadostila potrebam po raz?irljivosti sistema, saj so izhodi EPROM-a ( Q0 ? Q7 ) dostopni na konektorju CON8 in se jih lahko uporabi kot ChipSelect signale pri raz?iritvah sistema kar preko dekoderja na najinemu sistemu. Če pa najina re?itev ne zado?ča, se lahko EPROM sprogramira čisto poljubno odvisno od zahtev.


4. Program oz. "driver"

Sam driver za najin sistem je lahko čisto preprost in kratek. Poskrbeti mora le za vpis vrednosti ?tevcev v D flip-flope zapahov in jih v določenem trenutku spustiti na podatkovno vodilo, da so dostopni za kasnej?o obdelavo v sistemu HC11. Dobljene podatke moramo shraniti na neko začasno lokacijo, saj celotno informacijo o stanju ?tevcev predstavlja 16 bitni podatek. Krmiljenje letch-ev in s tem vpis podatkov na podatkovno vodilo poteka z zelo preprostim programom: <
STAA $4004;zalečamo vse zapahe
LDAA $4000 ;LSB podatki od X osi
STAA LSBX ;shranimo podatek na LSBX
LDAA $4001 ;MSB podatki od X osi
STAA MSBX ;shranimo podatek na MSBX
LDAA $4002 ;LSB podatki od Y osi
STAA LSBY ;shranimo podatek na LSBY
LDAA $4003 ;MSB podatki od Y osi
STAA MSBY ;shranimo podatek na MSBY
Z ukazom STAA $4004 najprej postavimo signal G na zapahih na '1', kar nam odpre pot za vhodne podatke s ?tevcev do D celice, ki se ta podatek na vhodu zapolni. Nato se vhod zopet zapre. Pomembno je da vse podatke vpi?emo v latch ob istem času, saj bi nam vpis LSB in MSB podatkov ob različnem času povzročilo napako, ker se zaslonka med vpisovanjem lahko vrti ( celoten 16 bitni podatek bi bil napačen !!). Z ukazi LDAA $400x (x ? 0 do 3) pa beremo podatke, ki jih z postavitvijo signala OC na '0' spustimo iz D celic čipa 74HC373 na podatkovno vodilo. Signal OC dobimo z NAND operacijo signala iz EPROM-a (Q0 ? Q3) in signala OE!, ki ga dobimo iz na?ega sistema. Namesto branja podatka v akumulator A oz. B z ukazoma LDAA oz. LDAB, to lahko storimo tudi z ukazom LDX oz. LDY, le da tu dobimo celoten 16 bitni podatek naenkrat. Paziti moramo le na to, da sta med seboj zamenjana 8 bitna MSB in LSB podatka.(Namesto MSB_LSB je LSB_MSB)


5.Sheme

Shema vezja za filtriranje in določanje smeri Shema 16-bitnih ?tevcev Shema dekoderja in zapahov Izgled programa zapisanega v EPROM Blokovna shema sistema
Slika 5 Slika 6 Slika 7 Slika 8 Slika 9

6.Aplikacija

Za predmet Mikroprocesorji v elektroniki smo morali povezati na? "hardware"-ski izdelek in programiranje v realnem času. Odločila sva se, da najino ti. mi?ko pove?eva z ploterjem, ki je bil kot projektna naloga narejen in na razpolago. Napisala sva program, ki bere podatke iz mi?ke, določi smer pisanja in ?tevilo korakov, ki jih motor mora narediti v določeni smeri. Program je sestavljen iz ?estih rutin, ki jih vključimo v urnik in se zvajajo v danem zaporedju. Spodaj so nakratko opisane vse rutine, ki jih vsebuje najin program. Nadrobnej?i opis vsebuje datoteka Appz.asm z programom, ki vsebuje podrobne komentarje.


Opis rutin:


1. Rutina KBD:   Ta rutina prebere tipke na ploterju. Rezultat se shrani v register KBDKEY. Če je tipka pritisnjena, se to ka?e, kot logična enica na enem izmed zgornjih petih bitov.


2. Rutina PISALO:  S to rutino vklapljamo oz. izklapljamo pisalo plotreja. Z pritiskom na strednjo tipko ploterja se pisalo spusti oz. dvigne odvisno od prej?nega stanja.


3. Rutina MOUSE:  Rutina MOUSE nam prebere podatke o stanju X in Y osi. Ti podatki se vpi?ejo v bufferja OSXB-OSXE (podatki za X os) in OSYB-OSYE (podatki za Y os). Bufferja sta velikosti 32 bajtov.


4. Rutina MIS_BUF:  Ta rutina nam ob klicanju iz urnika prebere vrednosti iz bufferjev. Podatki, ki jih preberemo se skranijo v začasne 16 bitne registre.


5. Rutina SMER:  Ta rutina nam izračina ?tevilo korakov motorja in določi smer v kateri se motor vrti.


6. Rutina VOZI:  Rutina nam krmili koračna motorja ploterja. Ta rutina se nahaja v urniku dvakrat in se tako izvr?i 128 krat v sekundi.



7.Datoteke

driver.asm programska koda gonilnika
Appz.asm koda aplikacije: povezave mi?ke in ploterja
Eprom.zip program, ki je vpisan v EPROM
PCB_files.zip SCH in PCB datoteke za projekt narejene v programu Protel99SE

7.Povezave

PROTEL domača stran
ChipDir Stran, kjer dobite podatke o uporabljenih IC-jih (DataSheet)
ePanorama.net Stran za vse elektronike z veliko dobrimi nasveti in primeri

Vpra?anja, pripombe, predlogi? Pi?ite:

matjaz.lotric@email.si
Dhanijel@email.si