Fejleszt rendszer kidolgozása és ennek alkalmazása jelfeldolgozási célokra a Microchip PIC17C756 mikrokontrollerhez
Diplomaterv
Készítette: Pataki Zoltán Budapesti M szaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai kar 2001. május
Tartalom 1. Bevezetés ............................................................................................................................................. 4 2. Folyamatirányítási és jelfeldolgozási feladatok megoldási lehet ségei.............................................. 6 2.1. Rendelkezésre álló hardver eszközök.......................................................................................... 6 2.2. Rendszerszervezési elvek ............................................................................................................ 8 2.3. Utasításkészlet fajták................................................................................................................... 9 3. A PIC17C7XX mikrokontroller-család ............................................................................................. 11 3.1. A mikrokontroller-család jellemz i........................................................................................... 11 3.2. A mikrokontroller-család utasításkészlete és annak jellegzetességei........................................ 12 A vezérlésátadó utasítások .......................................................................................................... 12 'Olvasó-Módosító-Író' utasítások................................................................................................. 13 Programmemória kezel utasítások............................................................................................. 14 Számábrázolási módok és az aritmetika...................................................................................... 16 Egyéb észrevételek ...................................................................................................................... 22 3.3. Beépített perifériák és programozásuk ...................................................................................... 24 Megszakítások fajtái, kezelésük.................................................................................................. 24 Számlálók és id zít k.................................................................................................................. 26 Az A/D átalakító.......................................................................................................................... 26 Soros vonali illeszt áramkörök.................................................................................................. 28 4. A fejleszt rendszer ............................................................................................................................ 29 4.1. A fejleszt rendszerekr l általában ............................................................................................ 29 4.2. A fejleszt kártya felépítése ....................................................................................................... 30 4.3. A fejleszt rendszer szoftver elemei .......................................................................................... 34 5. Küls egységek illesztése a fejleszt rendszerhez.............................................................................. 36 5.1. Flash memória illesztése ........................................................................................................... 36 A Flash memória hardver illesztése ............................................................................................ 36 A Flash memória vezérl programja ........................................................................................... 37 5.2. Pontmátrix folyadékkristályos kijelz illesztése ....................................................................... 38 Az folyadékkristályos kijelz hardver illesztése......................................................................... 38 Az folyadékkristályos kijelz vezérlése ...................................................................................... 40 6. Jelfeldolgozási lehet ségek ............................................................................................................... 43 6.1. Digitális sz r k létrehozása....................................................................................................... 43 Digitális sz r k ........................................................................................................................... 43 A diszkrét idej Fourier-transzformáció ..................................................................................... 44 A Z-transzformáció ..................................................................................................................... 45 A komplex átviteli függvény ....................................................................................................... 46 Az impulzusválasz....................................................................................................................... 46 Digitális sz r k alaptípusai ......................................................................................................... 46 M veletek és számábrázolás digitális sz r kben........................................................................ 47 A véges számábrázolás hatása..................................................................................................... 48 IIR sz r kanonikus megvalósítási módok.................................................................................. 49 Megvalósítási problémák PIC17C756 esetében.......................................................................... 49 A sz r megvalósítása................................................................................................................. 50 A futási eredmények.................................................................................................................... 55 6.2. Magzati szívhang feldolgozó rendszer ...................................................................................... 57 A rendszer feladata...................................................................................................................... 57 A rendszer jellemz i.................................................................................................................... 57 Néhány valószín ségelméleti és matematikai statisztikai alapfogalom...................................... 58 A magzati szívhangminták jellemz i .......................................................................................... 61 A szakaszos m ködés rendszer ................................................................................................. 65 Valósidej feldolgozási lehet ségek ........................................................................................... 67 A feldolgozó rendszer szimulátora.............................................................................................. 73 Az FHR lépték linearizálása........................................................................................................ 81
Diplomaterv
-2-
2001 tavasz
A megvalósítás nehézségei.......................................................................................................... 82 7. Összefoglalás ..................................................................................................................................... 84 Függelék ................................................................................................................................................ 85 F.1. A PIC17C7XX mikrokontroller-család..................................................................................... 85 F.1.1. A PIC17C7XX mikrokontroller-család utasításkészlete................................................... 85 F.1.2. Perifériális megszakítások kezelése .................................................................................. 86 F.2. A fejleszt rendszer.................................................................................................................... 90 F.2.1. A fejleszt kártya gyártási dokumentációja ....................................................................... 90 A fejleszt kártya kapcsolási rajza.......................................................................................... 91 A fejleszt kártya alkatrész-beültetési rajza............................................................................ 92 A fejleszt kártya alkatrész-beültetési oldalának rajzolata..................................................... 93 A fejleszt kártya forrasztási oldalának rajzolata ................................................................... 94 A fejleszt kártyához szükséges alkatrészek jegyzéke............................................................ 95 A fejleszt kártya jumper-einek rendeltetése.......................................................................... 97 F.2.2. A fejleszt rendszerhez szükséges programok................................................................. 101 F.3. Küls perifériák illesztése a fejleszt rendszerhez .................................................................. 102 F.3.1. Flash memória illesztése ................................................................................................. 102 A Flash memória bekötése ................................................................................................... 102 A Flash memória vezérl programja..................................................................................... 102 F.3.2. Pontmátrix folyadékkristályos kijelz illesztése............................................................. 103 Az folyadékkristályos kijelz bekötése................................................................................ 103 Az folyadékkristályos kijelz vezérl programja................................................................. 103 F.4. Jelfeldolgozási alkalmazások .................................................................................................. 104 F.4.1.Digitális sz r megvalósítása........................................................................................... 104 A digitális sz r teljes programja ........................................................................................ 104 A személyi számítógépen futó ellen rz program részei...................................................... 104 F.4.2. Magzati szívhangok feldolgozása ................................................................................... 104 Irodalomjegyzék .................................................................................................................................. 106
Diplomaterv
-3-
2001 tavasz
1. Bevezetés Mai mindennapi életünket tekintve azt tapasztalhatjuk, hogy a mikrokontrollerek, mint egy tokba integrált számítógépek a mikroelektronika igen jelent s alkalmazási területét jelentik. Lassan életünk szinte minden területén érezhetjük jelenlétüket, hogy mindennapjainkat kényelmesebbé, biztonságosabbá, hatékonyabbá tegyék. A mikroelektronika másik hasonlóan jelent s felhasználási területét jelentik a digitális jelfeldolgozó processzorok (idegen rövidítéssel DSP, azaz Digital Signal Processor), amelyek az esetek nagy többségében éppen a mikrokontrollerekkel együtt fordulnak el , hatékony munkamegosztásban. A mikrokontroller végzi a fizikai valósághoz közeli vezérlési feladatokat, a jelfeldolgozó processzor pedig a bonyolult számításigényes feladatokat. Mindkét alkalmazási terület - a mikroelektronikáról általában elmondható módon - az utóbbi évtizedekben több robbanásszer fejl dési szakaszon ment keresztül, a jelfeldolgozó processzorok számítási hatékonysága is többszörösére n tt. A mai viszonyok szerint az aktuális irányzat a jelfeldolgozó processzorok tekintetében a nagymértékben párhuzamos m veletvégzés, és az ehhez tartozó nagy utasításszó szélesség (Texas Instruments - Very Long Instruction Word (VLIW) architektúra, Analog Devices - Static Scolar architektúra). A mikrokontrollerek és jelfeldolgozó processzorok vonatkozásában közös törekvés továbbá a fogyasztás csökkentése, ami jelenleg a nagy disszipáció és az egyre növekv számítási igény miatt általában a mikroelektronika minden területér l elmondható. Az el z ekben említett gyakori együttélésnek tudható be egy egyidej , mostanában er söd irányzat, amely a mikrokontrollerek és jelfeldolgozó processzorok részleges egy tokba integrálását t zte ki célul, annál is inkább, mivel ezt a jelenlegi technológiai fejlettség már lehet vé teszi. A Microchip PIC17CXXX és PIC18CXXX mikrokontroller-család is ennek a próbálkozásnak az egyik els vonulata, ezek a processzorok közepes jelfeldolgozási képességük, és kedvez áruk, alacsony fogyasztásuk miatt jelent s érdekl désre tarthatnak számot. Jelfeldolgozó processzoroknak definíció szerint azokat a processzorokat tekintjük, amelyek rendelkeznek hardver szorzóval, és hatékonyan támogatják a jelfeldolgozási m veletekhez szükséges címzési, adathozzáférési módokat els sorban cirkuláris címzést, sor típusú tároló (idegen kifejezéssel First In First Out - FIFO) megvalósítására. A fent említett mikrokontrollerek rendelkeznek el jel nélküli, bináris kódban adott 8 bites számok összeszorzására alkalmas hardver szorzóval, képesek közvetett (indirekt) címzésre és utólagos automatikus címmódosításra (post auto-increment, auto-decrement mód). A PIC18CXXX processzorok további címzési módokat is támogatnak. A PIC17C7XX processzorok legnagyobb m veleti sebessége 8.25 MIPS, ami a mikrokontrollerek világában jelent snek mondható. Az els fejezet rövid áttekintést ad a jelfeldolgozással kapcsolatos feladatok megoldási lehet ségeir l, bevezetést ad a számítógépek szervezési alapelveibe majd a kés bb ismertetend mikrokontrollert elhelyezi ebben a rendszerben, végül az számítógépek utasításkészlet típusairól található egy igen rövid áttekintés. A második fejezet teljes egészében a választott PIC17C7XX mikrokontroller-családról szól, f ként azokra a mozzanatokra összpontosítva, amelyek a gyári leírásban [1] nem kerültek megfelel módon kifejtésre és ez a fejlesztés során problémákat jelentett. Ez a fejezet a további fejlesztést hívatott megkönnyíteni. A fejezetben el ször rövid összefoglaló található a processzorcsalád tulajdonságairól. Ezután az utasításkészlet és az ezzel kapcsolatos tapasztalatok kerülnek tárgyalásra. Végül a beépített perifériák programozásához található néhány segítség. A harmadik fejezetben egy fejleszt rendszer kerül ismertetésre, amely az adott mikrokontrollerhez készült. El ször a hardver elemekr l, a fejleszt kártya részeir l lesz szó, majd a szoftver tartozékokról. A negyedik fejezet a fejleszt kártya és a mikrokontroller alkalmazását mutatja be két egyszer példán. Az egyik példa egy párhuzamos Flash EPROM illesztése adattárolási célokra, a másik egy pontmátrix folyadékkristályos kijelz illesztése. Az ötödik fejezet a mikrokontroller jelfeldolgozási képességeinek vizsgálatával foglalkozik. El ször egy digitális sz r létrehozása történik meg rövid elméleti áttekintés és a megvalósítás problémáinak vizsgálata kíséretében. Másodszor egy magzati szívhangfelismer rendszer létrehozására történik kísérlet. Ennek keretén belül egy rövid elméleti áttekintés után a magzati szívhangok feldolgozásának algoritmikus lehet ségeivel és jelfeldolgozási vonatkozásaival foglalkozunk. Majd ismertetésre kerül egy új jegyeket magán visel , hatékonyabb felismerést lehet vé
Diplomaterv
-4-
2001 tavasz
tev algoritmus, amely optimálisan képes kihasználni a jelfeldolgozási kapacitást pipe-line kialakításának köszönhet en. Bemutatásra kerül a feldolgozó rendszer személyi számítógépen elkészült szimulátora, amelyben a rendszer fejlesztése történik. Kitérünk egy érdekes, eddig hiteles magyarázat nélkül álló jelenségre a magzati szívritmussal kapcsolatban, amelyet az új, hatékonyabb algoritmus révén sikerült felfedezni, és esetleg a magzati szívdiagnosztika új távlatait nyithatja meg. Majd a fejezet végén a megvalósítás lehet ségeir l, problémáiról esik szó és a fejlesztés folytatásával kapcsolatos tervekre, lehet ségekre térünk ki. Végül egy összefoglalás található, amely az elért eredményeket veszi sorra röviden. Ez a diplomaterv három félév szoftver és hardver fejlesztési tapasztalatait próbálja magába foglalni rendszerezett formában, és el segíteni e fejlesztés folytatását. A távlati cél egy tisztán mikrokontroller alapú, hordozható, telepes üzem , kis fogyasztású orvosi m szer létrehozása, amely hosszú id n át képes nyomon követni, és tárolni a magzat szívritmusának alakulását, hogy kés bb a szülészorvos rendelkezésére bocsássa azt, akár számítógépes hálózat vagy telefonvonal felhasználásával. A megoldott részfeladatok, a folyadékkristályos kijelz illesztése, az adattárolás Flash memóriában, a digitális sz r létrehozása, és f ként a magzati szívhangfelismer algoritmus egy részének adott követelményekhez igazodó, nagy hatékonyságú változatának kidolgozása, de a mikrokontroller-család megismerése és a hozzá tartozó fejleszt rendszer kialakítása is mind ennek a nagy tervnek egy-egy részletét, illetve a részletek kidolgozásának kezdeti lépéseit jelentik. A diplomaterv írásának végére nyilvánvalóvá vált, hogy az összes fejlesztési eredmény, hardver gyártási információk, program forráskódok elhelyezése a függelékben mennyiségükre való tekintettel teljességgel lehetetlen. Így azok CD-ROM mellékletként kerültek a diplomatervbe. A függelék csak az adott állományok megtalálási helyét tartalmazza a CD-ROM könyvtáraiban. Így remélhet leg az elkészített programok felhasználása is kényelmesebbé, rugalmasabbá válik. Munkámban sok közvetett és közvetlen segítséget kaptam, ezért szeretnék köszönetet mondani. Dr. Kovács Ferenc tanár úrnak, tanáromnak, témavezet mnek és konzulensemnek, segít készségéért és áldozatos munkájáért, tartalmi, illetve formai megjegyzéseiért, amelyekkel segített emelni - végül kissé hosszúra nyúlt - diplomatervem színvonalát. Dr. Török Miklósnak a magzati szívhangmintákért, és szakmai segítségéért. Kollégáimnak és barátaimnak Erdei Zoltánnak, Horváth Csabának, Imre Alexandrának, Kozma Reg nek, Mezei Gézának, Rajeczky Zoltánnak, Rácz Zoltánnak, Richly Gábornak, Varga Lászlónak mindennem segítségükért és támogatásukért. Tóth Krisztinának, kedvesemnek a matematikai statisztikával kapcsolatos problémák kidolgozásában és megoldásában nyújtott segítségéért. Valamint szüleinknek, akik anyagilag és lelkiekben támogattak.
Pataki Zoltán Budapest, 2001. május
Diplomaterv
-5-
2001 tavasz
2. Folyamatirányítási és jelfeldolgozási feladatok megoldási lehet ségei 2.1. Rendelkezésre álló hardver eszközök Mint általában a mikroelektronikát igényl alkalmazások esetén, folyamatirányítási és jelfeldolgozási feladatok megoldásakor is a következ lehet ségek közül választhatunk. • Full-custom áramkörök • Berendezés orientált (ASIC) áramkörök • FPGA áramkörök • Mikrokontrollerek • Digitális jelfeldolgozó processzorok • Katalógus-áramkörök A full-custom áramkörök tervezése, fejlesztése hosszadalmas és drága folyamat, ráadásul nagyban függ a technológiai bázistól. Csak abban az esetben kezdenek a gyártók ilyen eszközök tervezésébe, amennyiben feltehet leg akkora a kereslet az adott termékre, amekkora igény mellett már kifizet dik a tervezés és a gyártás megszervezése, finanszírozása, így keletkezik a többi féle felsorolt áramkörfajta. A másik eset, ami indokolttá teszi az egyedi tervezés áramkörök kifejlesztését, amennyiben az adott feladat megoldása elkerülhetetlen, és jellegéb l adódóan a jelenlegi technológiai szint mellett a megvalósíthatóság határán van, így minden trükköt, lehet séget kiaknázva kell megvalósítani. (Ezek tipikusan védelmi, katonai, rkutatási alkalmazások.) Természetesen a gazdaságosság ebben az esetben is nagyon fontos szempont, így el bb-utóbb ezen áramkörök jelent s hányada is részben vagy egészben piacra kerül, amennyiben ez megengedhet . Ha a példányszám magas, de a technológia lehet ségeit nem kell a végletekig kihasználni, szóba kerülhet berendezés orientált áramkörök (Application Specified Integrated Circuit - ASIC) tervezése és alkalmazása. Ezek általában standard cellás eszközök, amelyben a cellák maguk egyedi tervezés ek, önmagukban optimálisak. A teljes áramkör tervezése hierarchikus. Ugyan az el állítás ebben az esetben is drága a fejlesztés, tesztelés fázisában, a tervezés költségei csökkennek, a tervezési munka jó részét a számítógép veszi át, ennek ára, hogy a technológia lehet ségei nincsenek optimálisan kihasználva. Ebben az esetben az el állítani kívánt áramkör leírását általában valamilyen hardver-leíró nyelven (például VHDL-ben) kell megadni, ennek felhasználásával egy makrofordító el állítja a szükséges cellák listáját és elrendezését, összeköttetéseiket. Amennyiben kis vagy közepes példányszámban kell áramköröket elkészíteni, akkor jöhetnek szóba a további lehet ségek, ezek már az el z ekb l származtatott áramkörök, hiszen vagy általános többfunkciós felhasználási területet fednek le, vagy csak egy sz k területet, amelyre viszont nagy a fogyasztói igény. Az FPGA (Field Programmable Gate Array) áramkörök reguláris felépítés ek, sok hasonló, univerzális funkciójú részegységet tartalmaznak, amelyek általában valamilyen egyszer bb vagy összetettebb kombinációs vagy sorrendi hálózatot valósítanak meg. Ezek m ködési módjai és összeköttetéseik állíthatók be a felhasználó által. Olyan szempontból hasonlítanak az ASIC áramkörökre, hogy az áramkör leírását ebben az esetben is valamilyen hardver-leíró nyelven (általában VHDL-ben) kell megadni, amelyb l egy fordítóprogram el állítja az FPGA áramkör adott funkció megvalósításához szükséges beállítását. Azt is mondhatnánk, hogy az FPGA áramkör egyfajta ASIC, amelyben a cellák fajtái és összeköttetési lehet ségei el re valamelyest korlátozva vannak. Viszont nem kell a gyártásukkal foglalkozni, készen kaphatók. Az FPGA áramkörök igen hatékony eszközök, párhuzamosan hajtódhatnak végre bennük a m veletek, m veleti sebességüket csak a felhasználó találékonysága és a technológia korlátozza. Azonban egy komolyabb feladat megoldása igen munkaigényes, hiszen a felhasználónak önmagának kell megterveznie az összes nagyobb funkcionális egységet, cserébe viszont tervez i szabadságot és felel sséget kap. Az eddig felsorolt eszközök nem programvezéreltek, pontosabban inkább azt mondhatnánk, hogy a m ködésüket meghatározó program, ami valamilyen hardver-leíró nyelven készült, a bels szerkezetükbe tipikusan megváltoztathatatlanul, vagy a változtatás igénye nélkül beépül. Ilyen szempontból analógia vonható a fordítóprogramok (Compiler) és a fenti eszközök között.
Diplomaterv
-6-
2001 tavasz
Amennyiben a következ eszközök - mikrokontrollerek, digitális jelfeldolgozó processzorok programmal vezérelhet k, amely változtatható, akár m ködés közben is, így a következ eszközök az értelmez programokkal (Interpreter) hozhatók analógiába a megvalósítás egy más szintjén. Az el bbi hasonlat sántít kissé két tekintetben. Egyrészt az FPGA áramkörök egy részének beállítása m ködés közben is megváltoztatható, bár ez nem szokásos, mivel a felprogramozáshoz használt adatszerkezet igen bonyolult, és sajátságos; ráadásul a változtatáshoz küls egységekre van szükség. Másrészt a mikrokontrollerek esetében a vezérl program gyakran csak egyszer égethet be az eszköz memóriájába, és többször nem módosítható, ilyen szempontból a program a megvalósított logikai funkció része lesz. Továbbá megjegyzend , hogy a mikrokontrollerek, DSP-k és mikroprocesszorok, tehát a programvezérelt eszközök is az els három kategória képvisel i, tehát természeten elvileg egy kell kapacitású FPGA áramkör is felprogramozható úgy, hogy funkcióját tekintve egy mikrokontrollert valósítson meg, de ez nem szokásos, mivel ekkor egyszer bb megoldás választani a meglév igen széles választékból, hiszen az FPGA áramkörök alkalmazásának éppen a kötöttségek valamilyen mérték hiánya, illetve a többlet rugalmasságra való igény a kiváltó oka. A mikrokontrollerek talán a legáltalánosabban felhasználható eszközök. Segítségükkel általában minden feladat megoldható, ahol nincs igény túlzottan nagy m veletvégzési sebességre. Sajnos a mikrokontrollerek mind a mai napig nem tekinthet k gyors eszközöknek, nem használják ki a mai technológia nyújtotta lehet ségeket (pontosabban költségkímélés céljából feltehet leg nem a kornak megfelel legfejlettebb technológiával gyártják ket). Mindenesetre az ipari folyamatszabályozási és vezérlési feladatok jó része megoldható a segítségükkel, hiszen az iparban el forduló folyamatok jó részének id állandóit tekintve a mintavételi frekvencia az 1..100Hz nagyságrendjében van, ekkora sebességigény pedig a mikrokontrollerek szokásos 10MIPS m veleti sebességével b séggel kielégíthet . A mikrokontrollerek nagyságrendjébe es rugalmasságukat a programvezérlésnek és annak köszönhetik, hogy egy tokban egyesítenek egy teljes számítógépet processzor maggal és perifériákkal együtt. Így a megfelel mikrokontrollert választva, a feladat egyetlen áramköri tokkal javarészt megoldható. A digitális jelfeldolgozó processzorok célorientált eszközök, matematikai m veletek gyors és tömeges elvégzésére fejlesztették ki ket. Ilyen szempontból jelfeldolgozási, és folyamatszabályozási feladatok megoldásának hatékony eszközéül szolgálnak. Azonban sajnálatos módon a DSP-k önmagukban „félkarú óriások”, mivel a külvilággal való kapcsolattartáshoz további egységekre van szükségük, így általában a DSP kártyákon helyet kap egy mikrokontroller is, amely a vezérlési feladatokat, a fizikai közeggel való kapcsolattartás feladatát látja el. A DSP-k hatékonysága azzal csökken, hogy alkalmazásuk további áramkörök felhasználását kívánja meg, például küls memóriákét, így a beégetett programkód védelme sem valósítható meg egyszer en. Tehát a mikrokontrollerek és DSP-k egymás hiányosságait kiegészítend gyakran együtt kerülnek alkalmazásra, afféle szimbiózis módjára. Az utóbbi id ben a fenti eszközök hiányosságainak kiküszöbölésére több irányzat is fejl désnek indult. Az egyik irányzat DSP processzorokra jellemz részegységek beépítését kezdte meg mikrokontrollerekbe, ami célszer már csak azért is, mert gyakran el fordul, hogy egyazon gyártó foglalkozik mikrokontrollerek és DSP-k gyártásával is. Egy ilyen mikrokontroller alkalmazási lehet ségei követhet k nyomon a további fejezetekben. Egy másik törekvés szerint felprogramozható FPGA részegységeket integrálnak a mikrokontroller magja köré, amelynek funkciója szabadon változtatható el zetesen felprogramozva azt, és az így létrehozott nagy bonyolultságú áramkör ki- és bemenetei szabadon elérhet k a processzormag számára. Tehát így célorientált jelfeldolgozó egység hozható létre, amely munkáját a processzormag koordinálja. Hátra maradtak még a katalógus-áramkörök. Ezek általában nagy példányszámban gyártott egyedi tervezés célorientált eszközök, ilyenek lehetnek A/D és D/A átalakítók, mintavételi frekvencia átalakítók, különböz kódátalakítók, telekommunikációs áramkörök, stb. Tehát minden olyan áramkör, amelyek tervezése egyszeri nagy szellemi és anyagi ráfordítást igényel, viszont általánosan, széles alkalmazási területen felhasználható. Természetesen ilyenformán katalógusáramkörnek tekinthet k az FPGA áramkörök, DSP-k és mikrokontrollerek is. A katalógus-áramkörök kapcsán a teljesség kedvéért érint legesen említést kell tennünk még egy lassan méltatlanul feledésbe merül lehet ségr l, amely felhasználási területét tekintve ugyan egyre inkább háttérbe szorul, de vannak feladatok, amelyek más módon nem oldhatók meg. Az analóg számítógépekr l van szó. Ezek differenciálegyenlet-rendszerek folytonos idej , id ben párhuzamos megoldását teszik lehet vé, igen hatékonyan. Sajnos - mint az analóg áramköröknek általában - nagy a fogyasztásuk, helyigényük, bár a helyzet az analóg számítógépek esetén is sokat javult az els
Diplomaterv
-7-
2001 tavasz
példányokhoz viszonyítva, a m veleti er sít áramkörök fejl désének hatására. Elképzelhet , hogy az analóg számítógépek még meglepetéssel képesek szolgálni a közeljöv ben.
2.2. Rendszerszervezési elvek A számítógépek szervezési elveit tekintve két alapvet elrendezés terjedt el széles körben. Történetileg az els a Harvard-elv volt, emely szerint a számítógép központi egységének a program végrehajtásához két memóriára van szüksége, az egyikben a program, a másikban a program által feldolgozandó adatok foglalnak helyet, ezen kívül a központi egység kapcsolatban áll még a küls egységekkel is. A Harvard-architektúrát szemlélteti a 2.1. ábra.
Adatmemória
Bemeneti egységek
Központi egység
Kimeneti egységek
Programmemória
2.1. ábra Harvard-elv gép. A kés bb, Neumann János által kifejlesztett Neumann-elv szerint a számítógépnek nem kell feltétlenül két memóriát használnia a program végrehajtásához, hiszen a programot az adatokkal együtt is lehet tárolni egy közös memóriában. Ilyen szempontból nem teszünk különbséget adat és program között, a program minden további nélkül tud önmagán is m veletet végezni, és a programok együtt kezelhet k, módosíthatók, tarthatók nyilván az adatokkal. A küls egységek itt is a központi egységhez csatlakoznak. A Neumann-elv gép felépítését a 2.2. ábra szemlélteti.
Memória
Bemeneti egységek
Központi egység
Kimeneti egységek
2.2. ábra. Neumann-elv gép. A Neumann-elv el nye, hogy csak egyetlen memória kell hozzá. Azonban ez azt is jelenti, hogy általános esetben id ben párhuzamosan, egyszerre nem férhetünk hozzá az adatokhoz és a programhoz, hiszen azok a memóriában nem azonos helyen vannak. Tehát a m veletek végrehajtása ilyen módon többlet id vel jár a Harvard-architektúrához viszonyítva, hiszen ott az adat és programmemória külön buszokon keresztül kapcsolódik a központi egységhez. Harvard-architektúra esetén viszont alapesetben a program nem módosíthatja önmagát, és a program az adatoktól elkülönülten kerül nyilvántartásra. Mikrokontrollerek és f leg DSP-k esetén fontos a gyors m velet-végrehajtás, viszont a programot ritkán kell változtatni, és általában a programnak sem kell saját magát módosítania. Ezért
Diplomaterv
-8-
2001 tavasz
gyakran alkalmaznak DSP-k és mikrokontrollerek esetében Harvard-architektúrát. A további fejezetekben tárgyalásra kerül PIC17C7XX mikrokontroller-család minden tagja kiterjesztett Harvard-architektúrával rendelkezik. A kiterjesztés abban nyilvánul meg, hogy képesek módosítani programból - igaz, csak közvetett módon az adatmemória buszán keresztül - a programmemória tartalmát. Ezt a kés bb ismertetésre kerül fejleszt rendszer er sen kihasználja. További sajátosság, hogy a processzormag a beépített perifériákkal és a külvilággal szintén az adatmemória buszán keresztül tart kapcsolatot. Ezt a szervezési elvet szemlélteti a 2.3. ábra.
Adatmemória
Perifériák Adatbusz Címbusz
Vezérlés
Processzormag
Átmeneti tároló
Adatbusz Címbusz
Programmemória
2.3. ábra. A PIC17C7XX mikrokontroller-család kiterjesztett Harvard architektúrája.
2.3. Utasításkészlet fajták Utasításkészlet típusának szempontjából is két részre oszthatók a számítógép fajták. Az egyik alaptípus az összetett utasításkészlettel rendelkez számítógépek csoportja (Complex Instruction Set Computer - CISC). A másik típus az egyszer sített utasításkészlet számítógépek csoportja (Reduced Instruction Set Computer - RISC). Az egyszer sítést a CISC utasításkészlethez képest kell érteni, ugyanis ez volt történetileg el bb. A CISC utasításkészlethez készített processzormag utasításvégrehajtási id i általában eltér ek a különböz utasítások esetén, hiszen ezek az utasítások összetettségükben is igen változatosak, így a processzorban az utasításokhoz tartozó mikrokódok is eltér bonyolultságúak. A RISC utasításkészlet általában kevés, de megfelel en kombinálva funkcionálisan sokrét en használható elemekb l áll. Ezek az elemek általában azonos végrehajtási id vel rendelkeznek, és a végrehajtásuk adott fázisaihoz hasonló, egyszer funkcionális egységekre van szükség, így lehet vé válik gyors és id ben átlapolt, idegen szóval pipe-line végrehajtásuk. Tulajdonképpen leginkább ez a lehet ség motiválta csökkentett utasításkészlet számítógépek kifejlesztését. A RISC utasításkészlet bonyolultságát tekintve a CISC és a mikrokód között helyezkedik el, így nagyobb szabadságot biztosít a programozónak, amely kell ügyességgel hatékonyabb algoritmusokat eredményezhet. Mikrokontrollerek és DSP-k esetén is mindkét féle utasításkészletet alkalmazzák, bár újabban talán a RISC típus került inkább el térbe. DSP-k esetén a legújabb tendencia, hogy a számítási hatékonyságot nem a m veletvégzés idejének rövidítésével növelik, hanem több id ben párhuzamosan m ködtetett aritmetikai egységet építenek be a processzormagba. Azt, hogy minden m veleti egység munkája koordinált legyen, nagy utasítás-szószélességgel érik el. Ennek a kezdeményezésnek az eredménye a TMS320C6XXX család VLIW (Very Long Instruction Word), vagy az Analog Devices Tiger SARC processzorának Static Scolar architektúrája. Mindkett a RISC utasításkészlet továbbfejlesztésének tekinthet , hiszen csak azonos hosszúságú utasításokat célszer egyszerre végrehajtani. Vonatkozik ez a Static Scolar elrendezésre is, annak ellenére, hogy eredetileg a Scolar
Diplomaterv
-9-
2001 tavasz
architektúra egy harmadik típust képviselne, amely f jellemz je, hogy szintén több m veletvégz egységet koordinál, de azokat dinamikusan osztja meg a feladatok között a pillanatnyi igényeknek megfelel en, így az algoritmusok futásideje nem determinisztikus. A Static el tag viszont éppen arra vonatkozik, hogy minden esetben a felhasználó szabja meg, melyik m velet hol hajtódjon végre, ugyanis nem determinisztikus futásid a jelfeldolgozásban általában nem megengedett. Ennek a furcsa névválasztásnak feltehet leg a konkurens cég termékeit l való minél nagyobb távolságtartás lehetett az oka. A következ kben ismertetésre kerül mikrokontroller is RISC utasításkészlettel rendelkezik, err l b vebben a következ fejezetben lesz szó.
Diplomaterv
- 10 -
2001 tavasz
3. A PIC17C7XX mikrokontroller-család 3.1. A mikrokontroller-család jellemz i A PIC17C7XX mikrokontrollerek a Microchip mikrokontrollereinek jelenleg második legfejlettebb családját alkotják. A család minden tagja statikus CMOS technológiával készül, van bel lük ablakos és egyszer programozható változat is. Maximális órajel frekvenciájuk 33MHz, ami a mai viszonyok között közepesnek, azonban a mikrokontrollerek között - sajnos - kiemelked nek mondható. Fogyasztásuk kedvez , f ként alacsony m ködési frekvenciákon. Rendelkeznek kis fogyasztású üzemmóddal is, ekkor az órajel-generátor id szakos leállításával csökkentik le az áramfogyasztást. Mindegyik mikrokontrollerhez illeszthet küls memória, így kétféle alapvet üzemmódban képesek m ködni, mikrokontrollerként, és mikroprocesszorként. Mi els sorban a mikroprocesszor móddal foglalkozunk, mivel a következ fejezetben ismertetend fejleszt rendszerben ilyen üzemmódban került felhasználásra egy PIC17C756 típusú mikrokontroller. Így a következ kben gyakran mikroprocesszorként teszünk róla említést. Mikroprocesszorként a család minden tagja csak küls programmemóriát képes kezelni, ez a gyári alapbeállítás. Mikrokontrollerként háromféle üzemmód lehetséges: mikrokontroller, ekkor csak a bels programmemóriát használja; kiterjesztett mikrokontroller, ekkor a bels memória mellett kívülr l is b víthet a programmemória; kódvédett mikrokontroller, ekkor csak a bels programmemória használható, és nem lehet kiolvasni annak tartalmát. Minden családtag tartalmaz egy hardverszorzót, amely két 8 bites el jel nélküli kettes számrendszerbeli szám összeszorzására használható és egyetlen utasításciklus alatt elvégzi a számok szorzását. Számos kiegészít áramkör, periféria is helyet kapott még a mikrokontrollerekben. Egy 10 bit felbontású szukcesszív approximációs elven m köd A/D átalakító, analóg módon multiplexelt bemenetekkel. Az A/D konverter maximális mintavételi frekvenciája 25kHz körüli. Beépítettek még négy, sokféle módon felhasználható számláló és id zít modult, és egy watch-dog áramkört is. Továbbá két univerzális szinkron vagy aszinkron módban használható soros vonali illeszt t, egy külön szinkron soros vonali illeszt t, és egy megszakítás kezel áramkört. Ezeken kívül rengeteg apróbb funkció is megtalálható, f ként a „reset” áramkör igen részletesen kimunkált. A PIC17C7XX mikrokontroller-család magja felépítését tekintve Harvard architektúrával rendelkezik, mint a mikrokontrollerek és DSP-k gyakran. Ez id ben párhuzamos hozzáférést tesz lehet vé az adat és a programmemóriához. A családnak négy tagja van, az ezek közötti eltéréseket tartalmazza a következ táblázat.
Típusszám PIC17C752 PIC17C756 PIC17C762 PIC17C766
Bels adatmemória 678 Byte 902 Byte 678 Byte 902 Byte
Bels programmemória 8 KW 16 KW 8 KW 16KW
A/D csatornák 12 12 16 16
I/O lábak
Tokozás
50 50 66 66
68-pin LCC 68-pin LCC 84-pin LCC 84-pin LCC
A processzormag az utasítások végrehajtása szempontjából pipe-line szervezés . Egy utasítás végrehajtását négy fázisjel id zíti, ez az órajelb l áll el 4:1 arányú leosztással, ezt a leosztott jelet tekintjük egy m velet végrehajtási idejének. Egy utasítás végrehajtása alatt a programmemória következ címén található utasítás kerül beolvasásra, tehát az utasítás végrehajtása van id ben párhuzamosítva a következ utasítás beolvasásával, így látszólag minden m velet egységnyi id alatt hajtódik végre. Ezzel a maximális m veletvégzési sebesség 8.25 MIPS értékre adódik. Kivételt képeznek a feltételes és az ugró utasítások, ezek általában két ciklus alatt hajtódnak végre, mivel ilyenkor el fordulhat, hogy törölni kell a már beolvasott utasítást, és NOP utasítást kell végrehajtani helyette - nem véletlenül csupa nulla a NOP utasításkódja. A processzor ortogonális szimmetrikus RISC utasításkészlettel rendelkezik, mindössze 58 elemi utasítást ismer. A programmemória 16 bit szószélesség , az utasítások egységesen egy szóból állnak, az operanduszok az utasításkód részét képezik. [1]
Diplomaterv
- 11 -
2001 tavasz
A fejezet második alpontja az utasításkészlet jellegzetes vonásait taglalja, a fontos részletekre tekintettel. A teljes utasításkészlet a függelékben található, funkcionálisan csoportosított formában, ellentétben a gyári leírás alfabetikus rendszerével, amely csak abban az esetben hasznos, ha a felhasználó fejb l ismeri az összes utasítást, azonban ebben az esetben nincs szükség utasításkészletre. A harmadik alpontban a beépített perifériák sajátosságai kerülnek ismertetésre. A perifériák megadott ki-/bemeneti lábakon keresztül érintkeznek a külvilággal. A kivezetések túlnyomó többsége használható közönséges digitális ki-/bemeneti lábként is, amennyiben a hozzá tartozó bels eszközt nem kívánjuk használni. Ilyen szempontból ezek a ki-/bemeneti vonalak 7 csoportra vannak osztva, az els kivételével mindegyik rendelkezik egy úgynevezett adatirány regiszterrel, amely azt szabja meg, hogy az adott vonalcsoport adott lába ki- vagy bemenetként m ködjön. Pontosabban a regiszter minden egyes bitje ki- vagy bekapcsolja az adott lábhoz tartozó meghajtó-áramkör nagyimpedanciás állapotát. Minden vonalcsoport rendelkezik adatregiszterrel, amelyen keresztül írhatók, olvashatók a vonalakon megjelen adatok.
3.2. A mikrokontroller-család utasításkészlete és annak jellegzetességei A vezérlésátadó utasítások A processzor címbusza 16 bit széles, csakúgy mint a programmemória adatbusza. Mivel az operanduszok az utasításkód részét képezik, egyetlen ugró utasítással nem fedhet le az egész 64KW méret programmemória tartomány, hiszen ekkor nem lenne hely az utasításkódnak. Így a processzorba kétféle vezérlésátadási lehet ség került beépítésre, nevezhetnénk ket hosszú és rövid hatósugarú vezérlésátadó utasításoknak is. A rövid távú utasítás egyszer , tartalmaz 3 bitnyi utasításkódot, és a maradék 13 bit a kívánt cím ahová ugrani szeretnénk, vagy ahol a meghívni kívánt alprogram belépési pontja található. De mivel csak 13 bitnyi cím kerül átadásra, így csak 8KW programmemória területen belül valósíthatunk meg ilyen egyszer módon vezérlésátadást. Ez a 64KW-nyi megcímezhet programmemória területet gyakorlatilag 8 db 8KW méret lapra osztja, amin belül egyszer en egy utasítással ugrálhatunk kedvükre (a PIC17C752-be és a PIC17C762-be egy, a PIC17C756-ba és a PIC17C766-ba két ilyen programmemória lap van gyárilag beépítve, persze küls memóriát illesztve elérhetjük akár a 64KW memóriaméretet is, három 8 bites I/O port feláldozásával). Ezek az utasítások: Egyszer ugrás:
goto
k
Alprogram hívás: call k A fenti utasításokban k a 13 bites konstans cím. Természetesen, ha megcímezhetünk 64KW memóriát, akkor a processzor támogatja is ennek használatát, erre valók a hosszú hatósugarú vezérlésátadási lehet ségek. De ezek az el z ekb l következ en nem egy utasításból állnak. Persze felvet dhet a kérdés, hogy több utasításos vezérlésátadás hogyan lehetséges, hiszen ekkor végrehajtás közben magától is változna a programszámláló (PC - Program Counter), aminek mellékesen mi is szeretnénk értéket adni, méghozzá teljes szószélességben. Ennek kivédésére egy érdekes trükköt alkalmaztak a fejleszt k. A programszámláló fels bájtját el re egy átmeneti tárolóba kell tölteni (PCLATH - Program Counter LATch for High byte), ez közvetlenül írható és olvasható az adatmemóriában az átlapolás nélküli területen (03h címen). A programszámláló fels bájtja (PCH Program Counter High) közvetlenül nem érhet el semmilyen módon. Ellenben az alsó bájt (PCL Program Counter Low) szintén megtalálható az adatmemória átlapolásmentes részén (02h címen). Az alsó bájtra vonatkozó bármilyen O/I m velet vezérli az átmenti tárolót is, ha kiolvassuk a PCL értékét, akkor a PCH értéke a PCLATH-be tölt dik, ha írunk a PCL-be, akkor a PCLATH értéke a PCH-ba tölt dik. Távoli alprogramhívásra van speciális utasítás, hiszen a PC jelenlegi értékét ekkor menteni kell a verembe, ami ráadásul semmilyen módon nem férhet hozzá programból, csak a túlcsordulását tudjuk érzékelni (az pedig már régen rossz). Ez az utasítás is tartalmaz egy 8 bites konstanst, ez fog az PCL-be tölt dni, és a PCL írásának hatására betölt dik a PCLATH a PCH-ba. Távoli ugrásra nincs külön utasítás, azt „kézzel” lehet megvalósítani (a RISC processzorok utasításkészlete általában ilyen
Diplomaterv
- 12 -
2001 tavasz
sajátságos, ebb l a szempontból ez a gépi kód sokkal inkább mikrokódra emlékeztet, mint a CISC assembly-k esetében; mód van azonban makrók definiálására). Példa távoli ugrásara (makro-definícióval): lgoto
Hívása:
macro movlw movwf movlw movwf endm lgoto
address ;Long Jump macro high address pclath low address pcl
movlw movwf lcall
high {label} pclath low {label}
{label}
Példa távoli alprogramhívásra:
A makrodefinícióban az utolsó 'movwf pcl' utasítás két ciklus alatt hajtódik végre, a processzor a PCL-be íráskor automatikusan kitörli a már beolvasott következ utasítást, és NOP-ot hajt végre helyette. Megjegyzend , hogy a GOTO és CALL utasításokkal semmiféle módon nem tudunk megvalósítani távoli vezérlésátadást, mert azok ki is olvassák a PC taralmát, és így hiába írunk a PCLATH-ba, a beírt érték az utasítás végrehajtása közben felülíródik a PCH aktuális értékével, és csak az alsó 13 bit íródik felül a megadott konstanssal. Alprogramból való visszatérésre nincsenek külön utasítások távoli és közeli esetre, ekkor a verem teljes fels szava beíródik a PC-be. A PCLATH olvasására leginkább megszakítás kiszolgáló rutinokban lehet szükség, nehogy a f program által gondosan beállított PCLATH értéket éppen egy távoli vezérlésátadó utasítássor közepén bekövetkez megszakítás els ugró utasítása, például GOTO vagy CALL felülírja. A következ PC-vel kapcsolatos utasítások nem változtatják meg a PCLATH tartalmát: LCALL, RETLW, RETFIE. A RETURN utasításra vonatkozóan nem találtam egyértelm információt, mindenesetre az id zítési diagram a 'Q2' ciklusban nem tartalmaz olvasásra utaló megjegyzést.
'Olvasó-Módosító-Író' utasítások Az 'Olvasó-Módosító-Író' (Read-Modify-Write - RMW) utasításokkal kapcsolatban két különleges eset létezik. Az els a PCL regiszteren végzett RMW utasításra vonatkozik, ekkor a PCLATH értéke az utasításon belüli PCL olvasás ellenére nem változik meg, nem tölt dik bele az utasítás hatására a PCH tartalma. Tehát egy RMW utasítás a PCL regiszterre vonatkozóan egy 256 Word méret lapon belüli valamilyen különleges vezérlésátadást okoz. Példa PCL-re vonatkozó RMW utasításra:
movlw addwf
offset pcl
Ez a két utasítás egy 256 bájt méret lapon belül képes relatív ugrást végrehajtani. Persze ez kényelmetlen, hiszen mindig oda kell figyelnünk, hogy a kódrészlet éppen milyen helyre fordul. Ha valódi 16 bites m veletet szeretnénk végezni a PC-vel, akkor ki kell olvasnunk rendre a PCL-t majd a PCLATH-t, ezután elvégezhetjük a kívánt m veletet, majd beírhatjuk a PCLATH-t és végül a PCL írásával átadhatjuk a vezérlést. A másik eset jóval gyakorlatibb jelent ség . Ez az I/O portok adatregisztereire vonatkozó RMW m veletekkel kapcsolatos. Ha az adott I/O port adatiránya bemenetként van meghatározva, akkor nincs sok értelme RMW utasítást végrehajtani rajta, hiszen az írásnak nem lenne semmi eredménye, mivel a kimenetet meghajtó áramkörök nagy impedanciás állapotban vannak, nem történik változás a külvilágban. Viszont kimenetként definiált I/O port esetén egy RMW utasítás el ször kiolvassa a változtatni kívánt portregiszter tartalmát, tehát mintavételezi a lábak aktuális állapotát a meghajtó áramkörök bekapcsolt állapota mellett, majd egy átmeneti tárolón keresztül a port
Diplomaterv
- 13 -
2001 tavasz
lábainak helyzete rákerül az adatbuszra, megtörténik a módosítás, és az eredmény visszaíródik a meghajtó áramkörök bemeneteire. Ez eddig nem t nik igazán ellentmondásosnak, például kiadva a 'btg porte,3' utasítást az RE3 I/O port állapotát - úgy t nik - az ellentettjére változtathatjuk. Ez általában így is van, de ha például az adott I/O port segítségével közvetlenül kis impedanciát szeretnénk meghajtani, amellyel a bels meghajtó áramkörök kimeneti ellenállása már összemérhet , illetve a beépített áramkorlátozás már bekapcsol, akkor a kimeneten nem biztos, hogy a kívánt logikai szinthez tartozó feszültségérték megjelenik. Tehát ha ekkor mintavételezzük a portot, például logikai 1 szint helyett logikai 0 szintet kapunk, amit invertálva szinten logikai 1-et kapunk eredményül. A kimeneti vonal feszültségszintje nem változik az ellentettjére a fenti utasítás hatására. Ellenben ha egyszer en töröljük a bitet a vonal feszültségszintje földelt terhelés esetén nullára esik vissza. Viszont ez csak akkor célravezet , ha más hasonló terhelés nincs erre a vonalcsoportra kapcsolva, hiszen el fordulhat, hogy például a harmadik bitet töröljük, de a második bitre is egyet írtunk, de nullát olvasunk vissza, azonban a 'bcf porte,3' utasítás a második bit beolvasott nulláját is visszaírja az egyes helyére. Ennek a példának a tanulsága, ha közvetlenül kis impedanciás vagy nemlineáris elemeket hajtunk meg az I/O portokkal, akkor galibát okozhatnak az RMW utasítások. Ekkor célszer ezekhez az adatregiszterekhez egy árnyékregisztert rendelni, és ezen elvégezni a kívánt m veleteket, majd az árnyékregiszter tartalmát beírni az adatregiszterbe minden módosítás után, esetleg ciklikusan megszakításból.
Programmemória kezel utasítások A PIC17C7XX processzorok kiterjesztett Harvard-architektúrával rendelkeznek abban az értelemben, hogy képesek a programmemóriát programból írni, olvasni. Ez távoli programfrissítésnél vagy nagy táblázatok használatánál lehet hasznos. A processzor programmemóriája 16 bit szószélesség , az adatmemória 8 bit szószélesség , ebb l látszik, hogy egy teljes programmemória szó átvitelére az adatmemóriába két utasításra van szükség. Valóban, a processzor négy utasítással támogatja a programmemória írását, olvasását. Két utasítás szolgál írásra és kett olvasásra. Mivel egyszerre kellene a programot végrehajtani és a programmemórián m veletet végezni egyetlen buszon keresztül, ezt a funkciót is egy átmeneti tároló (TaBle LATch - TBLAT) segítségével oldották meg, id ben elosztva. A TBLAT átmeneti tároló 16 bit szélesség , így egy lépésben lehet vele egy programmemória szót írni, olvasni. A TBLAT nem része az adatmemóriának, onnan közvetlenül nem érhet el, csak a speciális erre szolgáló utasítások segítségével. A TBLAT csak két nyolcbites félszóként írható, olvasható (TBLATL - TBLAT Low, TBLATH - TBLAT High), hiszen az adatmemória 8 bit széles busszal rendelkezik. Mivel a programmemóriát meg is kell címezni, hogy az általunk kívánt adatot érjük el benne, az adatmemóriában található egy két bájtból álló mutató (TBLPTRL - TaBLe PoinTeR Low, TBLPTRH - TaBLe PoinTeR High), amely ezen feladat elvégzésére hivatott a programmemória írásakor, olvasásakor. El ször mindig a mutatót kell beállítanunk, tetsz leges sorrendben:
movlw movwf movlw movwf
low {address} tblptrl high {address} tblptrh
Ezzel megcímeztük a programmemória {address} cím szavát. Ezután végezhetjük el a kívánt m veletet az el bb kijelölt programmemória szóra. Az írásra szolgáló két utasítás a TLWT és a TABLWT. Az els a TBLAT egyik kiválasztott felének feltöltésére való, ez a paraméterezést l függ en lehet az alsó vagy a fels bájt egyaránt. Ez a m velet egy utasításciklust vesz igénybe, bármely regiszterb l képes írni TBLAT adott felébe. A másodikkal egy lépésben fel tudjuk tölteni a TBLAT másik felét szintén bármelyik regiszterb l, majd a TBLAT tartalmát kiírjuk a programmemóriába, és ha akarjuk, a TBLPTR értékét még meg is növelhetjük eggyel (utólagos autoinkrementálás). Ez az utasítás küls memória írásakor két ciklust vesz igénybe, az els ben megtörténik az utasításvégrahajtás (TBLAT feltöltése), miközben a következ utasítás menetrend szerint beolvasásra kerül, a másodikban felszabadul a programmemória cím és adatbusza, és a TBLAT tartalma beírásra kerül a programmemória megcímzett szavába. Ha a bels EPROM-ot írjuk
Diplomaterv
- 14 -
2001 tavasz
mikrokontroller üzemmódban -, hosszabb utasítás-végrehajtásra kell számítanunk, megszakításokat sem árt letiltanunk. Az írás küls memóriába így néz ki a gyakorlatban:
és
a
tlwt 0,reg1 tablwt 1,1,reg2 Itt beírjuk a 'reg1' és 'reg2' regiszterek tartalmát alsó, fels bájt sorrendben az el z ekben megcímzett programmemória szóba, majd a mutató tartalmát megnöveljük eggyel. Az olvasás is hasonló képen történik, de egy kicsit csavarosabb. Ugyanis a processzor csak a 'Q2' fázisjel ideje alatt tud regisztert olvasni, és csak a 'Q4' fázisjel alatt képes regiszterbe írni. Olvasásra is két utasítás használatos, a tlrd és a tablrd. Itt is a második a valódi olvasó utasítás, el ször a TBLAT megjelölt felének tartalmát tölti a megadott regiszterbe (a TBLAT tartalma lehet ismeretlen is!), azután a mutató által megcímzett programmemória rekesz tartalmát írja be a TBLAT-be, ezután ha akarjuk, megnöveli a mutató értékét eggyel. Ez az utasítás általában két ciklust vesz igénybe, a másodikban történik az el z höz hasonlóan a programmemória olvasása (ez az utasítás lehet 3 ciklus is abban az extrém esetben, ha a célregiszter a PCL). Az els utasítás egyszer en beírja a TBLAT megadott felét a megadott regiszterbe. Ez mindig egy ciklust vesz igénybe. Az el z ekb l kit nik, hogy az olvasás elején mindig szükség van egy 'dummy' olvasó utasításra, ami feltölti a TBLAT-et. Erre vonatkozik a következ példa:
tablrd 1,1,reg2 tlrd 0,reg1 tablrd 1,1,reg2 Az els ’tablrd 1,1,reg2’ beolvassa a TBLAT ismeretlen tartalmának fels bájtját ’reg2’be (teljesen feleslegesen), majd feltölti a TBLAT-et a programmemória tartalmával, ezután megnöveli a mutató értékét. A következ utasítással már át tudjuk tölteni a ’reg1’-be az el bb a TBLAT-be olvasott programmemória szó egyik felét, itt épp az alsó bájtot írjuk be. Ezután, ha csak mindössze egyetlen szót akarunk beolvasni, egy újabb TLRD utasítással is bemásolhatjuk a szó másik felét a kívánt regiszterbe egyetlen ciklus alatt, például.: ’tlrd 1,reg2’. Viszont, sorozatos olvasásnál, beállíthatjuk a mutató új értékét - ha a rákövetkez cím nem felel meg - és kiadhatunk egy újabb TABLRD utasítást, ami elvégzi a TLRD feladatát, és egyben be is olvassa a következ programmemória szót a TBLAT-be (két ciklus alatt). Az egyetlen dolog, amire még figyelni kell, és nem található meg a gyári leírásban, az hogy a TBLAT fizikailag nem azonos íráskor és olvasáskor, tehát programmemória másolásakor ki kell olvasni az alsó és fels bájtot is, majd vissza kell írni (ez a felfedezés néhány, a logikai analizátor mellett töltött órába került): movfp movfp tablrd tlrd tlrd movfp movfp tlwt tablwt
ptrrl,tblptrl ptrrh,tblptrh 1,0,temp1 0,temp1 1,temp2 ptrwl,tblptrl ptrwh,tblptrh 0,temp1 1,0,temp2
Másolásnál ezt a részletet is ciklusba szervezhetjük, sajnos a mutatók közösek íráskor és olvasáskor, így azokat folyton módosítani kell. Nyerhetünk két utasításciklusnyi végrehajtási id t, ha a második TLRD utasítást TABLRD utasításra cseréljük, és ez el tt az utasítás el tt állítjuk be a következ ciklusban olvasandó címet a mutatóba, természetesen ekkor a TLRD utánra kell ugornunk és el re be kell olvasnunk az els másolandó adatot. Így egy gyorsabb de olvashatatlanabb és hosszabb kódot kapunk - ahogyan ez lenni szokott.
Diplomaterv
- 15 -
2001 tavasz
Számábrázolási módok és az aritmetika Az adott mikrokontroller egy fontos részegysége a beépített hardverszorzó, ez lehet vé teszi alkalmazását olyan területeken, ahol az átlagos mikrokontrollerek számítási teljesítménye kevésnek bizonyul, azonban nagy számítási teljesítmény DSP-k alkalmazása még nem indokolt, vagy körülményes. Ezen kívül a mikrokontroller alapú megvalósítás egy áramköri tokból álló megoldást jelenthet a DSP alapú rendszerekkel szemben. A beépített hardverszorzó rendelkezik néhány kellemetlen tulajdonsággal, úgy is fogalmazhatunk, hogy körültekint bb tervezéssel sokkal rugalmasabban és szélesebb körben alkalmazható eszköz készülhetett volna az adott mikrokontrollerb l. A kés bb tárgyalt digitális sz r kkel kapcsolatos fejezet el készítése érdekében ebben az alpontban áttekintjük a számábrázolással és m veletekkel, illetve azok viszonyával kapcsolatos fogalmakat, rámutatva a sajátosságokra [1], [9], [10], [16]. A kettes számrendszerbeli számok esetében négy alapvet fixpontos számábrázolási mód használatos. Megkülönböztetünk el jel nélküli és el jeles, azaz kettes komplemens kódbeli számokat (el jeles számokat ábrázolhatunk egyes komplemens kódban is, de ez ma már nem szokásos). Feloszthatjuk a számábrázolási módokat a számon belüli törtrész kezdetét jelz kettedes pont fix helye szerint is, így létezik egész és tört számábrázolás. Mindkét felosztás szerinti bármely összetétel lehetséges, így adódik a négyféle lehet ség. Tekintsük át ezeket vázlatosan, hogy a kés bbiekben hivatkozhassunk rájuk, és az itt bevezetett jelölésekre. El jel nélküli egész szám. Ez általánosan a leggyakoribb, ha ránézünk egy bitsorozatra azonnal így kezdjük kiolvasni. Egy 'n' bites szám esetén ez a következ alakú (a biteket a b n ... b 0 szimbólumok jelölik):
ui 0: n = b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n
(
)
Az ábrázolható számtartomány: 0 ... 2 n+1 − 1 . A következ gyakran használt lehet ség a kettes komplemens kódú egész:
si 0: n = − b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n
Ez csak egy el jelben különbözik az el z t l, ez teszi lehet vé negatív számok ábrázolását is, itt a lehetséges számábrázolási tartomány: −2 n ... 2 n − 1 .
( ) (
)
Észrevehetjük, hogy a kettedespont mindkét el z esetben a legalsó helyiérték bit után helyezkedett el, azaz ezek a számok nem tartalmaznak tört részt. Az el jel nélküli törtszám a következ módon értelmezhet :
− n −1 − n +1 uf 0: n = b n * 2 −1 + b n −1 2 −2 + b n − 2 * 2 −3 +...+ b 2 * 2 ( ) + b1 * 2 − n + b 0 * 2 ( ) ; b i ∈[0,1],0 ≤ i ≤ n
(
− n +1 Ilyen módon 0 ... 1 − 2 ( )
) között ábrázolhatunk számokat. Ezt a módot gyakran az el z
kiegészítéseként használják, törtrész tárolására. Itt a kettedespont a szám el tt áll, a legmagasabb helyiérték bit el tt, egy ilyen fajta szám egész részt nem tartalmaz. A negyedik fajta számábrázolási mód az el jeles tört, ez a következ képp lehetséges:
− n−2 − n −1 sf 0: n = − b n * 2 0 + b n −1 2 −1 + b n − 2 * 2 −2 +...+ b 2 * 2 ( ) + b1 * 2 ( ) + b 0 * 2 − n ; b i ∈[0,1],0 ≤ i ≤ n
(
Ez a módszer −1 ... 1 − 2 − n
)
közötti számok ábrázolására alkalmas. Érdekes módon a
kettedespont ebben az esetben a szám belsejében a legmagasabb helyiérték bit után helyezkedik el, tehát az el jelbit egész helyiérték , a többi bit pedig törtként értelmezend . Véges impulzusválaszú digitális sz r k implementálásakor, DSP alkalmazásokban szinte csak ez utóbbi számábrázolási mód fordul el , hiszen a lehetséges értékek abszolút értékben legfeljebb eggyel lehetnek egyenl k, és két ilyen szám összeszorzásakor szintén nem keletkezhet egynél nagyobb abszolútérték szám. Ami azt jelenti, hogy ennél a számábrázolásnál nem kell attól tartani, hogy értékes, nagy helyiérték bitek elvesznek a tárolórekesz túlcsordulása miatt, vagy hogy nehezen követhet vé válik a legfels bit helye. Ebben az esetben csak alulcsordulás lép fel, ami a legkisebb helyiértéken aluli számjegyek levágását jelenti, de megfelel bitszám választással a kívánt pontosságú eredmény el állítható. Természetesen számok összeadásakor ilyenkor is fellép egynél nagyobb abszolútérték eredmény, többek között ezért kellemetlen dolog végtelen impulzusválaszú (IIR, ARMA) sz r k implementálása, hiszen ilyenkor az így el állt eredményt újbóli szorzásnak kell alávetni, ahol már nem ilyen egyértelm , hogy hol található a legnagyobb helyiérték értékes bit.
Diplomaterv
- 16 -
2001 tavasz
Viszont bármely állapotváltozóban a fels helyiértékek levágása okozta durva nemlinearitás határciklusokat hozhat létre a sz r állapotterében, amely a sz r végleges, csak az állapotváltozók alaphelyzetbe állításával megszüntethet instabil állapotba kerülését okozhatja. Így óvatosságból egyszer struktúrájú IIR sz r ket általában lebeg pontos környezetben valósítanak meg, de még ebben az esetben is nagy figyelemmel kell eljárni. Ellentétben a véges impulzusválaszú (FIR, MA) sz r kkel, ahol a szorzások után következik az összeadás, és ezt az eredményt már nem kell további szorzásoknak alávetni. Természetesen az IIR sz r k impulzusválaszának egy véges hosszúságú darabját lehet adott pontossággal szimulálni FIR sz r kkel, így nem merülhetnek fel stabilitási problémák a tranziens id szakos túlvezérlés esetét l eltekintve, de az együtthatókészlet megfelel normálásával ez ellen is lehet védekezni. Sajnos ilyen sz r esetében viszont a m veletek száma nagyságrendileg megn , noha sok esetben csak a FIR sz r s megoldás engedhet meg, például ha a sz r fázismenete kritikus, illetve független kell, legyen a sz r amplitúdó-menetét l. Tehát leszögezhetjük: ha fontos a kis m veletvégzési id (alacsony fogyasztás), nem kritikus a sz r fázismenete, és megengedhetjük, hogy a sz rt jelb l esetleg hiányozzanak rövid szakaszok, amikor az - egyébként nagy gonddal megtervezett - sz r t alaphelyzetbe állítjuk, mert instabil állapotba került, akkor használhatunk egyszer struktúrájú IIR sz r t, persze ekkor még mindig fennáll a sz r esetleg fellép instabilitásának érzékelési problémája, nem beszélve a zérus bemenet határ-oszcillációról. Természetesen gondolatban akárhová helyezhetnénk a kettes számrendszerbeli számon belül a kettedespontot, vagy máshogy is kódolhatnánk negatív számokat, de akkor gondoskodnunk kellene arról az aritmetikai egységr l is, ami ilyen számokon m veleteket képes végezni az elvárt módon (erre a digitális sz r kkel részletesen foglalkozó fejezetben még látunk példát). A fenti négy eset azonban szoros kapcsolatban áll egymással, így bármelyikhez készített aritmetikai egység kis többletmunkával képes a többi számábrázolási módban is m veletet végezni. Ezen felül a fentiek kombinációival bármilyen feladat megoldható. Ha nagy változódinamikára volna szükségünk, egy határ után nem célszer a bitek számának növelésével növelni a pontosságot, alkalmazhatunk lebeg pontos számokat, ezek a tízes számrendszerbeli számok normál alakjához hasonlítanak a leginkább, ekkor a relatív pontosságot tartjuk állandó értéken. A lebeg pontos számok két részb l állnak a mantisszából és a karakterisztikából. Alakjuk például a következ lehet:
(
)
( −c p *2 − n −1 − m n * 2 0 + m n −1 2 −1 +...+ m1 * 2 ( ) + m0 * 2 − n * 2
p
+ c p−1 2 p −1 + ...+ c1 *21 + c 0 *2 0
) ; m , c ∈[0,1],0 ≤ i ≤ n,0 ≤ j ≤ p , i j
ahol m n ... m0 a mantissza c p ... c 0 pedig a karakterisztika bitjeit jelöli. Látszólag ez a megoldás megold minden problémát, persze a m veletek kissé nehézkesebbek, szorzásnál a karakterisztikákat össze kell adni, osztásnál kivonni egymásból, itt túlcsordulás keletkezhet. Összeadás és kivonás esetén azonos karakterisztikára kell hoznunk a számokat, ez mindig a nagyobbik karakterisztika lesz. A látszat ellenére ez a számábrázolási mód sem mindenható, a mantissza itt is véges pontosságú, elképzelhet például, hogy a sz r elemek sorrendjének, vagy struktúrájának rossz megválasztása következtében az általunk kisz rni kívánt nagy amplitúdójú spektrumkomponensek a sz r belsejében egyes helyeken kiszorítják az ábrázolási tartományból a számunkra fontos kisebb jeleket. Ezt a problémát több sz r alaptag alkalmazásával, és ezek sorrendjének helyes megválasztásával küszöbölhetjük ki. Az is problémát jelenthet, ha nem megfelel sorrendben adunk össze számokat: egy nagyon kis szám összeadás után semmit nem változtat egy nála nagyságrendekkel nagyobbon, ha a mantisszáik egyetlen helyiértéken sem találkoznak, viszont elképzelhet , hogy ezután a nagy számhoz hozzáadunk egy közepeset, amihez el bb hozzáadva a kicsi számot együttesen más végeredmény alakult volna ki. Tehát a lebeg pontos számok körében az összeadás nem feltétlenül asszociatív. Ha tehetjük, monoton növekv sorrendben adjunk össze lebeg pontos számokat. A lebeg pontos számok tárolására az IEEE kidolgozott egy szabványos formátumot, célszer lehet ennek alkalmazása, ha más eszközökkel kívánunk adatokat cserélni. A számábrázolási módok áttekintése után térjünk rá a m veletvégzésre, el ször a fixpontos számok esetét tekintve. A processzor az egyszer összeadás és kivonás m veleteket a leírás szerint egész, kettes komplemens kódban értelmezi, ez nem jelent különösebb megkötést, hiszen az összes fenti fixpontos számábrázolási módban ugyanúgy kell ezeket a m veleteket elvégezni. Az el jeles és el jel nélküli m veletek eredményeinek kiértékelésében státuszbitek vannak segítségünkre. Az aritmetikai és logikai egységnek (ALU - Arithmetical and Logical Unit) négy státuszbitje van, mindannyian az
Diplomaterv
- 17 -
2001 tavasz
ALUSTA (ALU STAtus register) regiszterben foglalnak helyet. Az ALUSTA regiszter az adatmemóriában található átlapolás nélküli területen (címe 04h). A regiszter e négy bitjének értelmezését a következ táblázat tartalmazza. Címe: 04h ALUSTA regiszter Sorszám Elnevezés Magyarázat 0. bit Carry El jel nélküli összeadás és kivonás m veleteknél tölti be a maradék szerepét, illetve léptet utasításoknál ide kerül a kiléptetett bit és innen kerül beléptetésre. Egyes érték , ha a legfels helyiértékr l képz dött maradék, különben nulla. 1. bit Digit carry Binárisan kódolt decimális (BCD - Binary Coded Decimal) számokkal végzett m veleteknél jelzi, ha a kisebb helyiérték számjegyr l (alsó 4 bit) átvitel történt a fels félbájtra. 2. bit Zero Egyes érték , ha a végrehajtott aritmetikai vagy logikai m velet eredményeként nulla adódott, egyéb esetben nulla. 3. bit Overflow Kettes komplemens kódban történ összeadásnál és kivonásnál jelzi, ha az el jelbit megváltozott a m velet során, az alsó 7 bitr l történt túlcsordulás miatt.
A carry és digit carry bitek kivonásnál invertáltan értelmezettek. Mind a négy bit írható és olvasható. Példaként tekintsük a következ két esetet: movlw addlw
ffh 01h
Az eredmény: WREG=00h C=1 OV=0 DC=1 Z=1 El jel nélkül: 2 5 5 + 1 = 2 5 6 → (C = )1 * 2 5 6 + 0 El jelesen: ( − 1) + 1 = 0 Az els olvasat szerint el jel nélküli m veletet tekintve a carry egyes értéke jelzi, hogy a bájt túlcsordult, így a legfels helyiérték bit a carry-ben található, és hozzáadható az esetleges magasabb helyiérték bájthoz. El jeles összeadást feltételezve az overflow bit nulla értéke jelzi, hogy a m velet közben nem történt átvitel a hatodik bitr l a hetedikre, így a kapott végeredmény helyes. Második eset:
movlw addlw
7fh 01h
Az eredmény: WREG=80h C=0 OV=1 DC=1 Z=0 El jel nélkül: 1 2 7 + 1 = 1 2 8 → (C = )0 * 2 5 6 + 1 2 8 El jelesen: 127 + 1 = −128 A el jel nélküli m veletnél a carry nulla értékéb l látjuk, hogy az eredmény helyes. El jeles m veletnél az overflow bit jelzi, hogy az el jelbit átfordult a m velet közben, így azt visszafordítva és a túlcsordulást figyelembe véve kapjuk meg a helyes eredményt. Ha egy bájtnál hosszabb el jeles számokat kell összeadnunk vagy kivonnunk, akkor az el jeles m veletekre vonatkozó overflow biteket csak a legmagasabb helyiérték bájtoknál kell figyelembe vennünk. Több bájtos számokkal a következ módon végezhetünk m veleteket a maradék továbbgörgetésével:
Diplomaterv
- 18 -
2001 tavasz
movfp addwf movfp addwfc btfsc goto
arg1l arg2l arg1h arg2h alusta,3 overflow
A fenti példa két el jeles 16 bites számot ad össze az esetleg képz d maradék továbbvitelével, megvizsgálja, történt-e túlcsordulás és ennek függvényében elugrik a szükséges korrekciót végrehajtó programrészhez. Lebeg pontos összeadásnál és kivonásnál a m veletet a két szám közül a nagyobb abszolútérték karakterisztikáján kell elvégezni. Ehhez a kisebb abszolútérték t jobbra kell tolni a két karakterisztika különbségével. Ha nincsenek átfed mantissza darabok, tehát a karakterisztikák különbsége nagyobb a mantisszák hosszánál, akkor a nagyobb abszolútérték szám nem változik. A mantisszák túlcsordulásakor korrigálni kell a legfels bitet az átfordult el jel függvényében, majd az el jelet a carry-be téve az egész mantisszát jobbra kell léptetni, ezután pedig megnövelni a karakterisztikát. A lebeg pontos számokat összeadás és kivonás után karban is kell tartani. Ha a mantissza az el jelbitet is beleértve csupa azonos bittel kezd dik, akkor annyival balra kell tolni, hogy már csak az el jelbiten maradjon meg az adott bitérték, majd az eltolás mértékében csökkenteni kell a karakterisztikát. Erre azért van szükség, mert azonos nagyságrend számok kivonása esetén a mantissza abszolút értéke csökken, és a fels bitek feleslegesen csak csupa nullát vagy egyest tartalmaznak, viszont a karakterisztika változatlan. Ekkor, ha egy kisebb számmal végzünk összeadást vagy kivonást, akkor az feleslegesen sok bittel jobbra tolva befolyásolja az eredményt, az eredmény pontatlanabb lesz, mint amilyen lehetne, s t az is el fordulhat, hogy így egy id után kicsúsznunk a mantissza számábrázolási tartományából. A szorzás m velete már nem ilyen egyszer , itt minden esetet meg kell vizsgálnunk egyenként. A processzorban található hardverszorzót el jel nélküli egész 8 bites számok összeszorzására készítették fel (ez a legegyszer bb lehet ség), ebben az esetben a szorzás a következ képp értend :
01011101.*10011010. 01011101 00000000 00000000 01011101 01011101 00000000 01011101 00000000 0011011111110010.
93.*154. 93 465 372 14322.
Tehát kiadva a movlw mullw
B’01011101’ B’10011010’
parancsokat az eredmény: (PRODH):(PRODL)=B’0011011111110010’. Vizsgáljuk meg, milyen eredményt kellene kapnunk, ha ezeket a számokat másképp értelmezzük. Tekintsük el ször az el jel nélküli egész és a kettes komplemens kódú egész viszonyát.
Diplomaterv
- 19 -
2001 tavasz
ui 0: n = b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n
si 0: n = − b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n si 0: n + b n ∗2 n = ui 0: n − b n ∗2 n ↔ ui 0: n = si 0: n + b n ∗2 n +1
Látható, hogy a kettes komplemens kódú egész számok nemnegatív ( b n = 0) esetben megegyeznek az el jel nélküli egészekkel, így ha mindkét kettes komplemens kódú szorzótényez pozitív, szorzás végeredménye helyes lesz. Vizsgáljuk meg, mi adódik, ha b n = 1 . Ekkor behelyettesítéssel: ui 0: n = si 0: n + 2 n +1 . Ebb l következ en a szorzatban feleslegesen szerepelni fog egy 2 n +1 * si 0: n alakú tag, ezt kivonva a szorzás eredményéb l, megkapjuk a helyes értéket. A 2 n+1 nel való szorzás a szorzat legmagasabb helyiérték bittel kezd d felét jelenti, mivel két n bites szám szorzata 2 * n bites számot ad eredményül, és a számok legkisebb helyiértéke 2 0 . Ez a gyakorlatban azt jelenti, hogy meg kell vizsgálnunk a szorzótényez k el jeleit, és amennyiben valamelyikük legfels bitje egyes érték , a szorzat fels bájtjából ki kell vonnunk a másik szorzótényez t. Ha mindkét tényez el jelbitje egyes, akkor mindkett vel korrigálni kell az eredményt. Ez a következ módon történhet:
movfp mulwf btfsc subwf movfp btfsc subwf
arg1,wreg arg2 arg2,7 prodh,1 arg2,wreg arg1,7 prodh,1
Látható, hogy ez a leírás szerinti egyetlen utasításciklus helyett már hét utasításciklus. Korrektebb megoldás lehetne konfigurálható szorzó beépítése, illetve többfajta szorzóutasítás implementálása. El fordulhat, hogy kettes komplemens kódú számot el jel nélküli egésszel kell megszoroznunk, például ha egy bájtnál hosszabb számokat szeretnénk összeszorozni, hiszen ekkor az alacsonyabb helyiérték bájtok már nem el jelesen tároltak. Ilyen módon összesen négyféle szorzás értelmezhet . Ezek DSP processzorokban általában külön-külön meg is vannak valósítva. Ha megtekintjük az utasításkészlet összefoglaló táblázatát, láthatjuk, hogy a mikrokontrollerünk utasításkészletében is van három üres hely az utasításkódok között mindkét szorzó utasítás után. Csak a fejleszt k a megmondhatói, miért nem építettek be el jeles és vegyes szorzásokat is az utasításkészletbe, illetve ha beépítették is, miért nem dokumentálták. Hosszabb számok szorzásakor természetesen csak az el jeles (legfels ) bájtok el jelei alapján kell a korrekciót elvégezni. Erre is tekintsünk egy példát:
Diplomaterv
- 20 -
2001 tavasz
noneg1
movfp mulwf movpf movpf
arg1l,wreg arg2l ;arg1l*arg2l prodl,res0 prodh,res1
movfp mulwf movpf movpf
arg1h,wreg arg2h ;arg1h*arg2h prodl,res2 prodh,res3
mulwf movfp addwf movfp addwfc movlw addwfc
arg2l ;arg1h*arg2l prodl,wreg res1 prodh,wreg res2 00h res3
movfp mullw movfp addwf movfp addwfc movlw addwfc
arg2h,wreg arg1l ;arg2h*arg1l prodl,wreg res1 prodh,wreg res2 00h res3
btfss goto movfp subwf movfp subwfb
arg1h,7 noneg1 arg2l,wreg res2,1 arg2h,wreg res3,1
;arg1<0?
btfss goto movfp subwf movfp subwfb
arg2h,7 noneg2 arg1l,wreg res2,1 arg2h,wreg res3,1
;arg2<0?
noneg2 A példaprogram az el jelvizsgálatokig egy el jel nélküli 16 bites számokat összeszorzó algoritmus, állandó futási id vel (23 utasításciklus), ezután történnek meg az el jelvizsgálatok, és ezek függvényében a fentivel ekvivalens kivonások. A legnagyobb futási id akkor áll el , ha mindkét argumentum negatív, ez 35 utasításciklus; ha az egyik argumentum negatív, akkor 32; ha egyik sem negatív akkor 29 utasításciklus a végrehajtási id . Átlagosan 32 utasításciklus, az el jelek egyenletes eloszlását feltételezve. Abban az esetben, ha nincs szükségünk a teljes 32 bites eredményre, els közelítésben elhagyhatjuk a legalsó byte tárolására használt utasítást. Ha nem törekszünk tökéletes precizitásra, akkor az egész els szorzást elhagyhatjuk, ennek eredménye csak kis valószín séggel befolyásolja a fels 16 bit tartalmát. Most rátérhetünk a tört számábrázolási módok tárgyalására. Kezdjük az el jel nélküli törtszámmal, hasonlítsuk össze ezt is az el jel nélküli egész kódolási formátumával:
Diplomaterv
- 21 -
2001 tavasz
ui 0: n = b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n
− n −1 − n +1 uf 0: n = b n * 2 −1 + b n −1 2 −2 + b n − 2 * 2 −3 +...+ b 2 * 2 ( ) + b1 * 2 − n + b 0 * 2 ( ) ; b i ∈[0,1],0 ≤ i ≤ n
Ebb l a következ egyszer következtetést vonhatjuk le: uf 0: n = ui 0: n ∗2 − ( n +1) . Tehát egy kettes számrendszerbeli törtszám ugyanúgy viselkedik, mint egy egész, csak néhány bittel jobbra tolva képzeletben. A szorzás természetesen érzéketlen arra, hogy mi hogyan rendelünk valós tartalmat a bitek egymásutánjához, a m veleteket csak a bitek egymáshoz való viszonya befolyásolja, ez pedig az el jel nélküli egész és tört számok esetében azonos, tehát a beépített szorzóval minden módosítás nélkül végezhetünk m veleteket el jel nélküli törtként értelmezett számokon, s t a több bájtos számok alsó bájtjait tekinthetjük törtrésznek is. Hátra van még az el jeles törtszámok és az el jel nélküli egészek viszonyának tisztázása.
ui 0: n = b n * 2 n + b n −1 2 n −1 + b n − 2 * 2 n − 2 +...+ b 2 * 2 2 + b1 * 21 + b 0 * 2 0 ; b i ∈[0,1],0 ≤ i ≤ n
− n−2 − n −1 sf 0: n = − b n * 2 0 + b n −1 2 −1 + b n − 2 * 2 −2 +...+ b 2 * 2 ( ) + b1 * 2 ( ) + b 0 * 2 − n ; b i ∈[0,1],0 ≤ i ≤ n
(sf 0: n + b ∗2 )∗2 0
n
n
(
)
= ui 0: n − b n ∗2 n ↔ ui 0: n = sf 0: n + b n ∗21 ∗2 n
Amint látható, az eljárás teljesen megegyezik a két el z eset összevetésével, csak el kell végeznünk az el jelek miatt adódó korrekciót és megkapjuk a helyes eredményt. Az egyetlen galiba abból adódik, hogy a kettedespont itt a szám belsejében van, így annak sorsát is nyomon kell követnünk. A kettedespont pozíciója a két legfels bit között úgy is tekinthet , mintha egy közönséges el jeles szám egy lebeg pontos szám mantisszájaként meg lenne szorozva a 2 −1 karakterisztikával, a szorzás után a karakterisztikák összeadódnak, így 2 −2 keletkezik. Tehát az eredményben a kettedespont eggyel jobbra tolódott, az így kapott számformátum eltér attól, amivel a m veleteket végeztük. Ezt az eredmény egy hellyel balra tolásával tudjuk ellensúlyozni, hiszen biztosak lehetünk abban, hogy így nem veszítünk el értékes bitet, mivel két, legfeljebb egységnyi abszolútérték szám szorzatában sosem léphet fel egynél nagyobb helyiérték. Sajnos, így a legalsó helyiértékhez tartozó bit kihasználatlan marad, oda léptethetünk állandó, vagy véletlenszer en változó értéket. Az fenti 16 bites el jeles szorzóutasításokhoz a következ sorokat kell még hozzáf znünk a helyreigazításhoz:
bfc rlcf rlcf rlcf rlcf
alusta,0 res0,1 res1,1 res2,1 res3,1
Ez öt járulékos utasításciklust jelent, 16 bites eredménynél csak hármat, illetve négyet, ha a legalsó bitre is igényt tartunk. Az eddigi ismeretek fényében nem okoz nagy nehézséget a lebeg pontos szorzás implementálása sem, csak a karakterisztikák összeadását kell elvégezni. Ha a karakterisztikák alulvagy túlcsordulnak, szokásos 0, pozitív végtelen, vagy negatív végtelen (az ábrázolható legnagyobb abszolútérték szám megfelel el jellel) beírása végeredményként. Célszer lehet 3 bájtos mantissza és egy bájtos karakterisztika alkalmazása, a 3 bájtos szorzó megírása az el z ek alapján szintén megoldható, ekkor (kisebb pontossági igényeknél, de akkor nincs értelme lebeg pontos számokat használni) esetleg mód adódhat több szorzás elhagyására is, de azért vigyázzunk, ne járjuk pórul, mint a Pentium processzor tervez i annak idején. Ebben az esetben is elvégzend az összeadásnál és kivonásnál említett mantissza és karakterisztika korrekció, azzal a különbséggel, hogy itt értékes jegyeket is nyerhetünk a teljes szám balra tolásával.
Egyéb észrevételek Az adatmemóriát és a bels perifériák regisztereit a tervez k több egymást átfed memórialapon valósították meg. A tervez k által fontosnak ítélt egységeket bármely lap kiválasztása mellett el lehet érni, ezek átlapolás nélküli területen helyezkednek el. Így a bels egységek nagy részének használatánál nagyon gyakran lapozni kell az adatmemóriában, az is el fordul, hogy egyetlen perifériához tartozó különböz rendeltetés regiszterek más-más lapon helyezkednek el, ez rengeteg kényelmetlenséget okoz programírás közben, a programhibák túlnyomó többségét egy-egy elmaradt lapkiválasztó utasítás okozza. És a sok lapozó utasítás sajnos a futásid t is kellemetlenül
Diplomaterv
- 22 -
2001 tavasz
megnöveli. A másik hibaforrás kiküszöbölésére kell gyakorisággal adjuk ki a CLRWDT utasítást, f ként ciklusmagokban, megszakítás-kezel rutinok és szubrutinok elején. A watch-dog áramkört természetesen le is lehet tiltani, de ekkor nincs a rendszerünk megvédve a programhibák ellen. Sajnos a tapasztalat szerint a watch-dog áramkör m ködésével kapcsolatban néha fellépnek bizonytalanságok, pontosabban néha nem m ködik, amikor elvileg m ködnie kellene. Ezen rendellenességek eredetét mostanáig nem sikerült tisztázni.
Diplomaterv
- 23 -
2001 tavasz
3.3. Beépített perifériák és programozásuk Ebben az alpontban a mikrokontrollerbe épített olyan egységekr l lesz szó, amelyek egy mikrokontrollert egy tokba integrált számítógéppé tesznek. Ezen egységek dokumentációja a gyári leírásban [1], [26] megtalálható, itt csak a kés bbiekben felhasznált egységekkel foglalkozunk, illetve az eredeti leírás hiányosságait kívánjuk pótolni.
Megszakítások fajtái, kezelésük A PIC17C7XX megszakítási rendszere roppant sajátságos, és bizonyos szempontból kényelmetlen, mindazonáltal funkcionálisan tökéletesen m ködik, és az els néhány buktató felismerése után felprogramozható. Sajátságos, mivel úgy t nik, mintha a tervez k túlzott kompromisszumokat kötöttek volna a kisebb típusokkal való kompatibilitás részleges, és nehezen kihasználható fenntartása végett. A mikrokontroller háromszint megszakítási rendszerrel rendelkezik. A legfels szint a nem maszkolható megszakításhoz tartozik (Non-Maskable Interrupt - NMI), ezt semmilyen módon nem lehet letiltani a kontrolleren belül. M ködése teljesen egyértelm , a kontroller az MCLR#/Vpp lábára adott logikai alacsony szint hatására alapállapotba kerül és átadja a vezérlést a programmemória legelejére. Ez a folyamat egy meglehet sen összetett áramkörön keresztül történik biztonsági okokból, ennek dokumentációja kell részletességgel megtalálható a gyári leírásban. Ezentúl csak a másik két megszakítással foglalkozunk. Az egyik megszakítási szint hardveresen egyértelm prioritást élvez a másik felett. Mindkét szinthez tartozó egységek megváltoztathatatlanul be vannak kötve. Az alsó szinten lev megszakításokat perifériális megszakításoknak nevezik, a fels szintnek nincs külön neve, a leírásban ezek egyszer en megszakítások. Minden megszakítást egyszerre letilthatunk egy globális megszakítás tiltó bittel, ez a bit a CPUSTA (Central Processor Unit STAtus) regiszterben kapott helyet. A regiszter két számunkra fontos bitjének funkciója a következ táblázatban látható:
CPUSTA regiszter Sorszám Név 4. bit GLINTD - GLobal INTerrupt Disable bit 5. bit STKAV - STacK AVailable bit
Címe: 06h Hozzáférés Alapérték Irható és olvasható 1 Csak olvasható 1
A GLINTD bit törlésével engedélyezhetjük az összes megszakítást, egyes értéke mellett minden megszakítás tiltott. Alapállapotban, egy nem maszkolható megszakítás beérkezése után minden megszakítás tiltva van. Minden egyéb megszakítás beérkezésekor szintén letiltódik minden megszakítás, alaphelyzetben egyszerre csak egy megszakítás kiszolgálása lehet folyamatban. Azonban a megszakítás-kezel alprogramban újra engedélyezhetjük a megszakításokat a státuszinformációk elmentése után, így szoftveresen többszint megszakítási rendszert hozhatunk létre. Ennek nagy nehézsége, hogy a beépített verem - ahol a visszatérési címek tárolásra kerülnek alprogram hívások esetén és megszakítások beérkezésekor - programból semmilyen módon nem érhet el, és fix hossza 16 szó. Amennyiben túlcsordul, - ezt jelzi az STKAV bit nullává válása - alaphelyzetbe állítása csak az NMI segítségével lehetséges, ami a leírás szerint szoftveresen semmilyen módon nem oldható meg közvetlenül. Egy módon azonban mégiscsak el idézhetünk küls áramkör nélkül nem maszkolható megszakítást. Letiltunk minden megszakítást, és hagyjuk, hogy túlcsorduljon a watch-dog timer. Amennyiben mindenképp többszörös megszakítási rendszerre van szükségünk, a státuszinformációk mentésére létre kell hoznunk egy saját vermet is. Amit az egyik indirekt címzést megvalósító regiszter és az egyik adatmemória-lap feláldozásával tehetjük meg, erre szerepel példaprogram a gyári leírásban. A megszakításból való visszatérésre szolgáló utasítás természetesen automatikusan újra engedélyezi a megszakításokat. A fels szint megszakításait a következ események válthatják ki: • a 0-ás sorszámú számláló és id zít túlcsordulása (Timer 0) • meghatározott él az INT lábon • meghatározott él a T0CKI lábon • perifériális megszakítás Ezen események bekövetkeztekor a kontroller magja megadott címekre adja át a vezérlést. Ezek a címek szintén állandóak, tehát nem beszélhetünk vektoros megszakítási rendszerr l, még ha a
Diplomaterv
- 24 -
2001 tavasz
leírás ezeket a címeket vektoroknak is nevezi. Természetesen ezekr l a címekr l tetsz leges helyre átadható a vezérlés. A címeket a következ táblázat tartalmazza: Memóriacím 0000h 0008h 0010h 0018h 0020h
Megszakítást kiváltó ok Nem maszkolható megszakítás (NMI) INT láb Timer 0 túlcsordulása T0CKI láb Perifériális megszakítás
Prioritás 1 2 3 4
A fenti, gyári leírás szerinti prioritások csak arra az esetre vonatkoznak, amennyiben a megszakítások ugyanabban az utasításciklusban érkeznének meg. Ekkor a beérkezett kérések közül a legmagasabb prioritású (az 1 sorszámú prioritás a legmagasabb) kerül kiszolgálásra, arra viszont nincs mód, hogy hardveresen biztosítsuk, hogy egy megszakítást csak nála magasabb prioritású szakíthasson félbe (mindazonáltal a megszakítások prioritásfogalma eredetileg ezt takarná). Mind a négy megszakításhoz tartozik egy-egy engedélyez bit és egy-egy jelz bit. Ezek az INTSTA (INTerrupt STAtus) regiszterben foglalnak helyet. Az engedélyez bitek a megszakítások egyedi engedélyezésére és tiltására szolgálnak. A jelz bitek két esetben hasznosak: egyrészt amikor nem megszakítások segítségével kívánjuk kezelni az adott eszközöket, másrészt a megszakítást kezel alprogram a megszakított programba való visszatérése el tt az adott megszakítás jelz bitjének törlésével adja a megszakítás-vezérl tudtára, hogy befejezte a megszakítás kiszolgálását. Ha ez a bit nem törl dik, a visszatérés után újra azonnal megszakítás keletkezik, és visszakapja az el z alprogram a vezérlést, így sosem kerül vissza a vezérlés a megszakított folyamathoz. Egyetlen kivételt képez a perifériális megszakítások jelz bitje: ez nem írható, csak olvasható, a perifériák megszakításainak jelz it különkülön kell törölni. A megszakítások másik fajtái a perifériális megszakítások, ezekkel több probléma van, mint az el z ekkel. Látható, hogy egy adott „vektor” valósítja meg az összes perifériális megszakítás kiszolgálását, ez a nullás sorszámú id zít kivételével az összes bels eszköz összes lehetséges megszakítását jelenti. Tehát a különböz perifériák megszakításait programból kell szétosztani. Éppen ez a feladat az, ami a leírásban nincs megfelel en dokumentálva, és a tapasztalatok szerint sokaknak köztük e sorok írójának is - gondja akadt vele. A perifériák megszakításainak kezelésére hasonló regiszterek szolgálnak, mint a közönséges megszakítások esetében, azzal a különbséggel, hogy itt 16 forrása lehet a megszakításoknak. Így ezek kezelésére összesen 16 engedélyez bitre, és 16 jelz bitre van szükség. Az engedélyez bitek a PIE1 és PIE2 (Peripheral Interrupt Enable Register) regiszterekben, a jelz bitek a PIR1 és PIR2 (Peripheral Interrupt Request Register) regiszterekben kaptak helyet. A funkciójuk hasonló, mint a megszakítások esetén, az engedélyez bitekkel egyenként engedélyezhetjük illetve tilthatjuk a megszakítások fogadását. A jelz bitek viszont három esetben jutnak szerephez. Egyrészt szintén megszakítás nélküli perifériakezelésnél ezeket a biteket olvashatjuk ciklikusan, így értesülhetünk a várt esemény bekövetkeztér l. Másrészt szintén törölnünk kell a jelz biteket a megszakításból való visszatérés el tt, ezt az aszinkron soros vonalak esetén csak közvetve tehetjük meg. Harmadrészt a megszakítási kérelmeket elosztó programrészlet ezek alapján a jelz k alapján tudja azonosítani a megszakítási kérelem forrását. Azonban, mint az el z ekb l látható a jelz bitek az engedélyez vonalaktól függetlenül mindig m ködnek, így a megszakítási kérelmek szétosztásánál újra meg kell vizsgálni egy adott periféria jelz je mellett azt is, hogy az adott megszakítás engedélyezve van-e. Így a perifériák megszakítási kérelmeit kiszolgáló programrészlet roppant terjeng ssé válik, ami megszakítások kiszolgálása esetén nem tartozik a legkedvez bb vonások közé, ezen felül a futásid sem lesz determinisztikus, ami pontos id zítések szükségessége esetén fontos követelmény. Okosabb megoldás lett volna, ha a jelz bitek esetén kiválasztható, hogy azokat maszkolja-e a hozzá tartozó engedélyez vonal, melynek megvalósítása mindössze csak egyetlen járulékos konfigurációs bitet igényelt volna, és 16 „és” kaput, így a maszkolást nem szoftverb l kellene megoldani és a megszakítás nélküli perifériakezelés lehet sége is megmaradt volna, esetleg kivezethettek volna minden vonalat maszkolva és nem maszkolva is, arra az esetre, ha a perifériáknak csak egy részét kívánjuk magszakításból kezelni. Végül született egy programrészlet, amely közel optimális megoldást ad a problémára, ez a függelékben megtalálható. Ha egy periféria megszakítását nem kívánjuk használni, a hozzá tartozó programrészletet egyszer en kihagyhatjuk. A
Diplomaterv
- 25 -
2001 tavasz
megszakítások maszkolását egy egyszer „és” (ANDWF) utasítással is meg lehet oldani egy regiszter feláldozásával, azonban a fent említett programkód a megszakítások kiszolgálása közben felmerül új megszakítási igényeket is a lehet legel bb, a f programba való visszatérés nélkül kielégíti, amennyiben azok sorrendben a kiszolgálásra került megszakítás után következnek, hiszen a jelz biteket minden megszakításra egyenként ellen rzi. Természetesen a legkellemesebb megoldás egyedi memóriacímek vagy vektorok alkalmazása lehetne, minden eszköz megszakításkérelmének kezelésére.
Számlálók és id zít k A mikrokontrollerben négy számláló illetve id zít (Timer) áramkör található ezek közül az els nek (Timer0) van kitüntetett szerepe. Ez teljesen különálló egységet képez a mikrokontrolleren belül, képes a mikrokontroller „SLEEP” üzemmódjában is m ködni küls órajelr l, és megszakítás segítségével „fel tudja ébreszteni” a mikrokontrollert. A maximális bemeneti órajele 50MHz, majdnem kétszerese a mikrokontrollerének. M ködhet természetesen bels órajelr l is. A felbontása alapvet en 16 bit, de kapcsolható elé egy 8 bit felbontású el osztó is, ami logaritmikus lépésekben állítható. Így akár 24 bit felbontás is elérhet , persze nem tetsz leges pontossággal. Egyetlen hátránya, hogy a mikrokontroller többi id zít jével szemben a felhasználónak kell gondoskodnia a megszakítás beérkezése után az újraindításáról, illetve a kezd érték beállításáról, ami kissé körülményes. Viszont így pontosan mérni tudjuk azt az id t is, ami a megszakítás beérkezése és a kiszolgálás kezdete között eltelt. Ennek a lehet ségnek „SLEEP” üzemmódból való visszatérés után lehet jelent sége, amennyiben pontosan kell id zítenünk. A maradék három számláló és id zít regiszterei és megszakítási vonalai a perifériák között kaptak helyet. Közülük a Timer 1 és a Timer 2 8 bit felbontású, de együtt összekapcsolhatók 16 bit felbontásúvá. Ezek képesek vezérelni a mikrokontroller impulzusszélesség modulált (Pulse Width Modulation - PWM) kimeneteit. A Timer 3 16 bit felbontású, els sorban impulzusszámlálási feladatokra készítették fel.
Az A/D átalakító Az A/D átalakítóról nagyjából hasonló dogok mondhatók el, mint a hardverszorzó és a megszakítás-kezel esetében, tehát használható és helyesen m ködik, de használhatóbb módon, praktikusabban is megvalósíthatták volna a tervez k. Az A/D átalakító PIC17C75X esetében 12, PIC17C76X esetében 16 lábról képes bemeneti analóg értéket fogadni egy analóg multiplexer segítségével. Maga az A/D átalakító egy mintavev és tartó áramkörb l és egy szukcesszív approximációs kvantálóból áll. Az analóg jel forrásának kiválasztása még a mintavev és tartó áramkör el tt történik, így több jel egyidej mérése - gyors jelek esetén megfelel pontossággal sajnos nem lehetséges. Természetesen minden bemenethez egy-egy külön mintavev és tartó áramkör beépítése feltehet leg jelent sen megnövelte volna a layout felületigényét, a nagyméret tárolókapacitások miatt. A problémák nem is ebb l adódnak. Sajnos a gyári leírásnak sem er s pontja az A/D konverterrel foglalkozó rész. A probléma a lábak üzemmódjának beállítása, illetve annak dokumentálása körül van. A következ kben ismertetésre kerül, ami a leírásból kinyerhet ezzel kapcsolatban (ha néha áttételesen is), illetve annak ellentmondásai, némi tapasztalattal vegyítve. A többi lábhoz hasonlóan, az A/D átalakító bemeneteiként felhasználható lábak is képesek egyszer digitális ki- vagy bemenetként is m ködni. Azt, hogy éppen melyik láb milyen üzemmódban dolgozzon, a leírás szerint konfigurációs bitek határozzák meg. Ezek a bitek az A/D átalakító egyik regiszterében kaptak helyet a négy közül. Ez a regiszter az ADCON1 (A/D CONtrol register 1) névre hallgat. A beállításra szolgáló bitjei az 1-3 bitek. Tehát összesen 8 féle kombinációban adhatjuk meg a 12 vagy 16 vonal üzemmódját. Ezek a lehet ségek a következ táblázatban láthatók:
Diplomaterv
- 26 -
2001 tavasz
Analóg bemeneti lábak üzemmód-kiválasztása I/O RH RH RH RH RF RF RF RF RF RF RF RF RG RG RG RG lábak 7 6 5 4 7 6 5 4 3 2 1 0 0 1 2 3 PCFG3: AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN PCFG1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 000 A A A A A A A A A A A A A A A A 001 D A A A A A A A D A A A A A A A 010 D D A A A A A A D D A A A A A A 011 D D D A A A A A D D D A A A A A 100 D D D D A A A A D D D D A A A A 101 D D D D D A A A D D D D D A A A 110 D D D D D D A A D D D D D D A A 111 D D D D D D D D D D D D D D D D A tervez k láthatóan egy prioritáskódolóval igyekeztek a problémát kis munkabefektetéssel és hatékonyan megoldani, ámde kevés sikerrel. Látható, hogy a táblázat utolsó két sora között két analóg bemenet változik át digitálissá. (Miért éppen az utolsó sorban?!) Eddig ez még nem túl nagy probléma. Azonban, ha megvizsgáljuk, hogy a mikrokontroller lábkiosztása szerint hogyan helyezkednek el az analóg bemenetek, a következ ket láthatjuk. Az AN0-AN3 vonalak megfelelnek az RG3-RG0 vonalaknak (Fordított sorrendben!), azaz a PORTG alsó felének. Az AN4-AN11 vonalak megfelelnek az RF0-RF7 vonalaknak, azaz a PORTF összes vonalának. És végül az AN12-AN15 vonalak PIC17C76X esetén megfelelnek a RH4-RH7 vonalaknak, azaz a PORTH fels négy vonalának. Így, ha újra rápillantunk a fenti táblázatra láthatjuk, hogy a PORTF gyakorlatilag ketté van vágva, és fels négy vonalának funkciója mereven, „bedrótozva” megegyezik a PORTG alsó négy vonalának funkciójával. Azonos a helyzet a nagyobbik kontrollerek esetén a PORTH fels négy vonalával és a PORTF alsó négy vonalával. Tehát semmilyen módon sem eszközölhet olyan beállítás, hogy a PORTG tisztán analóg, a PORTF tisztán digitális vonalakat tartalmazzon, ha egyetlen vonalat is analógként akarunk használni, azonnal négyet kell analóg vonallá konfigurálnunk, ráadásul két különböz vonalcsoportban. Sokkal jobb megoldás lett volna, ha a tervez k minden vonalra vonatkozóan külön kivezetik a módbeállító bitet az adatirány regiszterekhez hasonlóan, ehhez mindössze két további konfigurációs regiszterre lett volna szükség. Illetve, amennyiben mindenképp három biten kívánták megoldani az üzemmód-beállítást, legalább értelmes kombinációkat találhattak volna ki, nem lesöpörve az asztalról a kérdést egy egyszer alapáramkör beépítésével. Ezek után tekintsük át, mit jelent a kétféle üzemmód közötti különbség. Alapállapotba állítás (NMI) után minden analóg bemenetként használható láb analóg bemenetként van konfigurálva. Tehát minden üzemmód-beállító bit törölt. A lábak üzemmódja független az adatirány-regiszter tartalmától, alapállapotban természetesen bemenetként van beállítva az adatirány. A leírás szerint amennyiben analóg bemenetként szeretnénk használni a lábakat, az adatirány-regiszterben bemenetként kell ket beállítanunk, ellenkez esetben a kimeneti logikai szint kerül átalakításra. Tehát nem választják le a lábakról az analóg multiplexert, amennyiben az kimenetként van definiálva, ez lehet akár el nyös is. Ellenben, ha digitális bemenetként kívánjuk használni a megadott lábakat, akkor át kell váltanunk az üzemmódjukat az ADCON1 regiszterben digitális üzemmódba, különben az adatregiszterb l konstans nulla értéket kapunk vissza olvasáskor, a lábak feszültségszintjét l függetlenül. A leírás szerint amennyiben a láb digitális bemenetként van definiálva, az analóg/digitális átalakítás ett l függetlenül végrehajtható, és az átalakítás pontossága nem romlik. Még azt is hozzáteszik, hogy az A/D átalakító m ködése teljesen független az üzemmód-kiválasztó bitekt l és az adatirány-regiszter tartalmától. Ezek után persze felvet dik a kérdés, mi szükség van egyáltalán a fenti üzemmódkiválasztó bitekre. Erre egyetlen utalás található a leírásban, és ez az a pont, ahol a leírás ellentmondásba kerül önmagával. Az eredeti szöveg: „Analog levels on any pin that is defined as digital input (including the AN15:AN0 pins), may cause the input buffer to consume current that is out of the devices specification.” Tehát röviden, analóg jelszintek a lábakon többletfogyasztáshoz vezethetnek. Viszont ezen lábak mint digitális ki-/bemeneti vonalak leírásánál az szerepel, hogy a bemeneti buffer Schmitt Trigger típusú, azonban ebben az esetben nem folyhat az átmeneti jelszintek esetén többletáram, hiszen az ilyen bemenet a jelszint függvényében változtatja a komparálási szintjét, és éppen lassan változó folytonos jelek digitalizálására való. A következtetés tehát, hogy amennyiben a bemenetek
Diplomaterv
- 27 -
2001 tavasz
valóban Schmitt Trigger-rel vannak ellátva (a tapasztalat ezt mutatja), az üzemmódot minden láb esetén nyugodtan választhatjuk digitálisnak, az analóg üzemmód egyetlen funkciója, hogy a digitális bemeneti buffereket földre kapcsolja. A fogyasztás ugyan valóban megn het, mivel olyan bufferek is m ködnek, amelyek bemenetén egyébként nem lenne jelváltozás, de ha a bemenetek Schmitt Trigger típusúak, akkor a többletfogyasztás nem lehet jelent s, hiszen az analóg jel alulátereszt sz r n keresztül jut a bemenetre, és így lassan változik, ritkán billennek át a bufferek. Azt, hogy a fogyasztás ennek hatására kívül eshetne a specifikált tartományon, e sorok írója szintén szólva kétli. Az A/D konverter használata a következ képpen történik. El ször a konfigurációs regisztereket kell beállítani. El ször az ADCON1-et majd az ADCON0-át. Az ADCON1 segítségével beállíthatjuk a lábak üzemmódját, az A/D átalakító órajel-frekvenciáját, a digitális kimeneti számformátumot, és a referenciafeszültséget. Az órajelet úgy kell beállítani, hogy az id állandója legalább 16 . µs legyen, ez 625kHz maximális frekvenciát jelent. A órajel el állítható a bemeneti órajelb l leosztással, vagy az A/D konverter számára külön beépített RC oszcillátorból. Az utóbbi el nye, hogy segítségével a mikrokontroller „SLEEP” üzemmódjában a többi egységt l függetlenül is tud m ködni az A/D átalakító. Az ADCON0 segítségével kiválaszthatjuk a figyelni kívánt lábat, bekapcsolhatjuk az A/D modult. Ebben a regiszterben található az a bit is, amivel az átalakítás indítható, de miel tt ezt megtennénk, ki kell várnunk, amíg a mintavev és tartó áramkör (kondenzátor) felveszi a bemenet feszültségszintjét kell pontossággal. Ez a mintavételi id , amely minimális értéke legfeljebb körülbelül 20µs lehet 10kΩ generátor-ellenállás mellett; a leírás ennek számítási módját pontosan tartalmazza, értéke els sorban a bemeneti vonalat meghajtó generátor bels ellenállásától függ. Az átalakítás megkezdése el tt még fel kell programoznunk a megszakítást, amennyiben ezzel kívánjuk jelezni az átalakítás végét. Ezután elindíthatjuk az átalakítást, ami 12 órajel-ciklust vesz igénybe a fenti leosztott órajelb l, ez az átalakítási id . Ekkor a mintavev és tartó áramkör tartó üzemmódba kerül, az analóg értéket tároló kapacitás leválasztásra kerül a bemenetr l. Majd kiolvashatjuk az átalakított értéket az eredményregiszterekb l. Újabb mintavétel indítása el tt legalább két órajel-ciklusnyi id t kell várni a fenti leosztott órajelb l. Minden átalakítás végén a mintavev kondenzátor kisütött állapotban van, újra meg kell várnunk, amíg kell pontossággal felveszi a bemenet feszültségét. Láthatjuk, hogy a mintavétel pillanatát tulajdonképpen az átalakítás indításával tudjuk pontosan kézben tartani, ezt valamelyik id zít segítségével tehetjük meg.
Soros vonali illeszt áramkörök A mikrokontroller egyik nagy er ssége a két univerzális szinkron/aszinkron soros vonali adóvev áramkör (Universal Syncronous/Asyncronous Receiver/Transmitter - USART). Mindkett egyedi ütemgenerátorral rendelkezik, így az átviteli sebességeik függetlenek egymástól. A két soros vonali illeszt felhasználásával a mikrokontrollerek hálózatba is kapcsolhatók, és mivel képesek megszakítások segítségével elvégezni a soros vonali adás és vétel m veletét, aszinkron módban akár full-duplex átvitellel, tetsz leges hálózati kommunikációs protokoll is felépíthet anélkül, hogy ez az egyéb futó alkalmazásokat - az esetenként bekövetkez megszakításoktól eltekintve - zavarná. A soros vonali vev k akkor kérnek megszakítást, amint egy bájtnyi üzenet megérkezett. Az adók akkor, amikor elküldték az éppen aktuális adatot, így az adók megszakításait csak akkor célszer engedélyezni, amikor üzenetet kívánunk küldeni, majd a küldés befejeztével azonnal le kell tiltani, például a megszakítást kezel alprogramban, miután a teljes elküldend üzenet összes bájtját elküldtük. Megjegyzend , hogy az aszinkron soros vonali illeszt áramkörök kiemelked en jól viselkedtek, a mikrokontroller küls órajelének stabilizálása után ezekkel az eszközökkel a felprogramozás után semmilyen probléma nem volt, a leíráshoz viszonyítva semmi rendellenességet nem tapasztaltunk.
Diplomaterv
- 28 -
2001 tavasz
4. A fejleszt rendszer 4.1. A fejleszt rendszerekr l általában A mikrokontroller-programok fejlesztése általában ablakkal ellátott tokozású törölhet eszközökön történik, amelyek egyrészt drágábbak az egyszer programozható eszközöknél, másrészt véges élettartamúak. Ráadásul a bels memória UV fénnyel való törlése sok id be kerül, és ez nagyban megnyújtja a programfejlesztés idejét, hacsak nem áll rendelkezésre megfelel számú ablakos mikrokontroller. És mindezek után fellép a rengeteg cseréb l adódó érintkezési problémák roppant kellemetlen hatása is. Ezen hátrányok elkerülésére a Microchip a mikrokontrollereihez szoftver szimulátorokat kínál, amelyek sajnos nem képesek bizonyos funkciók vizsgálatára. Léteznek még hardver emulátor eszközök is, bár ezek igen költségesek, és csak véges m ködési sebességig képesek garantáltan a helyes viselkedést utánozni. Más úton is megkönnyíthet a programfejlesztés. A programfejlesztés ideje nagy mértékben lerövidül, ha az eszköz bels memóriáját nem kell minden alkalommal újraprogramozni és kitörölni, ami megoldható, ha lehet ség van küls memória illesztésére a mikrokontrollerhez, mint mikroprocesszorhoz. Sajnos ennek a módszernek hátránya, hogy fel kell áldoznunk ki-/bemeneti lábakat a memóriaillesztéshez, így nem tudjuk kihasználni a kontroller összes lehet ségét. Azonban ez mégsem jelent túl nagy problémát, hiszen a ki-/bemeneti portok általában teljesen azonosan kezelend k, így modulonként elkészíthetjük a különböz lábakra csatlakozó perifériák vezérl programját, majd a porthivatkozások módosítása után összeintegrálhatjuk a programot, és kipróbálhatjuk egy ablakos tokozású mikrokontrollerben a kész, végleges vezérl kártyán. Természetesen a program els nekifutásra valószín leg nem fog tökéletesen m ködni, de ekkor már vannak biztosan helyesen m köd részprogramok, így a hibakeresés nagyon leegyszer södik. És a fejlesztés nagy része már elkészült gyorsan, kényelmes körülmények között. A fejleszt i környezet a PIC17C756 típusú mikrokontrollerre történ programfejlesztést hivatott segíteni. A Microchip mikrokontrollerek nagy többségével ellentétben a PIC17C756 képes mikroprocesszor üzemmódban is m ködni, így felépíthet vele, mint mikroprocesszorral egy mikroszámítógép is. Az elkészült fejleszt kártya tulajdonképpen egy ilyen mikroszámítógép, amely az adott családba tartozó többi mikrokontrollerre történ fejlesztést is megkönnyíti, hiszen a PIC17C756 a PIC17C7XX mikrokontroller-család egyik legfejlettebb tagja, a PIC17C76X kontrollerek csak a használható ki-/bemeneti lábak számában nyújtanak többet. De mivel a processzormag utasításkészlete nagyrészt kompatibilis (nem kód kompatibilis, csak a mnemonikok azonosak) a kisebb MICROCHIP processzorcsaládok utasításkészletével is, kis módosítások után a fejleszt panelen kipróbált programok átültethet k kisebb kontrollerekbe. A fejleszt i környezet vázlatos felépítése az 4.1. ábrán látható.
Diplomaterv
- 29 -
2001 tavasz
Fejleszt rendszer
Monitorprogram, Fejlesztend program
Perifériák, Vezérelt egységek
RS232 Számítógép (PC)
Fejleszt kártya
Oszcilloszkóp, Logikai Analizátor
4.1. ábra. A fejleszt i környezet vázlatos felépítése
4.2. A fejleszt kártya felépítése Az el bbi elgondolás szellemében született meg a fejleszt rendszer, miszerint a mikrokontrollert, mint mikroprocesszort használjuk. Röviden tekintsük át, milyen részegységek helyezkednek el a fejleszt kártyán. El ször is maga a PIC17C756 típusú mikrokontroller. Majd a m ködéshez szükséges 5V-os tápfeszültséget el állító tápegység. A kártya közvetlenül a kisfeszültség transzformátor szekundertekercsére kapcsolható, hiszen tartalmaz Graetz egyenirányító hidat, és simítókondenzátort is. A tápfeszültség csatlakoztatására 3.5”-es „Jack” aljzat szolgál. Az egyenirányított feszültség simításáról nagy, 1000µF kapacitású kondenzátor gondoskodik, a feszültségstabilizálást 7805 típusú integrált áramkör végzi, ki és bemeneteire védelmi célból Zener diódák kapcsolódnak. Egy külön dióda gondoskodik az integrált áramkör kimeneti túlfeszültség védelmér l is. Minden egyes integrált áramköri tok tápkivezetései közelében 100nF kapacitású többréteg kerámia kondenzátorok gondoskodnak a tápvezetékeken keresztül fellép ohmos csatolások megszüntetésér l. Az analóg bemenetek és a kontroller alatti területek nagy egybefügg fóliafelülettel árnyékoltak. A következ létfontosságú elem az órajelgenerátor, ebb l háromnak is van hely a kártyán, közülük jumper-ek segítségével lehet választani (választható még kétlábú kvarckristály is, ha a mikrokontroller bels konfigurációs bitjei ehhez volnának beállítva). A kártyán helyet kapott még egy aszinkron soros vonali szintilleszt áramkör is, amely a kontroller TTL kompatibilis feszültségszintjeit illeszti a szabványban (V.24, RS232C) el írt értékekhez. Jumper-ek segítségével a szintilleszt leválasztható a mikrokontroller kivezetéseir l, amennyiben a mikrokontroller ezen vonalait másra szeretnénk felhasználni. Mivel a mikrokontroller két szinkron/aszinkron soros vonali illeszt -áramkört tartalmaz, két szabványos 9 pólusú csatlakozó is beépítésre került. A handshake jelek visszahurkolása szintén jumper-ekkel valósítható meg. A kártyán roppant rugalmas módon lehet memóriákat elhelyezni. A kontroller 64kW méret memóriát tud megcímezni, programmemória busza 16bit széles az adat- és címvonalak tekintetében is. A fejleszt kártyán 8bit adatszélesség memória áramkörökb l lehet kiépíteni a kívánt memóriát. A kártyán három alsó-fels bájtot tároló tokpárnak van hely. Minden memóriafoglalat 28 lábú. Az els foglalatpárba - a mikrokontrollert l kezdve a számozást - EPROM memória helyezhet , itt tárolhatjuk a monitorprogramot, ami minden bekapcsolásnál és újraindításnál elindul, ez a program tartja a kapcsolatot a fejlesztéshez szükséges eszközöket tartalmazó PC-vel, illetve az azon futó programokkal. Természetesen bármilyen program tárolható ebben a memóriában, ezért sokféle típusú EPROM befogadására lett felkészítve a fejleszt kártya (2764, 27128, 27256, 27512), amelyek közül az éppen használni kívántat jumper-ek segítségével választhatjuk ki. A másik két foglalat SRAM-ok befogadására alkalmas, amelyekbe a fejleszteni kívánt programot tölthetjük le a PC-b l és indíthatjuk
Diplomaterv
- 30 -
2001 tavasz
el (itt 8kB, és 32kB a szóbajöhet típusok választéka). 2*32kW SRAM esetén külön áramkörök gondoskodnak a ROM és RAM közötti lapozásról. A kártyán helyet kapott még egy foglalatpár párhuzamos Flash EPROM-ok befogadására (29F010, 29F040), amelyek betölthetik az EPROM-ok szerepét is, de adattárolásra is használhatók. Ezek fels helyiérték címvonalait ki-/bemeneti lábakra is kapcsolhatjuk az alkalmazás igényei szerint, így keveset foglalnak le a megcímezhet területb l, de lapozással mégis teljes kapacitásuk használható adattárolásra. A Flash EPROM-ok programozásáról kés bb még részletesen lesz szó. Található még 7 darab világító dióda a kártyán az alapvet funkciók ellen rzésére (tápfeszültség, monitorprogram, aszinkron vonalak vev és adó jelei, egy PWM kimenet). Végül pedig az elmaradhatatlan „reset” gomb. Az elkészült fejleszt rendszer az 4.2. ábrán látható, kapcsolási rajza, alkatrész-beültetési rajza, és az nyomtatott áramköri lemez mindkét oldalának rajzolata az F.2.1. függelékben található, ezenkívül ugyanebbe a függelékbe került még a kártyán található számos jumper funkciójának leírásai is, bár ez a kapcsolási rajzból is könnyen kikövetkeztethet .
4.2. ábra. A fejleszt kártya.
Jól látható, hogy a mikrokontrollert koszorúszer en körbeveszi egy tüskesor, ami aranyozott érintkez kkel biztosítja a kontroller lábaihoz való közvetlen hozzáférést mérési célokból. Az általánosan felhasználható ki-/bemeneti vonalcsoportok 10 pólusú szalagkábel-csatlakozókon vannak kivezetve, hogy szalagkábelek segítségével tetsz leges küls eszköz illeszthet legyen a mikrokontrollerhez. Ezek kiosztása egy kivételt l eltekintve egységes, mellettük fel van tüntetve a vonalcsoport neve: PORTA, PORTB, PORTF, PORTG. A kivételezett vonalcsoport a PORTA, ez eredend en nem 8 bit szélesség , hanem csak 6, itt két másik fontos vonal került kivezetésre. A csatlakozók kiosztását tartalmazza a következ táblázat:
Diplomaterv
- 31 -
2001 tavasz
Sorszám 1 2 3 4 5 6 7 8 9 10
Funkció PORTB, PORTF, PORTG Gnd Vcc 0. bit 1. bit 2. bit 3. bit 4. bit 5. bit 6. bit 7. bit
PORTA Gnd Vcc RA0/INT RA1/T0CKI RA2/SS#/SCL RA3/SDI/SDA RA4/RX1/DT1 RA5/TX1/CK1 MCLR# TEST
A PORTA vonalcsoport kiosztása lehet vé teszi, hogy a gyári leírásban foglaltak alapján erre a csatlakozóra egy megfelel eszközt kapcsolva elvégezzük a mikrokontroller bels memóriájának felprogramozását soros vonali adatátvitellel, a Microchip honlapján hozzáférhet leírásban [26] foglalt módon. A kivezetéseket kell körültekintéssel szabad felhasználni, azok közvetlenül a kontroller lábaira vannak kapcsolva, mindenféle küls védelem nélkül. Ezután vizsgáljuk meg, hogyan lehet mikroprocesszor-üzemmódban küls memóriát illeszteni a mikrokontrollerhez. Ennek megvalósításához három általános TTL szint ki-/bemeneti vonalcsoportot kell felhasználni, ezeknek kett s funkciójuk van. Mikrokontroller üzemmódban, amikor nincs küls memória illesztve a mikrokontrollerhez, egyszer en TTL szint ki-/bemeneti lábakként használhatjuk ket, kiemelt funkció nélkül. Ha a mikrokontroller mikroprocesszorüzemmódban van - ez a gyári alapbeállítás -, akkor ez a három vonalcsoport különleges funkcióval bír. Közülük kett , a PORTC és a PORTD névre hallgató szolgáltatja a memóriák 16 bites adat és címvezetékeit, mindkét vonalcsoport 8 bit szélesség . Egy harmadik, a PORTE szolgáltatja a vezérl jeleket a memóriák részére, és azt a jelet is innen kapjuk, ami megmondja, hogy az el z két vonalon éppen adat vagy cím van-e. Ugyanis az adatátvitelhez eredend en 16 címvonal és 16 adatvonal volna szükséges, ez összesen 32 ki-/bemeneti lábat foglalna le, ha közvetlenül ki akarnánk vezetni. Azonban a kontroller tervez inek az adatátviteli vonalak ilyen mérték pazarlása nem állt módjában, hiszen ekkor adott 68 lábú foglalat esetén nem maradt volna láb szinte semmilyen egyéb funkciónak. Így abból az elgondolásból indultak ki, hogy egyszerre az adat és cím információra nincs szükség, el ször kiteszik a címet a megadott vonalakra, ezt a számítógép tervez jének egy vezérl jel hatására el kell tárolnia egy latch-ben, aminek kimeneteit rávezetheti a memóriák címvonalaira, illetve a memória kiválasztó logikára. Majd, miután az átmeneti tároló kimeneti jele már biztosan állandósult, megvonja a vezérl jelet, és a fenti két vonalcsoport átveszi az adatvonalak szerepét. Ezután, attól függ en, hogy írás vagy olvasás m velet történik, ezeken a vonalakon kiírja, illetve beolvassa az adatokat. Ez az elgondolás már csak azért is kézenfekv , mert a címvonalak kapuzójelét könnyen származtatni tudják a processzor bels fázisjeleib l. Megjegyzend , hogy amíg a memóriák író/olvasó vonalai nincsenek kiválasztva, addig inaktív, készenléti állapotban vannak, így nem jelent zavart az adatvonalaikon megjelen cím. A 4.3. ábra a memóriák illesztését szemlélteti [1]. A vezetékek neve utáni kett s kereszt nulla aktív jelet jelent. Egyébként a PORTE csak négy bit szélesség , egy bitje szabadon marad, ez tetsz legesen felhasználható. A fejleszt kártyán ide van kapcsolva az a világító dióda egy meghajtó inverteren keresztül, amit a monitorprogram villogtat, és így jelzi, hogy kész parancsok fogadására.
Diplomaterv
- 32 -
2001 tavasz
Kiválasztó logika
WR# OE# ALE uC PIC17C756
CE# OE# WR# CE# OE# WR#
Címvonalak
Gate
LATCH 74ALS373
Memória 1.
Memória 2.
Adatvonalak
4.3. ábra. Memóriák illesztése a mikrokontrollerhez. Az ábrán található kiválasztó logika feladata a memóriatérkép beállítása, a vezérl jelek megfelel kombinációinak szolgáltatása a memóriák felé. Alapkiépítésben az írást és olvasást vezérl vonalak közvetlenül a memóriákra vannak kapcsolva, ezek csak akkor kerülnek kapuzásra, ha nagy méret RAM memóriák kerülnek a kártyára (64 KW). Ekkor ugyanis a rendszert a programletöltéshez az EPROM-ból kell indítani, de közben a RAM-okba kell írni a programot, amit letöltünk, majd átkapcsolni, hogy az olvasás is a RAM-okból történjen. Ekkora memóriára eddig a fejlesztés során még nem volt szükség. Megjegyzend , hogy nem túl speciális esetben egy ilyen méret program önálló blokkokból áll, amelyek egy részét id szakosan be lehet égetni az EPROM-ba a monitorprogram mellé, ekkor nincs szükség nagy kapacitású RAM-okra. Persze, ha nagy mennyiség adatot kell gyorsan tárolni, majd kés bb feldolgozni, akkor aligha ússzuk meg lapozás nélkül, de ekkor felmerül a kérdés, vajon megfelel -e a mikrokontroller erre a feladatra. Ezt csak az adott probléma mérlegelése döntheti el. Minden esetre a fejleszt kártya a lapozás lehet ségével is fel van ruházva. Az alsó 13 címvonal közvetlenül a memóriák címvezetékeire van kapcsolva, a fels három címvezeték egy multiplexerre csatlakozik, amely kimeneteire kapuk és jumper-ek kapcsolódnak a memóriatérkép beállításához. A fejleszt kártyán található foglalatokba sokféle memória helyezhet , a 28 lábú DIL foglalatba helyezhet memóriák lábkiosztása a lábak nagy részének esetében megegyezik, néhány láb feladata viszont típusonként változik. A lehet ségek felsorolása látható a következ táblázatokban. Az els táblázat az eltér funkciójú lábakat tartalmazza, a második az azonosakat foglalja össze. A változó funkcióval rendelkez lábak külön kivezetésre kerültek, és jumper-ekkel állítható be az adott memóriához szükséges összeköttetés. Ezen kívül jumper-ekkel állítható be a kívánt memóriatérkép, illetve a memórialapozás engedélyezése, és módja.
Diplomaterv
- 33 -
2001 tavasz
Memóriatípus Am27C64 Am27C128 Am27C256 Am27C512 MCM6264 MCM6202 Lábszám 2 3 4 5 6 7 8 9 10 11 12 13
Funkció A12 címvezeték A7 címvezeték A6 címvezeték A5 címvezeték A4 címvezeték A3 címvezeték A2 címvezeték A1 címvezeték A0 címvezeték D0 adatvezeték D1 adatvezeték D2 adatvezeték
1 Vpp Vpp Vpp A15 NC A14
Lábszám 22 26 OE# NC OE# A13 OE# A13 OE#/Vpp A13 OE# CE OE# A13 Lábszám 14 15 16 17 18 19 20 21 23 24 25 28
27 PGM# PGM# A14 A14 WR# WR#
Funkció Gnd tápfeszültség D3 adatvezeték D4 adatvezeték D5 adatvezeték D6 adatvezeték D7 adatvezeték CE# chip engedélyezés A10 címvezeték A11 címvezeték A9 címvezeték A8 címvezeték Vcc tápfeszültség
4.3. A fejleszt rendszer szoftver elemei A monitorprogram egy operációs rendszer kezdemény, amely a kártyán található EPROM-ban van tárolva és a mikrokontrollerben fut, amíg más programot nem akarunk futtatni. A monitorprogram teremti meg a kapcsolatot a fejleszt kártya és a PC-n futó fejleszt rendszer között. A monitorprogram idejének nagy részében semmi hasznosat nem végez, csak figyeli hogy érkeznek-e a számára értelmezhet parancsok a soros vonalon, és eközben egy világító dióda villogtatásával jelzi, hogy készen áll parancsok fogadására. Amint egy parancs érkezik, a meghatározott protokoll szerint értelmezi azt, és végrehajtja. Tekintsük át a fejleszt kártyában futó monitorprogram parancsait, és az adatátvitelre szolgáló protokollt, amelyekkel a PC adatokat tud cserélni a mikrokontrollerrel, és parancsokat tud adni a mikrokontrollernek.
$F1 $F2 $F4 $FD
Kezd cím LSB BSR Bank Kezd cím LSB Cím LSB
Protokoll Kezd cím Hossz Hossz Program LSB MSB LSB MSB $00 $01 ... $FE Data Data Data Kezd cím Hossz Hossz Program MSB LSB MSB LSB Cím MSB
$FE $FF
Cím LSB
M ködés Programmemória beolvasás a PC-be Adatmemória-bank beolvasás a PC-be Program letöltése a kártyába Csapda elhelyezése
Program MSB $FF Data Program MSB
...
...
Csapda visszavonása Program indítása
Cím MSB
A megadott sorrendben fent szerepl bájtokat az aszinkron soros vonalon elküldve a parancs végrehajtódik a mikrokontrollerben. Mint látható, el ször elküldésre kerül a kívánt funkció kódja, majd letöltésnél és visszaolvasásnál egy cím következik, a memóriaterület kezd címe, ahol a Diplomaterv
- 34 -
2001 tavasz
m veletet végezni akarjuk, ezután a átvinni kíván memóriarész hossza következik. Végül letöltésnél sorban el kell küldeni a hosszként megadott számú szót alsó-fels bájtsorrendben, amit le kívánunk tölteni. Programmemória visszaolvasásnál, a hossz elküldése után a kártya elkezdi küldeni a hosszként megadott számú programmemória szót a kezd címt l kezdve szintén alsó-fels bájtsorrendben. Adatmemória beolvasásánál mindig egy egész bank kerül elküldésre, ekkor a funkciókód után a bankválasztó regiszter kívánt tartalmát kell elküldeni, ezután a kártya 256 bájttal, a megadott memóriabank tartalmával válaszol. A letöltött program indítása egyszer m velet, csak a címet kell megadni a funkciókód után, ahová a vezérlést át akarjuk adni. A csapda elhelyezésére is érdemes pár szót áldozni. Sajnos a mikrokontroller-család nem rendelkezik beépített csapda jelleg utasítással, ezt egy apró trükkel próbáltuk ellensúlyozni. Mivel minden utasítás egységesen 16 bit hosszúságú, akármelyik utasítást helyettesíthetnénk egyszer en csapdával, ha lenne. Végül egy egyszer rövid hatósugarú ugró utasítás tölti be a csapda szerepét, amely mellé egy hosszú távú ugró utasítássorozat is bemásolódik annak a memórialapnak a tetejére, ahová a csapdát helyezni akartuk, ez a hosszú hatósugarú ugró utasítás azután meghívja a monitort, innen tudhatjuk, hogy a programunk ráfutott a csapdára. Hátránya ennek a módszernek, hogy a hosszú ugró utasítás helyén nem lehet hasznos programkód, hiszen azt a csapda kiadásakor egyb l felül is írnánk. A csapda elhelyezésekor a funkciókód után a csapda címét kell megadnunk. Visszavonáskor csak a funkciókódot, mert a monitorprogram megjegyzi a legutóbb elhelyezett csapda helyét és a memóriaszó eredeti tartalmát (ezt is a használt memóriabank tetején), és vissza is állítja azt. Ebb l is látszik, hogy jelenleg csak egyetlen csapda helyezhet el egyszerre a programban, és vonható vissza. A visszavonás a memóriabank tetején elhelyezked tárolórész és a hosszú hatósugarú ugró utasítás által használt memória tartalmát nem állítja vissza. Az aszinkron soros vonali kommunikációs protokoll jelen állapot szerint 9600 Baud, 8 adatbit, paritás nélkül, egy stopbit. Az összeköttetést egy közönséges, számítógépek összekapcsolására használható null modem kábel biztosítja. A monitorprogram forráskódjának megtalálási helye az F.2.2. függelékben került megadásra. A fejleszt kártya jelenleg használt alapkiépítésében 16KW EPROM memória található a 0000h címt l kezdve, ebben található a monitorprogram. Programok letöltésére 8KW memória áll rendelkezésre közvetlenül az el z után, a 4000h címen. Megszakítások programozásának lehet vé tételéhez a monitorprogram úgy van elkészítve, hogy a fix megszakítási címek a felhasználható memória kezdetéhez (4000h) viszonyítva ugyanazon a relatív címen elhelyezve találhatók, mint eredetileg a memória kezdetéhez (0000h) viszonyítva. (Az eredeti címre egy ugróutasítás került, ami az új címre adja át a vezérlést, feltétel nélkül. A monitorprogram nem használ megszakításokat, kivéve az NMI-t természetesen.) Ezért a programokat célszer úgy fejleszteni, hogy a program elején konstansként megadjuk a kezd címet, mint báziscímet és a memóriacímeket, amelyeket használni kívánunk ehhez relatív címként adjuk meg. Így a végleges beégetend program csak annyival módosul, hogy a kezd címet át kell írni 4000h-ról 0000h-ra. A fejleszt rendszer szoftverének PC-felöli oldala mostani állapotát tekintve még nagymértékben puritán, ami feltehet leg átmeneti állapot, bár programfejlesztésre már használható, mint a mellékelt kódok és futási eredmények is mutatják. A tetsz leges szövegszerkeszt vel elkészített forrásprogramot a Microchip által készített és a hálózatról szabadon letölthet assembly fordítója gépi kódra fordítja, a fordító kimenete Intel-hex formátumú. Az egész fordítási, letöltési és programindítási procedúrát egy batch fájl végzi, ez a mellékletben az F.2.2. függelékben adott helyen található. Az kimeneti fájl formátuma választhatóan két 8 bites vagy egy 16 bites kimeneti fájl, a batch fájl a paraméterezését l függ en EPROM égetéshez két 8 bites, vagy letöltéshez egy 16 bites Intel-hex fájlt készíttet a fordítóval. Ezután meghív egy Pascal nyelven írt programot, amely beégethet , illetve letölthet bináris fájlokat generál az Intel-hex formátumúakból, majd a batch fájl meghívja az EPROM éget programot, vagy egy másik Pascal programot, ami elkészíti a letöltéshez szükséges fejléceket, ezután a batch fájl DOS parancsok segítségével beállítja a soros vonali illeszt t, és a letöltend fájlokat egyszer en a soros portra másolja. A Pascal programok forráslistájának megtalálási helye is az F.2.2. függelékben található.
Diplomaterv
- 35 -
2001 tavasz
5. Küls egységek illesztése a fejleszt rendszerhez 5.1. Flash memória illesztése A Flash memória hardver illesztése A feladat egy AMD gyártmányú Am29F010 típusú, tisztán 5V feszültségr l m köd Flash EPROM (továbbiakban memória) illesztése volt a mikrokontrollerhez. Mivel a memória nem igényel semmilyen törléshez és programozáshoz szükséges külön feszültséget, nem illékony memóriaként hasznos adattároló szerepet tölthet be bármilyen elektronikus eszközben. A memória adatbusza 8, címbusza 17bit széles. Tehát a megcímezhet tartomány 128kByte. Mivel Flash memóriáról van szó, nagyobb egységek tartalmát lehet csak benne egyszerre törölni, 8db ilyen 16kByte méret külön kezelhet szektorral rendelkezik. A memória 32 lábú PLCC tokozású, így foglalatba is helyezhet . Az illesztés közvetlenül a fejleszt kártyán lett megvalósítva, itt már rendelkezésre állt az összes jel a többi memória miatt. Az AMD gyárt ebben a tokozásban nagyobb memóriát is, az Am29F040 típusút. A foglalat bekötése úgy történt meg, hogy amennyiben szükséges, ezt a memóriát is fogadni tudja, kihasználva teljes tárkapacitását. A többletként jelentkez két címvonal a kisebb memóriákban nincs bekötve. A következ táblázat tartalmazza a memóriák tokbekötését [2], [27].
Lábszám 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Funkció A18 címvonal A16 címvonal A15 címvonal A12 címvonal A7 címvonal A6 címvonal A5 címvonal A4 címvonal A3 címvonal A2 címvonal A1 címvonal A0 címvonal D0 adatvonal D1 adatvonal D2 adatvonal Gnd tápfeszültség
Lábszám 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Funkció D3 adatvonal D4 adatvonal D5 adatvonal D6 adatvonal D7 adatvonal CE# kiválasztójel A10 címvonal OE# olvasás engedélyezés A11 címvonal A9 címvonal A8 címvonal A13 címvonal A14 címvonal A17 címvonal WR# írás engedélyezés Vcc tápfeszültség
Mivel a memória adatbusza csak 8 bit széles, ezért ebb l a memóriából is két tokhoz van foglalat a fejleszt kártyán, így a mikrokontroller teljes adatszélessége kihasználható, ha szükséges. Az alsó 14 címvonal közvetlenül a mikrokontroller által vezérelt címbuszra van kapcsolva, hasonlóan, mint a többi memória esetében. A fels 3 illetve 5 címvonal sokféle módon felhasználható, ezek választják ki, melyik 16 KW méret lap legyen éppen megcímezve az alsó 14 bittel. Természetesen megfelel en kell kapuzni a memória vezérl bemeneteit is. Csak vázlatosan említünk meg néhány lehet séget, a kapcsolási rajz, és a jumper-ek funkciójának ismeretében igen sokfajta memóriatérkép beállítható, melynek ismertetése meghaladja a fejezet kereteit. Els lehet ségként össze lehet kötni a memória alsó 16 címvonalát a mikrokontroller összes címvonalával, ekkor csak a Flash EPROM szabad, hogy kiválasztva legyen (bár a kártya fel van készítve arra is, hogy valamelyik EPROM-ból, vagy RAM-ból olvasson kiválaszthatóan, és RAM-ba írjon, de ett l az esett l most tekintsünk el), ekkor a teljes memóriaterület a Flash EPROM memóriája, az oda el zetesen beégetett programot tudjuk futtatni, a fennmaradó 1 vagy 3 címvonal I/O port-okra vagy DIP kapcsolóra köthet lapozás céljából. Több címvezetéket is felhasználhatunk lapozásra, ekkor többféle helyre is beilleszthetjük a kiválasztott memórialapot a közvetlenül
Diplomaterv
- 36 -
2001 tavasz
megcímezhet tartományban, err l az engedélyez bemenetekre kapcsolt jumper-ek, és egy multiplexer-b l és néhány kapuból álló logika gondoskodik.
A Flash memória vezérl programja A memória programozása minden szempontból hasonlónak tekinthet a közönséges RAM-ok kezeléséhez, a sajátosságokat szem el tt tartva. Az olvasás teljesen azonos módon történik mint ROM-ok és RAM-ok esetében. Az írás tekintetében az id zítés és a jelszintek teljesen megegyeznek a szabványos SRAM esetében használatossal, viszont nem közvetlenül a memóriát tudjuk elérni (ami roppant körülményessé tenné a memóriakezelést), hanem egy kis programozó logikát, amely a megfelel bels id zítéseket, m veleteket elvégzi helyettünk. Valójában amikor írunk a memória adat- és címvonalaira, akkor ennek a programozó logikának adunk parancsokat. A parancsok egy része és a kiadásuk módja a 5.1. folyamatábrán látható.
START
CE#=0 WE#=0 Address=5555h Data=AAh CE#=0 WE#=0 Address=2AAAh Data=55h
Programozás
Melyik funkció?
Szektor törlés
Chip törlés CE#=0 WE#=0 Addess=5555h Data=A0h
CE#=0 WE#=0 Addess=5555h Data=80h
CE#=0 WE#=0 Addess=5555h Data=80h
CE#=0 WE#=0 Addess=PA Data=PD
CE#=0 WE#=0 Addess=5555h Data=AAh
CE#=0 WE#=0 Addess=5555h Data=AAh
CE#=0 WE#=0 Addess=2AAAh Data=55h
CE#=0 WE#=0 Addess=2AAAh Data=55h
CE#=0 WE#=0 Addess=5555h Data=10h
CE#=0 WE#=0 Addess=SA Data=30h
Ellenõrzés
Ellenõrzés
Ellenõrzés
STOP
5.1 ábra. A flash memóriának adható fontosabb parancsok Mint látható, az els két lépés minden parancs esetében közös, ezt hívják felszabadítási ciklusoknak (unlock cycle), és annak megel zésére való, hogy az eszköz tartalmát véletlenül, Diplomaterv
- 37 -
2001 tavasz
„mellényúlásból” megváltoztassuk. A programozásnál következik még egy felszabadítási ciklus, ami a programozó parancsot is azonosítja, majd kiírhatjuk a kívánt címre a kívánt értéket. Ezután a programozó logika elvégzi a feladatát, miközben zavartalanul olvashatunk az eszközr l, így ellen rizni is tudjuk, mikor készült el az írásm velettel, mikor tud új adatot fogadni. A memória teljes vagy részleges törléséhez két felszabadítási ciklust kell végigjárnunk, a parancs kiadásával együtt hármat. Szektor törlése esetén legutoljára a szektor címét is meg kell adnunk. Ha bármely lépésben nem érvényes parancsot adunk a vezérl logikának, az alapállapotba kerül, és új parancsot vár. Természetesen az el z ábrán nem szerepelt a memória összes parancsa, ezeken kívül még számos, általában kevésbé fontos lehet séget kínál: képes azonosítani magát, írásvédelemmel láthatunk el és feloldhatunk szektorokat, stb. Külön szót érdemelnek még a diagnosztikai képességek. Alapértelmezésben a fenti folyamatábra „ellen rzés” m veletein az adatok visszaolvasását és a kívánt értékkel való összevetését kell érteni. Azonban a memória ennél többet képes nyújtani. Írás végrehajtása közben az adatvonal olvasásával (persze csak az éppen írás alatt álló bájtot címezve) státuszinformációkhoz juthatunk a m velet végrehajtás alatt álló fázisairól, illetve az esetlegesen fellép hibákról (melyik fázisban történt, milyen jelleg ) [2], [27]. Természetesen az egyszer már nullába állított biteket csak az egész szektor törlésével tudjuk újra egybe állítani. Elkészült egy néhány rutinból álló programgy jtemény, ami a fenti folyamatábrán látható parancsokat képes kiadni a memóriának, adott memória elrendezés mellett. Ennek teljes forráslistája szintén a mellékletben adott, helye az F.3.1. függelékben található.
5.2. Pontmátrix folyadékkristályos kijelz illesztése Az folyadékkristályos kijelz hardver illesztése A feladat egy SEIKO G1216 típusú 128*64 képpont felbontású pontmátrix folyadékkristályos (Liquid Crystal Display - LCD) kijelz illesztése volt a mikrokontrollerhez. A pontmátrix kijelz illesztése hardver szempontból egyszer feladat volt. Sajnos ebben az esetben nem használhattuk a mikrokontroller meglév adat és címvezetékét, mivel a kijelz meghajtó elektronikája a gyári id zítési diagrammok alapján igen lassúnak t nt, és ez az egész rendszer fels órajel-frekvenciáját megkötötte volna. Így a kijelz összes vezérl vezetékét I/O portokra kapcsoltuk, ami viszont a vezérl programot tette bonyolulttá, és nehezen olvashatóvá. A folyadékkristályos kijelz gyárilag egy nyomtatott áramköri lapra van felszerelve, amelynek hátoldalán helyezkedik el a vezérl elektronika, utóbbi túlnyomó részt három felületszerelt CMOS LSI áramkörb l áll. A leírás [3] szerint két HD61202 típusú szegmens meghajtóból, egy HD61203 típusú közös meghajtóból és el feszültséget el állító feszültségforrásból. A folyadékkristályos kijelz két egyforma 64*64 képpont méret részb l van megvalósítva, ezért a két egyforma szegmensmeghajtó. A szegmensmeghajtók a kijelz -mátrix oszlopait hajtják meg 2*64 kivezetésükkel, a közös meghajtó pedig a sorokat. A meghajtó áramkörök 4096 bit bels memóriával vannak ellátva, ami éppen elegend a 128*64 képpont tárolására. A képpontok mérete 0.4*0.4 mm, rácstávolságuk 0.43*0.43mm A kivezetések sorban, számozva a nyomtatott áramköri lap alsó széle mentén helyezkednek el, amelyeket szalagkábelen lehet elvezetni a mikrokontrollerhez. Az LCD kijelz húsz vezetéken keresztül csatlakozik a külvilághoz, ezek kiosztása és funkciója a következ táblázatban olvasható:
Diplomaterv
- 38 -
2001 tavasz
Sorszám 1 2 3 4 5 6 7 8 9 10
Név Vdd Vss Vlc DB0 DB1 DB2 DB3 DB4 DB5 DB6
Az LCD kijelz vonalai Funkció Sorszám Név Pozitív tápfeszültség, +5V 11 DB7 Viszonyítási pont, 0V 12 CS1# Negatív kontraszt feszültség, -8V 13 CS2# Adatvezeték 14 RST# Adatvezeték 15 R/W# Adatvezeték 16 D/I# Adatvezeték 17 E Adatvezeték 18 Fgnd Adatvezeték 19 NC Adatvezeték 20 NC
Funkció Adatvezeték Bal félkép kiválasztása Jobb félkép kiválasztása Alaphelyzetbe állítás Írás/olvasás választó Adat/utasítás választó Engedélyez vonal Fémkeret kivezetése Nincs bekötve Nincs bekötve
Az adatátvitel közönséges 8 bit szélesség párhuzamos illeszt felületen keresztül történik. Ennek egyetlen hiányossága, hogy a legnagyobb elérhet átviteli sebessége 1 MByte/Sec a katalógus id zítési adatai alapján.(A katalógus külön kiemeli fontos tulajdonságként, hogy az LCD ki-/bemeneti vonalai átmeneti tárolókon keresztül kapcsolódnak a bels áramkörökhöz, így az adatátvitel gyors, és nem lassítja a mikrokontroller programjának futását. A leírás végén található egy mintakapcsolás is Z80 típusú mikroprocesszorral. Majd az id zítéseknél közlik, hogy a teljes írási és olvasási ciklusok hossza legalább 1000ns.) Ezért voltunk kénytelenek ki-/bemeneti vonalakat használni a memória már kiépített illeszt -vonalai helyett. Több sajátosság is felfedezhet , miszerint az engedélyez vezérl vonal a megszokottól eltér en nem nulla aktív. Másrészt, a 128*64 képpont két egyforma 64*64 képpont méret , négyzet alakú mez b l lett kialakítva. Mindkét fél külön kiválasztó bemenettel rendelkezik, teljesen egyformán, függetlenül kezelhet ek. A kijelz vonalai és a mikrokontroller lábai a következ táblázat szerint kerültek összekötésre.
Kijelz DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 Vlc
A kijelez és a mikrokontroller összekapcsolása Mikrokontroller Kijelz RF0 E RF1 D/I# RF2 R/W# RF3 CS1# RF4 CS2# RF5 RST# RF6 Vdd RF7 Vss -8V Fgnd
Mikrokontroller RB0 RB1 RB2 RB3 RB4 MCLR# +5V Gnd Gnd
Tehát a PORTF vette fel az adatbusz, a PORTB pedig a vezérl busz szerepét. A kijelz höz szükséges negatív tápfeszültséget küls tápegységb l nyertük, egy végleges alkalmazás esetén célszer lehet erre külön feszültség inverter használata, mivel így megoldható az egy telepr l való táplálás. A fogyasztás csökkentésére a kijelz tápfeszültségei is a mikrokontroller által kapcsolhatóvá tehet k, így a kijelz csak akkor fogyaszt, amikor szükség van rá. Ezen kívül célszer lehet az RST# vezérl vonal vezérlése is. Így összeszámolva a szükséges vezetékeket elegend nek t nik két vonalcsoport az LCD kijelz teljes illesztéséhez, amelyb l az adatvezetékek más eszközhöz is csatlakozhatnak, hiszen ezek megoszthatók. (Például a Flash memóriához, amennyiben azt nem a memória vonalaira kapcsoljuk. Ez az eljárás akkor lehet indokolt, amennyiben egyéb küls memóriát nem illesztünk a mikrokontrollerhez. A Flash memória címvonalainak meghajtásához 17 illetve 19 vonalra van szükség. Célszer bbnek látszik soros Flash EPROM használata adattárolási célokra, azonban utóbbi nagy kapacitású változataival kapcsolatban hazánkban a tapasztalat szerint az utóbbi id ben ellátási problémák vannak.)
Diplomaterv
- 39 -
2001 tavasz
Az folyadékkristályos kijelz vezérlése A következ táblázat a kijelz nek adható parancsokat tartalmazza [3]. Minden parancs a két kijelz félnek külön-külön kiadható, de azok egyszerre is ki lehetnek választva, ami a kijelz k törlésénél roppant praktikus tulajdonság. Utasítás R/W# Kijelz be/ki 0 Kezd sor beállítás 0 X-cím (lap) beállítás 0 Y-cím beállítás 0 Státusz olvasás 1 Adat írás 0 Adat olvasás 1
D/I# 0 0 0 0 0 1 1
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 1 1 1 1/0 1 1 Kezd sor (0 – 63) 1 0 1 1 1 X-cím (lap) 0 1 Y-cím (0 – 63) Foglalt 0 Be#/Ki Reset 0 0 0 0 Kiírandó adat Beolvasott adat
Az els paranccsal a kijelz fel(ek)et ki- vagy bekapcsolhatjuk. Ez a parancs a bels memória láthatóságát befolyásolja, annak tartalmára nincs hatással. Alaphelyzetbe állítás után az alapértelmezett állapot a kikapcsolt. Az alaphelyzetbe állítás sem befolyásolja a bels memória tartalmát, tehát a képerny törlést minden esetben nekünk kell végeznünk. A következ utasítások megértéséhez ismernünk kell a képet tároló memória felépítését, illetve a benne szerepl adatbájtok és a képmátrix összerendelését. A memória címzését tekintve 8 lapon keresztül érhet el és ezeken belül minden lap 64 adatbájtból áll. Természetesen mindkét félkép esetén külön memória adott. A kívánt lap a fenti harmadik, „X-cím” vagy lapkiválasztó utasítással tehet elérhet vé. A lapon belül megcímzend adatbájt a fenti negyedik, „Y-cím” kiválasztó utasítással tehet elérhet vé. A képpontok és a memóriatartalom összerendelésér l alapállapotban a következ , 5.2. ábra ad felvilágosítást, hasonlatként azt mondhatnánk, hogy a képerny re történ kiírás a mátrixnyomtatók m ködéséhez hasonlóan van megoldva, ahol a soroknak a lapok felelnek meg. A cellákba írt nevek azt az adatvonalat jelentik, amely az adott pozícióban található képpont állapotát vezérli, a címek megfelel kiválasztása mellett.
Diplomaterv
- 40 -
2001 tavasz
X-cím
0. Lap
1. Lap
7. Lap
0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
2 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
3 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Y-cím 4 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
5 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
62 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
63 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
5.2. ábra. A kijelz képpontjainak és bels memóriájának összerendelése alapállapotban.
A fenti második utasítás, a kezd sor beállítása a képerny görgetésnél kap szerepet, ezzel az utasítással függ legesen, azaz a lapok számozásának irányában tolható el, pontosabban görgethet körbe a képtartalom, méghozzá képpont felbontással. Tehát a kijelz által megjelenített kép mintegy ablakszer en görgethet körbe a memóriatartalmon függ leges irányban. A fenti ábra a kezd sor nulla értékét szemlélteti. Alaphelyzetbe állítás után a kijelölt kezd sor nullára állítódik, így a nulladik lap nulladik sora kerül a képerny tetejére. A státusz olvasó utasítás igen fontos. A válaszként adott három bit funkciója a következ . A foglaltság jelz bit magas szintje azt jelenti, hogy az eszköz a legutóbb kapott utasítás végrehajtásával van elfoglalva, adatok fogadására vagy szolgáltatására a státuszinformációtól eltekintve nem képes. A „Reset” névvel ellátott bit azt jelzi, hogy az eszköz még az alaphelyzetbe állítás folyamatát végzi, és a státuszinformáció kiolvasásán kívül más parancsot nem tud végrehajtani. A ki- vagy bekapcsolt állapot jelz bitjének magas állapota jelzi az adott kijelz fél kikapcsolt voltát, logikai alacsony szint esetén a kiválasztott félkép bekapcsolt. A fentiek közül a foglaltság jelz a leggyakrabban használt. Amennyiben gyorsan kívánunk adatokat megjeleníteni a képerny n, és nem akarjuk, hogy a vezérl program ideje nagy részét a státusz olvasásával töltse, célszer lehet az egyik megszakítás bemenet felhasználása ennek a bitnek a megfigyelésére, hogy az adatcserét rugalmasan megvalósíthassuk. Az adatok memóriába írása és olvasása a memóriából egyszer m velet. Kényelmes szolgáltatás, hogy a címszámláló („Y-cím”) automatikusan növelésre kerül minden írás illetve olvasás után. Fontos, hogy olvasáskor a lap- illetve címbeállítás utáni els olvasás egy „dummy read” kell
Diplomaterv
- 41 -
2001 tavasz
hogy legyen, feltehet leg hasonló okból, mint a mikrokontroller programmemória olvasó utasítása esetén. Amennyiben a PORTF vonalcsoportot használjuk adatbuszként, és vissza is akarunk olvasni a képerny memóriájából adatokat, természetesen az A/D átalakító vezérl regisztereiben át kell állítanunk minden vonalat digitálisra. E sorok írójának feladata a kijelz fizikai illesztése volt a mikrokontrollerhez, és az illesztés m köd képességének bemutatása. Az F.3.2. függelékben megadatott helyen, a mellékletben található vezérl program a fenti parancsok használatával a „HELLO WORLD!” feliratot jeleníti meg a kijelz els sorában. A kijelz és a mikrokontroller közötti illeszt -felület továbbfejlesztése Rácz Zoltán, majd Erdei Zoltán feladata volt.
Diplomaterv
- 42 -
2001 tavasz
6. Jelfeldolgozási lehet ségek 6.1. Digitális sz r k létrehozása Digitális sz r k
El ször röviden ismertetésre kerül néhány elméleti összefüggés [4], [5], [6], [16], hogy a gyakorlati megvalósítás bemutatása során minden jelölés és eredmény egyértelm és értelmezhet lehessen. A digitális sz r k a matematika differenciaegyenleteivel állnak szoros kapcsolatban, minden digitális sz r egy differenciaegyenletet valósít meg egy számítógép segítségével. Hálózatelméleti szempontból a differenciaegyenletek, illetve a digitális sz r k diszkrét idej jelfolyam hálózatokkal modellezhet k. Minden jelfolyam-hálózathoz egyértelm en rendelhet egy differenciaegyenlet, azonban egy adott differenciaegyenletet több hálózati elrendezéssel is megvalósíthatunk. Az inhomogén lineáris állandó együtthatójú differenciaegyenletek implicit általános alakja a következ :
m
b j ∗ y[ k − j] =
j= 0
n i =0
a i ∗ s[ k − i]
Ahol y[ k ] és s[ k ] két id sor, vagy más szóhasználatban diszkrét idej jel, amely például egy folytonos idej jelb l keletkezhet mintavételezéssel. Megállapodás szerint általában a bemeneti jelet s[ k ] -val, a kimeneti jelet y[ k ] -val jelöljük. A fenti egyenletben az a i és b i szimbólumok az egyenlet állandó együtthatóit jelölik. Tehát az eddigi kimeneti értékek és az eddigi bemeneti értékek valamely lineáris kombinációi egyenl k egymással, ahol a súlyozótényez k az egyenlet együtthatói. Az egyenlet hálózatelméleti megfogalmazás szerint a diszkrét idej hálózat rendszeregyenlete, a rendszeregyenlet id tartományban ad egyértelm jellemzést a hálózat tulajdonságairól. A fenti alakú egyenlet két más ekvivalens megfogalmazása is szokásos, az els elméleti megfontolásoknál használatos els sorban. Ennek felírásához be kell vezetnünk a konvolúció, más néven lineáris sz rés m veletét, amelyet két diszkrét idej jel - például az f [ k ] és a g[ k ] - között a következ módon értelmezünk:
f [ k ] ⊗ g[ k ]: =
∞
f [i]∗ g[ k − i]
i =−∞
Véges hosszúságú és a zérus id pontban belép jelekre az összegzés határai végessé illetve nullává válnak (ezen a tartományon kívül a szorzat egyik tagja biztosan zérus, így nem befolyásolja az összeget): f [ k ] ⊗ g[ k ]: =
n i=ö
f [i]∗ g[ k − i]
Ha az egyenlet együtthatóit is id sornak tekintjük akkor felírhatjuk a következ összefüggést: m
b[ j]∗ y[ k − j] =
j= 0
n i =0
a[ i]∗ s[ k − i]
b[ k ] ⊗ y[ k ] = a[ k ] ⊗ s[ k ]
A második ekvivalens megfogalmazás a gyakorlati megvalósítás szempontjából fontos, ekkor a súlyozótényez ket a lineáris kombináció fogalma segítségével vektorok szorzásával hozzuk kapcsolatba, így nyerjük a következ vektoregyenletet: y[ k ]
[b[0] b[1]
]
... b[ m] ∗ T
y[ k − 1] ...
s[ k ]
[
]
= a[0] a[1] ... a[ n] ∗
y[ k − m]
T
s[ k − 1] ...
s[ k − n]
Tehát az egyenlet egyenérték vektorok skaláris szorzatának egyenl ségével, ahol az együtthatókat tartalmazó vektorok állandóak, az id sorokat tartalmazó vektorok pedig csak lépésenként egyetlen elemmel változnak.
Diplomaterv
- 43 -
2001 tavasz
A rendszeregyenletet az általánosság csonkítása nélkül végigoszthatjuk a b0 együtthatóval, hiszen a b0 zérus értéke akauzális rendszert jellemezne, viszont számunkra jelenleg a realizálható rendszerek fontosak. Ekkor a rendszeregyenlet explicit alakja el állítható, amely egyben a megoldás számításának módját is megadja a fokozatos behelyettesítés módszerével. Az egyszer ség kedvéért a b0 értékét eleve egynek feltételezzük, így:
m
y[ k ] +
[
j =1 n
y[ k ] =
i =0
y[ k ] =
n i=0
n
]
b j∗ y k − j =
a i ∗ s[ k − i]
m
a i ∗ s[ k − i] −
a i ∗ s[ k − i] +
i=0
j =1
m j=1
[
]
b j∗ y k − j
(− b )∗ y[k − j] j
Az analitikus megoldáshoz el ször a rendszeregyenlet homogén részének általános megoldását kell megkeresnünk: m
b i ∗ y[ k − i] = 0
i=0
Minden homogén lineáris differenciaegyenlethez rendelhet egy karakterisztikus egyenlet, a fenti egyenletnél ez a következ alakú m i=0
b i ∗ λm − i = 0
A karakterisztikus egyenlet gyökei szolgáltatják az egyenlet általános megoldását, amelyben, mint egy függvénytér bázisában az összes lehetséges megoldás felírható a gyökök lineáris kombinációjaként a következ alakban: m
y[ k ] =
i =1
c i ∗ λki
Az általános megoldás a diszkrét idej hálózat saját válaszával egyenérték . A teljes megoldást a homogén egyenlet általános megoldásának és az inhomogén egyenlet egy partikuláris megoldásának sszegeként kaphatjuk meg. Az általános megoldásból látható, hogy az y[ k ] jel korlátosságának szükséges és elégséges
feltétele, hogy a λki komplex sajátértékek az egységkörön belül helyezkedjenek el, ez egyben a diszkrét idej hálózat stabilitásának szükséges és elégséges feltétele is. Ha a sajátértékek az egységkörön helyezkednek el, egyszeres multiplicitás esetén a hálózat a stabilitás határhelyzetében van, többszörös multiplicitás esetén már instabil, a válasza a diszkrét id végtelen határértéke mellett minden határon túl n .
A diszkrét idej Fourier-transzformáció
Folytonos idej jelek analógiájára diszkrét idej jelekre is értelmezzük a spektrális mérték fogalmát [4], [5], [6], [12], [16], [18]. Ezt a folytonos idej jelek Fourier-transzformáltjából a következ módon származtathatjuk. Folytonos idej jel Fourier-transzformáltja, és az inverztranszformáció összefüggése: (A hullámvonal a folytonos idej jelekre utal.)
~ F( jω ) =
∞
~ f ( t )∗ e − jωt dt
−∞
∞
1 ~ ~ f ( t) = F( jω )∗ e jωt dt 2 π −∞
Egy jel Fourier-transzformáltja folytonos esetben csak abszolút integrálható, diszkrét esetben csak abszolút összegezhet jelekre értelmezett. A diszkrét idej jelet a folytonos idej jel mintavételezésével nyerhetjük, a folytonos idej jel Shannon-tétele szerint egyértelm en visszaállítható a diszkrét idej jelb l, ha az sávkorlátozott, és sávszélessége kisebb a mintavételi frekvencia felénél. A mintavételezést és a diszkrét idej jelet úgy értelmezhetjük, mintha a mintavételi id pontokban a jelet egy, a jel nagyságával egyez energiájú Dirac-impulzussal helyettesítenénk, a mintavételi id k között pedig nullával, hiszen ott a diszkrét idej jel nem értelmezett. Így a mintavételezett jel Fourier-transzformáltja a következ képp alakul:
Diplomaterv
- 44 -
2001 tavasz
~ f ( t) = ~ F( jω ) =
∞
∞
~ f ( k∗ TS )∗ δ( t − k∗ TS )
k =−∞
~ − jω k ∗T f ( k∗ Ts )∗ e ( s ) =
k =−∞
∞
f [ k ]∗ e − jkωTs
k=- ∞
Ahol TS a két mintavétel között eltelt id tartam. Látható, hogy a spektrum periodikus ω s = 2 πf s =
2π Ts
mintavételi körfrekvencia szerint, ami a modulációs tételb l is következik, mivel a fenti kifejezés felfogható, mint a sávkorlátozott bemeneti jellel amplitúdóban modulált mintavételi frekvenciával ismétl d Dirac-delta sorozat. Tehát röviden a mintavételezés, azaz az id beli diszkretizálás a jel spektrumát periodikussá teszi. A következ lépésben végessé tesszük a megfigyelt minta hosszát is, mivel egyszerre csak véges sok minta spektrumát tudjuk vizsgálni. Majd létrehozzuk a véges sok mintából álló jel periodikus kiterjesztését, amit a megfigyelt mintasorozat végtelen sokszori átfedés nélküli önmaga elé és mögé helyezésével érünk el. Ekkor a diszkrét idej jel id ben periodikussá válik, így spektruma vonalas lesz, véges sok spektrumvonallal egyértelm en jellemezhet , hiszen sávkorlátozott. Így a véges mintasorozat diszkrét spektruma is egy diszkrét mintasorozat. Az így nyert diszkrét Fouriertranszformáció (DFT) képletei:
F[ n] =
N −1 k =0
f [ k ]∗ WN− nk
1 N −1 F[ n]WNnk N n=0
f[k] =
WN = e
j
2π N
A DFT kiszámítására N = a n mintaszám esetén általában radix „a” gyors Fouriertranszformációs (FFT) [12], [16], [18] algoritmusokat használnak (radix 2 és radix 4 a leggyakoribb), egyéb mintaszámra hatékony megoldást szolgáltat Winograd Fourier-transzformációs algoritmusa (WFTA), amely a mintaszám prímtényez kre bontásán, és maradékosztályokon belüli m veletek tulajdonságain alapul [8], [16]. Általában elmondható, hogy az összes gyors Fourier-transzformációs algoritmus a fenti képletben rejl mátrixszorzás együtthatómátrixának redundanciáját kihasználva csökkenti a számítási id t. Ha a pontszám felbonthatatlan, nem eszközölhet egyszer sítés. A DFT önálló fogalomként is megállja a helyét, folytonos idej jelek nélkül. A két transzformáció közötti összefüggés gyakorlati jelent ségét éppen az adja, hogy a folytonos jelek spektrumának mérésére, közelítésére a folytonos idej jel véges számú mintája DFT-jének kiszámítása a leggyakrabban használt módszer. A DFT a fenti képletek értelmében tekinthet úgy is N pontszám esetén, mint N db párhuzamosan m ködtetett FIR sz r , amelyek impulzusválaszai tiszta szinuszos jelek valahány egész számú periódusai. Vagy azt is mondhatjuk, minden szinuszos összetev esetén kiszámítjuk a jel adott szakasza és a megfelel hosszúságú szinusz hullámszakasz kereszt-kovarianciáját, azaz hasonlóságuk egy mértékét.
A Z-transzformáció A lineáris differenciaegyenletek analitikus megoldásának egyszer sítésére hatékony eszköz a Z-transzformáció bevezetése [4], [5], [6], [16]. Egy id sor Z-transzformáltjának definíciója:
F( z) =
∞
k =0
f [ k ]∗ z − k
Ahol z a komplex függvény-transzformáció változója, a komplex frekvencia. A Z-transzformáció minden diszkrét idej jelet zérus id pontban belép nek tekint, hiszen negatív id kre az id sor értékeit figyelmen kívül hagyja, ez jelen pillanatban nem okoz gondot, hiszen kauzális hálózat esetén mindig található olyan id pont, amely el tt a bemenet, így a kimenet és a bels állapotváltozók nullának tekinthet k. Az inverz-transzformáció (nagyon ritkán használt) definíciója:
f ( k) =
1 2 πj
F( z)∗ z k −1dz
z = r1
Az inverz-transzformációt szinte mindig a komplex változós függvény ismert inverz részekre bontásával végezzük.
Diplomaterv
- 45 -
2001 tavasz
A Z-transzformáció a definícióból láthatóan lineáris m velet. A transzformációs képlet felhasználásával egy id ben eltolt jel transzformáltja:
∞
k =0
ε[ k − p]∗ f [ k − p]∗ z − k =
∞
k=p
ε[ k − p]∗ f [ k − p]∗ z − k = z − p
∞
− k−p f [ k − p] * z ( ) = z − p ∗ F( z)
k − p=0
Két jel konvolúciójának Z-transzformáltja: ∞ k =0
=
f [ k ] ⊗ g[ k ] =
∞ i =−∞
f [i]∗ z − i ∗
∞
∞
f [i]∗ g[ k − i] ∗ z − k =
k = 0 i =−∞
∞ k=0
− k −i g[ k − i]∗ z ( ) =
∞ i=0
∞
∞
− k −i f [i]∗ g[ k − i]∗ z ( ) ∗ z − i =
k = 0 i =−∞
f [i]∗ z − i ∗
∞ k=i
− k −i g[ k − i]∗ z ( ) = F( z)∗ G ( z)
Az összefüggések igazolásánál er sen felhasználtuk azt, hogy a Z-transzformáció belép nek tekinti a diszkrét idej jeleket. Az els összefüggésb l adódik, hogy a z komplex frekvencia tekinthet az id beli eltolás komplex operátorának is. A második összefüggés szerint ha egy jelet lineárisan sz rünk („összekonvolválunk”) egy másikkal majd az eredményt transzformáljuk, egyenérték azzal, mintha külön transzformáltuk volna ket, majd a transzformált függvényeiket szoroztuk volna össze.
A komplex átviteli függvény Tekintsük a diszkrét idej rendszer rendszeregyenletét:
m j= 0
b[ j]∗ y[ k − j] =
n i =0
a[ i]∗ s[ k − i] b[ k ] ⊗ y[ k ] = a[ k ] ⊗ b[ k ]
Ezután transzformálva az egyenletet értelmezhetjük a diszkrét idej rendszer komplex átviteli függvényét:
B( z)∗ Y( z) = A( z)∗ S( z) n
W( z): =
Y( z) S( z)
=
A ( z) B( z)
=
i= 0 m j= 0
a i z −i = b jz− j
a 0 + a 1 z −1 + a 2 z −2 +...+ a n z − n 1 + b 1 z −1 + b 2 z −2 +...+ b m z − m
Mint láthatjuk, a nevez ben egy z m tagtól eltekintve éppen megkaptuk a karakterisztikus egyenlet kifejezését, tehát az komplex átviteli függvény pólusai megegyeznek a karakterisztikus egyenlet gyökeivel, kauzális hálózat esetén.
Az impulzusválasz A diszkrét idej egységimpulzus definíciója: δ[ k ] =
1: k = 0 0: k ≠ 0
Az egységimpulzus Z-transzformáltja: ∆( z) = 1∗ z 0 = 1 Tehát egy hálózat egységimpulzusra adott válasza éppen a komplex átviteli függvényének inverz Z-transzformáltja. Megmutatható, hogy lineáris, invariáns, kauzális, stabil hálózat esetén a komplex átviteli függvény éppen megegyezik a hálózat impulzusválaszának Fouriertranszformáltjával z = e
−j
ω fs
helyettesítés mellett.
Digitális sz r k alaptípusai
A digitális sz r k két alaptípusát szokták megkülönböztetni [6], [16]. Az egyik alaptípus a véges impulzusválaszú (FIR - Finite Impulse Response), a másik a végtelen impulzusválaszú (IIR Infinite Impulse Response) sz r . Szokásos még a differenciaegyenlet, mint matematikai statisztikában használatos modell szerinti felosztás is, ekkor megkülönböztetünk mozgó átlagú (MA Moving Average), autoregresszív (AR - Autoregressive), autoregresszív és mozgóátlagú (ARMA) modelleket [13], [19]. Az MA folyamatok a FIR sz r kkel állnak szorosabb kapcsolatban, bár létezik olyan véges impulzusválaszú sz r , amely ARMA modellel írható le (Lagrange sz r ) [16], ezen túl a két fogalmat szinonimaként használjuk. Az IIR sz r k az AR és ARMA modellekkel hozhatók kapcsolatba (a tisztán AR modellel létrehozott sz r ket „all-pole” sz r knek nevezik, els sorban a beszédfelismerés, és feldolgozás terén van szerepük [12]).
Diplomaterv
- 46 -
2001 tavasz
FIR sz r t a legegyszer bben MA modell segítségével hozhatunk létre, ennek differenciaegyenlete és komplex átviteli függvénye a következ :
y[ k ] =
n i=0
a i ∗ s[ k − i] = a 0 s[ k ] + a 1s[ k − 1] + a 2 s[ k − 2]+... a n s[ k − n] n
W( z) =
k =0
a k z − k =a 0 + a 1 z −1 + a 2 z −2 +...+a n z − n
Az így létrejött diszkrét idej sz r láthatóan az eddigi bemeneti mintaértékek lineáris kombinációjaként állítja el az aktuális kimenet értékét. Az egyenlet együtthatói egyben a véges impulzusválasz mintái, a sz r egyszer en a bemeneti jel és az együtthatókból képzett diszkrét idej jel konvolúcióját számítja ki. A FIR sz r k nagy el nye egyszer ségük, igénytelenségük. A FIR sz r k a tranziens túlvezérlés esetét l eltekintve strukturálisan stabilak, és mindig a beprogramozott átviteli függvényt valósítják meg. Megfelel fokszámmal tetsz leges impulzusválaszt közelíthetünk FIR sz r vel, adott pontossággal. Tetsz leges, egymástól független amplitúdó és fázis-karakterisztika hozható létre, így létrehozható lineáris fázismenet sz r is FIR sz r segítségével. A FIR sz r k egyetlen hátránya, hogy IIR sz r höz hasonló vágási meredekség csak 8-10-szer nagyobb fokszámmal érhet el, hiszen pontonként kell szimulálni az IIR sz r impulzusválaszát, amely akár hosszan lecseng is lehet. IIR sz r ket általában a legáltalánosabb ARMA modellel hozunk létre, ennek differenciaegyenlete és komplex átviteli függvénye a következ :
n
y[ k ] =
n i=0
a i ∗ s[ k − i] −
m j=1
b j ∗ y[ k − j] W( z) =
a i z−i
i=0 m
a 0 + a 1z −1 + a 2 z − 2 +...+ a n z − n
=
1 + b1 z −1 + b 2 z − 2 +...+ b m z − m
b jz − j
j= 0
Az ARMA modell a legáltalánosabb. Mint látható, az MA modell egy alosztálya az ARMA modelleknek. Az IIR sz r k viselkedése sok hasonlóságot mutat az analóg sz r k viselkedésével, így tervezésüket is általában analóg sz r tervezésére vezetik vissza. Az IIR sz r k visszacsatolást tartalmaznak így stabilitási kérdéseik nem olyan egyszer ek mint a FIR sz r k esetében, a karakterisztikus egyenlet gyökeinek kell az egységkörön belül elhelyezkednie. Kis fokszámmal, így kis számítási teljesítmény felhasználásával lehetséges nagy meredekség sz r t el állítani. Hátrányuk a nagy együttható-dinamika, és a számábrázolási pontosságra való fokozott érzékenység. Els sorban szabályozástechnikai alkalmazásokban használnak IIR sz r ket folytonos idej szabályozási algoritmusok rugalmas, könnyen módosítható paraméter diszkrét idej szimulációjára.
M veletek és számábrázolás digitális sz r kben
Bármilyen digitális sz r t akarunk is megvalósítani, el jeles és törtrészt is tartalmazó számok ábrázolására kell felkészülnünk [9], [10], [16]. FIR sz r k esetében a számábrázolás kérdése egyszer , hiszen a sz r együtthatókészletét szabadon újranormálhatjuk, ez a sz r átvitelét csak egy konstans tényez erejéig befolyásolja. A számábrázolás pontossága is könnyen hozzáigazítható az együtthatókészlet és a jelek dinamikájához. Fixpontos aritmetikával szinte kizárólag FIR sz r ket valósítanak meg. A digitális jelfeldolgozó processzorok (DSP) eleve fel vannak készítve FIR sz r k megvalósítására, így célszer számábrázolást is kínálnak, amellyel képesek m veleteket is végezni. A leggyakrabban alkalmazott számábrázolás az el jeles törtszám, ez a következ alakú ( d i a biteket jelöli):
− n−2 − n −1 sf 0: n = −d n * 2 0 + d n −1 2 −1 + d n − 2 * 2 −2 +...+ d 2 * 2 ( ) + d 1 * 2 ( ) + d 0 * 2 − n ; d i ∈[0,1],0 ≤ i ≤ n
Ennek tulajdonságai az aritmetikával foglalkozó részben részletesen ismertetésre kerültek. Ez a módszer −1 ... 1 − 2 − n közötti számok ábrázolására alkalmas. Célszer az együtthatókat,
(
)
be- és kimeneti jeleket is ebben a formátumban ábrázolni, mivel két egynél kisebb abszolút-érték szám szorzata sem lehet egynél nagyobb abszolút-érték . A tranziens túlvezérlés elkerülésére célszer
N
az együtthatókészletet a i=0 N i=0
a i = 1 összefüggés szerint normálni, mivel a kimeneti jel maximális értéke
a i a bemeneti jel sign( a − k ) értékei esetén. Ha az összegzést az együtthatók és jelek tárolására
Diplomaterv
- 47 -
2001 tavasz
használt regisztereknél nagyobb regiszterben végezzük, akkor célszer a normálási tényez t is ennek maximális értékéhez igazítani, hogy az együtthatókat minél nagyobb pontossággal ábrázolhassuk, kihasználva a teljes rendelkezésre álló dinamikát. IIR sz r k esetén az együtthatókészlet nem normálható szabadon, mivel ez a kimeneti jelben szintén konstans tényez vel való eltérést okozna, ami nem engedhet meg, hiszen a kimeneti jelet visszacsatoljuk a hálózat belsejébe. Ez a komplex átviteli függvény nevez jében található egyessel van összefüggésben, a nevez ben szerepl együtthatók ehhez való viszonyát nem változtathatjuk meg. Így a számábrázolást az együtthatókészlethez kell igazítani. Ez az egyik ok, amiért IIR sz r ket általában csak lebeg pontos aritmetikával valósítanak meg. A másik ok, hogy az IIR sz r k bels jeleinek és együtthatóinak nagy a dinamikája. Sajnos még a lebeg pontos aritmetika sem garancia az IIR sz r k helyes m ködésére. A DSP-k utasításkészlete jellemz en tartalmaz utasításokat és címzésmódokat, amelyek nagyban megkönnyítik digitális sz r programok írását. Utasítás szinten képesek gyorsan „multiply and accumulate” (Pl.: Motorola DSP56K MAC utasítás) jelleg m veletek elvégzésére, sok esetben párhuzamosan több m veletet is képesek végezni. Támogatják a cirkuláris címzést sor (FIFO) típusú tárolók megvalósítására.
A véges számábrázolás hatása A digitális számítógépekben az adatokat csak véges pontossággal tudjuk ábrázolni, tehát megszabott a legkisebb és legnagyobb ábrázolható szám nagysága. Ez a tulajdonság fixpontos aritmetikával rendelkez processzorok esetében különösen kritikus. A véges számábrázolás így a sz r jeleinek és együtthatóinak dinamikatartományát mindkét oldalról behatárolja. A számítási pontosság növelésével persze ez a dinamikatartomány kiterjeszthet , de ez a végrehajtási id növekedésével jár, amit az elérend mintavételi frekvencia korlátoz. A véges számábrázolási pontosság kétféle következménnyel jár. A kis számok tartományában a kvantáltság okozta nemlinearitás az együtthatók szempontjából a megvalósított sz r frekvenciatartománybeli átviteli jellemz inek torzulásaként nyilvánul meg, a jelek tekintetében a kvantáltság zajszer additív komponensként, úgynevezett kvantálási zajként jelentkezik, ennek jellemz je, hogy csak a jellel együtt lép fel. A nagy számok tartományában a túlcsordulás jelent problémát, az együtthatók tekintetében ez természetesen nem jelentkezik, a jelek szempontjából viszont kritikus [16]. FIR sz r k esetén a kvantáltság csak a fent említett zavarokat okozza, a túlcsordulás megel zhet az együtthatókészlet megfelel normálásával. Ha mégis fellép valamilyen okból, akkor is csak az átviteli függvény rövid idej tranziens eltorzulását okozza, ami a túlvezérl dés megsz nésével automatikusan helyreáll. IIR sz r k esetén a kvantáltság a fent említett problémákon kívül a visszacsatolás miatt létrehozhatja a zérus bemenet határ-oszcilláció jelenségét. Ekkor a sz r azonosan zérus bemeneti jel mellett sem szolgáltat azonosan zérus kimeneti jelet, hanem tipikusan a legalsó biteken kis amplitúdójú oszcillációba kezd. Ez a jelenség a kis jelszinteknél meglév kis együttható-felbontás okozta nemlinearitás következménye, a nemlineáris rendszer sajátértékei kis amplitúdóknál az egységkörre kerülnek (az egységkörön kívülre nem kerülhetnek, hiszen akkor a jelszint megn ne, és így megsz nne a határ-oszcilláció oka). A túlcsordulás jelenti a másik nagy problémát az IIR sz r k esetében, hiszen ilyenkor a visszacsatolással egy er sen nemlineárisan torzított jel kerül vissza a hálózat bels állapotváltozóiba, ami a sz r végleges használhatatlanná válását okozhatja. Ezért túlcsordulás esetén azonnal alaphelyzetbe kell állítani a sz r összes állapotváltozóját, így a kimeneti jel átmenetileg torzul ugyan, de a sz r m köd képes marad. Sajnos az IIR sz r k esetén már ismertetett okokból nem lehet az együtthatókészletet megváltoztatni, így a számábrázolást kényszerülünk a sz r höz igazítani, de teljes mértékben ez sem lehet garancia a túlcsordulás megel zésére. IIR sz r k lebeg pontos környezetben való elkészítése jóval el nyösebb a fent említett problémák miatt, bár bizonyos problémák ekkor is adódhatnak. Általánosan fixpontos környezetben 810 körüli fokszám valósítható meg a számítási pontatlanságok halmozódása miatt, de lebeg pontos környezetben sem n het a fokszám 14-16 fölé. FIR sz r knél az 1024-körüli fokszámok sem mennek ritkaságszámba.
Diplomaterv
- 48 -
2001 tavasz
IIR sz r kanonikus megvalósítási módok
A továbbiakban csak IIR sz r k megvalósításáról lesz szó, mivel a kit zött feladatban ez szerepelt. Az eredmények természetesen általában egyszer sítések után átvihet k FIR sz r k esetére is. A komplex átviteli függvény együtthatóival közvetlenül létrehozható sz r struktúrákat kanonikus, más szóval direkt megvalósításoknak nevezzük. A következ ábrákon két általános direkt megvalósítás látható [6], [16].
a0
-b1 -b2 -b3
-b 1 -b 2 -b 3 -b 4 -b m
an
an
a4
a4
a3
a3
a2
a2
a1
a1
6.1. ábra. Direkt I megvalósítás.
-b4
s
y
-bm
a0
s
y
6.2. ábra. Direkt II megvalósítás.
A 6.1. ábrán látható megvalósítás a rendszeregyenlet egyenes leképezése jelfolyam-hálózatra. A 6.2. ábra jelfolyam-hálózata ekvivalens az el z ábráéval, ez számítással is könnyen igazolható, de a jelfolyam hálózatok algebrájának ismerete [4], [5], [7] alapján az els hálózat középs összegz csomópontjai szétbonthatók darabonként két összegz csomópontra, így a hálózat szétesik két különálló részre (az egyik egy tiszta AR a másik egy tiszta MA folyamatot reprezentál), majd az így keletkezett lineáris hálózatrészek sorrendjét felcserélve és a késleltet ket összevonva adódik a második jelfolyam hálózat. A második jelfolyam hálózat a legkedvez bb direkt megvalósítási forma DSP, vagy egyéb programból történ megvalósítás esetén, a szükséges állapotváltozók száma a többi kanonikus hálózathoz viszonyítva ekkor minimális, a komplex átviteli függvény számlálójának és nevez jének fokszáma közül a nagyobbik. IIR sz r ket nagy fokszám esetén ritkán valósítanak meg direkt formában, mivel ez az elrendezés érzékeny a számábrázolási pontosságra, pontosabban érzékenység-paraméterei közepesnek mondhatók. Inkább els és másodrend kanonikus hálózatok kaszkád kapcsolását alkalmazzák, egyenként könnyebben vizsgálhatók ezek az egyszer bb hálózatok stabilitás szempontjából. S t, a zérus bemenet határ-oszcilláció vizsgálatára csak ilyen egyszer esetben vannak módszerek. El szeretettel alkalmaznak még egyéb más el nyös sz r elrendezéseket, ilyenek például a rezonátoros sz r k, ezek érzékenység-paraméterei kimagaslóan jók. Azonban a jelenlegi célnak a direkt megvalósítás éppen megfelel, és a rezonátoros sz r k tárgyalásának nincsenek meg a terjedelmi lehet ségei sem [16].
Megvalósítási problémák PIC17C756 esetében Az els probléma, hogy a PIC17C756 els sorban mikrokontroller és nem DSP. Bár rendelkezik rokon vonásokkal, valamilyen átmenetnek tekinthet a mikrokontrollerek és DSP-k között, mégis közelebb áll a mikrokontrollerekhez. Hasonlóság a DSP-k irányába, hogy található a processzorban hardverszorzó, amely egy utasításciklus alatt képes két el jel nélküli egész bináris számot összeszorozni, igaz ez a hardverszorzó csak részben tartozik a processzor magjához, félig még perifériaként kell kezelni. További hasonlóság, hogy a processzor lehet séget ad indirekt címzésre, de Diplomaterv
- 49 -
2001 tavasz
cirkuláris címzésre már nem. A sz r létrehozásához szükséges alapelemeket ezekb l a meglév „épít kockákból” kell felépíteni. Mivel IIR sz r k esetében a 8 bites el jel nélküli számábrázolás teljességgel megengedhetetlen az együtthatók és a jelek szempontjából egyaránt, el kell készíteni egy szorzóalgoritmust, amely a 8 bites szorzóra támaszkodva elvégzi 16 bites el jeles számok szorzását. Egy ilyen programkód az utasításkészlet tárgyalásánál már részletezésre került ugyan, de itt is közöljük egy rövidebb, csak a szükséges eredményeket el állító változatát.
mpyss16 movfp arg1l,wreg mulwf arg2l movpf prodh,res0 movfp arg1h,wreg mulwf arg2h movpf prodl,res1 movpf prodh,res2 mulwf arg2l movfp prodl,wreg addwf res0,1 movfp prodh,wreg addwfc res1,1 movlw 00h addwfc res2,1 movfp arg2h,wreg mulwf arg1l movfp prodl,wreg addwf res0,1 movfp prodh,wreg addwfc res1,1 movlw 00h addwfc res2,1 btfss arg1h,7 goto arg1pos movfp arg2l,wreg subwf res1,1 movfp arg2h,wreg subwfb res2,1 arg1pos btfss arg2h,7 goto endmpy movfp arg1l,wreg subwf res1,1 movfp arg1h,wreg subwfb res2,1 endmpy return (res2):(res1):(res0)-ban
;arg1l*arg2l ;Csak a fels bájtra van szükségünk ;arg1h*arg2h
;arg2l*arg1h
;arg2h*arg1l
;arg1 < 0? ;Nem, nincs szükség korrekcióra ;Igen, korrigálni kell ;result := result - arg2
;arg2 < 0 ? ;Nem, nincs szükség korrekcióra ;Igen, korrigálni kell ;result := result - arg1
;visszatérés, az eredmény
Ez a programrészlet az egy utasításciklus alatt végrehajtódó szorzástól már láthatóan igen messze van végrehajtási id ben. Két pozitív számot 28, két negatív számot 36 utasításciklus alatt szoroz össze, ez a végrehajtási idejének két széls értéke. A cirkuláris címzés hiányát is programból lehet pótolni, erre a következ kben láthatunk megoldást.
A sz r megvalósítása
A III.2. ábrán látható hálózat aktuális kimeneti értékének számítása két egyenletre bontható: x[ k ] = s[ k ] +
m j=1
(− b )∗ x[k − j] j
y[ k ] =
n i=0
a i ∗ x[ k − i]
Ezek vektoriális alakja: Diplomaterv
- 50 -
2001 tavasz
x[ k − 1]
[
]
x[ k ] = s[ k ] + b[1] b[2] ... b[ m] ∗ T
x[ k ]
x[ k − 2]
[
]
y[ k ] = a[0] a[1] ... a[ n] ∗
...
T
x[ k − m]
x[ k − 1] ...
x[ k − n]
Az együtthatóvektort célszer a mikrokontroller programmemóriájában tárolni és onnan beolvasni, a bels x változó vektora pedig egy adatmemóriában létrehozott cirkuláris bufferben tárolható kényelmesen. A skaláris szorzatok számításának módját a következ 6.3. ábra szemlélteti.
Cirkuláris buffer
Együtthatótáblázat
*
Σ 6.3. ábra. A skaláris szorzatok számítása. A sz r programban kétféle számábrázolási mód alkalmazása vált szükségessé. Az els ben, a bemeneti adatok és együtthatók esetén a 16 bites adatszó fels 4 bitje tartalmazza az el jeles egészrészt, az alsó 12 bit a törtrészt. A másik számábrázolási mód bevezetését az tette szükségessé, hogy két el bb megadott formátumú szám szorzata más formátumban keletkezik. Ezt szemlélteti a következ 6.4. ábra.
Adatok és együtthatók:
* Akkumulátor: 6.4. ábra Számábrázolási módok a sz r ben.
Diplomaterv
- 51 -
2001 tavasz
Az eredményben a kettedespont helye eltolódik, ami 8 bitnyi egészrészt és 24 bitnyi törtrészt jelent. A szorzat eredményének alsó bájtját a számítások során figyelmen kívül hagyjuk. Ha ezt a számformátumot azonnal vissza szeretnénk alakítani az eredeti formátumra, akkor minden szorzás után az eredmény mind a három bájtját négy bittel balra kellene léptetnünk, és az alsó 4 bit levágása el tt kerekítenünk, ami majdnem annyi végrehajtási id t venne igénybe mint maga a szorzás, tehát megengedhetetlen pazarlás lenne. Viszont a szorzatok összegzését gond nélkül el tudjuk végezni a szorzás eredményének számformátumában is, így lett az akkumulátor 24 bit hosszúságú. Ez a megoldás azzal a járulékos el nnyel is jár, hogy összegzés közben nagyobb dinamikatartományt biztosíthatunk a bels állapotváltozónak. Természetesen a bels x állapotváltozó aktuális értékének tárolásánál és a kimenet átadásakor vissza kell térnünk az eredeti számformátumra. Ezután tekintsük át hogyan néz ki a sz r program többi lényegi része. A skaláris szorzást végz „multiply and accumulate”-szer programrészlet a cirkuláris buffer kezelésével:
mpyacc movwf incf
order order,1
acclop clrwdt movpf movpf tlrd tablrd call movfp addwf movfp addwfc movfp addwfc btfsc call
indf0,arg1l indf0,arg1h 0,arg2l 1,1,arg2h mpyss16 res0,wreg acc0,1 res1,wreg; acc1,1 res2,wreg; acc2,1 ov inifilt
;x[k-i]*bi-k összegzése ;Volt t lcsordulás? ;Igen, alaphelyzetbe állítás
fsr0 noendm2 bufsta fsr0
;A buffer végére értünk? ;Nem, még folytathatjuk ;Igen, a mutatót alaphelyzetbe kell állítanunk ;
tstfsz goto movlw movwf
noendm2 decfsz order,1 goto acclop movfp andlw
acc2,wreg 0f8h
tstfsz wreg goto nonzero return nonzero addlw 08h tstfsz wreg call inifilt return
;Fokszám eltárolása a ciklusszámlálóba ;együtthatók száma = fokszám + 1 ;Watchdog timer törlése ;A szorzás egyik argumentuma ;x[k-i] ;A másik argumentum ;(-bi) vagy ai ;A x[k-i]*(-bi or ai) szorzás végrehajtása ;Az eredmény hozzáadása az akkumulátorhoz ; ;
;Ciklusszámáláló 0? ;Nem, folytatnunk kell az összegzést ;Megvizsgáljuk az akkumulátor fels 4 bitjét a ;túlcsordulás vizsgálatára, ha nincs túlcsordu;lás, a fels 4 bit egyenl a harmadikkal. ;Mind nulla? ;Nem, lehet hogy negatív. ;Visszatérés. ;0F8h+08h=00h ;Mind egyes volt? ;Túlcsordulás történt, törölni kell mindent ;Visszatérés a hívóhoz
A számformátumok közötti átalakítást végz programok: inp2acc bcf btfsc bsf rrcf Diplomaterv
carry acc2,7 carry acc2,1
;s[k] az (acc2):(acc1) szóban van. Át kell ala;kítanunk az akkumulátor formátumára. ; ;Négyszer jobbra kell tolnunk el jelesen ezt a - 52 -
2001 tavasz
rrcf rrcf
acc1,1 acc0,1
;számot. ;>> acc
bcf btfsc bsf rrcf rrcf rrcf
carry acc2,7 carry acc2,1 acc1,1 acc0,1
; ; ; ;>> acc ; ;
bcf btfsc bsf rrcf rrcf rrcf
carry acc2,7 carry acc2,1 acc1,1 acc0,1
; ; ; ;>> acc ; ;
bcf btfsc bsf rrcf rrcf rrcf
carry acc2,7 carry acc2,1 acc1,1 acc0,1
; ; ; ;>> acc ; ;
return acc2out movlw addwf movlw addwfc addwfc
;Visszatérés. (26 Clocks) 08h acc0,1 00h acc1,1 acc2,1
;Az akkumulátor kerekítése levágás el tt, a pon;tosság növelése érdekében.
bcf rlcf rlcf rlcf
carry acc0,1 acc1,1 acc2,1
;Számformátum visszalakítása (4 balra tolás) ;<< acc
bcf rlcf rlcf rlcf
carry acc0,1 acc1,1 acc2,1
bcf rlcf rlcf rlcf
carry acc0,1 acc1,1 acc2,1
bcf rlcf rlcf rlcf
carry acc0,1 acc1,1 acc2,1
return
;<< acc
;<< acc
;<< acc
;Visszatérés. (19 Clocks)
És végül a mindezeket koordináló vezérl program: iirfilt clrwdt
Diplomaterv
;Watchdog timer törlése
- 53 -
2001 tavasz
movlr bcf bsf movlw movwf movlw movwf tablrd
0 fs1 fs0 low den tblptrl high den tblptrh 1,1,wreg
;Indirekt címzés a programmemóriába a komplex ;változós átviteli függvény nevez jének els ;(b1) együthatójához a TBLPTR (Table Pointer) ;segítségével. ;Dummy read a TBLAT (Table Latch) feltöltéséhez
movfp incf incf tstfsz goto movlw movwf
bufptr,fsr0 fsr0,1 fsr0,1 fsr0 bufpok bufsta fsr0
;Cirkuláris buffer aktuális pozíciójának ;kiválasztása. ;Az FSR0 x[k-1]-re mutat ;A buffer végére értünk? ;Nem, folytathatjuk ;Igen, vissza kell állni az elejére ;
bufpok clrf call movlw decf
ptrok
acc0,1 inp2acc denord wreg,1
;GPR Bank 0 kiválasztása ;post auto-increment mód kiválasztása FSR0-hoz
call call
mpyacc acc2out
;s[k]-t át kell alakítani ;A nevez fokszáma WREG-be ;A nevz els együtthatója nem számít ;(b0=1 csak y[k] szimbóluma) ;Az új x[k] számitása a (-bi)x[k-i] összegb l ;Akkumulátor átalakítása az x[k] jel formátumára
movfp movfp movfp
bufptr,fsr0 acc1,indf0 acc2,indf0
;Az FSR0 x[k-n-1]-re mutat ;x[k]tárolása erre a helyre ;a cirkuláris bufferbe
movlw movwf movlw movwf tablrd
low num tblptrl high num tblptrh 1,1,wreg
;Indirekt címzés a programmemóriába a komplex ;változós átviteli függvény számlálójának els ;(a0) együtthatójához a TBLPTR (Table Pointer) ;segítségével. ;Dummy read a TBLAT (Table Latch) feltöltéséhez
movfp
bufptr,fsr0
clrf clrf clrf
acc0,1 acc1,1 acc2,1
;Akkumulátor törlése az összegzés el tt.
movlw call call
numord mpyacc acc2out
;A számláló fokszáma WREG-be ;Új y[k] számítása (ai)x[k-i] összegb l ;Akkumulator átalakitása y[k] signal formátumára
movlw cpfseq goto clrf
bufsta bufptr ptrok bufptr,1
;A mutató a buffer elején van?
decf decf
bufptr,1 bufptr,1
return
;Az FSR0 x[k]-ra mutat
;Nem, csökkenthetjük ;Igen, utolsó pozíció után 2-re kell állítanunk ;A mutató x[k-n]-re állítása
;Visszatérés a sz r programból
A teljes futtatható programlista megtalálási helye az F.4.1. függelékben adott, fentiek csak kiragadott részletek.
Diplomaterv
- 54 -
2001 tavasz
A futási eredmények A futási eredmények értékeléséhez elkészült egy Turbo Pascal nyelv programrendszer, amely aszinkron soros vonalon képes mintákat küldeni a fejleszt rendszerben futó sz r programnak, majd fogadni tudja a sz r program által visszaküldött sz rt mintákat. Az összehasonlítás kedvéért szimulálja is a fejleszt rendszerben futó sz r t lebeg pontos környezetben, és a kirajzolja a képerny re a bemeneti jeleket, a mikrokontroller által visszaküldött kimeneti jelet, és a szimulátor által számolt kimeneti jelet, ezen felül mindezen jelek 64 pontos radix 2 FFT algoritmussal [16], [18] számított diszkrét Fourier-transzformáltjának abszolút értékét is. A teljes programrendszer megtalálható a mellékletben az F.4.1. függelékben megadott helyen. Az 6.5. ábrán a sz r és a szimulátor egységimpulzusra adott válasza látható, és ezek diszkrét spektruma (a sz r k átviteli karakterisztikája). A fels két ábra a sz r impulzusválaszát és átviteli karakterisztikáját mutatja, az alsó ábrán a szimulált sz r re vonatkozóan látható ugyanez. A szürke szín vonal a bemen jelet ábrázolja, mind az id , mind a frekvenciatartományban, a zöld görbe a kimeneti jel grafikonja. Az 6.6. ábrán egy magzati szívhangminta egy részlete látható, és annak megsz rt változata, az el z ábrával egyez elrendezésben.
6.5. ábra. A sz r és szimulátorának impulzusválasza.
Diplomaterv
- 55 -
2001 tavasz
6.6. ábra Sz rt magzati szívhangminta részlet. Mindkét esetben igen jól együttfutnak a mikrokontrollerrel számolt, és a lebeg pontos környezetben szimulált sz r vel kapott görbék. Tehát a számítási hibák halmozódása nem jelent s, ez hosszabb minta sz résével is megvizsgálásra került. A programkód végs paraméterei a következ k. A futási id hozzávet leg 920 utasításciklus, a kód további optimalizálásával legfeljebb 10-20% csökkenés érhet el. A fenti hatodfokú sz r esetén ez 33MHz-es órajelet tekintve 8.25MIPS utasításvégrehajtási sebességnél körülbelül 9kHz-es maximális mintavételi frekvenciát tesz lehet vé. FIR sz r esetén a számításigény kevesebb mint a felére csökken, tehát nem túl nagy mintavételi frekvenciák esetén közepes fokszámú sz r is beprogramozható. Kijelenthetjük, hogy a vizsgált mikrokontroller nem túl nagy mintavételi frekvenciákon szolgálhat jelfeldolgozási feladatok megoldására lényegében egyetlen áramköri tok felhasználásával.
Diplomaterv
- 56 -
2001 tavasz
6.2. Magzati szívhang feldolgozó rendszer A rendszer feladata A szívhangfelismer rendszer feladata a magzati pulzusszám id beli nyomkövetése, és grafikus megjelenítése a szülészorvos tájékoztatására. A kijelzés módjának célszer en igazodnia kell az orvosi gyakorlatban már megszokott, és bevált ultrahangos m szerek kijelzési módjához. A m szer kifejlesztésének egyik mozgatórugója éppen az ultrahangos vizsgálati készülékek esetleges káros mellékhatásainak kiküszöbölése, az eltér m ködési elvb l adódóan. Az ultrahangos vizsgálati m szerek minden esetben egy impulzusszer , koncentrált mechanikai hullám, energianyaláb kibocsátásával, és a visszaver d komponensek érzékelésével, a Doppler-effektus kihasználásával igyekeznek információt szerezni az él szövetek összetételér l, és pillanatnyi állapotáról. Ezzel az megfigyelésen kívül aktív beavatkozás is létrejön az él szervezetben. A nagyfrekvenciás mechanikai hullámok gyökeresen másképp viselkednek az emberi szervezetben található nemlineáris anizotrop anyagokban terjedési viszonyaikat (haladási sebességüket és f leg csillapításukat) tekintve, mint például a leveg ben terjed hanghullám formájában. Hatásuk az emberi szervezetre a mai napig nem teljesen tisztázott. Az akusztikus magzati szívhangfelismer m szer ezzel szemben teljesen passzív m ködés , csupán az anya hasfalán érzékelhet hangjelekre (a magzat szíve által keltett mechanikai hullámokra, amelyek elérik az anya b rfelületét, és rezgésbe hozzák azt, majd onnan elsugárzódnak és a leveg ben nyomásingadozást hoznak létre) támaszkodik, így semmilyen befolyással nincs az anya és a magzat szervezetére. (A mikrofon és a hozzá tartozó akusztikai jelformáló hálózat akusztikus bemeneti impedanciájától eltekintve.) Így a szívhangfelismer m szer valójában egy jelfeldolgozó rendszer, amely feladata a gyakran nagy mértékben zavarokkal, zajokkal terhelt - hangjelekben rejt z bels meghatározottságok alapján nagy biztonsággal, és kell pontossággal kikövetkeztetni a magzati pulzusszámot, illetve a magzati szívdobbanások között eltelt id t, amely a hangjelben fellép periodicitás formájában nyilvánul meg.
A rendszer jellemz i Az ultrahangos készülékekkel szükséges hasonlóság két megkötést jelent a megvalósítás szempontjából: a mérési id tíz perc, az ehhez tartozó kirajzolandó pontszám 480. Ebb l következ en egy képponthoz tartozó minták értékelésére 10 min∗60
sec sec 480pixel = 1.25 min pixel
id áll rendelkezésre. A kijelz n az id függvényében a magzat percenkénti pulzusszámát kell megjeleníteni, ezt a görbét az orvosi gyakorlatban FHR (Foetal Heart Rate) görbének nevezik, a továbbiakban mi is így hivatkozunk rá. Az átlagos percenkénti magzati pulzusszám 141 körül van. Ha a mintavételi id t Ts = 3m sec -ra választjuk, akkor az egy perc alatt történt mintavételek száma: 1000
sample sec m sec m sec ∗60 = 20000 3 sec min sample min
Az átlagos 141-es pulzusszám esetén két szívdobbanás között eltelt id alatt sample 1 m sec m sec beat sample beat sec 3 141 141 = 1000 ∗ 60 = 20000 ≈ 141 sample sec min min min min Ts ∗ f beat beat
mintavétel történik, tehát az átlagos magzati pulzusszámhoz közel azonos számú minta tartozik. A gyakorlatban 80 és 200 közötti FHR értékek mérésének van értelme. Ezeknél a pulzusszámoknál az egy szívdobbanáshoz tartozó mintaszám: 20000
sample sample sample beat sample beat = 250 ; 20000 = 100 . 80 200 min min min min beat beat
Egy képponthoz tartozó információ feldolgozására
Diplomaterv
- 57 -
2001 tavasz
10 min∗60
sec min
480pixel∗3
sample m sec ≈ 416.6 sample pixel
minta áll rendelkezésünkre. Ha a tíz perces mérési id t kvarcpontossággal szeretnénk tartani, akkor minden harmadik képpont kiszámításához 416, a többihez 417 képpontot használhatunk fel. A teljes mérés ideje alatt 60
sec ∗10 min min
3
m sec = 200000sample sample
mintavétel történik.
Néhány valószín ségelméleti és matematikai statisztikai alapfogalom
El ször tekintsünk át néhány matematikai fogalmat, amelyek segítségünkre lehetnek a magzati szívhangok feldolgozásában, a hangjelben meglév periodicitások felismerésében. Másrészt egyúttal egyértelm vé tesszük a fogalmakat és jelöléseket a további tárgyalás megkönnyítésére [4], [5], [7], [13], [14], [15], [19]. A továbbiakban digitális megvalósításból következ mintavételezés miatt diszkrét idej változókra, id sorokra szorítkozunk. A mintavételi id höz tartozó index jelölésére (az id sor elemeinek azonosítására), a statisztikában megszokott alsó index helyett a diszkrét idej hálózatok elméletében szokásos változó neve utáni szögletes zárójeles jelölést alkalmazzuk. Az els és legegyszer bb fogalom a várható érték vagy els momentum, ennek valószín ségelméleti definíciója és annak statisztikai megfelel je, amit egyszer en átlagnak nevezünk:
{
}
x : = M x[ k ] = lim
N →∞
N 1 x[ k ] N + 1 k =0
Megjegyzend , hogy a fenti és alábbi egyenletekben a második, valószín ségelméleti és statisztikai fogalom közé tett egyenl ségjel valószín ségelméleti szempontból értend , tehát amennyiben a jobb oldalon az elemszám végtelenhez tart, az egyenl ség igazságának valószín sége egyhez konvergál. A második fogalom a szórásnégyzet, variancia, vagy második centrális momentum, ennek valószín ségelméleti definíciója, és annak statisztikai megfelel je, amit az átlagtól való átlagos négyzetes eltérésnek is nevezhetünk, a következ :
{
σ( x[ k ]) : = Var ( x[ k ]): = M ( x[ k ] − x ) 2
2
} = lim N1+ 1 N →∞
N k =0
( x[ k ] − x )2
Ezután vizsgáljuk meg, hogy két id sor egymástól való eltérésének számszer sítésére milyen módszerek állnak a rendelkezésünkre. Az els ilyen mér szám a kovariancia. A kovariancia egy szórásnégyzet jelleg mér szám, azt jellemzi, hogy a két id sor között milyen lineáris kapcsolat áll fenn, azaz az egyik id sor milyen lineáris transzformációja becsli a legjobban a másik id sort (az additív konstans eltéréseket az átlagok kivonásával semlegesítjük). Az el z fejezet ismeretében azt is mondhatjuk, hogy az egyik jelet a másik id ben visszafordított változatával lineárisan sz rjük, ez egy fontos analógia a sztochasztikus és determinisztikus jelek analízise között. Más szóval, ha a két mintasorozatot vektoroknak tekintjük, azt is mondhatjuk, kiszámítjuk az egymásra vett mer leges vetületük hosszát, ilyen szempontból ez valóban a hasonlóság, illetve az ortogonalitás egy mér száma, de nem függ semmiféle el re megkötött ortogonális függvényrendszert l. (Persze minden attól függ, hogyan értelmezzük a normát, illetve a skaláris szorzatot.)
{
}
1 N ( x[ k ] − x)( y[ k ] − y ) N →∞ N + 1 k =0
γ ( x[ k ], y[ k ]): = Cov( x[ k ], y[ k ]): = M ( x[ k ] − x )( y[ k ] − y ) = lim
A második ilyen mér szám az átlagos négyzetes eltérés, vagy négyzetes középben vett távolság: x, y : =
{(
)2 } =
M x[ k ] − y[ k ]
1 N 2 x[ k ] − y[ k ] N + 1 N →∞ k =0 lim
(
)
Vizsgáljuk meg, milyen kapcsolat áll fenn a két mér szám között. Nulla várhatóérték id sorokra a kovariancia kifejezése a következ :
Diplomaterv
- 58 -
2001 tavasz
1 N x[ k ] y[ k ] N →∞ N + 1 k =0
Cov( x[ k ], y[ k ]) = M{ x[ k ], y[ k ]} = lim A következ azonosságot alkalmazva: x+y 2
(
2
)
x− y 2
−
Cov x[ k ], y[ k ] = lim
N →∞
x[ k ] + y[ k ] 1 2 N + 1 k =0
N →∞
= xy
1 N x[ k ] y[ k ] = N + 1 k =0
2
N
= lim
2
− lim
N →∞
1 N x[ k ] − y[ k ] 2 N + 1 k =0
2
A második tag megegyezik az átlagos négyzetes eltérés fenti kifejezésének négyzetével, egy egynegyedes szorzótényez t l eltekintve. Ezt kivonjuk az els tagból, amely a két id sor tagonként képzett átlagai négyzetösszegének átlaga. Ez egy mindig pozitív szám. Tehát ahol a kovarianciának maximuma van ott a négyzetes középben vett eltérésnek minimuma. A fenti összefüggések ismeretében megadhatunk analóg módon hasonló általánosabb kifejezéseket is: lim
N →∞
1 N x[ k ] − y[ k ] N + 1 k =0 2
l
1 N x[ k ] + y[ k ] 1 N x[ k ] − y[ k ] − lim lim 2 2 N →∞ N + 1 k = 0 N →∞ N + 1 k = 0 l
l
A fentiek mind alkalmasak a két id sor egymástól való eltérésének számszer sítésére, csak az adott feladat ismeretében dönthet el, melyik a legalkalmasabb az adott jelleg id sor esetében. Sajnos a tapasztalatok szerint magzati szívhangminták esetében nem adható ideális kitev a fenti kifejezésekben, egyik esetben egyik, másik esetben másik érték lenne optimális. Ez els sorban a környezeti tényez kt l, illetve az akusztikai átviteli úttól függ. A különböz kitev értékek más-más nemlineáris leképezést jelentenek, így az amplitúdó arányokat változtatják meg, ami jelentheti a kisebb amplitúdójú zajok hatékonyabb elnyomását, de az esetenként kisebb amplitúdóval megjelen szívhang elnyomását is egy esetleg hangosabb zaj ellenében. A kovariancia és a négyzetes középben vett távolság között még egy fontos különbségre fel kell figyelnünk, miszerint a kovariancia várható értéke nulla, a négyzetes középben vett távolság középértéke pedig egy igen nagy pozitív szám lehet, ami ráadásul függ a becslésre használt minták számától. Az id sorok bels meghatározottságának, periodicitásának vizsgálatára hatékony módszer, ha a fenti kifejezésekkel azt vizsgáljuk, hogy milyen kapcsolat van az id sor és az id ben adott mértékben eltolt változata között. Ekkor az id sor egyfajta önhasonlóságának egy mértékét kapjuk. Fontosságuk miatt ezek a mér számok külön nevet viselnek. Az id sornak és az n mintavételi id vel eltolt változatának kovarianciáját az id sor n -ed rend auto-kovarianciájának nevezzük:
γ ( x[n]): = Cov( x[ k ], x[ k + n]): = M = lim
N →∞
1 N +1− n
N −n k =0
N =n
x[ k ] − x
k =0
N =n
x :=
k =0
N
x[ k + n] − x
k =n
1 N + 1− n
N −n k =0
N =n
x[ k ] − x
k =0
= lim
N →∞
N
x[ k ]; x : = k =n
N
x[ k + n] − x
1 N +1− n
=
k =n
N −n k =0 N
N =n
x[ k ] − x
k =0
N
x[ k + n] − x
k =n
1 x[ k ] N + 1 − n k =n
A fenti kifejezés láthatóan egy id sort egy másik id sorra képez le, így id sorokon értelmezetett függvénynek is tekinthet . A paraméter (eltolás) nulla értéke esetén éppen az id sor varianciáját kapjuk vissza, azaz a szórásnégyzetet, ez egyben az auto-kovariancia sorozat (egyik) maximuma is. Jobban használható jellemz t nyerhetünk az auto-kovarianciánál, ha normáljuk azt. Így egy egységnyi maximális amplitúdójú id sort nyerünk, ezt a diszkrét idej sztochasztikus folyamat autokorreláció függvényének (sorozatának) nevezzük, ennek definíciója:
Diplomaterv
- 59 -
2001 tavasz
r ( x[n]): =
Cov( x[ k ], x[ k + n])
{(
Var ( x[ k ])∗Var ( x[ k + n])
)(
M x[ k ] − x1 x[ k + n] − x2
=
N −n
1 N + 1− n
= lim
N →∞
1 N + 1− n
N −n
N −n
∗ M x[ k + n] − x
N −n 2 k =0
k =0
x[ k + n] − x
k =0
x[ k ] − x
k =n
N
x[ k ] − x
k =0
k =n
N N 1 x[ k ] − x N + 1 − n k =n k =n
∗
=
N
M x[ k ] − x
k =0
N −n
)}
2
A fentihez hasonló módon a kovariancia kifejezésének analógiájára definiálható két id sor keresztkorreláció id sora, illetve függvénye is:
(
(
)
Cov x[ k ], y[ k ]
)
Cor x[ k ], y[ k ] : =
(
)
Var ( x[ k ])∗Var y[ k ]
{
(
M ( x[ k ] − x ) y[ k ] − y
=
M { x[ k ] − x } ∗ M y[ k ] − y
1 N ( x[k ] − x ) y[ k ] − y N + 1 k =0
(
= lim
N →∞
{
)}
}
=
)
1 N 1 N 2 ( x[k ] − x ) 2 ∗ y[ k ] − y N + 1 k =0 N + 1 k =0
(
)
Ezek mintájára természetesen definiálható a négyzetes középben vett távolsággal is hasonló jellemz . Viszont a négyzetes középben vett távolsággal kapcsolatban fent említettük, hogy átlaga igen nagy, id ben változó pozitív szám lehet, a nulla értéket a két id sor teljes egyezése esetén veszi csak fel. Tehát el nyének mondható, hogy csak pozitív számokat ad eredményül. Viszont a számok tárolása, és kiszámítása nagy szószélességet igényel, a mutató átlagértékét mindig az éppen vizsgált mintarészlet tulajdonságai döntik el, ennek feldolgozása, az átlag ingadozásának követése kellemetlen feladat, nagyon nehezen készíthet hozzá megbízható, robusztus algoritmus, ami kedvez tlen jellemvonás. A kovariancia definíciójának van még egy nevezetes tulajdonsága, amely természetesen a korreláció sorozatokra is érvényes, hiszen gyengén stacionárius esetben ezek csak konstans szorzótényez ben különböznek egymástól. Ugyanis a kovariancia bizonyos mértékig invariáns a lineáris m veletekre, lineáris sz résre nézve. Ezt a következ kkel láthatjuk be. Vessük össze a lineáris sz rés és a kovariancia definícióját, és alkalmazzuk a fentebb is említett analógiát [4], [5], [12]. Zérus várható érték jelekre az autokovariancia sorozat definíciója (kicsit más felfogásban, ezzel az alakkal kés bb még foglalkozunk):
N ∞ 1 x[ k ] x[ k + n] = x[ k ] x[ k + n] N →∞ 2 N + 1 k =− N k =−∞
γ [ n] = lim
Az eredeti jelet egy adott sz r n átvezetve:
y[ k ]:= w[ k ] ⊗ x[ k ] =
Az autokovariancia sz r együtthatókkal:
függvényt
∞
w[ l ]∗ x[ l − k ]
l =−∞
lineáris
sz résnek
alávetve
ugyanezekkel
a
w[ n] ⊗ γ [ n] =
∞
w[ m]∗ γ [ n − m] =
m =−∞ N
∞ l =−∞
N 1 x[ k ] x[ k + n − m] = N →∞ 2 N + 1 k =− N
w[ w]∗ lim
∞
N 1 1 x[ k ]∗ w[ m] x[ k + n − m] = lim x[ k ] y[ k + n] N →∞ 2 N + 1 N →∞ 2 N + 1 k =− N m =−∞ k =− N
= lim
Tehát a bemeneti id sor auto-kovariancia sorozatát sz rve a bemeneti és kimeneti id sor kereszt-kovariancia sorozatát kaptuk, ez módot ad a sz r impulzusválaszának meghatározására az autokorreláció (auto-kovariancia) és keresztkorreláció (kereszt-kovariancia) sorozatok ismeretében dekonvolució segítségével. Ennek a módszernek igen nagy a gyakorlati jelent sége, és széles körben alkalmazzák. A bemeneti jel általában kétérték széles spektrumú álvéletlen zaj, az autokorreláció függvény számítása ekkor nagyon leegyszer södik, a módszer analóg a Dirac-impulzusokkal gerjesztett rendszer mérésével, de annál jóval hatékonyabb. Nemlineáris rendszerek esetében többérték jelet kell alkalmazni.
Diplomaterv
- 60 -
2001 tavasz
Ezután a kis kitér után térjünk rá a magzati szívhangok vizsgálatára.
A magzati szívhangminták jellemz i A véletlenszer folyamatok felosztására a következ fogalmak használatosak [4], [5], [7], [13], [14], [15], [19]. Ergodikus egy sztochasztikus folyamat, amennyiben a különböz megvalósulásaira (realizációira) vonatkozó úgynevezett sokaságjellemz i megegyeznek az id beni jellemz ivel. Ez a magzati szívhangminták esetében azt jelentené, hogy minden magzat szívhangmintáinak statisztikai jellemz i megegyeznek. Ez szigorú matematikai értelemben természetesen nem igaz, hiszen akkor nem lenne szükség semmiféle m szerre. Ellenben szerencsére fellelhet k hasonló jellemvonások, hiszen ezek hiánya éppen a feladat megvalósíthatatlanságát vonná maga után, illetve minden magzathoz egyedi m szerre lenne szükség. Gyengén stacionárius egy sztochasztikus folyamat, ha mintáinak várható értéke, szórása, és autokorreláció függvénye független az id t l. Ez a feltételezés szigorú matematikai szempontból szintén nem teljesül, bár a várható értékre és a szórásra a konkrét fizikai megvalósítás alapján tehetünk megállapításokat. Az autokorreláció függvény rövid id szakokra közel állandónak tekinthet , hiszen a magzat szívverésének ritmusa nem változhat végtelenül gyorsan. Ha az autokorreláció függvény id ben változatlan lenne, akkor a mérés szintén értelmét vesztené, hiszen ez a magzati pulzus állandóságát jelentené. (A közel állandó magzati pulzus diagnosztikai szempontból nagyon súlyos következményekkel jár, ez az elhaló magzat élete utolsó stádiumának jele, csak az els dleges ütemszabályzó, a szinusz-csomó hat a szívritmusra, az agyi befolyás már megsz nt.) Tekinthetjük természetesen a rövid id re számított autokorreláció sorozatot a valódi autokorreláció sorozat egy kevés, véges számú mintából vett becslésének, ez az átlagos magzati pulzusszám (BHR Basal Heart Rate) meghatározására lenne megfelel modell, de a finom id beli változások vizsgálatának szempontjából nem. statisztikus jellemz i vannak a Ezek után vizsgáljuk meg, milyen számszer szívhangmintáknak az el z pontban ismertetett vizsgálati szempontok alapján. A mérés alapját képez szívhangminta egy mikrofonból er sít és jelformáló hálózaton keresztül kerül a mikrokontroller A/D átalakító bemenetére, itt digitális jellé alakul kvantálás és mintavételezés során. Az így nyert jel középértékével kapcsolatban a következ megállapításokat tehetjük. A mikrofon - bármilyen megvalósítási formáról legyen is szó - rendelkezik légnyomás kiegyenlít nyílással, így statikus nyomásérzékelésre nem képes, tehát a kimeneti jelének hosszú távú átlaga biztosan nulla (a méretezést l függ id állandóval abszolútértékben exponenciálisan csökken). A jelformáló és er sít hálózat nem egyenáramúan csatolt, így ennek kimeneti jele szintén nulla átlagú ideális esetben. Nagyon kis frekvenciájú jelek érzékelésére a korrekt méréshez nincs szükség. (Éppen ellenkez leg, a kisebb frekvenciák tartományában elhelyezked anyai szívhangokat ki kell sz rni, amennyire csak lehet.) Tehát a középérték nullától való eltérését, amennyiben jelentkezik, csak az áramköri elemek és az A/D átalakító nullpont hibája, és termikus okokra visszavezethet nullpont vándorlása okozhatja, ez viszont a mérés el tt szükség esetén kalibrálható. Természetesen, amennyiben a jelfeldolgozási kapacitás elégséges, a mérés közbeni folyamatos korrekciónak sincs elvi akadálya. A szívhangminta szórására hasonló megkötést tehetünk, hiszen az er sít , jelformáló hálózat és a mikrokontroller is véges nagyságú tápfeszültségr l m ködik, így a hálózaton belül a tápfeszültségek által meghatározott korlátokon kívül üzemszer körülmények között, tranziens állapottól eltekintve feszültségértékek nem léphetnek fel, viszont ezeket a határokat célszer a lehet ségekhez mérten optimálisan megközelíteni az A/D átalakító véges felbontásának lehet legjobb kihasználása végett. Így adott eloszlást feltételezve, konkrét becslésünk lehet a szórás nagyságára, bár kérdés, hogy ez a becslés kell pontosságú-e, illetve a valódi érték id ben, adott id tartamot tekintve mennyire ingadozik. A korrekcióra vonatkozóan ugyanaz mondható el, mint a várható érték esetében. Általánosságban a periodikus id sorok autokorreláció függvényére érvényes, hogy a periódus hosszának megfelel rend autokorreláció együttható egyenl a nulladrend autokorreláció együtthatóval, ami éppen egységnyi, és egyben ez a legkisebb olyan rend, illetve eltolás, amire az autokorreláció együttható egységnyi, mivel egyébként a periódus hossza lenne rövidebb. Ez azért igaz, mert, mint a periodikus jelek definíciójából következik, az ilyen jelek érzéketlenek a periódus hosszával (vagy annak egész számú többszörösével) való eltolásra. Természetesen az autokorreláció függvényben el fordulhat mínusz egy érték tag is, ez akkor jelentkezhet, ha az id sort adott lépéssel késleltetve az önmaga mínusz egyszeresét kapjuk.
Diplomaterv
- 61 -
2001 tavasz
Hasonló megjegyzések tehet k a négyzetes középben vett távolság esetén is, hiszen periodikus jel esetén ennek a mutatónak a periódushossznak megfelel eltolásra számított értéke éppen nulla, hiszen a jel egy periódussal ellépve nem különbözik önmagától semmiben. Ellentétes el jel egyezés esetén a négyzetes középben vett távolság eléri a maximumát. Általánosítva, természetesen egy szívhangminta sorozat sosem ideálisan periodikus, a periodicitásra az autokorreláció sorozat illetve a különböz eltolásokra képzett átlagos négyzetes eltérés sorozat széls érték-helyeib l következtethetünk. Amennyiben az el jelkülönbségekt l el kívánunk tekinteni, az eredeti szívhangminta sorozat abszolút értékének periodicitását vizsgálhatjuk a fenti módszerekkel. Ezután tekintsük át, milyen módon jelentkezik a magzati szívhangminta pulzusnak megfelel periodicitása a valószín ségi jellemz kben. Kezdetnek a 6.7. ábra fels felében egy szimulált, végletesen idealizált szívhangminta látható, alatta az ábra alsó részében különböz módon kiszámított autokorreláció illetve négyzetes távolság jelleg mennyiségek. Jól látható a szív összehúzódása (systole) által létrehozott els tranziens, majd a második, az izomzat elernyedéséb l (diastole) származó, mindkett után van egy-egy kisebb amplitúdójú lecseng rezgés, ez annak a hangnak a szimulálására szolgál, ami a szívbillenty k összezáródásából és a vérben terjed nyomáskülönbség formájában megnyilvánuló mechanikai hullám visszaver déseib l adódik.
6.7. ábra. Ideális szívhangminta és különböz módon kiszámított statisztikus jellemz i.
Mivel a minta éppen a feldolgozó-ablak elején kezd dik, az autokorreláció jelleg mennyiségek éppen a második periódus kezdetén mutatnak maximumot, a négyzetes távolságra vonatkozó jellemz knek pedig éppen itt van minimuma. Viszont láthatók az ábrán további maximumok és minimumok is, ezek a görbe további egymáshoz hasonló szakaszaiból adódnak. Megjegyzend , hogy hatékonyabb módszer is kínálkozna a periodicitások vizsgálatára, az úgynevezett parciális autokorreláció együtthatók kiszámítása, mely módszer kiküszöböli a korreláció együtthatók egymásra hatását, de ez a számítási folyamat nagy mintaeltolásokra numerikusan instabil, így a jelenlegi számítási viszonyok mellett nem megvalósítható. (A parciális autokorreláció együtthatók meghatározása tulajdonképpen egy AR modell közelítését jelenti, ahol a számítási hibák halmozódnak, az MA folyamattal ellentétben [12], [13].) A különböz jellemz k a következ módon kerültek kiszámításra:
Diplomaterv
- 62 -
2001 tavasz
N −n k =0
• Zöld görbe:
N −n k =0
(x[k ] − x )(x[k + n] − x )
(x[k ] − x )2 ∗
N k =n
(x[k ] − x )2
N−n
1 ( x[ k] − x) + ( x[ k + n] − x) − 21 ( x[ k ] − x) − ( x[ k + n] − x) 2 k =0
• Piros görbe:
1 2
• Bíbor görbe:
N−n k =0
N k=n
x[ k ] − x −
1 2
N−n k =0
x[ k ] − x −
N k=n
x[ k ] − x
N −n k =0
• Kék görbe:
x[ k ] − x +
N −n k =0
( x[ k ] − x[ k + n])2
x[ k ] − x[ k + n]
Az els két összefüggés autokorreláció jelleg , az els az autokorreláció definíciója, a második ennek nemlineárisan torzított változata, amely kiértékeléséhez nem szükséges szorzás (persze osztani itt is kell, ha a nevez nem tekinthet állandónak), a második két képlet távolság jelleg , az els Euklideszi-, négyzetes középben vett távolság, a második Manhattan-távolság, az el z nemlineárisan torzított változata. Az utóbbi két összefüggés természetesen normálva került ábrázolásra. A szorzás elkerülésére olyan feldolgozási környezetben lehet szükség, ahol a szorzás m veleti ideje jóval nagyobb az összeadásénál, de az abszolútérték képzés ekkor is kényelmesen, gyorsan végrehajtható. Látható, hogy a torzított változatok, meg rizték az eredeti összefüggések kvalitatív viselkedését. A 6.8. ábrán szintén az el z idealizált minta látható, de éppen más helyzetben került a feldolgozó-ablakba. Látható, hogy az alsó ábrán megváltoztak a periodicitás vizsgálatára szolgáló jellemz k mellékes széls értékei. Ezen a problémán többféle módon segíthetünk, egyrészt alkalmazhatjuk az FFT algoritmusok esetén bevált id tartománybeli ablakozást, ekkor a szélhatás ugyan csökken, de a keresett széls érték is csökkenni fog (az összes többivel együtt). Másrészt, ha kell gyakorisággal számítjuk ki a fenti jellemz ket és ezeket átlagoljuk, akkor a széleken fellép anomáliák által okozott eltérések is kiátlagolódnak, bár teljesen ekkor sem tudunk megszabadulni t lük.
6.8. ábra. A véges feldolgozó-ablak hatása a statisztikus jellemz kre.
Diplomaterv
- 63 -
2001 tavasz
A 6.9. és 6.10. ábrán egy-egy valódi, orvosi vizsgálatból származó szívhangminta jellemz it vizsgálhatjuk meg, a periódushosszra jellemz széls értékek itt is jól kivehet k.
6.9. ábra. Vizsgálatból származó szívhangminta és jellemz i.
6.10. ábra. Vizsgálatból származó szívhangminta és jellemz i.
A feldolgozott mintaelemek véges számának van még egy következménye, ami bizonyos szempontból kritikus lehet, bár az elemszám, illetve az ablak méretének növelésével ez a probléma is csökkenthet . Ha megvizsgáljuk az autokorreláció vagy az átlagos négyzetes eltérés képletét, akkor azt tapasztaljuk, hogy véges sok elemet tekintve a nagyobb eltolásokra az adott együttható becslése egyre kevesebb elemb l történik. Határesetben N elem sorozatnál N eltolásra végzett vizsgálat esetén az összegzés már csak egy tagból áll, egyetlen szorzatból becsüljük a periodicitás mértékére vonatkozó információt, ami érezhet en sokkal pontatlanabb becslést jelent, mint a másik határesetben, amikor a nulla eltolásra számított autokorreláció, N elemb l képz dik (és természetesen azonosan egységnyi). A matematikai statisztikában ennek a problémának a kezelésére megbízhatósági (konfidencia-) intervallum szolgál, ez az intervallum azt mutatja meg a minta-elemszám és eloszlás függvényében, hogy a becsült érték valamilyen adott környezetében milyen valószín séggel található meg a valódi érték.
Diplomaterv
- 64 -
2001 tavasz
A fejezet második alpontjában látottakból következik, hogy a 80 és 200 közötti FHR értékek meghatározásához éppen 250 és 100 közötti mintaeltolásokra kell kiszámítanunk a periodicitásra jellemz együtthatókat. Kérdés, hogy mekkora elemszámú mintával érdemes próbálkozni. A feldolgozandó elemszámnak egyik oldalról határt szab a szükséges megbízhatósági szint, másik oldalról a feldolgozandó minta-elemszám növelésével n a feldolgozási id , ami a számítási kapacitás teljes elfogyásával fenyegethet. Másrészt viszont a m szer feladata éppen a magzati pulzusszám id beli nyomon követése, ha túl hosszú id re átlagoljuk a jellemz ket, éppen ett l az információtól esünk el. Tehát a feldolgozandó elemszámot a feldolgozási kapacitás, a megbízhatóság, és a szükséges felbontás optimumaként kell megállapítani. Erre a kérdésre a valósidej rendszer tárgyalásánál még visszatérünk.
A szakaszos m ködés rendszer
Egy szakaszos m ködés rendszer a gyakorlatban jelenleg is használt felismer rendszer, félig egy PC-n futó elemz programból, félig egy mikrokontrolleres mintagy jt b l áll, ennek teljes mikrokontrolleres megvalósítása a tulajdonképpeni feladat, amelyhez az eredeti rendszer mintaként, referenciaként szolgál. Ennek a rendszernek a vázlatos ismertetése következik az alábbiakban. A következ pontokban elemzett szívhangminták is ebb l az adatgy jt rendszerb l származnak. A PC-s elemz program kétféle változatban m ködik, hasonló hatékonysággal. Az egyik változat magát a jelet közvetlenül veti alá egy korrelációanalízis jelleg vizsgálatnak, a másik változat a jel teljesítményével analóg mennyiséget vizsgál. A teljesítményanalízisen alapuló eljárás robusztusabb, az id tartománybeli jelet közvetlenül vizsgáló pontosabb eredményt képes szolgáltatni, de zavarérzékenyebb. A teljesítmény jelleg mennyiség számításától eltekintve a két algoritmus lényegében megegyezik. A teljesítmény jelleg mennyiség valójában a hangjel nemlineáris transzformációnak alávetett burkológörbéjének közelítését jelenti. Ezt a program a hangminták abszolútértékének átlagolásával állítja el két lépésben. Els lépésben a hangminták abszolútértékét 12 megel z mintával együtt átlagolja, majd ezt az átlagolt értéket is 5 megel z értékével együtt átlagolja. Ez a kétszeres simítás egy lankás, lassan változó görbét jelent az eredeti hangjel abszolútértékéhez viszonyítva. A program erre a görbére végez összehasonlítást az önmagával eltolt szakaszaira nézve, ezért lesz robusztus, a kétszeres átlagolás levágja a felesleges, gyors ingadozásokat, zajokat, ami nem a szívritmus periódusid tartományában van. Viszont ett l az átlagolástól lesz pontatlanabb is, mivel a simított görbe széls értékei sem lesznek annyira markánsak, így az összehasonlítás eredménye sem lesz annyira meredek görbe, mintha az eredeti hangmintát tekintenénk. Mindenesetre a módszer pontossága a gyakorlati igényeket kielégíti. A görbe önmagával eltolt szakaszaival való összehasonlítására a már tárgyalt képletek közül
N −n
mindkét esetben a k =0
x[ k ] − x[ k + n] került felhasználásra. Ezt az összehasonlítást az algoritmus úgy
végzi, hogy egyszerre mindig 400 mintát tart a feldolgozó-ablakában, mivel ez körülbelül egy képpontnyi adatnak felel meg, erre végzi el az összehasonlítást, 100 és 250 közötti mintaeltolásokra (ez 200 és 80 közötti percenkénti pulzusszámnak, FHR értéknek felel meg). Majd miután beolvasott 100 újabb mintát, eldobja a feldolgozó-ablak elején lév 100-at, és újra összehasonlítást végez. Tehát a feldolgozó-ablakot négy egyenl részre osztja, azért éppen négyre, mert a leggyorsabb vizsgált szívverés esetén egy képpont körülbelül négy szívdobbanásból van meghatározva, így ekkor is minden szívdobbanáshoz tartozik jellemz érték. Ezután egy szelekciós rész következik, amely a kapott valószín síthet periódusid értékeket osztályozza, min síti, és az el z értékek függvényében eldönti, melyiket fogadja el az adott id szakra érvényesnek a négy közül. Láthatjuk, hogy a felismer algoritmus tulajdonképpen pillanatfelvételeket készít a szívhangok periodicitási jellemz ib l, minden képpont esetében négyszer. Nagyban megnövelhetnénk a felismerés hatékonyságát (több mint két nagyságrenddel), amennyiben sikerülne a szívhangok periodicitási jellemz it közel folytonosan, mintáról-mintára nyomon követnünk. Ez els látásra reménytelenül számításigényes feladatnak t nik, azonban a következ fejezet egy olyan módszer leírását tartalmazza, amellyel a feladat mégis megoldható. El zetesen annyit jegyzünk meg, érdemes átgondolni, milyen igényekkel járna a fent részletezett algoritmus mikrokontrolleren történ megvalósítása. A minden századik mintavétel utáni, két mintavétel között történ kiértékelés a számítási kapacitás sz kössége miatt megoldhatatlan, tehát a régebbi mintákat tárolnunk kell, és az új százas mintarészlet gy jtése közben kell kiértékelnünk
Diplomaterv
- 65 -
2001 tavasz
ket. Ez egyrészt rengeteg tárolókapacitást emészt fel, küls memória illesztése nélkül nem is oldható meg. Másrészt roppant kellemetlen feladat az algoritmus ütemezése, minden egyes mintavétel között 100 alkalommal meg kell határoznunk, melyik korreláció-együtthatók kerüljenek kiszámításra, és el kell osztanunk a mintavételek közé a korreláció-együtthatók kiértékelését is. Ezen felül a korrelációegyütthatók számítása rengeteg redundanciát tartalmaz, tulajdonképpen ennek a redundanciának a megszüntetése jelenti a megoldást, illetve a hatékonyság drasztikus emelkedését. Végül e pont zárásaként következzen néhány kiértékelt szívhangminta, amelyek ezekkel a programokkal készültek. Kés bb ezekkel az ábrákkal hasonlíthatjuk össze a következ kben ismertetend algoritmussal készített görbéket. A 6.11. és 6.12. ábrán egy megbízhatóan kiértékelhet , nem túl zajos hangmintával nyert futási eredmény látható, el bb a teljesítményszemlélet majd a hangmintákon alapuló felismerési módszert alkalmazva.
6.11. ábra. Egy kissé zajos szívhangminta kiértékelésével kapott görbe a teljesítményszemlélet algoritmusból.
6.12. ábra. Az el z szívhangminta kiértékelésével kapott görbe a hangmintákat közvetlenül
Diplomaterv
- 66 -
2001 tavasz
összehasonlító algoritmusból. A 6.13. és 6.14. ábrán egy zajos, kevésbé megbízhatóan feldolgozható hangminta kiértékeléséb l adódó görbék láthatók.
6.13. ábra. Egy zajos szívhangminta a teljesítményszemlélet algoritmussal kiértékelve.
6.14. ábra. Az el z görbe a hangmintákat közvetlenül összehasonlító algoritmussal kiértékelve.
Jól látható, hogy amíg az els szívhangminta esetén a két algoritmus közel azonos eredményt produkált, addig a zajos minta esetén nagymértékben eltér t. Nemsokára erre is magyarázatot találunk.
Valósidej feldolgozási lehet ségek
Általánosságban a valósidej feldolgozás azt jelenti, hogy a bemeneti adatokat késlekedés nélkül feldolgozzuk, nem foglaljuk kötegekbe ket a feldolgozási teljesítmény gazdaságosabb
Diplomaterv
- 67 -
2001 tavasz
kihasználására, és a lehet legkorábban el állítjuk a bemeneti adatokból a kimeneti adatokat, ha lehetséges, állandó feldolgozási id alatt, hiszen semmi biztosítékunk nincs arra, hogy a késlekedést, feldolgozási id többletet kés bb be tudjuk hozni. Ha a feldolgozás nem hajtható végre állandó átfutási id vel, illetve a beérkez adatok különböz fontosságúak akkor fontossági sorrendjüket mérlegelni kell, és ennek függvényében elvégezni a feldolgozást. Valósidej feldolgozást általában multiprogramozott eszközökön, olyan esetekben alkalmaznak, amikor nagy feldolgozási sebességre, gyors adatátfutási id re, nagy megbízhatóságra van szükség, tipikusan els sorban katonai, védelmi, orvosi, és veszélyes, illetve különösen nagy hatékonyságot igényl ipari folyamatirányítási rendszerek esetén. A valósidej rendszerek a nagy feldolgozási sebességüket, hatékonyságukat mindig valamilyen különleges elrendezésnek, feldolgozási módnak köszönhetik, amivel közel a legoptimálisabban használhatják ki a véges, gyakran sz kös számítási kapacitást. A szívhangminták vizsgálatánál láttuk, hogy a korrelációfüggvény (és rokon társai) alkalmasak a minták periodicitásának vizsgálatára, méghozzá viszonylag optimálisan, kevéssé érzékenyen a minta jellegének kisebb változásaira. A valósidej feldolgozás a periodicitás felismerésének szempontjából azt jelentené, hogy minden mintavétel között kiszámítjuk az autokorreláció sorozatot, a szükséges mintaeltolásokra véges sok mintából becsülve. Így vizsgálhatnánk, egy-egy új minta hatását a korreláció együtthatókra, tehát a kis mértékben változó együtthatók segítségével szinte folytonosan nyomon tudnánk követni a szívhangminta jellemz it. Ez a jelen jelfeldolgozási kapacitás mellett eleve képtelenségnek t nik, de még a mai csúcsteljesítményt képvisel céleszközök tekintetében is megkérd jelezhet a kivitelezhet sége. Természetesen a „nyers er ” módszere általában a lehet legkevesebb esetben hozza meg a kívánt eredményt, és ez a valósidej jelfeldolgozás területére halmozottan igaz. Tekintsük az autokorreláció id sor becslésére vonatkozó képlet általános, szórásnégyzeteket és átlagokat is tartalmazó definíciós alakját:
r ( x[n]): =
N −n
Cov( x[ k ], x[ k + n])
x[ k ] − x
M
Var ( x[ k ])∗Var ( x[ k + n])
=
k =0
N −n
M x[ k ] − x
k =0
N −n
= lim
N →∞
N −n 1 x[ k ] − x N + 1 − n k =0 k =0 N −n 1 x[ k ] − x N + 1 − n k =0 k =0
N −n 2
N −n
x =
k =0
N
x[ k + n] − x
k =n N
∗ M x[ k + n] − x
=
k =n
N
x[ k + n] − x
k =n
N N 1 x[ k ] − x ∗ N + 1 − n k =n k =n
2
N −n N N 1 1 x[ k ]; x = x[ k ] N + 1 − n k =0 N + 1 − n k =n k =n
Ha a szívhangminták által megvalósuló valószín ségi folyamat szórását és középértékét nem tekintjük állandónak, akkor meg kell maradnunk a fenti kifejezés vizsgálatánál. Ekkor a számlálóból és a nevez b l kiemelhet az azonos, átlagolást végz konstans szorzó, ezután áttérve véges N számú mintából való becslésre a következ t kapjuk az n-ed rend autokorreláció együttható kifejezésére:
N −n
r ( x[ n]) = N
k =0
k =0 N −n k =0
N −n
N
x[ k ] − x
x[ k + n] − x
k =0
N −n 2
x[ k ] − x
k =0
k =n
∗
N k =n
N −n 2
x[ k ] − x
k =0
Ahol r ( x[ n]) szimbólum az x[ k ] id sor k = 0... N elemeib l becsült n -ed rend autokorreláció N
k =0
együtthatóját jelöli, az el z ekben bevezetett becsült várható érték kifejezésével analóg módon. Sajnos ett l a lépést l fogva fel kell tennünk, hogy a bemeneti jelsorozat várható értéke nulla, illetve el z leg nullává tettük, különben az eredményként adódó kifejezések túl bonyolulttá, és a gyakorlat számára használhatatlanná válnak, mert a mintánként változó középérték kifejezése az összes összegzés összes tagjára befolyással van. Fontos, hogy elméleti értelemben ezzel az általánosságot nem csonkítjuk, hiszen az átlag kifejezése éppen azért szerepel a képletekben, hogy a középérték befolyását az autokorreláció együtthatókra kiküszöbölje. Tehát a megszorítás csak annyit jelent, hogy Diplomaterv
- 68 -
2001 tavasz
amennyiben a várható érték nem nulla, azt a mintavételezés után külön ki kell vonni egyenként az elemekb l a korrelációszámítás megkezdése el tt. Ezt a m veletet nem tudjuk egyszer módon a autokorreláció együtthatók számításával összevonni. Ehhez persze ismernünk kell a várható értéket megfelel megbízhatósággal. Vezessünk be hasonló jelöléseket a kovariancia és a szórásnégyzet nem átlagolt részére is (magára az összegre). (Ezeket megkülönböztetésül az eredeti kifejezést l jelölje a fels indexbe tett csillag.)
N −n
N
γ * ( x[n]): =
k =0 N −n 2*
k =0
N −n
k =0
x[ k + n] − x
k =0
( x[k ]): =
σ
N
x[ k ] − x
N
k =n
=
N −n
x[ k ]∗ x[ k + n]
k =n x =0 k =0 N −n N −n 2
N −n
σ 2* ( x[ k ]): =
x[ k ] − x
x =0 k =0 2
N
x[ k ] − x
N
=
k =n
k =n
x[ k ]2
=
k =0
k =0 N
x = 0k =n
x[ k ]2
Így a fenti kifejezés a következ alakban írható: N *
γ ( x[ n])
r ( x[ n]) =
N
k =0
k =0
N−n
N
k =0
k=n
σ 2* ( x[ k ])∗ σ 2* ( x[ k ])
Viszont a definíciók alapján felírhatjuk a következ összefüggéseket: N +1− n 2*
N−n
( x[ k ]) = σk =20* ( x[ k ]) − x[ 0] 2 + x[ N + 1 − n] 2 k =1
σ
N +1
N
k = n +1
k=n
σ 2* ( x[ k ]) = σ 2* ( x[ k ]) − x[ n] + x[ N + 1]
N +1
N
k =1
k =0
2
2
γ ( x[ n]) = γ ( x[ n]) − x[ 0]∗ x[ n] + x[ N − n + 1]∗ x[ N + 1]
Ezzel az autokorreláció egy mintaelemmel kés bbi értéke is felírható: N +1 *
γ
N +1
r ( x[n]) =
k =1
k =1 N +1− n 2*
σ
k =1
N *
γ
=
( x[n]) N +1 2*
=
( x[k ])∗ σ ( x[k ]) k = n +1
( x[n]) − x[0]∗ x[n] + x[ N − n + 1]∗ x[ N + 1]
k =0 N −n
N
k =0
k =n
σ 2* ( x[ k ]) − x[0]2 + x[ N − n + 1]2 ∗ σ 2* ( x[ k ]) − x[n]2 + x[ N + 1]2
Tehát egy közvetett rekurzív számítási módot nyertünk az autokorreláció együtthatók kiszámítására, illetve pontosabban egy olyan képletet, amely az el z számítások ismeretében az adott autokorreláció együttható értékét megadja, amennyiben az el z lépésben használt mintasorozat els elemét eldobjuk, és új elemet veszünk fel a végére. Tehát az algoritmus egy ablakot csúsztat végig az egész mintasorozaton, és minden egyes lépésben korrigálja az adott eltoláshoz tartozó autokorreláció együtthatót, az eredeti képletben szerepl összegzések nélkül. Ezzel egy „pipe-line”-szer struktúra jön létre.
N
Vizsgáljuk meg milyen számításigénnyel jár ez a módszer. Tárolnunk kell a N −n 2*
σ
k =0
( x[k ]) ,
N 2*
σ
k =n
γ ( x[n]) ,
k =0
( x[k ]) értékeket minden együtthatóra, továbbá tárolnunk kell az el z N db mintát egy
cirkuláris bufferben. Ezután el kell végeznünk a számláló esetén két szorzást és két összeadást. A nevez esetében mindkét tagra két szorzást és két összeadást, ha a mintaelemek négyzetét is tároljuk és a mintavételezés után közvetlenül számítjuk, a szorzások elmaradnak, ellenben megn a tárigény. Az új értékeket el kell tárolnunk a régiek helyett. Majd képezzük a nevez ben a két tag szorzatát.
Diplomaterv
- 69 -
2001 tavasz
Ezután kell elvégezni a gyökvonást és az osztást, ami gépközeli program esetében táblázatból való olvasással és az olvasott értékkel való szorzással oldható meg célszer en, a táblázatban a nevez gyökeinek reciprokát tárolva. Megjegyzend , hogy a rekurzív számítás ilyen, közvetett módszerénél a számítási hibák nem halmozódnak, hiszen a tárolt értékekkel csak összeadás és kivonás m veleteket végzünk, ami fixpontos számítási környezetben teljesen determinisztikus. A nevez nagy számításigénye csökkenthet , ha feltételezzük, hogy a szórásnégyzet nem változik nagyon drasztikusan a feldolgozott mintasorozaton belül. Így a következ kifejezéshez jutunk:
N N +1 1 * [ ] ( ) γ xn γ * ( x[ n]) − x[ 0]∗ x[ n] + x[ N − n + 1]∗ x[ N + 1] N +1 + 1 N k =0 r ( x[ n]) = N + 1 − n Nk =+11 = N 1 k =1 + − 1 N n 2 2 σ 2* ( x[ k ]) σ 2* ( x[ k ]) − x[ 0] + x[ N + 1] k =0 N + 1 k =1
Így marad a nevez ben két szorzás, két összeadás, az eredmény tárolása, majd a reciprok táblázatból való kikeresése, és ezzel a számláló szorzása. Ellenben mivel a számlálót és a nevez t nem azonos számú mintából számítjuk, meg kell tartanunk az átlagolást végz szorzótényez ket, ami a számlálóban ráadásul függ a számítandó autokorreláció rendjét l, tehát semmiképp sem hanyagolható el. El nye viszont a módszernek, hogy a szórásnégyzetre vonatkozó becslés megbízhatósága nem csökken a nagy rend autokorreláció együtthatók felé, csak a számlálóra vonatkozó megbízhatósági intervallum romlik. Esetleg megtehetjük azt is, hogy egyez mintaszámot választunk, ekkor például a középs mintákból számíthatunk szórásnégyzetet:
N +1 N 1 * * [ ] ( ) ( x[ n]) − x[ 0]∗ x[ n] + x[ N − n + 1]∗ x[ N + 1] x n γ γ N +1 N n k =1 k =0 + − 1 r ( x[ n]) = = n n 1 k =1 N +1− N− 2 2 2 2 n n 2* N + 1 − n σ 2* ( x[ k ]) + x N +1− σ ( x[ k ]) − x n n 2 2 k= k= +1 2
2
Lehet ség van még arra is, hogy állandó értéken tartsuk a megbízhatósági szintet a számláló és a nevez esetén is, ekkor a számlálót minden együttható esetén más-más mintaszámból kell becsülni, sajnos ekkor a különböz eltolásokra számított autokorreláció együtthatók nem azonos id szakra fognak vonatkozni. Amennyiben a szórásnégyzetet konstansnak tekinthetjük, a nevez ben minden m velet elesik, csak egy konstanssal szorzás marad a helyén, ett l persze nyugodtan el is tekinthetnénk, hiszen az eredmény azonos lesz, csak más lesz a nagyságrendje, ellenben a számlálót ismét eltér elemszámokra kell kiszámítanunk, így az átlagolás itt nem hagyható el. Az felsorolt m veleteket minden autokorreláció együttható esetén el kell végezni, minden mintavétel után. Ezek programként mint egy-egy független önálló részlet valósíthatók meg, amennyiben erre lehet ség volna, párhuzamosan is végrehajthatók lennének ezek a m veletek. Ezzel a módszerrel az autokorreláció sorozat mintegy közel folytonos, mintánként id ben változó változatát tudjuk el állítani. Felvet dhet a kérdés, hogy hogyan tudunk hasznosítani ekkora tömeg autokorreláció együttható mintát. Nos, bárhogy is hasznosítjuk ket megbízhatóbb jellemzést adhatunk segítségükkel a magzati szívritmusra, mintha csak néhányszor számítanánk autokorreláció sorozatot egy képpont kiértékeléséhez. A kérdésre egy egyszer válasz azonnal adható, egy adott id szakra legjobban jellemz autokorreláció együtthatókat általában úgy határozhatjuk meg a legpontosabban, hogy id ben az autokorreláció együtthatókat átlagoljuk adott mintaszámra, ez egyenérték azzal, mintha az adott id szakra elkészítenénk az autokorreláció sorozat hisztogramját. Természetesen, ha mindig azonos számú autokorreláció együtthatót dolgozunk fel, akkor elegend ket mintáról mintára összegezni, hiszen az átlagolás az elemszámmal való osztást jelentené, ami jelen esetben mindig azonos, tehát az összegek közvetlenül összevethet k egymással. Ezzel a módszerrel megszabadulhatunk a feldolgozó-ablak szélein fellép problémáktól, és a korrelálatlan zajoktól is, hiszen megfelel en nagy mintát feldolgozva ezek átlagolódnak. Ezen kívül készíthetünk párhuzamosan egyszerre több hisztogramot is id ben eltolva, az id eltolódás célszer en lehet a feldolgozott mintaszám valamilyen tört része, így gyakrabban jutunk eredményhez, mintha az egész mintasorozatra mindig egyszerre csak egy hisztogramot készítenénk, és a több eredmény segítségével kisz rhetjük az esetlegesen hibás részleteket. Természetesen az átlagolásokat is végezhetjük pipe-line módszerrel. A feldolgozott minta hossza egyenl lehet a szakaszos m ködés rendszernél
Diplomaterv
- 70 -
2001 tavasz
meghatározottal, ami az egy képponthoz tartozó minták száma, a hisztogramok közötti eltolás pedig megegyezhet a szakaszos m ködés rendszerben az autokorreláció számítások közötti mintaszámmal, ami jelen esetben négy autokorreláció számítás volt képpontonként. A fenti számítási módszer a nagy összegzések elmaradása miatt képes gyorsabb, hatékonyabb lenni a teljes autokorreláció sorozatot szakaszosan kiszámító el z változatnál, itt az összegzések a m veletek között folyamatosan elosztva, nem egyben értelmezve hajtódnak végre. (A számításokat a szakaszos m ködés rendszer esetében is el kellene osztanunk a mintavételi id pontok közé, különben nem lenne id nk végrehajtani ket.) A feldolgozott autokorreláció sorozat az utolsó, a számításhoz még szükséges minta beérkezése után el áll, ugyanez mondható el a hisztogramokról, az autokorreláció együtthatók beérkezését illet en. Így ezt a számítási módszert joggal nevezhetjük valósidej nek. Az is látható, hogy az autokorreláció együttható becsléséhez használt elemszám növelése nem a végrehajtási id t növeli, hanem feldolgozás átfutási idejét, ami jelen esetben szinte közömbös. (Megjegyzend , hogy például egy zárt hurkú szabályozási rendszer méretezésénél, pontosan az ilyen jelleg paraméterek kritikusak, tehát az el z megjegyzés általános értelemben egyáltalán nem igaz. Az viszont igaz a fenti módszerre, hogy ugyanilyen pontosságú becslés ennél rövidebb id alatt semmilyen módon nem állítható el a jöv beli minták becslése nélkül.) A rendszerrel támasztott követelményeket szemügyre véve, a figyelemmel kísérend FHR értéktartományból következ en az autokorreláció együtthatókat 100...250 közötti mintaeltolásokra kell kiszámítani egész értékekre, ez 150 értéket jelent. A mikrokontroller 33MHz frekvenciájú órajelr l m ködtetve 8.25MIPS maximális m veleti sebességre képes, ekkor két mintavétel között elvégezhet m veletek száma, és az egy együttható kiszámítására fordítható m veletek száma (az adminisztrációs m veleteket és a mintavételt is beleértve):
8250000
24750 instruction m sec ∗3 = 24750; = 165 150 sec sample
Nos, megállapíthatjuk, hogy amennyiben ez megvalósítható, nem sok ideje marad „lazsálásra” a mikrokontrollernek. Mindenesetre a ciklusszervezési m veletekt l feltehet leg el kell tekintenünk, a kódot sebességre kell optimalizálni. Programmemória kapacitásban valóban nincs hiány, az assembly programok tömörségét tekintve ez nem korlátozó tényez . Viszont szem el tt tartandó szempont hogy, amennyiben lehetséges, a mintaátlag nullától való eltérését is korrigálnunk kell id szakonként. Azzal is felszabadítható némi számítási kapacitás, hogy a széls séges 80 és 200 körüli FHR értékek pontos kiszámítása nem feltétlenül követelmény, ezeket csak hozzávet leges értéknek adtuk meg, kiindulási alapként. Ezen kívül ezek közelében nem minden egész értékre kell feltétlenül kiszámítanunk az autokorreláció együtthatót, hiszen ilyen széls séges esetekben a számérték pontossága nem követelmény, a probléma jelenlétét már a szám puszta nagyságrendje is jelzi. A valódi felbontást és mérési tartományt éppen a konkrét megvalósítás korlátjai fogják megszabni. A következ tisztázandó kérdés, hogy ugyan megadtunk az el z ekben egy közvetett rekurzív formulát a szórásnégyzetek és a kovariancia számítására, de ezt a rekurziót valami módon el is kell indítani, meg kell vizsgálni mennyire érzékeny a kezdeti értékekre. Az a lehet ség, hogy összegy jtsünk egy feldolgozó-ablaknyi mintát, majd az indításhoz az innen meghatározott szórásnégyzeteket és kovariancia együtthatókat használjuk, persze nem használható, hiszen ekkor az egész számítást ismét két szomszédos mintavétel között kellene elvégeznünk, ami lehetetlen, hiszen éppen ez teszi szükségessé a közvetett rekurziót. Jobb lehet ségnek látszik egyenként elindítani a rekurzív számítóalgoritmusokat különböz mintaeltolásokra, ekkor két szomszédos mintavétel között csak egyetlen kovariancia és szórásnégyzet párt kell kiszámítani, és persze végrehajtani a már elindított rekurziókat. Azonban van ezeknél jóval egyszer bb lehet ség is. Az autokorreláció kifejezéséb l azonnal látszik, hogy ha kezdetben nullának feltételezzük a szórásnégyzetek becslését (ez legalább egy feldolgozó-ablaknyi csupa nulla adatot jelent), nem tudunk autokorrelációt számolni, hiszen nullával kellene osztanunk. (Erre, bármilyen valószín tlen is az el fordulása, a továbbiakban is figyelni kell természetesen.) Viszont, ha megvárjuk, hogy megérkezzen a legnagyobb rend autokovariancia együttható számításához szükséges számú minta (célszer en ez a feldolgozó-ablak mérete, azaz a cirkuláris bufferé, amelyben az el z mintákat tároljuk), és ezekre a mintákra folyamatosan végrehajtjuk a szórásnégyzetekre és a kovarianciára vonatkozó számítást, akkor ett l a pillanattól kezdve már használhatjuk a rekurzióval számított eredményeket a korreláció számítására, azok a helyes eredményt adják a nulla kezdeti érték ellenére. Ez a kijelentés els látásra nem t nhet igazán magától értet d nek, némi számítás árán azonban igazolható formálisan is. Más szemszögb l azt mondhatjuk, hogy a nulla érték kovariancia és szórásnégyzet értékek egy hosszú csupa nulla
Diplomaterv
- 71 -
2001 tavasz
sorozat eredményeként álltak el , ami a valódi mintákat megel zte, de amint a feldolgozó-ablakból kikerült az utolsó nulla is, a rekurziónak a helyes eredményt kell adnia, hiszen azt csak a feldolgozóablakbeli minták befolyásolják, mert amit egyszer hozzáadtunk egy együttható szórásnégyzetének vagy kovarianciájának becsléséhez, azt le is fogjuk abból vonni (jelen esetben a nulla mintákat). Így az algoritmus indításához egyszer en meg kell várnunk annyi mintát, amennyi amúgy is szükséges a legnagyobb rend kovariancia együttható számításához, és ett l a lépést l kezdhetjük számítani a korreláció együtthatókat. Tehát találtunk egy olyan egyszer sorozatot amelyre a kovariancia és a szórásnégyzet szinte magától adódik, csupa nullával feltöltve a buffert, és az együtthatókat is nullázva helyes indítási feltételt kapunk, hiszen a nulla együtthatókat a nulla sorozatból is számíthattuk volna. Az apró kellemetlenség persze megmarad, hogy így be kell iktatnunk az algoritmusba egy külön indítási fázist, amelyben nem számolunk autokorreláció együtthatókat, csak a rekurziókat hajtjuk végre, amíg meg nem telik a tárolónk valódi mintákkal. Eddig egy-egy autokorreláció együttható elkülönült, párhuzamosítva is végrehajtható számításával foglalkoztunk, most meg kell vizsgálnunk a teljes együttható sokaság, az autokorreláció sorozat tulajdonságait. El ször azt kell tisztázni, melyik autokorreláció együtthatót melyik id pontra vonatkozónak tekintsük. Ez a kérdés egy-egy különálló korreláció együttható esetében egyszer en megválaszolható, bármely mintához tartozó id ponthoz hozzárendelhetjük, ami a feldolgozó-ablakban található, hiszen minden minta azonos súllyal szerepel az együttható kiszámítási képletében. A korreláció sorozat egyidej ségét tekintve figyelembe kell vennünk, hogy a különböz rend autokorreláció együtthatókat mely mintákból számítottuk. Ebb l a szempontból két lehet ség került kipróbálásra. Az els megközelítés szerint egy statisztikai jellemz t annál nagyobb megbízhatósági szinten tudunk becsülni, minél több mintából határozzuk meg azt. Minden egyes autokorreláció együttható meghatározásához felhasználjuk a feldolgozó-ablakban lév összes mintát, ekkor valóban mindegy, melyik feldolgozó-ablakbeli mintához tartozó id pontra vonatkoztatjuk a kiszámított autokorreláció sorozatot. Az együtthatókra vonatkozó becslés itt annál megbízhatóbb, minél kisebb rend autokorreláció együtthatót számítunk ki, hiszen a kisebb rend együtthatók becslésére több mintát használunk. A számítási módot szemlélteti a következ 6.15. ábra.
0
2N
6.15. ábra. Autokorreláció együtthatók becslése a lehet legnagyobb megbízhatósági szinten.
A másik megközelítés gyakorlati megfontolásból született, miszerint a szívveréshez tartozó periodicitás finom id beli változásának precíz nyomon követése az els dleges cél, ezt a leghatékonyabban akkor valósíthatjuk meg, ha a különböz rend autokorreláció együtthatókat különböz számú mintából becsüljük. Ugyanis a legjellemz bb becslést a szívhang pillanatnyi periodicitására úgy kaphatjuk, ha egyszerre csak két szívdobbanáshoz tartozó mintamennyiséget tartunk az adott rend autokorreláció együttható becslésére használt feldolgozó-ablakban. Ez minden egyes autokorreláció együttható esetén azt jelenti, hogy az adott együttható rendjét feltételezzük az aktuális periódusnak, tehát minden egyes együtthatót minden pillanatban annyi hangminta felhasználásával számítunk, amennyi a rendjének kétszerese. Megfordítva, így egy olyan jellemz t kapunk, ami annak a mértéke, hogy adott eltolásra nézve a jelenlegi pillanatban az id sorunk két egymás után következ azonos hosszúságú részlete mennyire hasonlít egymásra. Tehát a periodicitás
Diplomaterv
- 72 -
2001 tavasz
mértékének egyfajta pillanatnyi jellemzését kapjuk a periódushossz függvényében, persze el jelesen. Ha a két részlet éppen egy-egy teljes szívhangperiódus, akkor a számított együtthatónk maximális lesz. Ebben az esetben a kisebb rend autokorreláció együtthatók becslése lesz megbízhatatlanabb. A nyert autokorreláció sorozatot célszer en a feldolgozó-ablak közepén elhelyezked minta id pontjára vonatkoztathatjuk. Mivel a feldolgozó-ablak mérete alkalmazkodik a feltételezett periódus hosszához, a valódi periódushossz közelében a feldolgozó-ablak véges hossza miatt fellép problémák is jó közelítéssel megsz nnek. A számítási eljárást a 6.16. ábrán követhetjük nyomon.
-N
0
N
6.16. ábra Autokorreláció együtthatók becslése a szomszédos periódusok összehasonlítására. Ez a megközelítés az eddigit l kissé másfajta gondolkodásmódból született formalizálva a következ t jelenti nulla várható érték id sorra:
N
γ [ x[ N ]] =
k =1 0
x[ k − N ]∗ x[ k ] x[ k ]2 ∗
k =− N +1
N k =1
x[ k ]2
A nulladik elem a feldolgozó-ablak közepét jelenti. Látható, hogy a becslésre használt elemek száma együtt változik a számított autokorreláció rendjével. A rekurziós formulák értelemszer en módosulnak:
N
N −1
− N +1
−N
Cov = Cov + x[0]∗ x[ N ] − x[0]∗ x[− N ] = x[0]( x[ N ] − x[ − N ]) 0
−1
σ = σ + x[ − N ]2 + x[0]2
− N +1 − N N N −1
σ = σ + x[ N ]2 − x[0]2 1
0
A módszer felfogható a korrelációanalízis és a wavelet analízis sajátságos vegyülékeként is, a két eljárás hatékonyságát a következ pontban vetjük össze.
A feldolgozó rendszer szimulátora Egy nagy bonyolultságú jelfeldolgozó rendszert igen nehéz lenne azonnal a mikrokontrolleren megvalósítani, nem is lenne értelme az algoritmusok ellen rzése nélkül. F ként, mivel a valósidej feldolgozó rendszer más jelleg felismerési algoritmusokat követel, mint a szakaszos m ködés . Ezek kifejlesztésére és ellen rzésére készült el egy szimulátor, ami magas szint programozási nyelven, Pascalban íródott, és feladata a jelfeldolgozó rendszer áttekinthet , könnyen módosítható, fejleszthet változatának a létrehozása, hogy majd a teljesen biztonságosan m köd változat kerüljön átültetésre a mikrokontroller gépi nyelvére. A szimulátorhoz tartozó forrásprogramok megtalálhatók a mellékletben az F.4.2. függelékben megadott helyen, itt legfeljebb kiragadott részletek láthatók, inkább az eredmények és az algoritmus fejl désének nyomon követése a cél.
Diplomaterv
- 73 -
2001 tavasz
Az el z pontot azzal zártuk, hogy alapvet en kétféle módon becsülhetjük a megadott mintákból az autokorreláció együtthatókat, mindkett értelmes elgondolás más-más cél által vezérelve. Az els a stacionárius jelek azon statisztikus tulajdonságán alapult, hogy több mintából megbízhatóbb becslés adható egy statisztikai jellemz re. Ez más szemszögb l egyfajta átlagolást jelent: ha két szívhangperiódus rövidebb, mint a feldolgozó-ablak, akkor több egymás utáni szívhangperiódust vagy azok töredékeit is felhasználjuk a periódusid pillanatnyi értékének becslésére, ez az egymás után következ szívhangokra vonatkozó értéket pontatlanná teheti, igaz jobb becslését adja a feldolgozó-ablakban lév összes periódusra vonatkozó periódusid nek. Ennek a gondolatnak a továbbviteléb l született meg a második módszer, ami azt hivatott biztosítani, hogy a magzati szívhang periódusidejének bármely tartományában csak két periódusból történjen a becslés, így ez a mér szám ott maximális, ahol a valódi periódus éppen a legnagyobb valószín séggel található. Ezt felfoghatjuk úgy is, hogy a vizsgált id léptékben a szívhangmintát nem tekintjük gyengén stacionáriusnak, tehát az autokorreláció sorozatát sem az egész feldolgozó-ablakra vonatkozóan állandónak, hanem éppen a finom id beli változásait vizsgáljuk. Éppen ezt a gondolatmenetet tükrözi az is, hogy az autokorrelációt számító képletekben megmaradt a szórásnégyzet becslésére vonatkozó kifejezés is, hiszen gyengén stacionárius folyamatra ez sem függene az id t l. Persze az el z ekb l látható, hogy általában véve is elég viszonylagos, milyen folyamatot tekintünk stacionáriusnak, ez attól függ, az id milyen tartományában kívánunk vizsgálódni. Ha egy átlagos magzati pulzusszámot szeretnénk meghatározni az egész mérés id tartamára nézve nagy pontossággal, akkor természetesen az egész regisztrátum összes mintájából számolt autokorrelációból kaphatnánk meg a legmegbízhatóbb becslést. A fejlesztés menetét tekintve az els módszer megvalósítása történt meg el ször, ez volt els ránézésre a legkézenfekv bb megoldás, ezzel született el ször minden algoritmus. A következ kben (amíg ez szükséges) párhuzamosan fogjuk nyomon követni a két algoritmussal kapott eredményeket, a könnyebb összevethet ség kedvéért. Az els program az autokorreláció számító algoritmus ellen rzését végezte, vajon ugyanaz az eredmény adódik-e a valósidej algoritmus végrehajtása után, mintha a definíciókból számítanánk autokorrelációt. Ezzel együtt a rekurzió indítási feltételének vizsgálata is megtörtént. Ez mindkét módszer esetén egy-egy egyszer programot jelentett. A m ködésük a következ . El ször megadott számú mintából középértéket becsülünk, ezután minden mintabeolvasás után ezzel fogjuk korrigálni a beolvasott értékeket, és a középérték becslését is id szakonként pontosítjuk. Majd a feldolgozó-ablak és az autokorreláció együtthatók alaphelyzetbe állítása, azaz nullázása következik. Ezután történik meg a korreláció számító algoritmus felélesztése, a feldolgozó-ablakot feltöltjük beolvasott mintákkal, miközben az el z értékekre hagyatkozva folyamatosan számítjuk a szórásnégyzetek és a kovarianciák becslését, mire betelik az egész cirkuláris buffer, az autokorreláció együtthatók számításához szükséges értékeknek is készen kell lenniük. Majd kiszámítjuk ugyanezeket az együtthatókat definíció szerint a feldolgozó-ablakban lév értékekre, és a két algoritmus végeredményét kivonva egymásból nullát kell kapnunk. Ekkor a két számítási módszer ekvivalens. Így is történik mindkét módszer esetében. Alább a valósidej számítási algoritmusok magját képez rész látható; nagyrészt azonosak, csak a mutatók számítása történik eltér en, a feldolgozó-ablak eltér értelmezéséb l adódóan.
P1:= PtrCalc(BuffPtr-1); P4:= BuffPtr; For i:= StartCor to EndCor do Begin P2:= PtrCalc(BuffPtr-1-i); P3:= PtrCalc(BuffPtr+i); ACovCoe[i]:= ACovCoe[i] + CircBuff[P1]*CircBuff[P2] CircBuff[P3]*CircBuff[P4]; MC21[i]:= MC21[i] + CircBuff[P2]*CircBuff[P2] CircBuff[P4]*CircBuff[P4]; MC22[i]:= MC22[i] + CircBuff[P1]*CircBuff[P1] CircBuff[P3]*CircBuff[P3]; End;
Diplomaterv
- 74 -
2001 tavasz
P1:= Actual; P4:= Actual; For i:= StartCor to EndCor do Begin P2:= PtrCalc(Actual+i); P3:= PtrCalc(Actual-i); ACovCoe[i]:= ACovCoe[i] + CircBuff[P1]*CircBuff[P2] CircBuff[P3]*CircBuff[P4]; MC21[i]:=MC21[i] + CircBuff[P2]*CircBuff[P2] CircBuff[P4]*CircBuff[P4]; MC22[i]:=MC22[i] + CircBuff[P1]*CircBuff[P1] CircBuff[P3]*CircBuff[P3]; End;
A következ program az el z eredményére támaszkodva mozgóképszer en kirajzolja a grafikus képerny re az autokorreláció együtthatók értékeit, a grafikon színének változása jelzi, mennyi minta áll rendelkezésre egy-egy pont kiszámításhoz az FHR görbén. Született egy ezzel egyenérték szürkeárnyalatos megjelenítési mód is, amely háromdimenziós ábrázolást tesz lehet vé, így az id múlásával az autokorreláció sorozatban jelentkez szerkezeti változások jobban nyomon követhet k. Sajnos a Pascal fordító csak 16 szín palettát támogat, ezek a nagy felbontású 256 szín módban m köd programok speciális illeszt programon keresztül kommunikálnak a számítógép grafikus kártyájával, így ezek a programok módosítás nélkül csak ezzel az egyetlen fajta kártyával futtathatók. A dokumentumban található ábrák is egy Pascal programmal készültek, ez Windows bitmap típusú állományokat készít a grafikus képerny tartalmából. Az FHR görbe kiértékelésének legels és legegyszer bb közelít megoldásaként elkészült egy olyan program is, mely az autokorreláció együtthatókat megadott id tartamra, az egy képponthoz tartozó mintaszámra átlagolja, elnyomva így a gyors, id szakos zajoktól származó ingadozásokat, és az el z ekben említett feldolgozó-ablak szükségszer en véges hosszából adódó anomáliákat. Ezután lássuk a futási eredményeket. Tekintsük a két módszer hatékonyságának vizsgálatát. Az els , 6.17. ábrán egy szívhangminta mintánként számított autokorreláció együtthatóinak térképe látható, a jobb áttekinthet ség kedvéért színekkel is illusztrálva az autokorreláció együtthatók értékét. Az együtthatók itt is 8 bitre vannak kvantálva, de a paletta nem csak szürkeárnyalatokból áll. A sötétkék területek er s negatív korrelációt jelentenek, a zöld területek a gyenge abszolútérték kapcsolatot mutatják, a világosszürke, fehér területek er s pozitív korrelációt jeleznek. A fels ábrán az els , az alsón a második módszerrel számított korreláció diagram látható. A vízszintes tengelyen az id , illetve a mintaszám, a függ leges tengelyen a periódusid , illetve az FHR érték van feltüntetve.
Diplomaterv
- 75 -
2001 tavasz
6.17. ábra. A két korrelációszámító módszer összehasonlítása. Az ábrából azonnal kit nik, hogy a második, periódusid höz alkalmazkodó mintaszámból számoló algoritmus jóval kontrasztosabb képet generált, a csúcsok markánsabbak, a váltások meredekebbek. A nagy eltolásokra számolt autokorreláció együtthatók láthatóan hasonlítanak egymásra, hiszen ekkor a két algoritmus kevéssé tér el egymástól. Viszont az is látható, hogy néhol átlós és függ leges vonalak is láthatók az alsó ábrán, el ször ez valamilyen algoritmikus hiba jelenlétét sejtette, de kiderült, hogy nem err l van szó, a következ , 6.18. ábrán találjuk a jelenség magyarázatát. Itt a korreláció együtthatókat a hangmintával együtt láthatjuk, mindig a feldolgozóablak közepén lév mintát ábrázolva. Látható, hogy a függ leges vonalak egybeesnek a nagyobb amplitúdójú beütésekkel, tehát a korreláció sorozat struktúrája ennél a számítási módszernél hirtelen megváltozik, amint nagy energia kerül be a rendszerbe. Az átlós vonalak szintén a nagyobb energiájú részletek hatását szemléltetik, miszerint milyen id intervallumban befolyásolják az autokorreláció együtthatókat - az einsteini relativitáselmélet fénykúpjaival analóg módon. Tehát az összehasonlítás alapján a második módszer finomabb szerkezetmegjelenítést kínál kisminta szinten. Így feltehet leg hatékonyabb folyamatos szívritmus nyomkövetést tesz lehet vé. Kérdés, hogy az átlagolt görbe esetén nem jelentkezik-e pontatlanság formájában ez a hirtelen változékonyság. Erre keressük a választ a következ kben.
Diplomaterv
- 76 -
2001 tavasz
6.18. ábra. A korreláció együtthatók és az eredeti jel. A 6.19. ábrán egy átlagolással készített görbe látható, ez már egy hasonlatos kijelzési módszer, mint amit a célként kit zött m szernek kell produkálnia. El ször az els módszerrel készített átlagolt FHR térképet láthatjuk, a vízszintes tengelyen itt is az id látható, a léptéktartomány persze alaposan megn tt. A függ leges tengelyen a periódusid , illetve az FHR érték látható, sajnos az FHR érték kijelzése itt sem linearizálható.
6.19. ábra. Az els módszerrel, a korreláció együtthatók átlagolásával nyert szívritmus térkép.
A második módszerrel készített térkép a 6.20. ábrán látható. Nem igazán különbözik az el z t l, ez várható is volt, hiszen az átlagolás éppen arra való, hogy az apró, finom részleteket, hirtelen, id szakos változásokat elfedje, kiemelje a tartós szignifikáns jelenségeket és ilyen szempontból a két módszer információtartalma éppen abban különbözik, hogy az els esetben már a számítás közben bekövetkezik valamiféle átlagolás abból adódóan, hogy az együtthatókat nem csak egymás utáni két periódusra számítjuk. Ezután már csak a második módszert alkalmazzuk, tekintve annak jobb kisminta tulajdonságait. Az átlagolás helyett korrektebb volna egy decimáló sz r
Diplomaterv
- 77 -
2001 tavasz
alkalmazása, ami a korreláció-együtthatók mintavételi frekvenciáját alakítja át 1,25 másodpercre, de egy ilyen sz r m ködtetése igen számításigényes feladat, ennek használatától jelen feldolgozási teljesítmény mellett a mikrokontroller esetében el kell tekintenünk.
6.20. ábra. A második módszer szerint számolt átlagolt szívritmus térkép. Természetesen a görbék nem mindig ilyen szépen láthatóak minden id szakban, gyakran hosszabb id re is elhalványodnak, els ránézésre azt gondolhatnánk, ilyenkor nincs a hangjelben megbízható információ a szívritmusra vonatkozóan. Gyakran ez tényleg így is van, ilyenkor a szívhang nem jut el elég hanger vel a mikrofonba, illet leg túlsúlyba kerülnek hozzá képest az egyéb zajok, amik elnyomhatják. Ilyenkor a mér fej áthelyezésével próbálhatunk optimálisabb pozíciót találni. Viszont nem csak ez a jelenség okozhatja a szívhanggörbe elhalványodását. Vessünk még egy pillantást az el z ábrára, láthatjuk, hogy a 180...360 másodperc tartományában megjelenik egy másik világos görbe is az ábra alján. Ha megvizsgáljuk a hozzá tartozó periódusid ket, azt tapasztalhatjuk, hogy pont kétszeresei a fenti görbénél láthatóaknak. Az ábra minden pontjának árnyalata megadja, hogy a periódusid adott tartományában milyen mértékben periodikus a hangjel. Tehát az alább látható görbe azt mondja meg, mennyire jellemz ek a kett s periódusok a szívhangra adott pillanatban. Logikusan azt gondolhatnánk, hogy amikor a szívritmus gyorsan változik, akkor az egymás után következ szívdobbanások hangja jobban hasonlít egymásra, mint az egymás után következ szívdobbanás pároké, ha a szívritmus kevésbé változékony, akkor az els dleges és másodlagos görbék közel egyformán világosak. Érdekes módon nem feltétlenül ilyen egyszer a helyzet. Tekintsük az 6.21. ábrát példaként.
Diplomaterv
- 78 -
2001 tavasz
6.21. ábra. Egy nagyméret szívhang térkép. Ezen az ábrán sok jelenség megtalálható, ami említést érdemel. Az elején látszik, hogy szinte nincs is a szívritmusra vonatkozó jellemz a hangmintában, majd 90 másodperc környékén látható egy éles függ leges vonal, ekkor odébb csúsztatták az anya hasán a mér fejet, ez elég csúnya hangot ad, és ez meg is látszik a korreláció-együtthatókon: rövid idej , a szívhangok frekvenciájához viszonyítva nagy frekvenciájú hangra jellemz korreláció sorozatot láthatunk. Ezután még egy ideig semmi, majd elkezdenek érkezni a használható minták. Majd el ször 400 másodperc környékén elkezd halványodni az els dleges görbe, ugyanakkor a másodlagos világosodik. 500 másodperc tájékán a harmadlagos görbe is világosodni kezd, határozottabban hangsúlyosabbak, mint az els dleges görbe. 620 másodperc tartományában még az is el fordul, hogy szinte csak a harmadlagos görbe látszik. Ez azt jelenti, hogy bizonyos esetekben el fordul, hogy minden egymás után következ második vagy harmadik szívdobbanás aránylag hosszú id n át jobban hasonlít egymásra, mint az egymás után következ k, a szívverés aritmikussá válik, illetve bonyolultabb lesz a ritmusa, ez a jelenséget nevezik szubharmonikus oszcillációnak is, mivel a szívverés kett s, hármas, stb. periódus csoportokra szakad. Felvet dhet az ötlet, hogy esetleg a mikrofon membránja és a magzati szív közötti akusztikus átviteli út változása okozza ezt a jelenséget, azonban ekkor az átviteli út paramétereinek nagy pontossággal a magzati szívverés ütemében kellene változniuk, ez pedig aligha valószín . Ennek a jelenségnek a magyarázatát keresve egészen más területre érkezünk. Az elmélet szerint a szívben az idegsejteken ritmikusan, térben végighullámzó elektromos impulzus, ami az izmokat összehúzódásra készteti, leírható nemlineáris parciális differenciálegyenletekkel. Tehát mint nemlineáris dinamikai rendszer viselkedik, amelynek els dleges ütemszabályzó impulzusai a szinusz csomóból érkeznek, amely a pitvarok tetején foglal helyet, innen ágaznak el azok az idegsejtek, amelyek a pitvarokat összehúzódásra késztetik. Közvetve ezeken az idegpályákon keresztül jutnak el az impulzusok az atrioventikuláris csomóhoz is, a másodlagos ütemszabályzóhoz, innen ismét idegpályák ágaznak szét, amelyek a kamrákat késztetik összehúzódásra. Ezek az idegpályák az úgynevezett Purkinje-szálak, amelyek az elektromos impulzusok nagyon gyors szállítására specializálódtak, és gyökerek módjára szétoszlanak, fraktálszer alakzatként behálózva a lehet legtöbb izomsejtet. Az agyból is érkeznek ütemszabályozó impulzusok idegszálakon keresztül, ezek siettetni vagy késleltetni tudják a következ szívdobbanást. Feln ttek szívének dinamikai viselkedésével sokan foglalkoztak, f leg a kamrai fibrilláció kutatásával foglalkozik rengeteg irodalom [23], [24], [25]. Azonban magzatok esetében erre vonatkozó cikkel nem találkoztunk, pedig ennek nagy fontossága volna tekintve a magzati szív feln ttekét l nagyban eltér szerkezetét. A
Diplomaterv
- 79 -
2001 tavasz
nemlineáris dinamikai viselkedés ugyanis magyarázatot adhat a szívritmusban látható furcsaságokra, mivel a nemlineáris dinamikai rendszerek képesek paramétereik változtatásának hatására bifurkációkon keresztülmenni, amelyek periódus-többszöröz déssel járnak [11]. Ezen ismeretek fényében a korreláció analízis ilyen, wavelet-szer alkalmazása igazán indokoltnak látszik. A korreláció analízis el nyös tulajdonsága, hogy nem támaszkodik semmiféle ortogonális bázisfüggvény-rendszerre, a vizsgált folyamat bels meghatározottságát, szerkezeti vonásait vizsgálja, ilyen szempontból alkalmazható fraktál jegyeket visel jelenségek bels tulajdonságainak vizsgálatára [11], [17]. A változó vizsgált mintaszám wavelet jellemz tulajdonság, ez azért el nyös, mert minden id beli léptéktartományban az adott léptékhez igazodva vizsgálja a jelenséget, ez az önhasonlóság tulajdonságával van összhangban. Itt már kiviláglik az akusztikus mérési módszer el nye a Doppler-effektus elvén m köd ultrahangos m szerhez viszonyítva. Az ultrahangos m szer csak egy globális jellemz t, a szív összehúzódását követi nyomon, és így próbálja meghatározni a percenkénti pulzusszámot, megjegyzend , nem is olyan nagy pontossággal, és megbízhatósággal, mint azt els látásra elvárnánk egy ultrahangos m szert l. Az akusztikus jel viszont rengeteg apró hatás ered jeként áll el , így olyan jelenségek kimutatására is képes lehet, amire az egyetlen jellemz t nyomon kísér ultrahangos készülék elvéb l adódóan képtelen. Ráadásul az akusztikus m szer semmilyen küls energia bevitelével nem befolyásolja a vizsgálandó rendszer m ködését. Ezután térjünk vissza egy kicsit a szakaszos m ködés rendszerrel kiértékelt mintákhoz, vizsgáljuk meg ezeket is az új módszerrel.
6.22. ábra. Egy kissé zajos minta szívhangtérképe. A 6.22. ábrán látható görbe valóban hasonlít az el z ekben kapottakhoz, persze itt az FHR skála sajnos nem lineáris. F leg szépen látszik az egyezés a görbe végén az oszcillációs szakaszoknál, az els szakasz sajnos elég halvány.
6.23. ábra. Egy zajos minta szívhangtérképe. A 6.23. ábrán a zajosabb minta térképét tekintve láthatjuk, hogy sok helyen szakadozott, hiányos a periódusid re jellemz görbe, ez azt jelenti, hogy nincs elegend els dleges információ a mintában a periodicitásra vonatkozóan. A mérés vége felé van két különösen hiányos rész 560 és 390 másodperc környékén, és itt a szakaszos m ködés algoritmusok valóban nagyon eltér görbéket
Diplomaterv
- 80 -
2001 tavasz
adtak eredményül, nincs viszont magyarázat a kiemelkedésre a görbén 160 másodperc körül a teljesítményszámító algoritmus esetén.
Az FHR lépték linearizálása Az eddigiekben vizsgált módszerek a két szívdobbanás között eltelt id mérésére alkalmasak, ezt az id tartamot az orvosi gyakorlatban találóan ∆t -nek szokták nevezni. Azonban a m szernek a pulzusszámban kell lineáris megjelenítést biztosítania. Ebben a pontban ennek lehet ségeit vizsgáljuk. Els látásra azt mondhatjuk, hogy a fent vizsgált autokorreláció sorozatok id tartománybeli jellemzést biztosítanak, nekünk pedig frekvencia-tartománybeli jellemzésre van szükségünk, ezt frekvencia tartományba transzformálással biztosíthatjuk. Kézenfekv nek t nik Fourier-transzformációs algoritmust alkalmazni, majd ezután lényegkiemelést végezni, így kiválasztani a transzformált szívhangtérképr l a domináns szívritmusnak megfelel görbét. Megfelel számú spektrumvonal számításával elérhet elvileg a kívánt pontosság. FFT algoritmus esetén a pontszám növelésével kis mértékben n a végrehajtási id . Szintén megoldást jelenthet a lényegkiemelést az id tartományban elvégezni, és egyenként átváltani az értékeket frekvenciákra, ez a módszer ugyan pontatlanabb, de kisebb a számításigénye. Mindazonáltal a pontossága a mintavételi frekvencia megválasztásával kézben tartható, viszont ekkor ismét a számításigény kérdéséhez jutunk vissza, hiszen egy kisebb számításigény algoritmust kell rövidebb id alatt végrehajtanunk megadott pontossági követelmények teljesítéséhez. A Fourier-transzformáció alkalmazása a mikrokontroller esetében teljesen reménytelen feladat, azonban mégis érdemes rövid kitér t szentelni ennek a kérdésnek is. Az autokorreláció sorozat Fourier-transzformációjával teljesítmény-s r ségspektrumot nyerünk, ennek szintén maximumot kell mutatnia a szívritmusnak megfelel frekvencián. Kérdés, hogyan állapítsuk meg az FFT algoritmus pontszámát. Itt ismét a pontosság követelménye kerül el térbe, hiszen minél több periódust transzformálunk, annál pontosabban határozhatjuk meg a frekvenciát. Sajnos 512 autokorreláció mintán végrehajtott FFT algoritmus is csak legfeljebb 5 szívdobbanást dolgoz fel még 250-es percenkénti pulzusszám esetén is, ez nagyon rossz frekvenciafelbontást tesz lehet vé - az els öt spektrumvonal közül választhatunk -, viszont már így is elveszik a finom id beli jellemzés lehet sége, hiszen túl sok mintát használtunk egy érték kiszámításához. Ezzel attól a lehet ségt l esünk el, hogy sok minta értékelésével statisztikai alapon döntsünk a helyes, adott id tartamra jellemz pulzusszámról, másrészt az eredmény is túl hosszú id re vonatkozó átlag volna. Így tanulságként leszögezhetjük, hogy a Fourier-transzformációt egyszer, s mindenkorra el kell vetnünk, erre a célra nem hatékony, csak a számításigényt növeli nagyságrendileg. Megmarad az id tartománybeli lényegkiemelés alkalmazása, ez azonban igen összetett, és sajnos heurisztikus feladat. Elöljáróban a következ ket szögezhetjük le. A domináns szívritmushoz tartozó ∆t érték biztosan az autokorreláció sorozat széls értékénél található, els sorban maximumhelyek jöhetnek számításba. Semmi nem indokolja, hogy a szívhangok egyik pillanatról a másikra ellentétes fázisban kerüljenek az érzékel re. Tehát a széls értékeket kell nyomon követnünk, regisztrálnunk és osztályoznunk. Az osztályozás szempontjai célszer en a következ k lehetnek: • Abszolút maximum: egyértelm , ahol el fordul, ott a legnagyobb a hasonlóság a görbén belül. • Az adott maximum és a mellette lév két minimum távolsága: a teljesítmény maximummal van összefüggésben. • Az adott maximum csúcsossága: ez egyrészt a mellette lev minimumok távolságával, a meredekséggel, másrészt azzal van kapcsolatban, hogy az adott csúcs mennyire impulzus jelleg ismétl déssel áll összefüggésben. • Az adott maximum helyének többszöröseinél a görbe milyen jellemz kkel rendelkezik: ez a szubharmonikus oszcilláció miatt fontos. • Az el z elfogadott szívritmusnak megfelel pont milyen távolságra van az adott maximumtól: ez a magzati szívritmus véges változási sebességével áll összefüggésben, másrészt azzal, hogy elkerüljük, hogy a rendszer periódus-többszöröz dés esetén a pulzusszám törtrészeinek megfelel értékeket fogadja el helyesnek. • Az elfogadott maximumhely összefüggésben áll azzal, milyen id közönként következhet be a korreláció együtthatók struktúrájának ugrásszer változása, azaz várhatóan milyen id közönként érkeznek újabb szívdobbanások.
Diplomaterv
- 81 -
2001 tavasz
A megvalósítás nehézségei Tekintsük át, mekkora memóriaigénnyel rendelkezik a feldolgozó algoritmus. El ször is a beolvasott hangminták tárolására szükség van egy cirkuláris bufferre, ennek nagysága a jelen korrelációszámítási mód szerint eggyel több, mint kétszerese az autokorreláció legnagyobb számított rendjének, azaz a mintaeltolásnak. Abban az esetben, ha nem vizsgáljuk a szubharmonikus oszcilláció domináns periódusát, ez a mintaszám a 80-as percenkénti minimális pulzusszámhoz tartozó 250 minta. Ennek tárolására 501 bájtnyi adatmemória szükséges, célszer en kerekíthetjük 512-re a buffer egyszer bb kezelése végett. Megemlítjük, hogy a szakaszos üzem algoritmus sem kedvez bb ebb l a szempontból, hiszen ott 400 mintát tartunk a feldolgozó-ablakban, amik éppen a számításhoz szükséges adatokat szolgáltatják, és további 100 mintányi helyre van szükségünk azon minták számára, amiket éppen folyamatosan olvasunk, és még nem vesznek részt a feldolgozásban. A korrelációszámító algoritmushoz szükség van a minták négyzetének tárolására, ami ugyanakkora tárterületet igényel, mint maga a buffer, hacsak nem számítjuk minden esetben ki a minták négyzetét, azonban így sok felesleges m veletet végzünk el, bár a szorzás m velete gyors, futásid szempontjából mégis az el re számítás a kedvez bb. Tárolni kell még a pipe-line m ködtetéséhez a kovarianciák és a szórásnégyzetek becsléseit, ezekb l mindegyikb l annyit, ahány korreláció együtthatót kívánunk kiszámolni, ez 80 és 250 közötti pulzusszám esetén éppen 170, tehát összesen 510 adat, sajnos ezek szószélessége függ a számításra használt minták számától, és nem feltétlenül egy bájt. Tárolnunk kell még a kiszámított autokorreláció együtthatókat, ez szintén 180 darab, de itt elegend 8 bit felbontás, így a csúcsokat osztályozó algoritmus is egyszer lesz. Szükség van még egy táblázatra, amiben a gyökök reciprokait tároljuk, szinten 8 bites együtthatókra, ez ismét 256 bájt. Ezen kívül természetesen szükség van néhány regiszterre magának a programnak a m ködtetéséhez, és a korrelációs csúcsok nyilvántartása is elfoglal kisebb helyet. Így hozzávet leg tárkapacitás tekintetében 2...3 Kbyte igényre számíthatunk. Ha visszatérünk a szakaszos m ködés algoritmusra, akkor ugyan a minták négyzetének tárolása kiesik, mint probléma, azonban a különbség abszolút-értékeket továbbra is tárolni kell, ez azonos paraméterek mellett szintén 180 tárhelyet emészt fel, csak szintén nagy szószélességben, ami akár három bájt is lehet a nagy átlagérték miatt, ez a m veletvégzés idejét tekintve sem kedvez . Tehát a társzükségletbeli különbség ugyan nem elhanyagolható, de nem áll arányban azzal a nehézséggel amit a m veletek mintavételi id pontok közé való elosztása, és a különbségek abszolútérték-összegének id ben ingadozó, nagy pozitív átlagának kezelése jelent. Természetesen pipe-line algoritmus a különbségek abszolútérték-összegének számítására is szerkeszthet , de az id ben változó, nagy pozitív átlag ett l még a számítási mód sajátsága marad. A fenti számításokból kit nik, hogy a feldolgozó algoritmust lehetetlen kizárólag az adatmemória felhasználásával megvalósítani. Lehet ségként felmerül, hogy az adatok egy részét a programmemóriában tároljuk, az eredeti elképzelés ez is volt. Sajnos ennek a megoldásnak egyik hátránya, hogy kiegészít hardver elemeket igényel, amelyek megnövelik a fogyasztást, ráadásul le kell mondanunk az egy tokos kivitelr l. Másik hátrány, hogy a programmemória lassabban férhet hozzá mint az adatmemória, annak ellenére, hogy a programmemóriában egyszerre két bájt érhet el. A hozzáférési id többlet gyakori adatátvitel esetén jelent s végrehajtási id növekedést jelent. F képpen azért jelent ez problémát, mert éppen a mintákat tároló cirkuláris buffert érdemes a programmemóriában megvalósítani, hiszen itt együtt tárolhatók a minták és azok négyzetei 8 bitre kvantálva, és a felhasznált memóriaterület is egybefügg , nincs lapokra osztva, kényelmesebben lehet benne cirkuláris címzést végrehajtani. Azonban a gyártó cég fejlesztési iránya kedvez fordulatot vett, a Microchip ez évi els és második negyedéves hírlevele szerint. Ugyanis a Microchip - a hazai disztribútor állítása szerint egy éven belül - készül piacra lépni néhány, a hírlevélben tervezett, új termékként említett mikrokontrollerrel, amelyek megfelel nek látszanak a feladat megalkuvás nélküli megoldására. Négy érdekl désünkre számot tartó mikrokontroller típus adatai olvashatók az alábbi táblázatban.
Diplomaterv
- 82 -
2001 tavasz
Típusszám PIC18F662 PIC18F672 PIC18F862 PIC18F872
Programmemória [Word] 32768 65536 32768 65536
Bels EEPROM [Byte] 256 256 1024 1024
Adatmemória [Byte] 3072 3968 3072 3968
Ki-/bemeneti lábak száma 52 52 68 68
Órajel frekvencia [MHz] 40 40 40 40
Tokozás 68PLCC 68PLCC 84PLCC 84PLCC
A hírlevél állítása szerint a négy mikrokontrollert a PIC17C7XX család utódának szánják, felülr l kompatibilisek el deikkel, de már az új, fejlettebb processzormaggal készülnek. Minden típus az eddigiekhez képest igen nagynak számító adatmemóriával rendelkezik, a maximális órajelfrekvencia is növekedett kissé. (Feltehet leg más felhasználók is hasonló problémákba ütköztek a PIC17C7XX család alkalmazása során.) A tokozás a régi maradt, el ny volna, ha a lábak funkcióján sem változtatnának túlzottan. Külön kiemelend , hogy mind a négy típus igen nagy bels programmemóriája Flash EPROM típusú, azaz a beégetett program is könny szerrel módosítható. Ez nagy könnyebbséget jelent az egyszer programozható kivitelekkel szemben. Amennyiben a programmemória szektoronként törölhet , akkor abban megoldható lenne a mérés eredményeinek tárolása is, hiszen elképzelhetetlen, hogy az egész programmemória kapacitást feleméssze a feldolgozóprogram. Így a küls Flash EPROM illesztése feleslegessé válna, hacsak nem akarjuk közvetlenül az eredeti hangmintát tárolni. Láthatóan beépítésre kerül még bájtonként írható, olvasható EEPROM is, jelent s kapacitással. Az új kontrollerek 77 utasítással fognak rendelkezni, a hírlevél szerint szoftver verem használata is lehetségessé válik, és a soros-vonali illeszt k is kínálnak többlet lehet ségeket. Sajnos úgy t nik, amennyiben vizsgálni szeretnénk a szubharmonikus oszcilláció domináns periódusát is, nagyobb teljesítmény jelfeldolgozó eszközt kell alkalmaznunk - feltehet leg digitális jelfeldolgozó processzort -, nagyobb tárkapacitással, vagy a mikrokontrollert kell kiegészítenünk kiszolgáló céláramkörökkel, illetve olyan mikrokontrollert kell választanunk, ami rendelkezik ilyenekkel. Az Atmel kezdte meg nemrégiben ilyen mikrokontrollerek gyártását, tanszékünkön egy kísérleti példány ebb l a mikrokontroller típusból fejleszt rendszerrel együtt megtalálható.
Diplomaterv
- 83 -
2001 tavasz
7. Összefoglalás Diplomatervemben a következ feladatok elvégzése került dokumentálásra: • Megismertem a PIC17C7XX mikrokontroller-család felépítését, m ködését, bels eszközei használatát, utasításkészletét. • Az el z ek ismeretében a mikrokontroller-család felhasználásának megkönnyítésére megterveztem és kiviteleztem egy fejleszt rendszert, a hardver és szoftver elemeket is beleértve. • A fejleszt rendszer m ködését igazoltam küls egységek illesztésével, megszereztem az illesztéshez szükséges ismereteket. • Megvizsgáltam a mikrokontroller jelfeldolgozási képességeit és annak korlátait egy digitális sz r megvalósításával és m ködésének vizsgálatával. A digitális sz r megvalósításához, vizsgálatához szükséges ismereteket felkutattam és rendszereztem. A digitális sz r vizsgálatához szükséges személyi számítógépen futó programokat elkészítettem. • A magzati szívhangminták vizsgálatához szükséges matematikai statisztikai fogalmakat áttekintettem. Megismertem és megvizsgáltam egy gyakorlatban m köd feldolgozó algoritmust. A vizsgált algoritmus alapelveinek felhasználásával megvizsgáltam a hatékonyság növelés lehet ségeit egy valósidej , mikrokontroller alapú feldolgozórendszer létrehozásának irányában. • Kidolgoztam egy lehetséges valósidej feldolgozást lehet vé tev , pipe-line elven m köd korreláció számító algoritmust, megvizsgáltam annak indítási feltételeit. Megvizsgáltam és igazoltam az algoritmus m köd képességét, és elkészítettem az ehhez szükséges személyi számítógépen futó szimulátor-programokat. • Magzati szívhangmintákat vizsgáltam az új algoritmus segítségével és felvetettem új diagnosztikai lehet ségeket a hatékonyabb számítási algoritmus folyományaként. • Megvizsgáltam a megvalósítás nehézségeit, és felvázoltam egy lehet séget a fejlesztés további irányával kapcsolatban.
Diplomaterv
- 84 -
2001 tavasz
Függelék F.1. A PIC17C7XX mikrokontroller-család F.1.1. A PIC17C7XX mikrokontroller-család utasításkészlete Terjedelmi okokból a teljes utasításkészlet a CD-ROM mellékletbe került egy külön word for windows 6.0 formátumú állományba, onnan kinyomtatható. Ugyanebben a könyvtárban van még a jelen dokumentumot tartalmazó állomány, és a hozzá tartozó képek. Jelen dokumentum háromféle módon is megtalálható, egy változatban beágyazott képekkel és bet típusokkal. Másik két változatban tömörítve, önkicsomagoló állományként, és tömörítés nélkül. Utóbbiak beágyazások nélkül, az eredeti alkönyvtárszerkezet megtartásával kerültek rögzítésre.
Állománynév Ukeszlet.doc Diplterv.exe DTKep.doc Kivonat.doc Diplomaterv
Diplomaterv
A dokumentumok elérési útja:
\Dokumentumok Tartalom A PIC17C7XX mikrokontroller-család teljes utasításkészlete. Önkicsomagoló állomány, ezt a dokumentumot, és minden alkotórészét tartalmazza, képek beágyazása nélkül. Ez a dokumentum beágyazott képekkel és bet típusokkal A diplomaterv kivonata. Alkönyvtár, amely az eredeti szerkesztéshez használt fájlokat tartalmazza, beágyazások nélkül
- 85 -
2001 tavasz
F.1.2. Perifériális megszakítások kezelése processor pic17c756
;Microprocessor type declaration
;--;--;---
Definitions for unnbanked GPR registers to save status for interrupts
bsrtmp wregtmp alstmp pchtmp fsr0tmp fsr1tmp
equ equ equ equ equ equ
;--;--;---
Definitions for Peripheral Interrupt Registers PIE1 & PIR1 - SFR Bank 1 PIE2 & PIR2 - SFR Bank 4
pie1 #define #define #define #define #define #define #define #define pir1 #define #define #define #define #define #define #define #define
equ rbie tmr3ie tmr2ie tmr1ie ca2ie ca1ie tx1ie rc1ie equ rbif tmr3if tmr2if tmr1if ca2if ca1if tx1if rc1if
17h 17h,7 17h,6 17h,5 17h,4 17h,3 17h,2 17h,1 17h,0 16h 16h,7 16h,6 16h,5 16h,4 16h,3 16h,2 16h,1 16h,0
pie2 #define #define #define #define #define #define #define pir2 #define #define #define #define #define #define #define
equ sspie bclie adie ca4ie ca3ie tx2ie rc2ie equ sspif bclif adif ca4if ca3if tx2if rc2if
11h 11h,7 11h,6 11h,5 11h,3 11h,2 11h,1 11h,0 10h 10h,7 10h,6 10h,5 10h,3 10h,2 10h,1 10h,0
1ah 1bh 1ch 1dh 1eh 1fh
;Temporary ;Temporary ;Temporary ;Temporary ;Temporary ;Temporary
Register Register Register Register Register Register
for for for for for for
BSR WREG ALUSTA PCLATCH FSR0 FSR1
;Address of Peripherial Interrupt Enable 1 Register
;Address of Peripherial Interrupt Request 1 Register
;Address of Peripherial Interrupt Enable 2 Register
;Address of Peripherial Interrupt Request 2 Register
;---
Diplomaterv
- 86 -
2001 tavasz
;--;---
Program memory addresses
nmiadr intadr tm0adr t0cadr peradr
equ equ equ equ equ
;--;--;---
Begining of the program
;---
NMI address to start program org goto
;---
intadr ra0int
;Address of RA0/INT pin interrupt ;Go to the service routine
tm0adr timer0
;Address of TIMER0 interrupt ;Go to the service routine
Go to T0CKI pin interrupt service routine org goto
;--;--;---
;Address of NMI ;Go to program start
Go to TIMER0 overflow interrupt service routine org goto
;---
nmiadr start
Go to RA0/INT pin interrupt service routine org goto
;---
0000h nmiadr+08h nmiadr+10h nmiadr+18h nmiadr+20h
t0cadr t0cki
;Address of T0CKI pin interrupt ;Go to the service routine
Peripheral interrupt service routine
org peradr clrwdt
;Address of peripheral interrupts ;Clear the watchdog timer
;Save status to unbanked memory movfp movfp movfp movfp movfp movfp
bsr,bsrtmp wreg,wregtmp alusta,alstmp pclatch,pchtmp fsr0,fsr0tmp fsr1,fsr1tmp
;BSR ;WREG ;ALUSTA ;PCLATCH ;FSR0 ;FSR1
;Main service routine, it starts subroutines which is necessary. movlb
1
;Select SFR Bank 1 for PIR1 register
btfss goto btfsc call
rbif norb rbie portb
;It was a PORTB interrupt request ? ;No, trying next ;Yes. PORTB interrupt is enabled ? ;Yes, going to service it
Diplomaterv
- 87 -
2001 tavasz
norb
btfss goto btfsc call
tmr3if notmr3 tmr3ie timer3
;It was a TIMER3 interrupt request ? ;No, trying next ;Yes. TIMER3 interrupt is enabled ? ;Yes, going to service it
notmr3 btfss goto btfsc call
tmr2if notmr2 tmr2ie timer2
;It was a TIMER2 interrupt request ? ;No, trying next ;Yes. TIMER2 interrupt is enabled ? ;Yes, going to service it
notmr2 btfss goto btfsc call
tmr1if notmr1 tmr1ie timer1
;It was a TIMER1 interrupt request ? ;No, trying next ;Yes. TIMER1 interrupt is enabled ? ;Yes, going to service it
notmr1 btfss goto btfsc call
ca2if nocap2 ca2ie capture2
;It was a CAPTURE2 interrupt request ? ;No, trying next ;Yes. CAPTURE2 interrupt is enabled ? ;Yes, going to service it
nocap2 btfss goto btfsc call
ca1if nocap1 ca1ie capture1
;It was a CAPTURE1 interrupt request ? ;No, trying next ;Yes. CAPTURE1 interrupt is enabled ? ;Yes, going to service it
nocap1 btfss goto btfsc call
rc1if nous1rc rc1ie us1rc
;It was an USART1 Receive interrupt ? ;No, trying next ;Yes. USART1 Receive interrupt is enabled ? ;Yes, going to service it
nous1rc btfss goto btfsc call
tx1ie nous1tx tx1if us1tx
;USART1 Transmit interrupt is enabled ? ;No, trying next ;Yes. It was an USART1 Transmit interrupt ? ;Yes, going to service it
nous1tx movlb
4
btfss goto btfsc call
sspif nossp rc2ie sspint
;It was a SSP interrupt ? ;No, trying next ;Yes. SSP interrupt is enabled ? ;Yes, going to service it
nossp
btfss goto btfsc call
bclif nobcl bclie bclint
;It was a Bus Collosion interrupt ? ;No, trying next ;Yes. Bus Collosion interrupt is enabled ? ;Yes, going to service it
nobcl
btfss goto btfsc call
adif noad adie adint
;It was a A/D interrupt ? ;No, trying next ;Yes. A/D interrupt is enabled ? ;Yes, going to service it
noad
btfss goto btfsc call
ca4if nocap4 ca4ie capture4
;It was a CAPTURE4 interrupt request ? ;No, trying next ;Yes. CAPTURE4 interrupt is enabled ? ;Yes, going to service it
Diplomaterv
- 88 -
2001 tavasz
nocap4 btfss goto btfsc call
ca3if nocap3 ca3ie capture3
;It was a CAPTURE3 interrupt request ? ;No, trying next ;Yes. CAPTURE3 interrupt is enabled ? ;Yes, going to service it
nocap3 btfss goto btfsc call
rc2if nous2rc rc2ie us2rc
;It was an USART2 Receive interrupt ? ;No, trying next ;Yes. USART2 Receive interrupt is enabled ? ;Yes, going to service it
nous2rc btfss goto btfsc call
tx2ie nous2tx tx2if us2tx
;USART2 Trnasmit interrupt is enabled ? ;No, trying next ;It was an USART2 Transmit interrupt ? ;Yes, going to service it
;Restore status from unbanked memory nous2tx movfp movfp movfp movfp movfp movfp
fsr1tmp,fsr1 fsr0tmp,fsr0 pchtmp,pclatch alstmp,alusta wregtmp,wreg bsrtmp,bsr
;FSR1 ;FSR0 ;PCLATCH ;ALUSTA ;WREG ;BSR
;Return from the peripheral interrupt retfie
Diplomaterv
;Return from interrupt to main program
- 89 -
2001 tavasz
F.2. A fejleszt rendszer F.2.1. A fejleszt kártya gyártási dokumentációja A következ oldalakon kinyomtatva megtalálható a fejleszt kártya áramköri kapcsolási rajza, alkatrész beültetési rajza, beültetési és forrasztási oldalának rajzolata. Azonban kényelmi okokból, a könnyebb kezelhet ség végett az összes vonatkozó állomány megtalálható a CD-ROM mellékletben is OrCAD 3 formátumban.
Állománynév PIC17756.sch PIC17756.txt PIC17756.lib PIC17756.net PIC17756.brd MOD
Diplomaterv
Az állományok elérési útja: \PICWorks\PICOrC Tartalom A fejleszt kártya kapcsolási rajza. A kapcsolási rajzhoz szükséges alkatrészkönyvtár szöveges formátumban. A kapcsolási rajzhoz szükséges alkatrészkönyvtár OrCAD bels formátumban. A kapcsolási rajz alapján lefordított netlista. A fejleszt kártya nyomtatott áramköri lapjának állománya. A nyomtatott áramköri laphoz szükséges modulok lenyomatait tartalmazó könyvtár.
- 90 -
2001 tavasz
A fejelsztõkártya kapcsolási rajza
- 91 -
A fejlesztõkártya alkatrész-beültetési rajza
- 92 -
A fejlesztõkártya alkatrész-beültetési oldalának rajzolata
- 93 -
A fejlesztõkártya forrasztási oldalának rajzolata
- 94 -
A fejleszt kártyához szükséges alkatrészek jegyzéke Az alapkiépítéshez szükséges alkatrészek:
Darabszám 2 2 2 1 4 4
Darabszám 6 2 3 5 1 2
Csatlakozók Megnevezés 9 pólusú NYÁK-ba ültethet 90°-os DSUBM csatlakozó (papa) 9 pólusú DSUBF aljzat (mama,leng );(ez az ALJZAT, fenti a DUGO) 9 pólusú csatlakozóhoz tartozó ház (az el z höz) 3.5"-os sztereó kapcsolós NYÁK-ba ültethet „jack” aljzat (tápcsatlakozó) 10 pólusú NYÁK-ba ültethet szalagkábel csatlakozó (tüskesor) 10 pólusú szalagkábel csatlakozó (amit az el z be kell dugni) IC foglalatok Megnevezés 28 lábú precíziós IC foglalat 20 lábú precíziós IC foglalat 16 lábú precíziós IC foglalat 14 lábú precíziós IC foglalat 68 lábú furatba szerelhet (beforrasztható) PLCC foglalat (lábak egész raszteren) 32 lábú furatba szerelhet (beforrasztható) PLCC foglalat (lábak egész raszteren) IC-k
Darabszám 1 1 2 2 2 1 1 1 1 1 1
Megnevezés 18.432Mhz-es oszcillátor (4 lábú, fémtokos) PIC17C756-33/L mikrokontroller (33Mhz, PLCC foglalat, OTP) Am27C128-55 (esetleg -120) gyors 128Kbit-es CMOS EPROM 6264 statikus RAM (lehet leg gyors változat) 74ALS373 (vagy HCT) 74ALS138 (vagy HCT) 74ALS08 (vagy HCT) 74LS06 MAX232 szintilleszt 7805 stabilizátor B250C1500 Graetz híd Kondenzátorok
Darabszám 20 9 4 1
Megnevezés 100nF többréteg (multilayer) kerámia kondenzátor, 1 raszteres 100nF többréteg (multilayer) kerámia kondenzátor, 2 raszteres 1µF 63V stiroflex kocka kondenzátor, 3 raszteres 1000µF 35V elektrolit kondenzátor
Darabszám 7 6 2
Megnevezés 470Ω 1kΩ 10kΩ
Ellenállások
Diplomaterv
- 95 -
2001 tavasz
Diódák Darabszám 1 1 2
Megnevezés ZPD 15V ZPD 5V6 1N4148 LED-ek
Darabszám 1 2 2 2
Megnevezés 5mm-es piros LED 5mm-es zöld LED 5mm-es kék LED 5mm-es sárga LED Egyebek
Darabszám 1 1 23
Megnevezés 4 lábú HALL kapcsoló (Lomex Kft.) H t borda TO-220-as tokhoz (a stabilizátor IC-re) Jumper
Továbbá: •Legalább 206 tüskényi tördelhet tüskesor hosszú (>17) darabokban •4m 10 eres árnyékolt vezeték (pl. 'security cable') •1m 10 eres szalagkábel További alkatrészek teljes kiépítettség esetén: IC-k Darabszám 4 2 1 1 1 2 1 10
Megnevezés MCM6202 statikus RAM (6264 helyett) Am27F010 (vagy Am27F040) 74ALS32 (vagy HCT) 74ALS27 (vagy HCT) 74ALS04 (vagy HCT) További négylábú, fémházas oszcillátorok, igény szerint DIP8 kapcsolósor Jumper
Természetesen az EPROM típusa tetsz legesen megválasztható, lásd a fejleszt rendszerr l szóló fejezetet és a következ függeléket.
Diplomaterv
- 96 -
2001 tavasz
A fejleszt kártya jumper-einek rendeltetése Soros vonali szintilleszt áramkör Név JP_A1 JP_A2 JP_A3 PIN_RI1 JP_A4 JP_A5 JP_A6 PIN_RI2 JP_T1 JP_R1 JP_T2 JP_R2
Funkció 1. aszinkron soros vonali csatlakozó RTS-CTS visszahurkolás 1. aszinkron soros vonali csatlakozó DTR-DSR visszahurkolás 1. aszinkron soros vonali csatlakozó DTR-DCD visszahurkolás 1. aszinkron soros vonali csatlakozó RI kivezetés 2. aszinkron soros vonali csatlakozó RTS-CTS visszahurkolás 2. aszinkron soros vonali csatlakozó DTR-DSR visszahurkolás 2. aszinkron soros vonali csatlakozó DTR-DCD visszahurkolás 2. aszinkron soros vonali csatlakozó RI kivezetés Mikrokontroller-szintilleszt TX1 vonal összekötés Mikrokontroller-szintilleszt RC1 vonal összekötés Mikrokontroller-szintilleszt TX2 vonal összekötés Mikrokontroller-szintilleszt RC2 vonal összekötés Megjegyzés A visszahurkolásokra a PC-vel való kommunikáció miatt van szükség, mivel a mikrokontrollerrel nem állítunk el handshake jeleket. Természetesen ezek a visszahurkolások a csatlakozóban is létrehozhatók. Az összekötések eltávolításával a szintilleszt áramkör teljesen leválasztható a mikrokontrollerr l, amennyiben nincs szükség a beépített soros vonali illeszt kre, viszont a hozzá tartozó lábakat közönséges ki-/bemeneti vonalként szeretnénk használni. Órajelgenerátor kiválasztás Funkció Az els oszcillátor kimenetének összekötése a mikrokontroller OSC1/CLKIN lábával A második oszcillátor kimenetének összekötése a mikrokontroller OSC1/CLKIN lábával A harmadik oszcillátor kimenetének összekötése a mikrokontroller OSC1/CLKIN lábával Kvarckristály els kivezetésének összekötése a mikrokontroller OSC1/CLKIN lábával Kvarckristály második kivezetésének összekötése a mikrokontroller OSC2/CLKOUT lábával Megjegyzés Az els három jumper közül egyszerre pontosan egy lehet zárt állapotban. Ekkor a mikrokontrollernek küls oszcillátor jelének fogadására beállított állapotban kell lennie (EC - External Clock Input), ez a gyári alapállapot. Ekkor az OSC2/CLKOUT lábon megjelenik a bemeneti órajel negyed része, ez az utasítás-végrehajtás órajele, felhasználható küls egységek szinkronizálására. Amennyiben kristályt szeretnénk illeszteni az órajel bemenetre, csak pontosan az utolsó két jumper lehet zárt állapotú, ekkor a mikrokontrollernek küls kristályt illetve rezonátort támogató üzemmódba beállítva kell lennie (XT Crystal/Resonator vagy LF - Low Power Crystal). Utóbbi esetben a szükséges kiegészít alkatrészek értékeit (kapacitások, ellenállás, induktivitás) kísérletileg célszer meghatározni. A kristály fémburkolatának földelésére a kártyán lehet ség biztosított. A mikrokontroller képes RC oszcillátor üzemmódban is m ködni (RC - Resistor/Capacitor), ekkor az OSC1/CLKIN lábra kell kapcsolni a tápfeszültségek közé kapcsolt soros RC osztó középs pontját, ezt az els három jumper valamelyikének segítségével tehetjük meg a legegyszer bben, az OSC2/CLKOUT lábon ekkor is megjelenik az órajel negyedrésze. Az oszcillátorok foglalatainál a két tápfeszültség biztosított, ide helyezhetjük az RC osztót. Név JP_O1 JP_O2 JP_O3 JP_O4 JP_O5
Diplomaterv
- 97 -
2001 tavasz
EPROM típusának beállítása Funkció Az els foglalatpár 1-es lábait a mikrokontroller A15 címvonalára kapcsolja. Az els foglalatpár 1-es lábait a tápfeszültségre kapcsolja. Az els foglalatpár 26-os lábait a mikrokontroller A13 címvonalára kapcsolja. Az els foglalatpár 27-es lábait a mikrokontroller A14 címvonalára kapcsolja Az els foglalatpár 27-es lábait a tápfeszültségre kapcsolja. Megjegyzés A megfelel beállítás a 4.2. fejezet végén található táblázat alapján elvégezhet , könnyebb kezelhet ség kedvéért ez a táblázat, és a beállításokat tartalmazó itt is megtalálható. Név JPM1_1A JPM1_1B JPM1_26 JPM1_27A JPM1_27B
SRAM-ok típusának beállítása Név JPM2_1 JPM2_26A JPM2_26B JPM3_1 JPM3_26A JPM3_26B
Funkció A második foglalatpár 1-es lábait a mikrokontroller A14 címvonalára kapcsolja. A második foglalatpár 26-os lábait a mikrokontroller A13 címvonalára kapcsolja. A második foglalatpár 26-os lábait a tápfeszültségre kapcsolja. A harmadik foglalatpár 1-es lábait a mikrokontroller A14 címvonalára kapcsolja. A harmadik foglalatpár 26-os lábait a mikrokontroller A13 címvonalára kapcsolja. A harmadik foglalatpár 26-os lábait a tápfeszültségre kapcsolja. Megjegyzés A megfelel beállítás a 4.2. fejezet végén található táblázat alapján elvégezhet , könnyebb kezelhet ség kedvéért ez a táblázat, és a beállításokat tartalmazó itt is megtalálható. Lábszám Memóriatípus Am27C64 Am27C128 Am27C256 Am27C512 MCM6264 MCM6202
Jumper JPM1_1A JPM1_1B JPM1_26 JPM1_27A JPM1_27B
1 Vpp Vpp Vpp A15 NC A14
22 OE# OE# OE# OE#/Vpp OE# OE#
Am27C64 Nyitott Zárt Nyitott Nyitott Zárt
EPROM típus Am27C128 Am27C256 Nyitott Nyitott Zárt Zárt Zárt Zárt Nyitott Zárt Zárt Nyitott
Jumper JPM2_1 JPM2_26A JPM2_26B JPM3_1 JPM3_26A JPM3_26B
Diplomaterv
26 NC A13 A13 A13 CE A13
27 PGM# PGM# A14 A14 WR# WR#
Am27C512 Zárt Nyitott Zárt Zárt Nyitott
SRAM típus MCM6264 MCM6202 Nyitott Zárt Nyitott Zárt Zárt Nyitott Nyitott Zárt Nyitott Zárt Zárt Nyitott
- 98 -
2001 tavasz
Memóriatérkép beállítása Név JPM1_CE2 JPM1_CE1 JPM1_CE3 JPM1_CE4 JPM1_CE5 JPM2_CE1 JPM2_CE2 JPM2_CE3 JPM2_CE4 JPM3_CE1 JPM3_CE2 JPM3_CE5 JPM3_CE3 JPM3_CE4 JPMF_CE1 JPMF_CE2 JPMF_CE3 JPMF_CE4 JPMF_CE5 JPMF_CE6 JPMF_CE7
Funkció Az els foglalatpár kiválasztása az els 8 KW memóriaterületre. ($0000-$1FFF). Az els foglalatpár kiválasztása az els 16 KW memóriaterületre. ($0000-$3FFF) Az els foglalatpár kiválasztása az alsó 32 KW memóriaterületre. ($0000-$7FFF) Az els foglalatpár kiválasztása a teljes 64 KW memóriaterületre. ($0000-$FFFF) Az els foglalatpár kiválasztó bemenetének tápfeszültségre kapcsolása. (tiltás) A második foglalatpár kiválasztása az els 8 KW memóriaterületre. ($0000-$1FFF). A második foglalatpár kiválasztása a harmadik 8 KW memóriaterületre. ($4000-$5FFF). A második foglalatpár kiválasztása az alsó 32 KW memóriaterületre. ($0000-$7FFF) A második foglalatpár kiválasztó bemenetének tápfeszültségre kapcsolása. (tiltás) A harmadik foglalatpár kiválasztása a második 8 KW memóriaterületre. ($2000-$3FFF). A harmadik foglalatpár kiválasztása a negyedik 8 KW memóriaterületre. ($6000-$7FFF). A harmadik foglalatpár kiválasztása a negyedik 8 KW memóriaterületre. ($8000-$9FFF). A harmadik foglalatpár kiválasztása a fels 32 KW memóriaterületre. ($8000-$FFFF) A harmadik foglalatpár kiválasztó bemenetének tápfeszültségre kapcsolása. (tiltás) A Flash memóriák kiválasztása az els 16 KW memóriaterületre. ($0000-$3FFF). A Flash memóriák kiválasztása a harmadik 16 KW memóriaterületre. ($8000-$BFFF). A Flash memóriák kiválasztása a negyedik 16 KW memóriaterületre. ($C000-$FFFF). A Flash memóriák kiválasztása a teljes 64 KW memóriaterületre. ($0000-$FFFF) A Flash memóriák kiválasztó bemenetének tápfeszültségre kapcsolása. (tiltás) A Flash memóriák kiválasztása az alsó 32 KW memóriaterületre. ($0000-$7FFF). A Flash memóriák kiválasztása a fels 32 KW memóriaterületre. ($8000-$FFFF). Megjegyzés A következ táblázatban az írás és olvasás kiválasztó vonalak beállításai megtalálhatók, a memóriatérképet ennek figyelembevételével kell beállítani. Egyszerre egy memória területen pontosan egy memória szabad, hogy olvasható legyen, különben különböz memóriatartalom esetén az adatkimeneteken keresztirányú áram folyik két eszköz között, ami a tápfeszültség integrált áramkörökön keresztüli rövidre zárását jelenti, és a kimeneti meghajtó fokozatok tönkremeneteléhez vezethet, amennyiben azok nem rendelkeznek bels áramkorlátozással. Ezen kívül egy memória egyszerre pontosan egy helyre lehet kiválasztva, különben a kiválasztó áramkörök mennek tönkre hasonló módon, mivel nem nyitott kollektoros kimenet ek. Az A13 címvonal a Flash memória esetén megbonthatatlanul be van kötve, ezért lapozható csak 16KW egységekben.
Diplomaterv
- 99 -
2001 tavasz
A lapozó logika beállítása Név JPROMS
Funkció Zárt állapotában a ROM kiválasztó jelet az RE3 kimenet szolgáltatja, nyitott állapotában értékét egy DIP kapcsoló határozza meg. JPM1_OE1 Zárt állapotában a mikrokontroller OE# kimenete közvetlenül kapcsolódik az els foglalatpár OE# bemenetére. Nincs lapozás. Ez az alapállapot. JPMF_OE1 Zárt állapotában a mikrokontroller OE# kimenete közvetlenül kapcsolódik a Flash memóriák OE# bemenetére. Nincs lapozás. Ez az alapállapot. JPM1_OE2 Zárt állapotában a mikrokontroller OE# kimenete a lapozó logikán keresztül kapcsolódik az els foglalatpár OE# bemenetére. JPMF_OE2 Zárt állapotában a mikrokontroller OE# kimenete a lapozó logikán keresztül kapcsolódik a Flash memóriák OE# bemenetére. JPM2_OE1 Zárt állapotában a mikrokontroller OE# kimenete a lapozó logikán keresztül kapcsolódik a második foglalatpár OE# bemenetére. JPM3_OE1 Zárt állapotában a mikrokontroller OE# kimenete a lapozó logikán keresztül kapcsolódik a harmadik foglalatpár OE# bemenetére. JPM2_OE2 Zárt állapotában a mikrokontroller OE# kimenete közvetlenül kapcsolódik a második foglalatpár OE# bemenetére. Nincs lapozás. Ez az alapállapot. JPM3_OE2 Zárt állapotában a mikrokontroller OE# kimenete közvetlenül kapcsolódik a harmadik foglalatpár OE# bemenetére. Nincs lapozás. Ez az alapállapot. JP_CEE A lapozó logika az els foglalatpár kiválasztó jelét veszi alapul a m ködéséhez, ez az alapállapot, amennyiben a lapozást engedélyeztük. JP_CEF A lapozó logika a Flash memóriák kiválasztó jelét veszi alapul a m ködéséhez, ekkor a Flash memória töltheti be az EPROM szerepét. Megjegyzés A lapozó logika feladata, hogy párhuzamosan átlapolódó memóriaterületek kezelését lehet vé tegye. Kizárólagosan csak vagy az els foglalatpár (EPROM) vagy a Flash EPROM lehet átlapolva az SRAM-okkal. Ha az EPROM-ból szeretnénk adatot átvinni a Flash EPROM-ba, azt más módon kell, hogy megtegyük, ezek nem lehetnek ugyanarra a memóriaterületre kiválasztva. A lapozó logika lehet vé teszi, hogy egy kiválasztójel függvényében, amely a ROM nevet viseli, annak aktív, egyes értéke mellett valamely ROM-ból olvassunk, nulla értéke mellett a RAM-ból, amennyiben ezek egyszerre vannak kiválasztva. A RAM-ok írás engedélyez bemenetei megbonthatatlanul be vannak huzalozva, írni csak a RAM-okba tudunk. Ha a Flash EPROM-mal van átlapolva valamelyik RAM, célszer a Flash EPROM írását letiltani (lásd kés bb), bár igazából nem áll fenn a felülírás veszélye, hiszen itt nem közvetlenül a memóriát tudjuk írni. A lapozás használata el tt célszer a kapcsolási rajz alapos áttanulmányozása, a lapozás mechanizmusa igazán onnan válik érthet vé.
A Flash EPROM beállítása Név JPMF_WR1
Funkció Zárt állapota engedélyezi a Flash EPROM-ba írást. Összekapcsolja a mikrokontroller WR# kimenetét a Flash EPROM WR# bemenetével. JPMF_WR2 Zárt állapota tiltja a Flash EPROM-ba írást. Összekapcsolja a tápfeszültséget a Flash EPROM WR# bemenetével. JPPAGE Összeköti a Flash EPROM A16 címbemenetét a mikrokontroller RE3 lábával. JPA1 Összeköti a Flash EPROM A15 címbemenetét a mikrokontroller A15 címvonalával. JPA2 Összeköti a Flash EPROM A14 címbemenetét a mikrokontroller A14 címvonalával. JPFA1 Összeköti a Flash EPROM A18 címbemenetét a mikrokontroller RF4 lábával. (Csak Am29F040) JPFA2 Összeköti a Flash EPROM A17 címbemenetét a mikrokontroller RF3 lábával. (Csak Am29F040) JPFA3 Összeköti a Flash EPROM A16 címbemenetét a mikrokontroller RF2 lábával. JPFA4 Összeköti a Flash EPROM A15 címbemenetét a mikrokontroller RF1 lábával. JPFA5 Összeköti a Flash EPROM A14 címbemenetét a mikrokontroller RF0 lábával. Megjegyzés A memóriatérkép beállításai fentebb már megtalálhatóak, didaktikai szempontból tárgyalásuk ott volt indokolt. Az itt felsorolt jumper-ek az írásvédelmet, és a lapozást, a tárkapacitás teljes kihasználását biztosítják.
Diplomaterv
- 100 -
2001 tavasz
F.2.2. A fejleszt rendszerhez szükséges programok
Állománynév mon.asm comp.bat export.bat execute.bat c.bat cleanup.bat led.asm
Az állományok elérési útja: \PICWorks\PICASM\Sources Tartalom A fejleszt kártyán futó monitorprogram forráskódja. A programfordítást, letöltést és indítást végz batch file. Csak programletöltést végz batch file. Csak programindítást végz batch file. Csak programfordítást végz batch file. (Szintaktikai ellen rzéshez.) A fordító által generált állományokat törli le. A rendszer helyes m ködésének ellen rzésére szolgáló egyszer program.
Állománynév inth2out.pas maketxt.pas inth2out.exe Maketxt.exe
Az állományok elérési útja: \PICWorks\PICASM\Convert Tartalom Az Intel-hex -> bináris kódátalakító program forráskódja. A letöltéshez szükséges fejléceket el állító program forráskódja. A fenti program lefordított, futtatható változata. A fenti program lefordított, futtatható változata.
Az állományok elérési útja: \PICWorks\PICASM\Compiler Állománynév Tartalom mpasm.exe A Microchip assembly fordítója.
Diplomaterv
- 101 -
2001 tavasz
F.3. Küls perifériák illesztése a fejleszt rendszerhez F.3.1. Flash memória illesztése A Flash memória bekötése Lábszám 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Funkció A18 címvonal A16 címvonal A15 címvonal A12 címvonal A7 címvonal A6 címvonal A5 címvonal A4 címvonal A3 címvonal A2 címvonal A1 címvonal A0 címvonal D0 adatvonal D1 adatvonal D2 adatvonal Gnd tápfeszültség
Lábszám 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Funkció D3 adatvonal D4 adatvonal D5 adatvonal D6 adatvonal D7 adatvonal CE# kiválasztójel A10 címvonal OE# olvasás engedélyezés A11 címvonal A9 címvonal A8 címvonal A13 címvonal A14 címvonal A17 címvonal WR# írás engedélyezés Vcc tápfeszültség
A memória hardver illesztésével kapcsolatos többi információ a vonatkozó fejezetben és az F:2.1. függelékben található, a fejleszt kártya hardver leírásánál. A Flash memória vezérl programja A Flash memória vezérlését megvalósító program terjedelmi okokból a CD-ROM mellékletben található.
Állománynév flash.asm
Diplomaterv
Az állományok elérési útja: \PICWorks\PICASM\Sources Tartalom A Flash EPROM vezérl programjának forráskódja.
- 102 -
2001 tavasz
F.3.2. Pontmátrix folyadékkristályos kijelz illesztése Az folyadékkristályos kijelz bekötése
Sorszám 1 2 3 4 5 6 7 8 9 10
Név Vdd Vss Vlc DB0 DB1 DB2 DB3 DB4 DB5 DB6
Kijelz DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 Vlc
Az LCD kijelz vonalai Funkció Sorszám Név Pozitív tápfeszültség, +5V 11 DB7 Viszonyítási pont, 0V 12 CS1# Negatív kontraszt feszültség, -8V 13 CS2# Adatvezeték 14 RST# Adatvezeték 15 R/W# Adatvezeték 16 D/I# Adatvezeték 17 E Adatvezeték 18 Fgnd Adatvezeték 19 NC Adatvezeték 20 NC
Funkció Adatvezeték Bal félkép kiválasztása Jobb félkép kiválasztása Alaphelyzetbe állítás Írás/olvasás választó Adat/utasítás választó Engedélyez vonal Fémkeret kivezetése Nincs bekötve Nincs bekötve
A kijelez és a mikrokontroller összekapcsolása Mikrokontroller Kijelz RF0 E RF1 D/I# RF2 R/W# RF3 CS1# RF4 CS2# RF5 RST# RF6 Vdd RF7 Vss -8V Fgnd
Mikrokontroller RB0 RB1 RB2 RB3 RB4 MCLR# +5V Gnd Gnd
Az folyadékkristályos kijelz vezérl programja
Utasítás R/W# Kijelz be/ki 0 Kezd sor beállítás 0 X-cím (lap) beállítás 0 Y-cím beállítás 0 Státusz olvasás 1 Adat írás 0 Adat olvasás 1
D/I# 0 0 0 0 0 1 1
A kijelz utasításkészlete DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 1 1 1 1/0 1 1 Kezd sor (0 – 63) 1 0 1 1 1 X-cím (lap) 0 1 Y-cím (0 – 63) Foglalt 0 Be#/Ki Reset 0 0 0 0 Kiírandó adat Beolvasott adat
A folyadékkristályos kijelz vezérlését megvalósító program terjedelmi okokból a CD-ROM mellékletben található.
Állománynév hello.asm
Diplomaterv
Az állományok elérési útja: \PICWorks\PICASM\Sources Tartalom A folyadékkristályos kijelz vezérl programjának forráskódja.
- 103 -
2001 tavasz
F.4. Jelfeldolgozási alkalmazások F.4.1.Digitális sz r megvalósítása
A digitális sz r teljes programja A digitális sz r teljes programja terjedelmi okokból a CD-ROM mellékletben található.
Állománynév iirdir2.asm
Az állományok elérési útja: \PICWorks\PICASM\Sources Tartalom Az IIR sz r programjának forráskódja.
A személyi számítógépen futó ellen rz program részei A személyi számítógépen futó ellen rz program részeinek forráskódja terjedelmi okokból a CD-ROM mellékletben található.
Állománynév asyn.pas complex.pas fileread.pas fourier.pas filtpic.pas filtsim.pas draw.pas signals.pas scrnshot.pas filtdemo.pas
Az állományok elérési útja: \PICWorks\Pascal\FiltrPas Tartalom Az aszinkron vonali kommunikációt támogató modul (Unit) forráskódja. A komplex számokkal való m veletvégzést támogató modul (Unit) forráskódja. A tárolt hangminták olvasását támogató modul (Unit) forráskódja. A gyors Fourier-transzformációt végz modul (Unit) forráskódja. A mikrokontrollerben futó sz r vel kapcsolatot tartó modul (Unit) forráskódja. A sz r lebeg pontos szimulátorát tartalmazó modul (Unit) forráskódja. A grafikus megjelenítést támogató modul (Unit) forráskódja. Egyéb jelfeldolgozással kapcsolatos eljárások és deklarációk gy jteménye. A grafikus képerny tartalmának elmentésére szolgáló modul (Unit) forráskódja. A modulokat összefogó, és felhasználó ellen rz program forráskódja.
F.4.2. Magzati szívhangok feldolgozása A személyi számítógépen futó szimulátor programok és tartozékaik forráskódja terjedelmi okokból a CD-ROM mellékletben található.
Állománynév fileread.pas draw.pas signals.pas scrnshot.pas analyzer.pas create.pas
Diplomaterv
Az állományok elérési útja: \PICWorks\Pascal\CorComp Tartalom A tárolt hangminták olvasását támogató modul (Unit) forráskódja. A grafikus megjelenítést támogató modul (Unit) forráskódja. Jelfeldolgozással kapcsolatos eljárások és deklarációk gy jteménye. A grafikus képerny tartalmának elmentésére szolgáló modul (Unit) forráskódja. A hasonlósági jellemz k összehasonlításához készült program forráskódja. Az idealizált szívhangmintát el állító program forráskódja.
- 104 -
2001 tavasz
Állománynév cortesto.pas cortestn.pas dataread.pas cormovie.pas peakdet.pas
Állománynév tvga.pas shottvga.pas dataread.pas cmpr.pas cor_nois.pas cmapold.pas cormap.pas cormpgen.pas olddatcm.pas
Az állományok elérési útja: \PICWorks\Pascal\CorVGA Tartalom Az els korrelációszámító algoritmus ellen rz programjának forráskódja. A második korrelációszámító algoritmus ellen rz programjának forráskódja. A tárolt hangminták olvasását támogató modul (Unit) forráskódja. A mozgóképszer megjelenítést végz program forráskódja. A mozgóképszer megjelenítést és csúcskeresést végz program forráskódja.
Az állományok elérési útja: \PICWorks\Pascal\CorT8900 Tartalom A Trident 8900D típusú grafikus kártyával való kapcsolattartást támogató modul (Unit) forráskódja. A 256 szín grafikus képek elmentését megvalósító modul (Unit) forráskódja. A tárolt hangminták olvasását támogató modul (Unit) forráskódja. A két korrelációszámítási mód összevetését segít program forráskódja. A második módon számított korrelációs együtthatókat a hangjellel együtt megjelenít program forráskódja. Az els módszer szerint számolt, átlagolt szívhang térképet készít program forráskódja. A második módszer szerint számolt, átlagolt szívhang térképet készít program forráskódja. Szívhang térképeket sorozatosan el állító program forráskódja. Régi formátumú adatfájlokról szívhangtérképet készít program forráskódja..
A régi formátumú adatfájlok helye: \PICWorks\Pascal\OldData Az új formátumú adatfájlok helye: \PICWorks\Pascal\NewData
Diplomaterv
- 105 -
2001 tavasz
Irodalomjegyzék Leírások [1] PIC17C7XX Data Sheet. Microchip Technology Incorporated, Chandler, USA, 1998 [2] Flash Memory Products 1992/1993 Data Book/Handbook, Advanced Micro Devices Inc., Sunnyvale, USA, 1993 [3] Liquid Crystal Display Module G121600N000 User’s Manual, Seiko Instruments Inc., Japan, 1993
Könyvek [4] Csáki Frigyes, Bars Ruth: Automatika. Tankönyvkiadó, Budapest, 1972 [5] Csáki Frigyes: Szabályozások dinamikája. Akadémiai kiadó, Budapest, 1970 [6] Fodor György: Hálózatok és rendszerek analízise 1. rész. M egyetemi Kiadó, Budapest, 1995 [7] Fodor György: Hálózatok és rendszerek analízise 3. rész. M egyetemi Kiadó, Budapest, 1997 [8] Freud Róbert, Gyarmati Edit: Számelmélet. Nemzeti Tankönyvkiadó, Budapest, 2000 [9] Gál Tibor: Digitális rendszerek I. kötet. M egyetemi Kiadó, Budapest, 1995 [10] Gál Tibor: Digitális rendszerek II. kötet. M egyetemi Kiadó, Budapest, 1995 [11] James Gleick: Káosz. Egy új tudomány születése. Göncöl Kiadó, Budapest, 2000 [12] Gordos Géza, Takács György: Digitális beszédfeldolgozás. M szaki Könyvkiadó, Budapest, 1983 [13] Hunyadi László, Mundruczó György, Vita László: Statisztika. Aula Kiadó, Budapest, 1997 [14] Samuel Karlin, Howard M. Taylor: Sztochasztikus folyamatok. Gondolat, Budapest, 1985 [15] Lukács Ottó: Matematikai statisztika. M szaki Könyvkiadó, Budapest, 1987 [16] Simonyi Ern : Digitális sz r k. M szaki Könyvkiadó, Budapest, 1984 [17] Szabó László Imre: Ismerkedés a fraktálok matematikájával. JATE Bolyai Intézet, Szeged, 1997 [18] Székely Vladimír: Képkorrekció, hanganalízis, térszámítás PC-n. ComputerBooks, Budapest 1997 [19] Tusnády Gábor, Ziermann Margit: Id sorok analízise. M szaki Könyvkiadó, Budapest, 1986
Folyóirat és konferenciacikkek [20] F. Kovacs, M. Torok, I. Habermajer: "A Rule-based Phonocardiographic Method for Long-Term Fetal Heart Rate Monitoring", IEEE Trans. On Biomedical Engineering, Vol. 47, No.1., (Jan. 2000), pp 124-130 [21] F. Kovacs, M. Torok: "Telemonitoring of Gestation Using Acoustical Signals for FHR Measurements", Proc. of Int. Conf. on Medicine 2000, Montreal, June 19-23, 1996, pp 57 [22] F. Kovacs, M. Torok: "An Instrument Using Parallel Filtering of Acoustic Signals to Record Fetal Heart Rate", Biomedical Instrumentation and Technology, 1995 October [23] Arthur T. Winfree: Sudden Cardiac Death: Problem in Topology. Scientific American 248 (May 1983), pp. 144. [24] Michael R. Guevara, Leon Glass, and Alvin Schrier: Phase Locking, Period-Doubling Bifurcations, and Irregular Dynamics in Periodically Stimulated Cardiac Cells. Science 214 (1981), pp. 1350. [25] Ary L. Goldberger, Valmik Bhargava, Bruce J. West, Arnold J. Mandell: Nonlinear dynamics of the heartbeat. Physica 17D (1985) pp. 207-214
Honlapok [26] http://www.microchip.com [27] http://www.amd.com
Diplomaterv
- 106 -
2001 tavasz