8051 ile Programlanabilir Güç Kaynağı Yapımı

Hazırlayan: Ali İhsan UYSAL Projenin Keil Simulasyon ve pcb Dosyaları 8051-programlanabilir-guc-kaynagi Emeği geçen Kişilere Teşekkürler
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
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;
}
}
}
}
Yazar: gevv
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1955 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; gevv













afedersin ama 1 adet 10 F , 25V demişin malzemelerde ama yok nerde ? :D
Ç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.