Ornek olarak sana 24 IO pini 8 Bit data Bus uzerinden yonetmeyi anlatiyorum. Asagiya dogru ilave cipler koyarak sayiyi istedigin kadar artirabilirsin.
Burda kullandigimiz cip Octal Bus Transceiver. (Ornegin 74LS245)
En ustteki cip icin konusalim.
Diyelim ki sol taraftaki 8 bit bustan B1....B8 pinlerine veri cikartacaksin.
1 nolu DIR pinini 1 yaptiginda A pinlerindeki bilgi B pinlerine tasinir. Ancak bu bilgilerin B portundan okunmasi icin 19 nolu OE pinin low yapilmasi gerekir.
1 nolu DIR pinini 0 yaptiginda bu kez B pinlerindeki veriler A pinlerine gecer. Fakat bu verilerin A tarafindan gorunur olmasi icin gene 19 nolu OE pinin low yapilmasi gerekir.
Bu durumda tum ciplerin Dir pinlerini bir birine baglayip bunu MCU nun herhangi bir I/O pini ile surersen bu su anlama gelir.
Hepiniz beni dinleyin. Eger bu pini 1 yaparsam 8 bit Porta yazacagim bilgi sizin B pinlerinizden cikacak fakat bir sartla.
Hanginizin OE pinini low yaptiysam o cipten cikacak. Digerleri malesef 8 bit data portuna yazdigimdan haberdar olamayacak.
Bu durumda MCU'ya cip sayisi kadar OE pini gidecek. Sen 256 I/O istiyordun. 256/8=32 tane OE pini icin MCU da pin olmak zorunda.
Fakat burda da bir lojik kurabiliriz.
Asagidaki cip 74LS138
Sag taraftaki
Y0 pinini 1. 74LS245 cipinin OE pinine
Y1 pinini 2. 74LS245 cipinin OE pinine
Y2 pinini 3. 74LS245 cipinin OE pinine
...
...
Y7 pinini 8. 74LS245 cipinin OE pinine
Bagladiginda
1..8 nolu cipleri kullanacagim pinini de MCU dan Low yaptiginda
Diyelim ki 3 nolu 74LS245 ile konusacaksan
1...8 nolu cipleri kullanacagim girisini MCU ile low yapacagiz.
ABC pinlerinde A=0 B=1 C=0 yapman yeterli olacaktir.
Bu durumda MCU 3 numarali 74LS245 cipinin OE pinini Llow yapmis olur.
Dir pinini 1 yaptiginda 8 bit busa yukledigi veri 3 nolu 74LS245 in B pinlerinde belirir.
Burda latch durumu falan yok.3 nolu ciple ilgilendiginde diger ciplerin A ve B portlari Z modu dedigimiz high empedans modunda kalir.
Bu durumda ne yapmis olduk 8 tane I/O pinini data okuma yazma amacli kullandik.
1 tane pini DIR (Direction) yani MCU yazma yapacak, okuma yapacak anlaminda kullandik.
ABC seklinde 3 tane pini de 1...8 nolu cipleri secmek icin kullandik.
1 tane de 1...8 nolu cipleri kullanacagim pini olmak uzere
Yani toplamda 13 pin kullanarak 64 tane pini (8 cipi) yazip okuyabiliyoruz.
Eger 64 pin okumak isteseydik. Bu kez 2. bir 74LS138 daha kullanacak ve bunun ABC uclarini kardesi ile birlikte ortak kullanacaktik.
Fakat bu kez 2..16 nolu cipleri kullanacagim pinini MCU'ya goturecektik.
Bu durumda 256 IO okumak istersen 4 tane 74LS128 kullanacaksin ve bunlarin secim pinlerini de MCU'ya goturecektik.
1...8 nolu cipleri okuyacagim
9...16 nolu cipleri okuyacagim
17..24nolu cipleri okuyacagim
25..32 nolu cipleri okuyacagim
Mantik anlasilmis olmali.
Gecmiste MCU cipleri piyasada yokken CPU ciplerine ivir zivir baglamak icin bu tip Address Decoder devreleri tasarlamak zorunda kalirdik.
Yukaridaki teknikte ilgili cipin secimi icin bir iki satirlik yazilimsal zahmet var.