pil şarj cihazı

Başlatan kubi19, 13 Haziran 2013, 20:18:59

kubi19

Arkadaşlar benim mikroişlemci dersi için projem 1.5 vluk pil şarj eden cihaz. Şimdi benim elimde 9Vluk için pic18f ile yazılmış kod var ve hesaplamalar var ama ben bunu anlayamadım neye göre bu hesaplamaların yapıldığını. kod aşağıda yardımcı olabilirseniz çok sevinirim.

#include <p18f452.h>// Void main e kadar kütüphane seçimleri lcd fonk. tanımlamaları ve pause fonk. tanımlaması var.
#include <xlcd.h>
#include <delays.h>
#include <adc.h>
#include <stdlib.h>
#pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
void DelayFor18TCY( void )
{
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
}
void DelayPORXLCD (void)
{
Delay1KTCYx(60);
return;
}
void DelayXLCD (void)
{
Delay1KTCYx(20);
return;
}
void pause(void)
{
unsigned int k,j;
for(k=0;k<50;k++)
for(j=0;j<100;j++) {};
}

void main(void)// main fonksiyonumuzu oluşturduk
{
char dolu[]={'P','I','L',' ','D','O','L','D','U',};// lcd de kunlanacağımız struct lar ve kullanacağımız integer değişkenlerimizi tanımladık
int d;
int yzde;
signed int vo;
char kes[]={'A','K','I','M',' ','K','E','S','I','L','D','I',};
int b;
char add[]={'Y','U','Z','D','E',};
int x;
int t;
signed int a;
char s[3];
TRISA=0xff;//A portlarını giriş olarak tanımladık (ADC verilerilerinin girmesi için)
TRISD=0x00;//D portlarını çıkış olarak tanımladık(ileride röle ile şarj akımlarını kesmek için)
PORTD=0xff;//D portlarının başlangış değerini bir yaparak rölemizi aktid hale getirdik
OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_8ANA_0REF,ADC_CH0 & ADC_INT_OFF );//ADC tanımlamalarımızı yaptık
Delay10TCYx( 5 );
ConvertADC();
while( BusyADC() );
vo = ReadADC();//RA0 pininden gelen verileri ADC yardımıyla okuttuk
pause();
vo=vo/2;// ADC 16 bit veri yolladığı için onları 8 bit e döndürdük
vo=vo*100;//yüzde hesaplaması için 100 ile çarptık
vo=vo/12; // pilimiz 8.4V değerinde dolu 0V değerinde boş oluyor,(8.4-0)işlemi ile pilimizin % hesabı için gerekli olan aralığı bluduk be böldürerek yüzdemizi hesaplatttık
yzde=vo;//vo değişkeninin yzde değişkenini atadık
CloseADC();//adc mizi kapadık
itoa(yzde,s);//yzde integer değerimizi itoa yardımı ile char a dönüştürdük(LCD ye yazdırmak için)
OpenXLCD( FOUR_BIT & LINES_5X7 );//LCD mizi açtık ve aşağıda gerekli programlar var...
while( BusyXLCD());
WriteCmdXLCD(0x01);
while(BusyXLCD());
pause();
putsXLCD(add);//add struct ımızı lcdnin üst satırına yazdırdık
pause();   
WriteCmdXLCD(0xC0);//imleci alt satıra aldık
while(BusyXLCD());
pause();
putsXLCD(s);// s structımızı LCD nin alt satırana yazdık
pause();
while(yzde>=100)//Projemizde pil şarj olduktan sonra şarj akımının kesilmesi isteniyor bizde %>100 den diyerek bir koşul oluşturduk
{
PORTD=0x00;//rölemize giden pini 0 yaparak röleyi kapattık
OpenXLCD( FOUR_BIT & LINES_5X7 );//LCD için gerekli kodlar
while( BusyXLCD());
WriteCmdXLCD(0x01);
while(BusyXLCD());
pause();
putsXLCD(dolu);   //dolu strucktını lcd ye yazdırık
pause();   
WriteCmdXLCD(0xC0);//alt satıra geçtik
while(BusyXLCD());
pause();
putsXLCD(kes);//kes strucktını alt satıra yazdırdık
pause();
pause();
pause();
pause();
}
}

kubi19

vo=vo/2;// ADC 16 bit veri yolladığı için onları 8 bit e döndürdük
vo=vo*100;//yüzde hesaplaması için 100 ile çarptık
vo=vo/12; // pilimiz 8.4V değerinde dolu 0V değerinde boş oluyor,(8.4-0)işlemi ile pilimizin % hesabı için gerekli olan aralığı bluduk be böldürerek yüzdemizi hesaplatttık
yzde=vo;//vo değişkeninin yzde değişkenini atadık

Burada neden 8.4V ve neden 12 ye böldük. Bu yüzde hesapları neye göre yapılıyor mesela neye göre %60 gözükecek lcd de?

metaltrrocker

hocam bu kodlar sanki 12v luk bir şarj devresi için yazılmış gibi görünüyor.Mikro C de uzman değilim fakat hesaplamalara bakınca normal doğru orantı kurulmuş
12V             100/100     ise
v0           yüzde/100     olur 
------------------------------------------
gibi
kodlara yansıtırsak zaten aynısı olur
v0 değerini zaten biliyoruz çünkü adc den okuyoruz.
v0=v0*100;
v0=v0/12;
yuzde=v0;
kısacası
yuzde=v0*100/12;

Bu kodlar için proteus devresi varmı?
açıklamaları siz mi yazdınız?

kubi19

Vallahi biz de bi arkadaştan aldık bilmiyorum proteusu var açıklamaları da biz yapmadık. Ben şeye takıldım 8.4 diyo acaba pil o voltajda mı dolu olarak kabul ediliyor?

metaltrrocker

Hocam 12 v ile 8.4 volt arasında epey bir fark var bence öyle kabul etmek yanlış olur.Proteus dosyasını da ekleyebilirmisiniz?

kubi19

http://dosya.co/download.php?id=51BA2A5E1 

bu 8.4 V pil şarj edilebilir pilmiş netten araştırdığım kadarıyla onu anladım. proteusu upload ettim olmuştur umarım.