Vissza a főoldalra    Vissza a PIC főoldalra

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

Digitális kimenet
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.

Vissza a lap tetejére

      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.

Digitális bemenet
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.

Vissza a lap tetejére

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

Kétirányú I/O port
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:

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

Vissza a lap tetejére

      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:

13.2-2. Táblázat
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 >>

Vissza a főoldalra    Vissza a PIC főoldalra