Devrenin Çalışması : Devre şemasında görünen devrede tuş takımından girilen 0-5 arası değer , P1 portuna bağlı olan DAC 0808 entegresine uygulanarak DAC çıkışından analog gerilim elde edilir . P0 portuna bağlı olan 7-parçalı gösterge voltaj değerinin tam sayı değerini , P2 portuna bağlı olan gösterge ise voltaj değerinin ondalık değerini göstermektedir . Tuş takımındaki “*” tuşu girilen değeri silmek için , “#” tuşu ise girilen değeri analog gerilime çevirmek için kullanılır . Çıkışta 0-5 V arasında 0,1Volt-0,2Volt hassasiyete sahip analog gerilim elde edilir .
Programlanabilir Güç Kaynağı Devre Şeması
Besleme Katı : Bu devrenin çalışabilmesi için devrede +9Volt , -9Volt , +5Volt ve şaseye ihtiyaç vardır . Bunu da aşağıdaki devreyle karşılayabiliriz .
Devrede Kullanılan Elemanlar :
Dirençler :
3 adet 4,7 K
1 adet 8,2 K
Kondansatörler :
2 adet 22 pF
1 adet 10 F , 25V
5 adet 100 nF
2 adet 1000 F , 25V
2 adet 47 F , 25V
1 adet 470 F , 25V
1 adet 12 Mhz Kristal
2 adet 7 parçalı ortak anot display
Tuş takımı için 12 adet buton
4 adet 1N 4007
1 adet 2 x 9 V luk trafo
1 adet 9V luk pil
Entegreler:
1 adet 89C51 mikrodenetleyici
1 adet DAC0808
1 adet LM 741
1 adet 7805
1 adet 7809
1 adet 7909
Hazırlayan: Ali İhsan UYSAL Emeği geçen Kişilere Teşekkürler
Keil Programı :
/*****************************************************************/ /* Uygulama Adi : Programlanabilir Güç Kaynagi Uygulamasi */ /* Dosya Adi : Programlanabilir_Guc_Kaynagi */ /* Tarih : Subat 2006 */ /* Hedef Islemci: MCS-51 */ /* */ /*****************************************************************/ /* Kütüphane Dosyasi */ #include <89c51rd2.H> /* Tus Takimi Uç Tanimlamalari */ #define sutun1 P3_0 #define sutun2 P3_1 #define sutun3 P3_2 #define satir1 P3_3 #define satir2 P3_4 #define satir3 P3_5 #define satir4 P3_6 // istenilen voltaj degerinin karsiligi P1'den DAC'a aktarilir #define cikis P1 unsigned char sayi3, sayi4; unsigned char tablo[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; int deger1=0,deger2=0,sayi1=0,sayi2=0,kontrol=0; /////////////////////////////////////////////////////////////////// // Çikis için Voltaj Hesaplamasi Yapan Fonksiyonu // /////////////////////////////////////////////////////////////////// void voltaj(void) { int a,b; a=sayi1*10; // Tus takimiyle girilen deger iki basamakli sayi b=sayi2+a; // seklinde elde edilir if(b==0) cikis=0; else if(b>0&&b<10) cikis=(b*5)+1; // Elde edilen sayi DAC için else if(b>9&&b<20) cikis=(b*5)+2; // uygun bir degere çevrilir. else if(b>19&&b<30)cikis=(b*5)+3; else if(b>29&&b<40)cikis=(b*5)+5; else if(b>39&&b<51)cikis=(b*5)+5; else { cikis=0;} deger1=0; deger2=0; } /////////////////////////////////////////////////////////////////// // 7-Parçali Gösterge Fonksiyonu // /////////////////////////////////////////////////////////////////// void display1(void) { // Tus takimindan girilen ilk degeri almak için if(!kontrol==1) { sayi3=tablo[sayi1]; // ilk degğer birinci göstergeye yazilir P2=sayi3; P2=~P2; sayi4=0x40; // ikinci göstergeye "-" isareti yazilarak P0=sayi4; // ikinci degerin girilmesi beklenir. P0=~P0; P3_7=0; } else { P2=P0=0x40; // Yanlis deger girildi "-" ile uyari. P0=~P0; P2=~P2; P3_7=0; } } void display2(void) { // Tus takimindan girilen ikinci degeri almak için if(!kontrol==1) { // kontrol ile yanlis sayi girilip girilmedigi kontrol edilir sayi3=tablo[sayi1]; // ilk deger ikinci göstergeye yazilir P0=sayi3; P0=~P0; // sadece ISIS uygulamasi için çikişlar terslenir P3_7=1; if(sayi1==5&&sayi2>0) { // 0-5 arasi yani son deger 50 girilebilecegi için P0=P2=0x40; // 50'den yukarisi için göstergeye "-" isareti P3_7=0; deger1=0; deger2=0; } else { sayi4=tablo[sayi2];// ikinci deger birinci göstergeye yazilir P2=sayi4; P2=~P2; P3_7=1; } } else { P0=P2=0x40; P0=~P0; P2=~P2; P3_7=0; } } /////////////////////////////////////////////////////////////////// // ANA FONKSİYON // /////////////////////////////////////////////////////////////////// void main() { P2=0x3F; P0=0x3F; // Göstergeler ve cikis 0'a kurulur P3_7=1; // (P3_7 nokta gösterimi içindir) cikis=0; P0=~P0; P2=~P2; //sadece ISIS uygulamasi için çikislar terslenir while(1) { if(deger1==0) { // Tus takimindan alinacak ilk deger için tarama yapilir sutun1=0; if(sutun1==0) { if(satir1==0) { while(satir1==0); sayi1=1; deger1=1; kontrol=0; display1(); } if(satir2==0) { while(satir2==0); sayi1=4; deger1=1; kontrol=0; display1(); } if(satir3==0||satir4==0) { while(satir3==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=1; display1(); } if(satir4==0) { while(satir4==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=0; display2(); cikis=0; } sutun1=1; } sutun2=0; if(sutun2==0) { if(satir1==0) { while(satir1==0); sayi1=2; deger1=1; kontrol=0; display1(); } if(satir2==0) { while(satir2==0); sayi1=5; deger1=1; kontrol=0; display1(); } if(satir3==0) { while(satir3==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=1; display1(); } if(satir4==0) { while(satir4==0); sayi1=0; deger1=1; kontrol=0; display1(); } sutun2=1; } sutun3=0; if(sutun3==0) { if(satir1==0) { while(satir1==0); sayi1=3; deger1=1; kontrol=0; display1(); } if(satir2==0||satir3==0) { while(satir2==0||satir3==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=1; display1(); } sutun3=1; } } if(deger2==0&°er1==1) { // Tus takimindan alinacak ikinci deger için tarama yapilir sutun1=0; if(sutun1==0) { if(satir1==0) { while(satir1==0); sayi2=1; deger2=1; kontrol=0; display2(); } if(satir2==0) { while(satir2==0); sayi2=4; deger2=1; kontrol=0; display2(); } if(satir3==0) { while(satir3==0); sayi2=7; deger2=1; kontrol=0; display2(); } if(satir4==0) { while(satir4==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=1; display2(); cikis=0; } sutun1=1; } sutun2=0; if(sutun2==0) { if(satir1==0) { while(satir1==0); sayi2=2; deger2=1; kontrol=0; display2(); } if(satir2==0) { while(satir2==0); sayi2=5; deger2=1; kontrol=0; display2(); } if(satir3==0) { while(satir3==0); sayi2=8; deger2=1; kontrol=0; display2(); } if(satir4==0) { while(satir4==0); sayi2=0; deger2=1; kontrol=0; display2(); } sutun2=1; } sutun3=0; if(sutun3==0) { if(satir1==0) { while(satir1==0); sayi2=3; deger2=1; kontrol=0; display2(); } if(satir2==0) { while(satir2==0); sayi2=6; deger2=1; kontrol=0; display2(); } if(satir3==0) { while(satir3==0); sayi2=9; deger2=1; kontrol=0; display2(); } if(satir4==0) { while(satir4==0); sayi2=0; deger2=1; display2(); voltaj(); // girilen degere göre voltaj üret } sutun3=1; } } if(deger1==1&°er2==1) { // Tus takimindan degerlerin alinip alinmadigi kontrol edilir sutun3=0; if(sutun3==0) { if(satir4==0) { // # tusuna basilarak girilen deger çikisa aktarilir while(satir4==0); voltaj(); sutun3=1; } sutun3=1; } sutun1=0; if(sutun1==0) { // çikisi sifirlamak için if(satir4==0) { while(satir4==0); sayi1=0; sayi2=0; deger1=0; deger2=0; kontrol=0; display2(); cikis=0; } sutun1=1; } } } }
Projenin Keil Simulasyon ve pcb dosyaları;
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/12/22 Etiketler: 8051, atmel avr projeleri, DAC0808, güç kaynağı yapımı, isis simülasyon, keil, lm741, regulatör
afedersin ama 1 adet 10 F , 25V demişin malzemelerde ama yok nerde ? 😀
Çok teşekkürler güzel bir paylaşım olmuş. Emeğinize sağlık. Denerim büyük ihtimal bu projeyi..
malzeme listesinde F olarak görünen kondansatörler nanofarad olacak tahminimce, parazitlerleri filtre amaçlı, küçük değerli kutupsuz kondansatörler bunlar.