Batarya Gerilimi Okuma / Değişken Gerilim Okuma...

Başlatan artapon, 13 Ocak 2013, 05:00:52

artapon

Arkadşlar üzerinde bayağı bi zaman harcedığım bi proje oldu. neredeyse 2 günüm gitti diyebilirm. Ama çözüm aslında gözümün önündeymiş meğer(Bir hocamın bana gönderdiği bir projede tüm sorularıma cevap buldum.)...

PIC'i bir batarya veya bir pille beslediğimiz zaman bunun gerilimini nasıl ölçebiliriz. Umarım ihtiyacı olan arkadaşlara faydası dokunur...

DEVRE ŞEMASI:
http://www.yukletr.com/download.php?file=aefa9199d7fc88df7dcfc6fd3ef44d63




KAYNAK KODLAR:

#include <16f877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)        // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(d) //Port yönlendirme komutları D portu için geçerli
#use fast_io(e) //Port yönlendirme komutları E portu için geçerli
#define     display_1      pin_d7      // display_1 ifadesi pin_a0 ifadesine eşleniyor
#define     display_2      pin_d6      // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define     display_bilgi  output_b

   char  birler=0;
   char  onlar=0;
   int16 adcsonuc, gerilim; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
   
   // Ortak ANOT display için veri değerleri
int digit[15]={24,   187,  148,  145,  51,   81,   80,   155,  16,   17,   247,  108,  96,   70};
//            [0,    1,    2,     3,    4,    5,   6,    7,    8,    9,     -,   L.    b.     F.]
//BU DEĞERLER KULLANDIĞIM DİSPLAY BAĞLANTISI YÜZÜNDEN FARKLIDIR... EĞER AYNI BAĞLANTIYI KULLANIRSANIZ PROBLEM YAŞAMAZSINZI

void main()
{

      setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
      setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
      setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
      setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
      setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
      setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
      
      // setup_adc_ports değerleri her pic için değişken olabilir. piclerin başlık dosyasından kullanılabilir tanımlamalar incelenmelidir.
      setup_adc_ports(AN0_VREF_VREF); //setup_adc_ports(AN0_VREF_VREF) AN0 girişi analog giriş,
                                      //Vref+ için RA3 ve Vref- içinde RA2 pini kullanılacak
                                     
      setup_adc(ADC_CLOCK_DIV_2);   // ADC clock frekansı Fadc=Fosc/2
            
      
         set_tris_a(0xFF);    // A portu tümüyle GİRİŞ olarak yönlendiriliyor
         set_tris_b(0x00);    // B portu tümüyle ÇIKIŞ olarak yönlendiriliyor
         set_tris_d(0x00);    // D portu tümüyle ÇIKIŞ olarak yönlendiriliyor
   
   while(true)
   {
               set_adc_channel(0);   // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
               delay_ms(1);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
               adcsonuc=read_adc(ADC_START_AND_READ);     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

               gerilim=(0.0048875855*(1+adcsonuc))*10; //gerilim=((adcsonuc*5)/1024)*10;// Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
               delay_ms(1);
               birler=gerilim%10;  // birler hanesi hesaplanıyor
               onlar=gerilim/10;   // onlar hanesi hesaplanıyor
      
                   if (gerilim<=25 && gerilim>23) //Batarya 2.5V olunca A1 pinindeki led flip flop yapmaya başlıyor
                                                  // ta ki gerilim 2.3V değerini alana kadar.
                         {
                              output_toggle(pin_a1);
                         }
                    if (gerilim<=23) //Batarya gerilimi 2.3V seviyesine geldiğinde d5 deki led sürekli yanık kalıyor.
                         {
                              
                              output_high(pin_d5);
                         }
               //Display Tarama 
               output_high(display_2);          // 2. display aktif durumda
               display_bilgi(digit[birler]);    // displaye bilgi gönderiliyor
               delay_ms(5);                     // gecikme veriliyor
               output_low(display_2);           // 2. display pasif durumda 
               output_high(display_1);          // 1. display aktif durumda
               display_bilgi(digit[onlar]);     // displaye bilgi gönderiliyor
               output_low(PIN_B4);              //nokta
               delay_ms(5);                     // gecikme veriliyor
               output_low(display_1);           // 1. display pasif durumda  
          
   }}
   
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

toyo

Gelirken ne getirilir ki giderken ne götürülür.

artapon


Alıntı yapılan: toyo - 13 Ocak 2013, 10:53:19
Teşekkürler... Emeğine sağlık...

Önemli Değil arkadaşım umarım işinize yarar...

Bu arada bu projede de bana yardımlarını hiçö esirgemeyen Prof Ahmet, Serdar Çicek ve forumdaki diğer arkadaşlara da teşekkür ederim...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

ercanaslan

Teşekkürler iler de uğraşacağım bir projem için lazım olacak

artapon

Alıntı yapılan: ercanaslan - 14 Ocak 2013, 20:58:57
Teşekkürler iler de uğraşacağım bir projem için lazım olacak

inşaallah işinize yarar...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)