<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
13.2. Kétirányú digitális I/O áramkör (1. változat)
A közepes teljesítményű PIC mikrovezérlőkben a kétirányú digitális I/O áramkörök három változata található meg, akár együttesen is alkalmazva. Ez a fejezet a régebb óta alkalmazott első változatot mutatja be. (Az áramköri vázlatokon az áramkorlátozó ellenállások, a digitális áramköri egységek tápfeszültség csatlakozásai és alaphelyzetbe állító áramkörei nem minden esetben szerepelnek.)
A következő ábrán a digitális kimeneti áramkör látható, amely a teljes port áramkörből csak a kimenetet megvalósító részegységeket tartalmazza.
13.2-1. Ábra
A kivezetéshez tartozó PORT regiszter írásakor az adatbusz logikai szintje bekerül a DT tárolóba. A PORT regiszter írása jel valójában a Q4 belső órajel. A DT tároló a Q4 órajel lefutó élére lép működésbe, vagyis a kimeneten a kimenő jel az utasításciklus legvégén jelenik meg.
Amennyiben a tárolóba léptetéskor az adatbusz logikai "1" szinten volt, a kivezetésen is a logikai "1" szintnek kell megjelennie, vagyis a kivezetést a tápfeszültségre kell kapcsolni. Ehhez a T1 tranzisztor Gate-jére a tápfeszültségnél negatívabb feszültséget kell kapcsolni, amelyet a DT tároló negált kimenete tesz meg. Ezzel együtt a T2 tranzisztor Gate-jére is a logikai "0" szintnek megfelelő feszültség kerül, amelynek hatására T2 lezár.
Ha a tárolóba léptetéskor az adatbusz logikai "0" szinten volt, a kivezetésen is a logikai "0" szintnek kell megjelennie, vagyis a kivezetést a testre (0V) kell kapcsolni. Ehhez a T2 tranzisztor Gate-jére a testnél pozitívabb feszültséget kell kapcsolni, amelyet a DT tároló negált kimenete tesz meg. Ezzel együtt a T1 tranzisztor Gate-jére is a logikai "1" szintnek megfelelő feszültség (közel UT) kerül, amelynek hatására T1 lezár.
A kivezetésre kapcsolt két dióda a túlfeszültségvédelmet látja el.
A következő ábrán a digitális bemeneti áramkör látható, amely a teljes port áramkörből csak a bemenetet megvalósító részegységeket tartalmazza.
13.2-2. Ábra
A kivezetés feszültségszintje egy TTL vagy Schmitt-trigger bemenetű pufferen keresztül folyamatosan jelen van a DT tároló bemenetén. A Schmitt-trigger hiszterézise hozzávetőlegesen 0,1V.
A kivezetéshez tartozó PORT regiszter olvasásakor a kivezetés logikai szintje bekerül a DT tárolóba és egyúttal megjelenik az adatbuszon is. A PORT regiszter olvasása jel valójában a Q2 belső órajel. A DT tároló a Q2 órajel felfutó élére lép működésbe, vagyis a kivezetés logikai szintje kis késéssel belép a tárolóba és megjelenik annak kimenetén. Ha a kivezetés szintje ezután meg is változik, az már nincs hatással a tárolóba beíródott értékre. A DT tároló kimenetén elhelyezett három állapotú puffer kimenetét is a Q2 órajel engedélyezi, így az adatbuszon a bemenő jel csak a Q2 logikai "1" szintjének ideje alatt van jelen.
Egy kétirányú port esetében szükség van az adatirány kiválasztására és a ki- és bemenő áramkörök működésének ez alapján történő engedélyezésére.
A következő ábrán a teljes kétirányú port áramkör látható.
13.2-3. Ábra
A DT1 tároló a kimenő jelet tárolja.
A DT2 tároló az adatirány jelet tárolja.
A DT3 tároló a bemenő jelet tárolja.
A tárolók Ck beléptető bemenete a bemenő jel lefutó élét érzékeli és erre lép működésbe.
Az olvasást a Q2, az írást a Q4 belső órajel vezérli.
A kivezetéshez tartozó TRIS adatirány kiválasztó regiszter írásakor az adatbusz logikai szintje a DT2 tárolóba kerül. Ha a tároló állapota logikai "0", a kivezetés kimenetként, ha "1", bemenetként működik. A mikrovezérlő bekapcsolási reset folyamatának hatására a DT2 tároló kimenete automatikusan logikai "1" szintűre áll be, vagyis a kivezetés nagy-impedanciás bemenetként konfigurálódik.
A TRIS regiszter olvasásakor a DT2 tároló tárolt értéke, annak negált kivezetésén keresztül, egy ismételt negáció (egy háromállapotú inverter) után az adatbuszra kerül.
A kimeneti áramkör működési jeleit szemlélteti a következő táblázat:
DT1 kimenet (kimenő adat) |
DT2 kimenet (adatirány) |
T1 Gate | T2 Gate | Kimenet állapota |
---|---|---|---|---|
0 | 0 (kimenet) | 1 | 1 | 0 |
1 | 0 (kimenet) | 0 | 0 | 1 |
0 | 1 (bemenet) | 1 | 0 | nagy-impedanciás |
1 | 1 (bemenet) | 1 | 0 | nagy-impedanciás |
A kimenet értékének változtatásakor, amelyet a Q4 belső órajel lefutó éle aktivizál, a kivezetés a különböző kapacitások áttöltődése miatt csak bizonyos idő múlva éri el a megfelelő feszültségszintet. Rövid utasításciklus esetén (magas órajelfrekvencia) egy azonnali port olvasás, amelyet a Q2 belső órajel felfutó éle aktivizál, hibás értéket eredményezhet. Ez elkerülhető, ha a két utasítás nem egymást követően kerül alkalmazásra.
Az előző ábrán látható, hogy a DT3 tárolóba a port olvasásakor a kivezetés pillanatnyi állapota íródik be és ez kerül az adatbuszra. Ez néhány esetben, de csakis egy port-kivezetés kétirányú használatánál, hibás működést eredményezhet. Tehát azokban az esetekben, amikor a mikrovezérlő működése közben egy vagy több kivezetés adatiránya megváltozik, a problémamentes működéshez figyelembe kell venni néhány alapszabályt:
ˇ
Kimenetről bemenetre való áttérés után a kimeneti tárolóban megőrződik az utolsó beírt érték (például egy teljes 8-bites port esetében az 1111 1111 érték). Ez az érték, az áramköri felépítésből adódóan, nem követi a bemenetként konfigurált kivezetések logikai szintváltásait. A bemenetről kimenetre történő visszatérés után a kimeneten automatikusan megjelenik a tárolóban elhelyezett adat (a példát folytatva: az összes kimenet 1111 1111 értékűre áll be). (Tehát hiába volt például az utolsó beolvasott érték 0000 0000, a kimeneten, akkor is az 1111 1111 adatsor jelenik meg.) Az ebből adódó akaratlan történések elkerülésére a kimeneti tárolókat a PORT regiszter írásával, még az irányváltás előtt le kell nullázni, vagy a kívánt értékre beállítani.
ˇ
Hibát okozhatnak a BCF és BSF utasítások is. Ezek úgynevezett "olvasó-módosító-író" (Read-Modify-Write, R-M-W) utasítások, amelyek végrehajtása során a kijelölt regiszter értéke először beolvasódik az ALU-ba, majd a végrehajtott módosítás után az új érték visszaíródik a régi felülírásával. Amikor a bemenetről kimenetre való áttérés előtt a PORT regiszterbe való beírással megtörténik a kivezetés(ek) kiindulási helyzetének beállítása, akaratlan értékváltás történhet. A BCF és BSF utasítások használata olyankor merül fel, amikor egy porton belül csak néhány bitet kell beállítani. Az alábbi táblázat egy, a bitmódosító utasítások használatából eredő véletlen hibát mutat be:
Port kimeneti tároló | Kivezetés logikai szint |
---|---|
Az összes kivezetés bemenetként beállítva és testre húzva |
|
xxxx xxxx | 0000 0000 |
A 6. és 7. kivezetést a továbbiakban kimenetként szükséges felhasználni. Ehhez a kimeneti tárolókba egy ismert kiindulási értéket kell írni. |
|
A BSF PORT,7 utasítással a 7. kivezetés előzetes értékbeállítása. |
|
1000 0000 | 0000 0000 |
A BSF PORT,6 utasítással a 6. kivezetés előzetes értékbeállítása. |
|
0100 0000 | 0000 0000 |
A kivezetésekről való olvasás miatt a hiba itt jelenik meg. Az előzőleg beállított érték törlődik. |
|
Az adatirányváltás után: | |
0100 0000 | 0100 0000 |
A kívánt állapot: | |
1100 0000 | 1100 0000 |
A táblázatban bemutatotthoz hasonló hibák elkerülésére a BSF PORT,7 és BSF PORT,6 bitmódosító utasítások helyett a MOVLW 1100 0000 és MOVWF PORT adatmozgató utasítások használata ajánlott.
Az "olvasó-módosító-író" (Read-Modify-Write, R-M-W) utasítások a nyitott Drain-ű kimenetek esetében még több bonyodalmat okozhatnak.
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>