Elektronik / Mikrodenetleyici Projeleri/

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

Sponsorlu Bağlantılar

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ı
atmel-8051-dac0808-dijital-powersupply

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 .

Besleme Katı Devre Şeması
7809-7809-7805-besleme-devresi

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 Projenin Keil Simulasyon ve pcb Dosyaları 8051 ile Programlanabilir Güç Kaynağı Yapımı

Dosya indirme LINK listesi (HTML formatında) link-4634.zip şifre-pass: 320volt.com

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&&deger1==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&&deger2==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;
}
}
}
}
  • metin

    afedersin ama 1 adet 10 F , 25V demişin malzemelerde ama yok nerde ? :D

  • E A

    Çok teşekkürler güzel bir paylaşım olmuş. Emeğinize sağlık. Denerim büyük ihtimal bu projeyi..

  • sibernetik

    malzeme listesinde F olarak görünen kondansatörler nanofarad olacak tahminimce, parazitlerleri filtre amaçlı, küçük değerli kutupsuz kondansatörler bunlar.