diates diadinamični terapevtski stimulator diadinamični terapevtski stimulator vsebina opis naloge in metode definicija fes tehnologija fes sploni opis diates opis sistema nekaj o uporabljenem mikrokontrolerju hc a periferne enote sploni opis programa podrobneji opis programa primer zglednega kodiranja inicializacije led in lcd prikazalnikov prekinitvene rutine literatura avtor definicija fes funkcionalna električna stimulacija fes je metoda kjer elimo z draenjem ivčnih in miičnih tkiv s tokovimi impulzi doseči odzive ki jih pacient funkcionalno uporablja primeri uporabe fes srčni vzbujevalniki stimulacija hoje in stoje gibov rok dihanja uravnavanja krvnega tlaka v teh primerih uporabljamo kontinuirano vzbujanje z električnimi tokovi senzorične funkcije pri odpravi bolečine zaznavnje tlakov in sil najstareji primer ki opisuje uporabo fes je srčni vzpodbujevalnik pacemaker katerega naloga je z električnimi draljaji stimulusi periodično povzročati krčenje srčne miice tako da ohranja črpalno funkcijo po mestu posredovanja ločimo miično ivčno hrbtenjačno in mogansko fes po načinu posredovanja pa fes s povrinskimi konimi vstavljenimi v koo igelnimi vsajenimi implantiranimi elektrodami vsajene so v telo ob ali v okolico ivca nazaj tehnologija fes fes lahko izvajamo le na centralno denerviranih nevromiičnih strukturah kar narekuje obliko drailnih tokov ki so lahko tetaniČni so impulzne oblike z nastavljivo frekvenco od hz ter trajanjem impulza od ms do ms brez enosmerne komponente zadnje je izrednega pomena saj prisotnost te komponente povzroča pekoč občutek in s časom opekline diadinamiČni te vrste tokov drui polnovalna sinusna oblika konstantne doline polvala ms vendar različnimi kombinacijami viin ter pavz glede na to ločimo osnovnih programov df mf rs cp lp nazaj sploni opis diates stimulator ki ga delamo vsebuje obe vrsti tokov in fes posreduje s pomočjo povrinskih elektrod saj gre predvsem za miično stimulacijo velikost uporabljenih tokov je nastavljiva od do ma medtem ko je uporabljena napetost nekje v pri izbrani vrsti elektrod vemo da jakost toka z razdaljo med elektrodama in ivcem upada tako da je izbira upravičena medtem ko bi morali pri izbiri implantiranih elektrod zniati omenjeni vrednosti za krat nazaj nekaj o uporabljenem mikrokontrolerju mc hc a mc hc označuje druino bitnih mikrokontrolerjev proizvajalca motorola izdelanih v hcmos tehnologiji delujejo pri hitrostih vodila do mhz če uporabljamo kristal mhz mona je tudi popolnoma statična uporaba če kristal izključimo kar zmanjuje porabo energije uporabljamo hc a ki ga odlikujejo naslednje lastnosti spomin ki je vdelan vanj lahko delimo na bytov eeprom bytov ram poleg standardnih enot ki jih vsebujejo tudi njegovi predhodniki vsebuje e kanalni bitni a d pretvornik in zelo razvejan sistem časovnikov ki temelji na bitnem prosto tekočem tevcu na tem tevcu sloni celotni sistem ostalih časovnikov ki so input capture prestreni časovniki output compare primerjalni časovniki real time realni časovnik posebnost mc hc druine je bitni tevec impulzov pulse accumulator ki teje spremembe na zunanjem vhodu ali pa ga uporabljamo za merjenje zelo dolgih period v osnovi lahko mc hc a deluje v dveh načinih enostavni single chip mode razirjeni expanded multiplexed mode razlika med omenjenima načinoma v podsistemu pia hc ki ga ima ta mikrokontroler e integiranega pia je pri enostavnem načinu vključen pri razirjenem pa izključen enostavni način se uporablja ko imamo malo perifernih enot toliko kot imamo i o vrat v tem primeru do medtem ko razirjeni način rabimo ko moramo naslovni prostor bolj natančno dekodirati da bi omogočili priključitev več perifernih enot primer uporabe je priključitev dodatnega pomnilnika v enostavnem načinu imamo opravka z dvemi ločenimi i o vrati port b in c medtem ko v razirjenem ti dve vrati zdruimo da bi naslavljali bitno razvojni sistem ki sem ga uporabljal je emulator omenjenga mikrokontrolerja to je m hc evm evaluation module ta sistem omogoča emulacijo mc hc a v razirjenem načinu medtem ko za mc hc e pa v enostavnem načinu nazaj periferne enote srce sistema je mikrokontroler hc a ki deluje v razirjenem načinu tako da lahko dostopa do programa ki je shranjen v epromu c k dekodiranje v sistemu je nepopolno in sicer na zgornja dva byta natančno naslovni prostor zasedajo po vrsti interni ram ff tipkovnica ff tipkovnica ff lcd modul ff lcd modul ff d a pretvornik ff nadzor napajanja ff eprom c ffff tipkovnica in tipkovnica je zasnovana kar se da enostavno do tipk dostopamo preko kratnega zatiča hc ki mu omogočimo izhode ko ga elimo brati sicer pa sam zatič ni v uporabi ker je vezan kot stikalo lcd prikazalnik lm znakov prikazalnik lm tovarne densitron je sestavljen iz dveh identičnih sklopov ki prikazujeta vsak po znakov vsak vsebuje procesor ki dani podatek na vhodu prekodira v oz točkovno kodo in jo nato prikae na zaslonu podatek vpisujemo paralelno na različne naslove en prikazalnik zahteva kar lokacije naslovnega prostora in sicer vpisovanje ukaza procesorju ki krmili prikazalnik procesorju moramo ob inicializaciji povedati v kaknem načinu naj dela koliko vrstic prikazalnika naj uporabi katero nastavitev prikaza ali točk stanje kurzorja način naslavljanja vpisovanje podatka ki ga elimo prikazati dani podatek se vpisuje v ascii kodi pri čemer nam za vpisovanje besedila ni treba vpisovati vsakega znaka posebej ampak izrabimo indeksno naslavljanje saj nam zbirnik ki ga uporabljam prekodira zaporedje znakov enega za drugim v eprom podprogram ki indeksno jemlje znake besedila iz eproma in jih izpisuje na prikazalnik se imenuje beseda branje stanja zasedenosti procesor ki krmili prikaz rabi nekaj časa da obdela ukaz ki smo mu ga poslali v tem času ni sposoben sprejeti novega zato se lahko zgodi da bi tako vsiljen ukaz zletel mimo procesor stanje zasedenosti nakae s postavljanjem zastavice ki je v rutinah imenovana rdbusy branje podatka iz spomina prikazalnika lcd prikazalnik je sicer namenjen prikazovanju vendar ga lahko v skrajni sili uporabljamo kot zunanji ram saj ima procesor ki ga krmili veliko preveč le tega v primeru da bi izkoričali omenjeni ram moramo paziti da ne uporabljamo increment oz decrement mode načina za skakanje po lokacijah led prikazalnik ltm ta podsistem je modul ki vsebuje hibridno vezje to vezje je preprost primer serijskega sinhronega vmesnika ima bitni pomikalni register ki ga vpisujemo s frekvenco khz na začetku prenosa postavimo data enable v aktivno stanje nato poljemo startni bit in podatkovnih ostali pa so stop biti podatkovni biti so kodirani v segmentni kodi register bo dano vsebino pomikal skladno z uro dokler start bit ne sproi vpisa v zatiče to se zgodi ko poljemo bit ki vsebino zadrujejo do novega paketa podatkov Če je vsebina ki jo poljemo e enaka vpisani se novi podatek ne vpie d a pretvorniki gre za kanalni bitni d a pretvornik max tovarne maxim kanale izbiramo z dvema adresnima bitoma to je edini primer ko je uporabljeno popolno dekodiranje v sistemu ko izberemo določeno adreso je s tem e izbran tudi kanal tako da le e vpiemo podatek ki ga do naslednjega vpisa zadri vhodni zatič max nadzor napajanja nadzor polnenja akumulatorjev je izveden s procesorjem mta tovarne arizona microchip vendar pa ta del projekta e ni docela raziskan nazaj sploni opis programa program sestoji iz časovno začitenih vpisov inicializacij uporabnikega vmesnika glavne zanke prekinitev Časovno začiteni vpisi Časovno začiteni vpisi so del programa ki traja prvih ciklov procesorske ure mhz v teh ciklih lahko neovirano nastavljamo razna delilna razmerja prescaler rate za prekinitve v naem primeru nastavimo delilno razmerje za led prikazalnik tu delimo clk s in pa za tipkovnici ne delimo clk nato izberemo e način proenja in omogočimo ad pretvornik uporabniki vmesnik ta del programa bo spremenil stanje določene sistemske spremenljivke glede na kombinacijo pritisnjenih tipk nastavitve so zasnovane dvonivojsko na prvem nivoju pritisnemo eno od funkcijskih tipk ura predtok program start stop na drugem nivoju pa s tipkama gor in dol spreminjamo ter z enter potrdimo vrednost spremenljivke iz drugega nivoja se lahk vrnemo le s tipko enter nakar s ponovno izbiro določene tipke prvega nivoja zopet prestavljamo vrednosti dokler ne zaznamo kombinacije enter in start takrat omogočimo e prekinitvi prekinitev ki izteva led časovnik in prekinitev ki rie na izhodu d a pretvornika tokovne impulze in beremo vrednost a d kanala toliko časa dokler ni vrednost jakosti kanala na vrednosti spremenljivk med nastavljanjem sproti izpisujemo na lcd prikazalnik glavna zanka v glavni zanki najprej pogledamo če se je led časovnik e iztel nato beremo vrednost a d pretvornika nakar zajeto vrednost pretvorimo iz bin v bcd kodo dobljenim bcd digitom pritejemo hex da dobimo ascii kodo ki jo nato izpiemo na lcd prikazalnik in zanko ponovimo če ni bila pritisnjena tipka stop ali če se ura e ni iztela nazaj primer zglednega kodiranja to je rutina ki pretvarja bitno binarno vrednost adr v njeno bcd kodo bcd sto bcd des bcd eni izkoričena je le polovična zmogljivost rutine saj je podatek adr ki ga pretvarjamo biten rutina pa dela takole bin bcd ldaa resetiramo vrednosti vseh bcd digitov staa bcd eni staa bcd des staa bcd sto ldy bcd sto naloimo začetni digit ki ga bomo izračunali ldab adr naloimo vrednost ki jo pretvarjamo convtok ldx a naloimo vrednost dec s katero bomo delili idiv celotevilsko delimo stab y shranimo tekoči digit dey vzamemo naslednji digit cpx pogledamo ali je ostanek pri deljenju xgdx zamenjamo d in x ostanek postane nov deljenec bne convtok ponavljamo dokler ni ostanek rts nazaj inicializacija led in lcd inicializacijo led sestavljata dve proceduri ledinit tu vzpostavimo serijsko sinhrono komunikacijo in določimo njene parametre hitrost način posebne lastnosti porta d hitrost komunikacije je khz procesorju določimo način delovanja kot master portu d pa izključimo pull up upore saj so v vezalni shemi predvideni zunaj izključimo tudi prekinitev ki se proi ob uspelem prenosu torej bomo delovali v t im polled načinu ko moramo sami gledati kdaj se je postavila zastavica uspenosti prenosa reset ta del pa sprazni pomični register v hibridnem vezju ki ga ima led prikazalnik najprej polje start bit nato pa e ničel digiti ta del pa poilja vrednosti odmikov st des min st en min st des sek in st en sek na led prikazalnik ker smo rutino digiti uporabljali za timer je v glavnem programu vsak od tirih digitov naslovljen indeksno zato da smo za odtevanje ure izrabili kar računanje z relativnimi indeksi ledinit ldx bclr porta x data enable ldaa spie spe dwom mstr cpol cpha f khz staa spcr ldaa f vsi pini so izhodni staa ddrd ldaa f staa portd vsi pini so na rts reset ldx bset porta x data enable tu je zopet negativna logika brn reset bclr portd x c mosi in miso brn reset ldaa staa stevec prazni reg bset portd x sprazni register poslje clk impulzov bset portd x c miso mosi sda brn reset bclr portd x ldaa stevec deca staa stevec bne prazni reg bclr porta x data enable rts tabela segmentnih kod za stevilke kode stevilk so v negativni logiki pomeni prizgan segment st fcb st fcb f st fcb st fcb d st fcb st fcb st fcb st fcb f st fcb st fcb full fcb blank fcb ff digiti ldx bset porta x data enable bclr portd x c mosi in miso sda start bit bset portd x prvi urin impulz zacetek bclr portd x prvi urin impulz konec bset portd x c miso mosi sda bclr porta x data enable bset spcr x spi enable bset porta x data enable ldy st ldab des min aby ldab y prvi digit stab spdr wait ldaa spsr polled nacin beremo msb spsr bpl wait cakanje da se prenos izvrsi podobno ponovimo za ostale tri digite ldy st ldab en min aby ldab y drugi digit eorb z exor prizgemo decimalno piko stab spdr na drugem digitu wait ldaa spsr bpl wait cakanje da se prenos izvrsi ldy st ldab des sek aby ldab y tretji digit stab spdr wait ldaa spsr bpl wait cakanje da se prenos izvrsi ldy st ldab en sek aby ldab y cetrti digit stab spdr wait ldaa spsr bpl wait cakanje da se prenos izvrsi bclr spcr x spi disable bset portd x urin impulz zacetek bclr portd x urin impulz konec bset portd x impulz zacetek bclr portd x impulz konec bset portd x impulz zacetek bclr portd x impulz konec bclr porta x data enable bclr spcr x spi disable rts lcdinit ldaa clear display staa wrinst busy ldaa rdbusy read bf busy flag bmi busy ldaa bit operation line display x font staa wrinst busy ldaa rdbusy read bf busy flag bmi busy ldaa display on cursor off no blink staa wrinst busy ldaa rdbusy read bf busy flag bmi busy ldaa increment mode no shift staa wrinst busy ldaa rdbusy read bf busy flag bmi busy rts izpisovanje besedila na lcd prikzalnik na lcd prikazalnik moramo izpisovati sporočila ki so odraz trenutnega stanja sistema sporočila so načeloma večzankovni nizi zato za dano rutino potrebujemo prevajalnik ki zna besedilo pretvoriti v niz zaporednih ascii kod znakov to v osnovni izvedbi prevajalnika iasm storimo z ukazom fdb sporočilo ki ga elimo izpisati na koncu definicije sporočila dodamo kodo znaka ki se sicer v izpisanem tekstu ne bo nikdar pojavil to je zank nul z njim ločujemo besedila med seboj in določamo konec besedila tako zapisano sporočilo lahko zopet obdelujemo s pomočjo indeksnega naslavljanja primer kodiranja take procedure je beseda ki po vrsti jemlje znake iz eproma in jih izpisuje na lcd prikaz dokler ne naleti na znak nul rutino kličemo tako da povemo kam na lcd naj se sporočilo izpie in v register x naloimo začetek niza znakov ki ga elimo izpisati beseda ldaa rdbusy read bf busy flag bmi beseda ldaa x branje vrednosti texta beq kon bes staa wrdata zapis na ekran inx bra beseda kon bes inx rts nazaj prekinitvene rutine vse prekinitvne rutine v programu so periodične mc hc razen real time inter rupta in software intr nima periodičnih interruptov zato mu jih moramo vsilit i to storimo na vseh interruptih tipa toc timer output compare prekinitve t ipa toc se sproijo vedno ko je vrednost tevca tcnt enaka vrednosti primerjaleg a registra toc najprej naloimo vrednost prostotekočega tevca tcnt v register d nato tej vrednosti pritejemo periodo in dobljeno vrednost shranimo v register primerjave npr toc periodo izračunamo iz tevila ciklov ki jih procesor por abi da pride o vrednosti v primerjalnem registru če vemo da vsak cikel ure pov eča vrednost prosto tekočega tevca tcnt za toc i ldd tcnt addd e naslednja prekinitev za sekunde std toc nazaj literatura m hc reference manual motorola inc mikrokrmilniki sistemi programiranje v realnem času doc dr tadej tuma zaloba fri in fe mikroprocesorski sistemi duan kodek bi tim d o o mikroprocesorji v elektroniki zapiski s predavanj ol leto predavatelj prof dr franc bratkovič nazaj avtor matej moek ulica bratov knapič telefon ljubljana slovenia europe e pota matej mozek flux fe uni lj si nazaj