bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
1 sayfadaki 1 sayfası • Paylaş •
bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
D/A ve A/D ÇEVİRME İŞLEMLERİ
DİJİTAL/ANALOG ÇEVİRİCİ
ANALOG/DİJİTAL ÇEVİRİCİ
DİJİTAL/ANALOG ÇEVİRİCİ
PIC16F84 kullandığınız bir uygulama devresinde analog voltaj çıkış gerekebilir. Bu durumda portlardan çıkan dijital sinyalleri analog voltaja çevirme işlemi söz konusu olmaktadır. Bu işlemi yapmak için bir çok yöntem vardır Bunlardan ilki, PIC çıkışına ladder (merdiven) direnç devresi ve bir OP-AMF bağlayarak yapılan D/A çeviricidir. ikincisi ise, çok daha basit bir yöntem olan PIC çıkışına D/A çevirici entegre bağlamaktır.
Microchip firması PIC kullanıcılarının bu ihtiyacını karşılamak amacıyla piyasaya sürdüğü bir çok mikrodenetleyisi bulunmaktadır. Örneğin PIC14C000 mikrodenetleyicisi girişine uygulanan dijital sinyali doğrudan analog voltaj çıkış olarak verebilmektedir. D/A çevirici entegre bu PIC'in içerisine yerleştirilmiş olduğundan çıkışında başka bir devre kullanmaya gerek kalmamaktadır. Bu tip PIC'lerin incelenmesi ayrı bir kitap konusu olduğunda şimdilik ayrıntılara girmeyeceğiz.
Bu kitapta bizim ele aldığımız PIC16F84'ün sadece dijital girişi ve çıkış bulunmaktadır. D/A çevrimi yapabilmek için yapabileceğimiz tek şey, PlC çıkışından aldığımız dijital sinyali analog gerilime çevirme işlemidir. Şimdi D/A çevrimi işlemi için kullanmak zorunda olduğumuz yöntemleri açıklayalım.
Ladder(Merdiven) Direnç Devresi Kullanmak
Örnek D/A çevirici olarak vereceğimiz devrede PIC'ten 4 bit'lik dijital ve çıktığını düşünürsek, aşağıdaki ladder direnç devresi ile bu sinyali Analog gerilim çeviren devreyi aşağıdaki gibi çizebiliriz.
PortB'den çıkan sinyalin b'00001000' (RB3=1) olduğunu düşünürsek, bu devrede Vçıkış ucundan alınacak gerilimin değerini bulalım:
0-5 V arasında analog gerilim elde etmek için gerekli olan dijital çıkışlar aşağıdaki gibidir.
RB3
RB2
RB1
RBO
VÇIKIŞ
0
0
0
0
0.00
0
0
0
1
0.33
0
0
1
0
0.67
0
0
1
1
1.00
0
1
0
0
1.33
0
1
0
1
1.67
0
1
1
0
2.00
0
1
1
1
2.33
1
0
0
0
2.67
1
0
0
1
3.00
1
0
1
0
3.33
1
0
1
1
3.67
1
1
0
0
4.00
1
1
0
1
4.33
1
1
1
0
4.67
1
1
1
1
5.00
8 Bit D/A konvertör Entegresi Kullanmak
PIC'ten çıkan dijital veriyi analog gerilime dönüştürebilmek için uygulanabilecek ikinci yöntem bir D/A entegresi kullanmaktır. Biz P/N AD558 entegresini örnek olarak vereceğiz. Bu entegre içerisinde yukarıdaki örnekte verdiğimiz ladder dirençler ve toplayıcı amplifikatör (OP-AMP) hazır olarak bulunmaktadır. Entegre 5 V DC ile çalışmakta ve girişine uygulanan dijital sinyali 0-2.55 V arasında gerilim vermektedir.
AD 558 entegresindeki CE ve CS uçlarının fonksiyonları aynıdır. Birisini (CE) toprağa bağlayın. CS giriş verisinin yükselen kenarında girilen datayı kilitlemek için kullanılan uçtur. Bu nedenle portA'nın 0. bit'inden uygulanacak sinyalin yükselen kenarında kilitleme yapılması gerekir.
PROGRAM-30) PortB'nin RBO-RB7 uçlarından çıkan dijital veriyi analog veriye çeviren program. Bu program yukarıda AD 558 entegresiyle kurulan devreye göre yapılmıştır. PortB'nin ucundan çıkması istenen veri b'10000000'dir. Bu veri AD 558 entegresiyle 1.27 V’luk gerilime çevrilir.
;===PROG30.ASM====12/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tüm uçları çıkış
CLRF TRISB ;PORTB tüm uçları çıkış
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
MOVLW b’10000000’;Wb’10000000’
MOVWF PORTB ;AD 558 entegresine giden veri
BSF PORTA, 0 ;AD 558'in CS ucu yükselen kenar
BCF PORTA, 0 ;AD 558'in CS ucu düşen kenar
DONGU
GOTO DONGU
AD 558 entegresine girilen verilerin kaç V’luk gerilime dönüştürüleceğine ait birkaç örnek veren tablo aşağıdadır.
Haksadesimal sayı
VÇIKIŞ
h'00'
0.00
h'0F'
0.15
h'B0'
1,27
h'FF'
2.55
İşlem Basamakları
1.PROGSO.ASM'yi PIC16F84'e yazdırınız.
2.AD 558 entegresiyle yapılan A/D çevirici PIC devresini breadboard üzerine kurunuz.
3.PIC'i deneme devrenize yerleştirerek gerilim uygulayınız. Vçıkış ucuna bir voltmetre bağlayarak 1.27 V’luk gerilimi ölçünüz.
PROGRAM-31) AD 558 konvertörü kullanarak kurulan devrede testere dişi dalga üreten program.
;===PROG31.ASM====14/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
VOLT EQU h’0C’
SAYAC EQU h’0D’
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISA ; PORTA tüm uçları çıkış
CLRF TRISB ; PORTB tüm uçları çıkış
BCF STATUS, 5 ; Bank0
CLRF PORTA ; CS ucunu "0" yap
CLRF VOLT ; VOLT değişkenini sıfırla
DONGU
MOVF VOLT, W ; WVOLT (h'00')
MOVWF PORTB ; PORTBW
BSF PORTA, 0 ; AD558'deki datayı kilitle
BCF PORTA, 0 ;
INCF VOLT, F ; VOLTVOLT +1
GOTO DONGU
İşlem Basamakları
1.PIC16F84'ü programlayarak AD558 ile yaptığınız devre üzerine yerleştiriniz.
2.Vçıkış ucuna bir osilaskop bağlayınız ve ayarlarını yapınız.
3. Vçıkış aşağıdaki testere dişi dalgayı görünüz.
PROGRAM-32) AD558 entegresiyle kurulan devrede sinüs dalgası üreten program. Bu programda portB'ye gönderilen binary sayıları çevrim tablosu içerisine yerleştirilmiştir. 19 voltaj seviyesi daha da arttırılarak sinüs dalgasında birbirine daha yakın gerilimler elde edilebilir. Bu durumda çıkış eğrisi titrek
olmayacaktır. Sinüs dalgasının frekansı, çevrim tablosuna yerleştirilen sayıların çokluğu ile düşürüleceği gibi, çıkış verileri arasında gecikme alt programı kullanılarak da ayarlanabilir.
;===PROG32.ASM====16/08/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h’0D’
OFSET_SAY EQU h’0C’
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tüm uçları çıkış
CLRP TRISB ;PORTB tüm uçları çıkış
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
SAYKIL
CLRF OFSET_SAY ;Tablo ofset sayacını sıfırla
ADIM
MOVF OFSET_SAY, W ;WOfset sayacını yaz
CALL TABLO
MOVWF PORTB ;Veriyi portB'ye çık
BSF PORTA, 0 ;AD558'e kilitleme sinyali
BCF PORTB, 0
CALL GECIKME
MOVF OFSET_SAY, W ;Ofset sayacını W'ye yaz
SUBLW h'23' ; Saykıl bitti mi?
BTFSC STATUS, 2 ; Zero flag'ı kontrol et.
GOTO SAYKIL
INCF OFSET_SAY ; OFSET_SAYOFSET + 1
GOTO ADIM
GECIKME
MOVLW h'0l' ; 3N+3 saykıl(desimal), N=1
MOVWF SAYAC ; WSAYAC
TEKRAR
DECFSZ SAYAC, F ; SAYACSAYAC - 1
GOTO TEKRAR ; SAYAC 0 değil
RETURN
TABLO
ADDWF PCL, F ; OFSET_SAY'ı PLC'ye yükle
RETLW h'80' ; 1.28 Volt
RETLW h'95' ; 1.50
RETLW h'AD' ; 1.72
RETLW h'Cl' ; 1.92
RETLW h'D3' ; 2.10
RETLW h'E2' ; 2.26
RETLW h'EF' ; 2.39
RETLW h'F8' ; 2.48
RETLW h'FD' ; 2.54
RETLW h'FF' ; 2.55
RETLW h'FD' ; 2.54
RETLW h'F8' ;2.48
RETLW h'EF' ;2.39
RETLW h'E2' ;2.26
RETLW h'D3’ ;2.10
RETLW h'Cl' ;1.92
RETLW h'AD' ;1.72
RETLW h’95’ ;1.50
RETLW h'80' ;1.28
RETLW h'6A' ;1.06
RETLW h'54' ;0.84
RETLW h'40' ;0.64
RETLW h'2E' ;0.46
RETLW h'lE' ;0.30
RETLW h'll' ;0.17
RETLW h'08" ;0.08
RETLW h'02' ;0.02
RETLW h'00' ;0.00
RETLW h'02' ;0.02
RETLW h'08' ;0.08
RETLW h'll' ;0.17
RETLW h'lE' ;0.30
RETLW h'2E' ;0.46
RETLW h'40' ;0.64
RETLW h'54" ;0.84
RETLW h'6A' ;1.06
END
İşlem Basamakları
1.PIC16F84'ü programlayarak AD558 ile yaptığınız devre üzerine yerleştiriniz.
2.Vçıkış ucuna bir osilaskop bağlayınız ve ayarlarını yapınız.
3.Vçıkış ucunda aşağıdaki sinüs dalgasını görünüz.
PWM (Pulse Width Modulation) Metodu Kullanmak
PWM (Pulse-Width-Modulation "Pals genişliğini ayarlama") metodu PIC16F84'ün çıkış uçlarından birisinden kare dalga sinyali üretme işlemidir. Kare dalganın pals genişliğini ayarlama suretiyle elde edilen gerilimin DC voltmetre ile ölçülen değerini (Ortalama değeri) değiştirilmiş olur.
Bundan önceki bölümlerde yaptığımız çoğu programlarda portB'nin sadece bir bit'ine bağlı LED'i flash (Yakıp-söndürme) yapmıştık. Eğer LED'i çıkarıp yerine bir voltmetre bağlayacak olsaydık, 2.5 V civarında bir gerilim okuyacaktık. Şimdi PIC programı aracılığı ile bu gerilimin nasıl değiştirileceği hakkında temel elektronik bilgisini verdiğimizde yapılacak programın hiç de zor olmadığını göreceksiniz.
PWM Metodu
PWM metodunu anlayabilmek için eşit aralıklarla LED yakıp söndürme programlarında elde ettiğimiz çıkış eğrisini inceleyelim.
Yukarıdaki çıkış eğrisinde iş süresi, LED'in yanış süresi, bekleme süresi de sönük kalma süresidir. Eğer bir periyot içerisindeki bu süreler birbirine eşitse çıkış gerilimin ortalama değeri 2.5 V olur.
Bir periyot içerisindeki iş süresi ve bekleme süresi oranları değiştirilirse çıkışta ölçülecek gerilimin değeri de değiştirilmiş olur.
Görüldüğü gibi iş süresi uzatıldığında çıkış geriliminin ortalama değeri 2.5 V tan büyük olmaktadır, Eğer iş süresi % 100 olursa çıkış gerilimi 5 V, iş süresi % 0 olursa çıkış gerimi 0 V olur. Bu defa iş süresinin bekleme süresinden az olduğu duruma örnek verelim.
Çıkış gerilimin ortalama değeri bir periyot içerisindeki iş süresi ve bekleme süresi oranlarıyla doğru orantılıdır. Örneğin;
İş süresi % 50 ise çıkış gerilimi (5 V) 2.5 V
İş süresi % 25 ise çıkış gerilimi (5 V) 1.25 V
İş süresi % 75 ise çıkış gerilimi (5 V) 3.75 V olur.
İş ve Bekleme Süresinin Tespit Etmek
RC osilatörle beslenen PIC16F84'ün RB0 ucundan 0 -5 V arasında değişen analog gerilim elde etmek istediğimizi düşünelim. Önce çıkış periyodunun iş süresini ve bekleme süresini belirleyen GECIKME alt programının nasıl olması gerektiğine karar verelim.
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN
SAYAC registeri içerisindeki ilk sayı h'FF' olursa, her defasında SAYAC'tan "1" çıkarılır. SAYAC'ın "0" a gelmesi için 256 döngü gerekir. Bu GECIKME alt programıyla çıkış peryodunun % 100'ünü elde ettiğimizi düşünürsek, iş süresi ve bekleme süresini tesbit etmek için h'FF' /Desimal 256) sayısının yüzdesini almak gerekir. Örneğin;
2.5 V’luk çıkış için % 50 iş süresi % 50 bekleme süresi gerekir.
Bu durumda SAYAC registeri içerisine atayacağımız sayılar ne olmalıdır ?
256 x (% 50) = 128h'80' (İş süresi için)
256 x (% 50) = 128h'80' ( bekleme süresi için)
örneğin;
1.25 V’luk çıkış için %25 iş süresi % 75 bekleme süresi
256 x (%25) = 64 h'40' (İş düresi için)
256 x (%75) = 192 h'C0' (Bekleme süresi için)
örneğin;
0.5 V’luk çıkış için % 10 iş süresi % 90 bekleme süresi
256 x (% 10) = 25.6 26h'1A' (iş süresi için)
256 x (% 90) = 230.4230h'E6' (bekleme süresi)
PROBLEM-33) PortA'nın 0. bit'ine bağlı bir voltmetrede 2.5 V’luk gerilim üreten PIC programı. Çıkış gerilimin analog değeri (2.5 V) portB'deki dijital sinyalin (5 V) % 50 si olacağından,
IS değişkenine h'80'
BEK değişkenine h'80 sayıları atanmıştır.
;===PROG33.ASM====21/08/2000========
LIST P=16F84
INCLUDE "P16F84.INC"
IS EQU h'0D'
BEK EQU h’0C’
SAYAC EQU h’0E’
ORG h'00'
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISB ; PORTB tüm uçları çıkış
BCF STATUS, 5 ; Bank0
CLRF PORTB ; CS ucunu "0" yap
MOVLW h'80' ; Wh’80’
MOVWF IS ; ISW, Iş süresini ata
MOVLW h'80' ; Wh'80"
MOVWF BEK ; BEK W, bekleme süresini ata
TEKRAR
BSF PORTB, 0 ; PORTB'nin 0. bit’i "1"= 5V
MOVF IS, W ; WIS, iş süresini al
CALL GECIKME
BCF PORTB, 0 ; PORTB'nin 0. bit'i "0"= 0 V
MOVF BEK, W ; W BEK, bekleme süresini al
CALL GECIKME
GOTO TEKRAR
GECIKME
MOVWF SAYAC ; IS ya da BEK içerisindekini SAYAC'a yaz.
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN
END
İşlem Basamakları
1.PIC16F84'ü, PROG33.ASM ile programlayınız.
2.PIC'i deneme kartına yerleştiriniz.
3.Devreye gerilim uygulayarak programı çalıştınnız. PortB'nin 0. bit'ine bağlı LED'in yarı parlaklıkta yandığını görünüz. (Çıkış 2.5 V olduğundan)
4.Breadboard üzerinde kurduğunuz devre üzerinde deneme yapıyorsanız, PortB'nin RBO ucuna bir voltmetre bağlayarak 2.5 V luk gerilimi ölçünüz.
DİJİTAL/ANALOG ÇEVİRİCİ
ANALOG/DİJİTAL ÇEVİRİCİ
DİJİTAL/ANALOG ÇEVİRİCİ
PIC16F84 kullandığınız bir uygulama devresinde analog voltaj çıkış gerekebilir. Bu durumda portlardan çıkan dijital sinyalleri analog voltaja çevirme işlemi söz konusu olmaktadır. Bu işlemi yapmak için bir çok yöntem vardır Bunlardan ilki, PIC çıkışına ladder (merdiven) direnç devresi ve bir OP-AMF bağlayarak yapılan D/A çeviricidir. ikincisi ise, çok daha basit bir yöntem olan PIC çıkışına D/A çevirici entegre bağlamaktır.
Microchip firması PIC kullanıcılarının bu ihtiyacını karşılamak amacıyla piyasaya sürdüğü bir çok mikrodenetleyisi bulunmaktadır. Örneğin PIC14C000 mikrodenetleyicisi girişine uygulanan dijital sinyali doğrudan analog voltaj çıkış olarak verebilmektedir. D/A çevirici entegre bu PIC'in içerisine yerleştirilmiş olduğundan çıkışında başka bir devre kullanmaya gerek kalmamaktadır. Bu tip PIC'lerin incelenmesi ayrı bir kitap konusu olduğunda şimdilik ayrıntılara girmeyeceğiz.
Bu kitapta bizim ele aldığımız PIC16F84'ün sadece dijital girişi ve çıkış bulunmaktadır. D/A çevrimi yapabilmek için yapabileceğimiz tek şey, PlC çıkışından aldığımız dijital sinyali analog gerilime çevirme işlemidir. Şimdi D/A çevrimi işlemi için kullanmak zorunda olduğumuz yöntemleri açıklayalım.
Ladder(Merdiven) Direnç Devresi Kullanmak
Örnek D/A çevirici olarak vereceğimiz devrede PIC'ten 4 bit'lik dijital ve çıktığını düşünürsek, aşağıdaki ladder direnç devresi ile bu sinyali Analog gerilim çeviren devreyi aşağıdaki gibi çizebiliriz.
PortB'den çıkan sinyalin b'00001000' (RB3=1) olduğunu düşünürsek, bu devrede Vçıkış ucundan alınacak gerilimin değerini bulalım:
0-5 V arasında analog gerilim elde etmek için gerekli olan dijital çıkışlar aşağıdaki gibidir.
RB3
RB2
RB1
RBO
VÇIKIŞ
0
0
0
0
0.00
0
0
0
1
0.33
0
0
1
0
0.67
0
0
1
1
1.00
0
1
0
0
1.33
0
1
0
1
1.67
0
1
1
0
2.00
0
1
1
1
2.33
1
0
0
0
2.67
1
0
0
1
3.00
1
0
1
0
3.33
1
0
1
1
3.67
1
1
0
0
4.00
1
1
0
1
4.33
1
1
1
0
4.67
1
1
1
1
5.00
8 Bit D/A konvertör Entegresi Kullanmak
PIC'ten çıkan dijital veriyi analog gerilime dönüştürebilmek için uygulanabilecek ikinci yöntem bir D/A entegresi kullanmaktır. Biz P/N AD558 entegresini örnek olarak vereceğiz. Bu entegre içerisinde yukarıdaki örnekte verdiğimiz ladder dirençler ve toplayıcı amplifikatör (OP-AMP) hazır olarak bulunmaktadır. Entegre 5 V DC ile çalışmakta ve girişine uygulanan dijital sinyali 0-2.55 V arasında gerilim vermektedir.
AD 558 entegresindeki CE ve CS uçlarının fonksiyonları aynıdır. Birisini (CE) toprağa bağlayın. CS giriş verisinin yükselen kenarında girilen datayı kilitlemek için kullanılan uçtur. Bu nedenle portA'nın 0. bit'inden uygulanacak sinyalin yükselen kenarında kilitleme yapılması gerekir.
PROGRAM-30) PortB'nin RBO-RB7 uçlarından çıkan dijital veriyi analog veriye çeviren program. Bu program yukarıda AD 558 entegresiyle kurulan devreye göre yapılmıştır. PortB'nin ucundan çıkması istenen veri b'10000000'dir. Bu veri AD 558 entegresiyle 1.27 V’luk gerilime çevrilir.
;===PROG30.ASM====12/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tüm uçları çıkış
CLRF TRISB ;PORTB tüm uçları çıkış
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
MOVLW b’10000000’;Wb’10000000’
MOVWF PORTB ;AD 558 entegresine giden veri
BSF PORTA, 0 ;AD 558'in CS ucu yükselen kenar
BCF PORTA, 0 ;AD 558'in CS ucu düşen kenar
DONGU
GOTO DONGU
AD 558 entegresine girilen verilerin kaç V’luk gerilime dönüştürüleceğine ait birkaç örnek veren tablo aşağıdadır.
Haksadesimal sayı
VÇIKIŞ
h'00'
0.00
h'0F'
0.15
h'B0'
1,27
h'FF'
2.55
İşlem Basamakları
1.PROGSO.ASM'yi PIC16F84'e yazdırınız.
2.AD 558 entegresiyle yapılan A/D çevirici PIC devresini breadboard üzerine kurunuz.
3.PIC'i deneme devrenize yerleştirerek gerilim uygulayınız. Vçıkış ucuna bir voltmetre bağlayarak 1.27 V’luk gerilimi ölçünüz.
PROGRAM-31) AD 558 konvertörü kullanarak kurulan devrede testere dişi dalga üreten program.
;===PROG31.ASM====14/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
VOLT EQU h’0C’
SAYAC EQU h’0D’
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISA ; PORTA tüm uçları çıkış
CLRF TRISB ; PORTB tüm uçları çıkış
BCF STATUS, 5 ; Bank0
CLRF PORTA ; CS ucunu "0" yap
CLRF VOLT ; VOLT değişkenini sıfırla
DONGU
MOVF VOLT, W ; WVOLT (h'00')
MOVWF PORTB ; PORTBW
BSF PORTA, 0 ; AD558'deki datayı kilitle
BCF PORTA, 0 ;
INCF VOLT, F ; VOLTVOLT +1
GOTO DONGU
İşlem Basamakları
1.PIC16F84'ü programlayarak AD558 ile yaptığınız devre üzerine yerleştiriniz.
2.Vçıkış ucuna bir osilaskop bağlayınız ve ayarlarını yapınız.
3. Vçıkış aşağıdaki testere dişi dalgayı görünüz.
PROGRAM-32) AD558 entegresiyle kurulan devrede sinüs dalgası üreten program. Bu programda portB'ye gönderilen binary sayıları çevrim tablosu içerisine yerleştirilmiştir. 19 voltaj seviyesi daha da arttırılarak sinüs dalgasında birbirine daha yakın gerilimler elde edilebilir. Bu durumda çıkış eğrisi titrek
olmayacaktır. Sinüs dalgasının frekansı, çevrim tablosuna yerleştirilen sayıların çokluğu ile düşürüleceği gibi, çıkış verileri arasında gecikme alt programı kullanılarak da ayarlanabilir.
;===PROG32.ASM====16/08/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h’0D’
OFSET_SAY EQU h’0C’
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tüm uçları çıkış
CLRP TRISB ;PORTB tüm uçları çıkış
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
SAYKIL
CLRF OFSET_SAY ;Tablo ofset sayacını sıfırla
ADIM
MOVF OFSET_SAY, W ;WOfset sayacını yaz
CALL TABLO
MOVWF PORTB ;Veriyi portB'ye çık
BSF PORTA, 0 ;AD558'e kilitleme sinyali
BCF PORTB, 0
CALL GECIKME
MOVF OFSET_SAY, W ;Ofset sayacını W'ye yaz
SUBLW h'23' ; Saykıl bitti mi?
BTFSC STATUS, 2 ; Zero flag'ı kontrol et.
GOTO SAYKIL
INCF OFSET_SAY ; OFSET_SAYOFSET + 1
GOTO ADIM
GECIKME
MOVLW h'0l' ; 3N+3 saykıl(desimal), N=1
MOVWF SAYAC ; WSAYAC
TEKRAR
DECFSZ SAYAC, F ; SAYACSAYAC - 1
GOTO TEKRAR ; SAYAC 0 değil
RETURN
TABLO
ADDWF PCL, F ; OFSET_SAY'ı PLC'ye yükle
RETLW h'80' ; 1.28 Volt
RETLW h'95' ; 1.50
RETLW h'AD' ; 1.72
RETLW h'Cl' ; 1.92
RETLW h'D3' ; 2.10
RETLW h'E2' ; 2.26
RETLW h'EF' ; 2.39
RETLW h'F8' ; 2.48
RETLW h'FD' ; 2.54
RETLW h'FF' ; 2.55
RETLW h'FD' ; 2.54
RETLW h'F8' ;2.48
RETLW h'EF' ;2.39
RETLW h'E2' ;2.26
RETLW h'D3’ ;2.10
RETLW h'Cl' ;1.92
RETLW h'AD' ;1.72
RETLW h’95’ ;1.50
RETLW h'80' ;1.28
RETLW h'6A' ;1.06
RETLW h'54' ;0.84
RETLW h'40' ;0.64
RETLW h'2E' ;0.46
RETLW h'lE' ;0.30
RETLW h'll' ;0.17
RETLW h'08" ;0.08
RETLW h'02' ;0.02
RETLW h'00' ;0.00
RETLW h'02' ;0.02
RETLW h'08' ;0.08
RETLW h'll' ;0.17
RETLW h'lE' ;0.30
RETLW h'2E' ;0.46
RETLW h'40' ;0.64
RETLW h'54" ;0.84
RETLW h'6A' ;1.06
END
İşlem Basamakları
1.PIC16F84'ü programlayarak AD558 ile yaptığınız devre üzerine yerleştiriniz.
2.Vçıkış ucuna bir osilaskop bağlayınız ve ayarlarını yapınız.
3.Vçıkış ucunda aşağıdaki sinüs dalgasını görünüz.
PWM (Pulse Width Modulation) Metodu Kullanmak
PWM (Pulse-Width-Modulation "Pals genişliğini ayarlama") metodu PIC16F84'ün çıkış uçlarından birisinden kare dalga sinyali üretme işlemidir. Kare dalganın pals genişliğini ayarlama suretiyle elde edilen gerilimin DC voltmetre ile ölçülen değerini (Ortalama değeri) değiştirilmiş olur.
Bundan önceki bölümlerde yaptığımız çoğu programlarda portB'nin sadece bir bit'ine bağlı LED'i flash (Yakıp-söndürme) yapmıştık. Eğer LED'i çıkarıp yerine bir voltmetre bağlayacak olsaydık, 2.5 V civarında bir gerilim okuyacaktık. Şimdi PIC programı aracılığı ile bu gerilimin nasıl değiştirileceği hakkında temel elektronik bilgisini verdiğimizde yapılacak programın hiç de zor olmadığını göreceksiniz.
PWM Metodu
PWM metodunu anlayabilmek için eşit aralıklarla LED yakıp söndürme programlarında elde ettiğimiz çıkış eğrisini inceleyelim.
Yukarıdaki çıkış eğrisinde iş süresi, LED'in yanış süresi, bekleme süresi de sönük kalma süresidir. Eğer bir periyot içerisindeki bu süreler birbirine eşitse çıkış gerilimin ortalama değeri 2.5 V olur.
Bir periyot içerisindeki iş süresi ve bekleme süresi oranları değiştirilirse çıkışta ölçülecek gerilimin değeri de değiştirilmiş olur.
Görüldüğü gibi iş süresi uzatıldığında çıkış geriliminin ortalama değeri 2.5 V tan büyük olmaktadır, Eğer iş süresi % 100 olursa çıkış gerilimi 5 V, iş süresi % 0 olursa çıkış gerimi 0 V olur. Bu defa iş süresinin bekleme süresinden az olduğu duruma örnek verelim.
Çıkış gerilimin ortalama değeri bir periyot içerisindeki iş süresi ve bekleme süresi oranlarıyla doğru orantılıdır. Örneğin;
İş süresi % 50 ise çıkış gerilimi (5 V) 2.5 V
İş süresi % 25 ise çıkış gerilimi (5 V) 1.25 V
İş süresi % 75 ise çıkış gerilimi (5 V) 3.75 V olur.
İş ve Bekleme Süresinin Tespit Etmek
RC osilatörle beslenen PIC16F84'ün RB0 ucundan 0 -5 V arasında değişen analog gerilim elde etmek istediğimizi düşünelim. Önce çıkış periyodunun iş süresini ve bekleme süresini belirleyen GECIKME alt programının nasıl olması gerektiğine karar verelim.
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN
SAYAC registeri içerisindeki ilk sayı h'FF' olursa, her defasında SAYAC'tan "1" çıkarılır. SAYAC'ın "0" a gelmesi için 256 döngü gerekir. Bu GECIKME alt programıyla çıkış peryodunun % 100'ünü elde ettiğimizi düşünürsek, iş süresi ve bekleme süresini tesbit etmek için h'FF' /Desimal 256) sayısının yüzdesini almak gerekir. Örneğin;
2.5 V’luk çıkış için % 50 iş süresi % 50 bekleme süresi gerekir.
Bu durumda SAYAC registeri içerisine atayacağımız sayılar ne olmalıdır ?
256 x (% 50) = 128h'80' (İş süresi için)
256 x (% 50) = 128h'80' ( bekleme süresi için)
örneğin;
1.25 V’luk çıkış için %25 iş süresi % 75 bekleme süresi
256 x (%25) = 64 h'40' (İş düresi için)
256 x (%75) = 192 h'C0' (Bekleme süresi için)
örneğin;
0.5 V’luk çıkış için % 10 iş süresi % 90 bekleme süresi
256 x (% 10) = 25.6 26h'1A' (iş süresi için)
256 x (% 90) = 230.4230h'E6' (bekleme süresi)
PROBLEM-33) PortA'nın 0. bit'ine bağlı bir voltmetrede 2.5 V’luk gerilim üreten PIC programı. Çıkış gerilimin analog değeri (2.5 V) portB'deki dijital sinyalin (5 V) % 50 si olacağından,
IS değişkenine h'80'
BEK değişkenine h'80 sayıları atanmıştır.
;===PROG33.ASM====21/08/2000========
LIST P=16F84
INCLUDE "P16F84.INC"
IS EQU h'0D'
BEK EQU h’0C’
SAYAC EQU h’0E’
ORG h'00'
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISB ; PORTB tüm uçları çıkış
BCF STATUS, 5 ; Bank0
CLRF PORTB ; CS ucunu "0" yap
MOVLW h'80' ; Wh’80’
MOVWF IS ; ISW, Iş süresini ata
MOVLW h'80' ; Wh'80"
MOVWF BEK ; BEK W, bekleme süresini ata
TEKRAR
BSF PORTB, 0 ; PORTB'nin 0. bit’i "1"= 5V
MOVF IS, W ; WIS, iş süresini al
CALL GECIKME
BCF PORTB, 0 ; PORTB'nin 0. bit'i "0"= 0 V
MOVF BEK, W ; W BEK, bekleme süresini al
CALL GECIKME
GOTO TEKRAR
GECIKME
MOVWF SAYAC ; IS ya da BEK içerisindekini SAYAC'a yaz.
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN
END
İşlem Basamakları
1.PIC16F84'ü, PROG33.ASM ile programlayınız.
2.PIC'i deneme kartına yerleştiriniz.
3.Devreye gerilim uygulayarak programı çalıştınnız. PortB'nin 0. bit'ine bağlı LED'in yarı parlaklıkta yandığını görünüz. (Çıkış 2.5 V olduğundan)
4.Breadboard üzerinde kurduğunuz devre üzerinde deneme yapıyorsanız, PortB'nin RBO ucuna bir voltmetre bağlayarak 2.5 V luk gerilimi ölçünüz.
xman- Mesaj Sayısı: 18
Kayıt tarihi: 28/01/09
Yaş: 22
Similar topics» Kutlamalar Bölüm Kuralları
» Photoshop İçin Yüzlerce Adet Dijital Arka Fonlar
» bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
» bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
» Teorik,Deneysel Ve Öznel Olasılık
» Photoshop İçin Yüzlerce Adet Dijital Arka Fonlar
» bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
» bölüm 14 DİJİTAL ANALOG ÇEVİRME İŞLEMLERİ
» Teorik,Deneysel Ve Öznel Olasılık
1 sayfadaki 1 sayfası
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz