
A mostani fejezetben a korábban már sokszor emlegetett fel- és lehúzó ellenállások kerülnek terítékre….
Számos módon hozhatunk létre digitális kimeneti jelet – az áramköreink a működésük során minden esetben magas vagy alacsony állapotban találhatóak meg. Ez a két logikai érték egyszerűen két feszültségszinttel reprezentálható. A kimenet ily módon történő vezérlése egy egyszerű kéttranzisztoros megoldással is már könnyen megvalósítható:

Magas? Alacsony?
A két képen a logikai magas (“1”; High; Vcc) illetve a logikai alacsony (“0”; Low; GND) szintek keletkezését láthatjuk két tranzisztorral megvalósítva.
Az első képen a ctrlA vezérlés alacsony szinten van (a felső tranzisztor nyit) és a ctrlB vezérlés is alacsony szintű (alsó tranzisztor zár). Logikai magas szint mérhető így a tranzisztorok közös pontján.
A második képen a ctrlA vezérlés és a ctrlB is magas szinten van, így a tranzisztorok közös pontja közel GND szintre kerül.
Ha jól megnézzük az ábrákat, láthatjuk, hogy a kimenet szintjét egyedül a ctrlA illetve a ctrlB kivezetésen legő jelszint határozza meg, azaz ez dönti el, hogy melyik tranzisztor fog vezetni. Ha – mint itt az ábrán látható módon – PNP és NPN tranzisztorpárt használunk, akkor a kimenet beállítása a közösített bázison át egyszerűen megoldható. Ez a megoldás modellszerűen az ATMega kivezetéseit mutatta be – egyszerűsítve. A ctrlA és ctrlB vonalakat ezesetben a chipek belső logikkája vezérli.
De nem minden esetben kell ennyi sok alkatrészből építkezni. A felső tranzisztor egyszerűen helyettesíthető egy ellenállással:
Az ellenállás – még a chip tokon belül, szilíciumból előállítva is – sokkal olcsóbb, mint egy tranzisztor: de ami ennél sokkal fontosabb, hogy rugalmasabban kezelhető. Az alsó kapcsolótranzisztort azért nem hagyhatjuk el 🙂 ! Amikor az alsó tranzisztor kinyit, akkor a kollektor potenciálja a GND-re kerül. Amikor zárt állapotú, akkor pedig a “lebegő” kollektort az ellenállás magas szintre húzza. Fontos! A megoldás addig működik csak megfelelően, amíg nem akarjuk nagy árammal terhelni a kimenetet. A felhúzó-ellenállás szokásos értéke 1k..100k közt van – ennek az a következménye, hogy az áramkör logikai 1 kimeneti szinten csak kissé terhelhető – <1..10mA terhelés esetén működik megfelelően! Ez viszont a legtöbb logikai áramkörhöz bőven elegendő (Logikai 0 esetén a terhelést a tranzisztor áteresztőképessége határozza meg – ennek jellemző értéke 10…40mA).
Mire jó ez nekünk?
Ahol ilyen logikai megoldásokat használhatunk, az jellemzően a 0..12V tartományba eső digitális jelek kezelése. Egyszerűen egy tranzisztor és egy felhúzó-ellenállás elegendő a megvalósításhoz. De ugyanez a trükk járható 3.3V→5V átalakításhoz is, amikor az egyik áramkörünk 3.3V-ról jár, míg a fogadó oldal 5V feszültségű jelet igényel. Azonban ez a megoldás akkor is működik, ha a céláramkör a kisebb feszültségű (azaz a fordított irány 5V→3.3V)!
Ilyen esetekben a tranzisztor, mint kapcsolóelem funkcióját használjuk ki.
Még egy különleges tulajdonsága van ennek a kapcsolásnak: számos tranzisztoros kimenet dolgozhat így egyetlen felhúzó-ellenállásra! Ez egy egyszerű logikai áramkör tud lenni, ugyanis, ha valamelyik tranzisztor vezet, akkor logikai 0 az eredmény, míg ha az összes zárt állapotú, akkor logikai 1 a kimeneti jelszint. Ahol ilyen eljárást használhatunk az a logikai foglaltságjelzés egy buszon keresztül – egyetlen vezetéket használva! De ezt hívják még logikai vagy kapcsolásnak is.
Az ilyen tranzisztoros-ellenállásos buszrendszer több különálló eszköz együttes működését teljesen jól támogatja. Ha egyidőben egy eszközzel kell kommunikálni és elektromosan egy buszhálózaton vannak, akkor mindenféle extra eszköz nélkül ez a nyitott kollektor + ellenállás könnyen megvalósítható.
Fontos! A szabályok közé fel kell írni, hogy a lehúzó tranzisztor képes nagyobb áramokat kapcsolni; így ha ilyen kimenetre LED-et kapcsolunk, akkor az csak a kimenet és a + jelszint közt fog megfelelően működni. A kimenet és a GND közt nem működik! Ilyen megvalósítás van például a a PCF8574 jelű portbővítő chipben!
És még egy tanács, amit jó ha tudunk: a kimenet a GND felé nem érzékeny a rövidzárra. A kimeneti tranzisztor ebben az esetben nem tud kapcsolni, hiszen nincsen a C-E közt feszültségkülönbség. Egyszerűen a belső felhúzó-ellenállás korlátozza a zárlati áramot. Fontos: + irányban nem rövidzár-védett a kapcsolás, mert a tranzisztor ekkor a + és a – közt fog vezetni!
Fontos, hogy a tranzisztor bázisára pozitív feszültséget adva, azonnal kapcsol és a rövidrezárási árama indul meg!
A nyitott kollektoros – tranzisztoros megvalósítás klasszikus példája az I2C/TWI buszrendszer illetve a Dallas (vagy más néven) 1-Wire busz. A sok tranzisztor és a felhúzó-ellenállás, mint kimenet, és a tranzisztor-ellenállás közös pontja, mint logikai bemeneti jel nagyon könnyen teszi megvalósíthatóvá a kétirányú kommunikációt. Az AVR/ATMega chipek esetén a felhúzó-ellenállás értéke (ami egy külön járulékos tranzisztorral kapcsolgatható) 20..50 kohm közötti (erről bővebben az “A vagy nem A” cikkben volt szó).
És mi az a lehúzó ellenállás?
Technikailag megvalósítható az a megoldás is, amikor a tranzisztor a tápfeszültség felé kerül beépítve, és az ellenállás a GND felé került bekötésre. Ezt a technikát kevéssé használják és a PNP tranzisztor kialakítása miatt drágább is lenne. Az ATMega chipcsaládban csak a felhúzó-ellenállásokkal megvalósított logika érhető el, a teljes AVR gyártmánypalettában nem található olyan chip ahol logikai lehúzó-ellenállás vagy fordított logika került volna beépítésre. Ha ilyet szeretnénk látni, akkor az ESP8266 áramkört kell használni, ott a fel- és a lehúzó-ellenállás is megvalósításra került.