8255 (3 x 8) PARALEL INPUT/OUTPUT-INTERFACE 8255 yongasının(entegre Devre) içerisinde 3 tane 8 bitlik giriş-çıkış birimi vardır. PortA, PortB ve PortC olarak isimlendirilmiştir. Beslendiğinde direkt kendi başına çalışan devre elemanı olmadığı için kontrol edilmesi gerekir. Control Word Register : Paralel giriş/çıkış arabirimindeki sayısal giriş/çıkışların yönünü belirlemek için ve Port C üzerinden bitsel lojiksel seviye göndermek için kullanılmaktadır. Portların yönünü belirlemede en anlamlı bit (MSB) lojik 1 olmalıdır. Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 PortA Ayarı, Port C alt dörtlü PortC nin 0:Çıkış, 1: Giriş Üst 4-bit Ayarı Ayar 0: 00 Port B 0:Çıkış, 1: Giriş Ayar 1: 01 Ayar Kurma Ayar 2: 1x Port B Ayarı, PortC Alt dörtlü Ayarı Bayrağı 1: Ayar 1 ve 0: Ayar 0 1 Port Ayarı Port C Üst dörtlü 0:Çıkış, 1: Giriş Port A 0:Çıkış, 1: Giriş Basit giriş/çıkış uygulamalarında ayar(mode) 0 tercih edilir ve Ayar 0 ile 16 değişik sayısal giriş/çıkış arabirimi yönlendirilmesi gerçekleştirilmektedir. Ayar Kurma Bayrağı lojik 1 olduğunda üç portun yönlendirilmesi 1
Ayar 0 çalışmada Control Word Register inin D0, D1, D3 ve D4 veri bitleri ile Portların giriş ve çıkış yönlendirilmesi tabloda verilmiştir. Ayar 0 da girişler direkt işlenir, çıkışlar ise ara tutucuda saklanır. D4 D3 D1 D0 Port A PortC Üst Dörtlü Port B PortC Alt Dörtlü 0 0 0 0 Çıkış Çıkış Çıkış Çıkış 0 0 0 1 Çıkış Çıkış Çıkış Giriş 0 0 1 0 Çıkış Çıkış Giriş Çıkış 0 0 1 1 Çıkış Çıkış Giriş Giriş 0 1 0 0 Çıkış Giriş Çıkış Çıkış 0 1 0 1 Çıkış Giriş Çıkış Giriş 0 1 1 0 Çıkış Giriş Giriş Çıkış 0 1 1 1 Çıkış Giriş Giriş Giriş 1 0 0 0 Giriş Çıkış Çıkış Çıkış 1 0 0 1 Giriş Çıkış Çıkış Giriş 1 0 1 0 Giriş Çıkış Giriş Çıkış 1 0 1 1 Giriş Çıkış Giriş Giriş 1 1 0 0 Giriş Giriş Çıkış Çıkış 1 1 0 1 Giriş Giriş Çıkış Giriş 1 1 1 0 Giriş Giriş Giriş Çıkış 1 1 1 1 Giriş Giriş Giriş Giriş Ayar Kurma Bayrağı (Mod Set Flag) : 0 olduğunda sadece PortC üzerinden dışa bağlanan devre yada devrelere bit bazında lojik 0 yada lojik 1 gönderilir. Örneğin PortC.0, yani bit sıfırdan lojik 1 gönderilmesi isteniyorsa Denetim Sözcük Saklayıcısına (Control Word Register) 0x01 gönderilmelidir. Port C çıkış arabirimi olur. 2
D7 D6 D5 D4 D3 D2 D1 D0 Seçilen Port C bitinin 1 veya 0 olması Bu ayar için kullanılmıyor Port C ye ait bit seçimi 000: bit0 001: bit1 010: bit2 011: bit3 100: bit4 101: bit5 110: bit6 111: bit7 Ayar Kurma Bayrağı 0:PortC Bit kurma 8255-Yongasının Bacak Bağlantısı 3
8255-Yongasının iç yapısının blok devresi 4
8255 yongasının mikroişlemcili sistemde kullanımı ile ilgili blok devrede taban adresi A15 ve A5 adres işaretlerinin lojik 1 olmasıyla sağlanmıştır ve 3 e 8 kod çözücünün ilk çıkışı etkin olması için A3, A4 ve A5 adres iletkenlerine lojik 0 uygulanmalıdır, dolayısıyla başlangıç adresi 8020H dir. 5
Üç İletkenli El Sıkışma İki İletkenli El Sıkışma Paralel giriş/çıkış arabirimindeki portların çalışma şekli ayar 0, ayar 1 ve ayar 2 olabilmektedir. Çıkışlarda veriler depolanıyor, girişlerde ise bilgiler anlık duruyor. Ayar 0 ın özelliği budur. Ayar1: Port A ve Port B giriş veya çıkış olabiliyor. PortC, PortA ve PortB nin denetimi için ayrılır. İki veya üç iletkenli el sıkışma yönteminin uygulamasında Port C nin alt ve üst dörtlüsünün biri giriş diğeri çıkış olması gerekir. Bu yapı el sıkışma (hand shake) yöntemi için düşünülmüştür. 6
Port A el sıkışma yöntemiyle veri alıyor (Yani Giriş) Üst Alt 1 0 1 1 0 1 Mod 1 deel Sıkışma (hand shake) yöntemi kullanıldığında okuma işlemi (PortA için) 7
Zaman diyagramı (Okuma İşlemi için) Port A el sıkışma yöntemi ile çıkış olarak planlandığında; Üst Alt 1 0 1 0 1 x x 0 8
Zaman Diyagramı (Yazma İşlemi İçin) Algılayıcı Kuvvetlendirici A/D C Arabirim PC Genel Ölçme Devresi MAX 1044 ICL 7660 Vcc 10 mf 1 8 2 7 3 6 4 5 1,5 V ile 10 V pozitif gerilimi -1,5 V ile -10 V negatif gerilime dönüştürür. U çıkış Verim % 95 10 mf + V CC olarak 10 V a kadar gerilim verilirse U çıkış ucundan -V CC olarak -10 V a kadar gerilim alınabilir. +V CC için değişken gerilim uygulanırsa çıkışta V CC kadar gerilim elde edilir. 1,5 V ile 10 V luk pozitif gerilime karşılık yonganın çıkışından - 1.5V ile 10 V gerilim alınır ve verim % 95 tir. 9
Ölçme uygulamalarını gerçekleştirmek için blok devre önceki gibidir. Gerilim ölçmek için bilgisayarlı sayısal donanım alt yapısını iyi bilmek gerekir. Ölçme devresi için yukarıdaki blok diyagram çizilir. Ölçme genellikle buradaki algılayıcı ile başlıyor. Algılayıcıdan hemen sonra ADC kullanılırsa eksik ölçme yapılır. (Sinyal uyumsuzluğu nedeniyle) Bundan dolayı araya bir kuvvetlendirici devre koymak gerekir. (En basit kuvvetlendirici yongası LM741). 0 0 C de V 1 çıkışında 0 olması gerekir. Böyle değilse donanım gözden geçirilmelidir. Eğer 0 uyumsuzluğu varsa, bu durumda kayma ayarı yapılmalıdır, yani kayma ortadan kaldırılmalıdır. Örnek: Bilgisayarın paralel çıkışı tek yönlüdür. Ancak bir kontrol register ile çift yönlü yapılabilir. Böylece bilgisayarın standart paralel çıkış arabirimi(lpt) üzerinden ölçme yapılabilir. Bilgisayar ile yapılacak ölçmenin blok şeması aşağıdadır. Ardaşıl Yaklaşımlı(successive approximation) Analog Dijital Çevirici: BİLGİSAYAR 2 D0 D1 D2 D3 D4 D5 D6 D7 D/A konvertör U Giriş 9 10 U giriş: ölçmek istenilen değişken(büyüklük), işlemsel kuvvetlendiricili karşılaştırma devresi ile 0 yada 1 mantığına dönüştürülür. U Giriş >U DAC büyük şartı geçerli ise Pin 10 a lojik 1 uygulanır. Ardışıl yaklaşım yönteminde önce bilgisayar çıkışı ile D7 lojik 1 yapılır. Böylece DAC-dönüştürücüsünün çıkışına bir analog gerilim dönüştürülmüş olur. Bu giriş gerilimi İşlemsel karşılaştırıcının ( ) girişine uygulanıyor ve çıkışında 0 veya 1 e çeviriyor. Eğer işlemsel kuvvetlendiricinin çıkışı lojik 0 ise işlemsel kuvvetlendiricinin + girişine uygulanan U Giriş, yani ölçülen gerilimden daha büyük olduğu anlamına gelir ve D7 geri çekilir. Bu karşılaştırma işlemi D0 a doğru devam etmelidir. 8-bitlik dönüştürücü için sekiz çevrim her analog/sayısal dönüştürme için sırayla yapılmalıdır. Dönüştürme programının yazılımı;(assembler).model small ; 7 6 5 4 3 2 1 0.Code ; 10 numara 6. Bite bağlıydı (yukarıdaki devreye göre) ;donanım sabitleri Comp equ 40h Lpt equ 378h 10
Public _ADC çıkışta herhangi bir şey göndermek istediğimizde _ADC proc near al üzerinden gönderiyoruz. Şu anda al da Mov bx, 8080h; 80 bilgisi var. Mov dx, Lpt; D7 1 yapıldıktan sonra bu program yardımı ile Cikis: Mov al, bh; DAC çıkışıda 0 olur. Out dx, al; daha sonra test al, comp ile al ile karşılaştırma yapılıyor. Inc dx ; Status registerinin adresi In al, dx ;increment komutu dx in 1 arttırılmasını sağlıyor 378 di 379 olacak ; bu komutla [dx] yani ststus içeriği al ye aktarılıyor. Test al, comp ;test sonucu 0 bayrağı set almazsa bu değer daha büyüktür diye Jnz d_büyük ;anlaşılıyor Xor bh, bl d_ büyük: shr, bl,1; bu çalışınca bir sağa kaydırıyor Jc son ; jump cary son.bu işlemi bitiriyor otomatik atlıyor cary e Dec dx; decrement geriye döndürüyor. 379 378 olacak Or bh, bl; bh ile bl arasında oylama yapıyor. Jmp cikis; (centronik soket) bh al ye alınıyor ve paralel porttan çıkışa gönderiliyor. Son: xor ax, ax; Mov al, bh; ret _ADC endp End GERİLİM ÖLÇME : 5 V 3.3 K 47 K 0.22u Clock D0 D1 VERİ D2 Register D3 D4 D5 D6 D7 1 16 2 15 3 14 4 13 5 12 6 11 7 10 8 9 100p Analog çıkış MSB (D7) V ölç. 5 V Durum R. 10 GND 25 /ACKNOWLEDGE 11
Ekran silme Gerilim ölçümü mesajı ekranda Gerilim Değerini Ölçme Gerilimi hesaplama Gerilim Değerini Ekrana yazma #include <stdio.h> #include <conio.h> #define factor 0.01 İnt ADC (void); Main() { İnt u; Float gerilim; Clrscr; Goto xy(32,5); Print f ( gerilim ÖLÇME ) While(1) { U=ADC(); Gerilim =u*faktor; Gotoxy(25,7); Print f( gerilim değeri :%5,2f,gerilim); Print f( volt ); } } #define LPT 0x378 #define COMP 0x40 İnt { ASM{ } Cikis: ADC() Mov BX,8080H MOV DX, LPT ASM{ Mov al, bh 12
Out dx, al Inc dx In al, dx Test al, COMP JNZ d_buyuk ; (komp=0) (jn2 bayrağı 1 olursa komp çıkışı 1 olmaktadır) Xor bh, bl (komp=1) } d_buyuk ASM{ shr bl, 1 jc son } Son: ASM{ } } DEC DX or bh, bl (carry 6 A 1 olursa işlem biter carry 6A 0 olursa bitmez alt komuta geçer) jmp cikis Xor MOV ax,ax al,bh Bilgisayar Destekli Ölçme Ve Denetim SICAKLIK ÖLÇME: Isı ölçme LM 335 Gerilim ölçme A/D C 8255 interface 2,73 V ile 3,73 V arasında LM335 ısı algılayıcının çıkışında değişim olur. Bu gerilim aralığı ADC nin referans gerilim aralığı dışındadır. Bunu ADC ye uydurmak için devrede ufak bir değişiklik yapmak gerekir. Uyum için (-) aralığa potansiyel kaydırması yapılacaktır. Böylece 8-bit çözünürlüğün 255 sayısal adım sayısı kullanılacaktır. Bunun için potansiyel kaydırma yapılmalıdır veya çıkışın bir gerilim bölücü üzerinden en büyük değer 2,55V a indirilebilir. Alt değer bu durumda 1,87V olur, yani 0-187 kullanılmaz. Vcc=5V 3.9 KW Çıkış LM 335 10 KW Normalde 0-255 aralığı kullanılıyor. Fakat 255-187=68 dir. Bu değer aralığı 0 ila 100 0 C arasındaki sıcaklıkları ölçmek için kullanılacaktır. Bundan dolayı 100 0 C /68= 1,4 0 C lik ölçüm devresinin hassasiyeti vardır. Tasarlanan 13
bu devre çok hassas değildir. Bu devrede 0 0 C ye karşılık 0V kullanılmalıdır. 100 0 C nin üzerine çıkarsa devre hata sinyali üretmelidir. Vcc=5V Vcc=5V 3.9 KW 3.9 KW Çıkış Kuvvetlendirici LM 335 10 KW -2,73 V LM 335 10 KW -2,73 V LM335 in maksimum akımı 5mA dir. Bu akımda çalıştırılmamalıdır. Maksimum akımda algılayıcı ek ısınmaya sebep olur. Bu da sıcaklık ölçümünü yanıltabilir. Isı algılayıcının en büyük analog gerilimi 2,55V ayarlamanın nedeni ADC nin 8-bit çözünürlüğünün en büyük sayısal değeri 255 olmasıdır. ADC nin referans gerilimine(5v) uydurmak için çıkışa bir kuvvetlendirici bağlamak gerekir. Bir gerilim kuvvetlendirici ve katsayısı yaklaşık 2 yapılarak böylece 5V elde edilmiş olunur. Bilgisayarın paralel portu LPT1 in adresleri: 378=>Data register 379=>Durum register 38A=>Kontrol register Ekrana sıcaklık ölçümleri ile mesaj aktarımı Bunun pascal dilinde programa yazılabilir; uses crt; constant factor=1; Lpt_adresi=$378; var x,y:integer; sicaklik: real; Begin clrscr; gotoxy(5,32) ; writeln( sıcaklık ölçümü ); repeat x:=port[lpt_adresi]; (*ADC den gelen sayısal gerilim değeri*) port[lpt_adresi+2] :=y;(*kontrol register içeriği y de*) Sicaklik:=factor*x; gotoxy(8,30); if sicaklik > 99 then writeln( sicaklık sınırı aşıldı. ) else writeln( sıcaklığın değeri:,sicaklik); until keypressed End Sıcaklığın ölçülmesi Sıcaklık değeri hata... Ekrana gönderme Stop 14
DEVİR SAYISI ÖLÇME: Motor mili Frekansı & and Sayıcı Zaman ayırıcı Burada sadece ölçme yapılabilir. Denetim yapılabilmesi için sıcaklık denetimi gibi kontroller yapılıp geri besleme yapılması gerekir. Sıvı seviyesi kontrolü ile basınç seviyesi kontrolü aynı şekildedir. Birini yaptığımızda diğeri de yapılabilir. Kumanda da kullanılan elemanların çıkışı ya 0 yada 1 dir. Röle çekiktir ya da röle açıktır. Röle açıksa geri beslemesiz sistemse devre dışı kalır. Kumanda için röleli bir yöntem yapılırsa aşağıdaki gibi olur. Bu açık çevrim bir denetimdir. Geri beslemesiz denetime açık çevrim denetim adı verilir. Örneğin, sıvı seviye ölçme devresinden sinyali alınır ve tranzistörün baz girişine lojik 1 verilirse, röle devreye girer ve pompa motoru çalışmaya başlar ve depoya su basar. Eğer bir lamba elektronik kontrol edilmek isteniyorsa; Vcc 5V Faz D0 Bilgisayar D0 4,7 K D0 ucuna lojik "1" veya lojik "0" uygulanarak lambanın yanması 4,7 K veya sönmesi sağlanır. ( 18-25 ) Nötr (25 bacaklı soketin 18-25 arası kapalı, diğer bacaklar başka sinyaller için kullanılıyor) Bilgisayarın paralele arabirimine (Pin 18-25) 15
Bu devre için program yazmaya gerek yok. D0 ucuna lojik 1 veya lojik 0 uygulandığında lambanın yanması veya sönmesi sağlanır. Geri beslemeli sıcaklık kontrolü blok diyagramı MOTORUN İLERİ GERİ ÇALIŞMASINI KONTROL EDEN PROGRAM: Pin 2 D0 = motorun devir yönü ; ( 0: sola, 1: sağa ) Pin3 D1 = motor durumu ; ( 0: çalışmıyor, 1: çalışıyor ) Doğru akım motoru için motor çalışırken ve sola dönerken sağa döndürmeden önce dur emri verilmesi gerekir. Burada bu şekilde kontrol yapılıyor. Aynı şekilde devir sayısı kontrolü yapılırken; sola dönerken devir sayısını düşürür sonra sağa doğru tekrar devir sayısını yavaş yavaş arttırmak gerekir. Bu durumu gerçekleştirmek için basit devre: 16
Tranzistör Darlington'dur. Bu devrede devir sayısı ayarı yoktur, sadece devir yönü ve motorun çalışıyor veya çalışmıyor denetimi yapılmaktadır. Benzer basit denetim tranzistörlü devre ile de yapılabilmektedir. T1 ve T2 transistörü iletimde ise motor uçlarında potansiyel olmadığı için motor dönmez. T1 ve T4 transistörü iletimde ise motor sola döner ve T2 ve T3 transistörü iletimde ise motor sağa döner. Vcc 22 K 22 K BD 334 560 W 560 W BD 334 M 1mF BD333 Pin 2 (D0) Pin 3 ( D1) 0 1 0 0 1 0 1 1 motor sağa döner motor durur motor sola döner motor kısa devre (yapılmaması gerekir) SIVI SEVİYE KONTROL PROGRAMI: δ= Yoğunluk, g= İvme, p= Basınç, h= Yükseklik h = p g * Basınç sensörü A/D konvertör Data Registeri start konversiyon sinyali M Pompa motoru kontrol devresi Kontrol Registeri 17
C diline göre programlanması: # include <stdioh> # include <canioh> # define control Reg 0x37A # define Faktor 1 # define boy 20 # define en 20 Int ADC (void); Main() { Int h; Float O_G_yukseklik, yukseklik, hacim; /* olması gereken yükseklik*/ While(1) { Clear scr; Gotox y (21, 5); Printf( seviye ve hacim ayarı ); Gotoxy(24,7); Printf( işlemler seviye gir ); Scan f ( %f, &O_G_yukseklik); DO { h= ADC(); Seviye =h*faktör; Go to xy (24, 9); Printf( seviye; %6.1f, seviye cm ); Hacim= boy*en*seviye/1000; Go to xy (18, 11); Printf( hacim:%6.1f, hacim, litre ); İf seviye > O_G_yukseklik Outportb(control_reg, 0); Else outportb(control_reg, 1); } While (! Kbbit() ); } } DC MOTORUN MIN-MAX ARASINDA TEK YÖNLÜ KONTROLÜ ( BİLGİSAYARLA DA DÖNÜŞTÜRÜCÜ) Hız bilgisi D/A konvertör M A/D konvertör 18
ADIM MOTORUN DENETİMİ: Adım motoru adından da anlaşılacağı gibi adım motorlarında dönme işlemi adım adım gerçekleşir. Her bir adım için motorun mili belli bir derece sağa veya sola döner. Bu motorlar genelde kesin tanımlanmış tam tur ve kesirli turların gerekli olduğu yerlerde kullanılır. Eğer belli tanımlanmış bir konuma hareket edilmesi gerekiyor ise her zaman bu motorlar kullanılır(örneğin harddiskte iz konumlanması gibi ). Eğer adım motoru maksimum adım hızının çok üzerinde tetiklenirse o zaman bu hızı rotor takip edemez ve motor durur. Bundan dolayı mutlaka maksimum adım hızı bilinmelidir. Maksimum darbe frekansı 320 Hz ise dönme hızı=? d/s. Dönme Açısı Sağa 7 6 3 2 Sola 7 6 3 2 0 H L L H H L L H 7,30 L H L H H L H L 15 L H H L L H H L 22,30 H L H L L H L H 30 H L L H H L L H TURBO PASCAL PROGRAMI: Uses crt; Coust Lpt1=$378; Var i, j, tursayisi: integer; B: Array[1..5] of integer; Yon char; Begin Clrscr; Gotoxy(30, 5); Writeln( Adım Motor Denetimi ); b[1]:=9; b[2]:=5; b[3]:=6; b[4]:=10; i:=0; repeat gotoxy(15, 7); writeln( istenilen devir yönünü giriniz ); readln(yon); gotoxy(15, 7); writeln( Devir sayısını giriniz ); readln(tursayisi); 19
if yon = ( r OR R ) then for j:=1 t0 j:=48*tursayisi Do Begin İ:= i+1; İf i=5 Then i:=1; Port[Lpt1]:=b[i]; Delay(10); End; If yon = ( l OR L ) then for j:=1 t0 j:=48*tursayisi Do Begin İ:= i-1; İf i=0 Then i:=4; Port[Lpt1]:=b[i]; Delay(10); End; Until keypressed; End. 20