Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

ADC ile Gerilim Okuma Yardım!!!

Başlatan artapon, 10 Ocak 2013, 17:43:43

artapon

Arkadaşlar ADC ile gerilim okumaya çalıştım ama hep 5V okuyorum.. problem nerde acaba...

pici batarya ile çalıştırıyorum. bataryanın gerilimini ölçmek istiyorum... batarya gerilimi 4.2V. batarya kullanıldıkça gerilimi değişmektedir.
bunu pic ile minimum pin kullanarak yapmaya çalışıyorum...

Devre Şeması:


#include <16f877A.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000) 
int16 adcsonuc, gerilim; 


void main ()
   { 
      setup_psp(PSP_DISABLED);       
      setup_spi(SPI_SS_DISABLED);    
      setup_timer_1(T1_DISABLED);    
      setup_timer_2(T2_DISABLED,0,1); 
      setup_CCP1(CCP_OFF);          
      setup_CCP2(CCP_OFF);           
      setup_adc_ports(AN0);     

      setup_adc(ADC_CLOCK_DIV_2);   
      set_adc_channel(0); 
               delay_ms(1);        
               adcsonuc=read_adc(ADC_START_AND_READ);  
               gerilim=(0.0048875855*(1+adcsonuc))*10; 
}
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

Okan AKÇA

fazla çarpma bölme işlemi yapmaktan olabildigince kacınmaya bak

Erol YILMAZ

Mcu'nun 2 nolu pininde 5V olabilir mi ?

emregenc

#3
örnek adc uygulaması işine yarar
https://hotfile.com/dl/188355394/b35710c/ADC_Uygulamas-2.rar.html

yada yapmış olduğun proteus ve yazılım kodlarını dosya olarak paylaşırsan yardımcı olmaya çalışırım

artapon

fazla çarpma veya bölme yok aslında sadece adım büyüklüğü nün adc ile çarpılıp virgülden kurtarma yapıyorum..


hocam 5V olması mümkün deil. çünkü gerilim max 4.2Volabilşir. ki ben güç kaynağı ile 3V getrirdiğimde bile hala 5.0 görüyorum... benim besleme gerilimim ne kadar değişirse değişsin hep 5.0 görüyorum...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

skara1214

valla 5 görmen enterasan bana kalsa sürekli 0 görürsün çünkü değişkenleri int16 olarak tanıtmışşın ama ondalıklı sayılarla çarpmışsın yani değişkenleri float tarzı tanımla problemin ortadan kalkar
Herkes ölür ama herkes gerçekten yaşamaz

Okan AKÇA


artapon

 skara1214 hocam ama RB4 direncinin değerini değiştirince displayde gördüğüm değer değişiyor...

mantıkta ve kodlarda hata yok değilmi?

acaba gerilim sürekli değiştiği için veya benim referans aldığım gerilim noktalarında mı problem var ben anlayamadım...

V+ref         VDD beslemesi
V-ref          VCC  beslemesi
RA0            Analog giriş okuma
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

skara1214

#8
hocam benim dediğimi denedin mi? Değişkeleri floata çevir öyle bir dene.Vss  gnd ve vdd yi 5 volt olsun  ref pinlerini kullanma ve 0.0048 yazmanda yeterli  noktadan sonra 10  haneye gerek yok düzgün şekilde çalışır bir sıkıntı olmaz
Herkes ölür ama herkes gerçekten yaşamaz

zamzam23

#9
#include <16f877A.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000) 
unsigned int16 adcsonuc;
float gerilim; 


void main ()
   { 
      setup_psp(PSP_DISABLED);       
      setup_spi(SPI_SS_DISABLED);    
      setup_timer_1(T1_DISABLED);    
      setup_timer_2(T2_DISABLED,0,1); 
      setup_CCP1(CCP_OFF);          
      setup_CCP2(CCP_OFF);      
      setup_adc(ADC_CLOCK_INTERNAL);
      setup_adc_ports(AN0);
      set_adc_channel(0);
      delay_us(25);
while(1)
{      
               adcsonuc=read_adc();
               delay_us(25);//çevrim bitene kadar bekle
               gerilim=(0.0048875855*(1.0+(float)adcsonuc))*10.0; 
               delay_ms(100);
}
}

artapon

hocam yazdıklarınızı denemeye çalışıyorum sizin her adımınızı takip etmeye çalışıyorum ama benim referans gerilimim sürekli değiştiği için ve benim ölçtüğüm noktada hep aynı adc gerilimi okunmaz mı acaba. çünkü 2 direnç te eşit değer de. bunlar problem değil mi sizce...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

zamzam23

#11
Alıntı yapılan: artapon - 10 Ocak 2013, 18:58:00
hocam yazdıklarınızı denemeye çalışıyorum sizin her adımınızı takip etmeye çalışıyorum ama benim referans gerilimim sürekli değiştiği için ve benim ölçtüğüm noktada hep aynı adc gerilimi okunmaz mı acaba. çünkü 2 direnç te eşit değer de. bunlar problem değil mi sizce...

referans gerilimin hep değişmez, Vref=Vdd dir.

evet hep aynı değeri okursunuz.ölçümler dogruysa hep 2V5 okumanız lazım. (adcsonuc=~512)

sonraki adımda eğer oraya pot koyarsanız değişimi rahatlıkla gözlersiniz.

artapon

#12
Alıntı Yapreferans gerilimin hep değişmez, Vref=Vdd dir.

evet hep aynı değeri okursunuz.ölçümler dogruysa hep 2V5 okumanız lazım. (adcsonuc=~512)

sonraki adımda eğer oraya pot koyarsanız değişimi rahatlıkla gözlersiniz.

konuyu biraz daha açarmısınız hocam Vref+ zaten VDD gerilimim. AN0 analog değişimleri gözlemlediğim pin değil mi? ordan hep aynı analog değeri okursam pic gerilimin değiştiğini nasıl anlayacak. ??!!

mesaj birleştirme:: 10 Ocak 2013, 19:21:15

hocam yazdıklarınızın hepsini yaptım pic te şuan 2.5 volt görüyor. 5Vluk batarya bağladığımd da 2.5 V görüyor 3.7 V luk pil bağladığımda da 2.5 V görüyor.?
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

zamzam23

hocam siz pic i beslediğiniz bataryayı mı ölçüyorsunuz?

şimdi şöyle diyelim:
pic i regüle edilmiş bir gerilimle beslediğini düşünelim. o zaman batarya azalsa da belirli bir seviyeye kadar vdd değişmeyeceği için vref de değişmez.

verdiğin devreye göre R3 ün üst ucunu beslemeye bağlamıssın dolayısıyla orası da değişmeyecek.
R3 ün üst ucunu siz bataryaya bağlayın pic in beslemesine değil.(buraya basit bir RC filtre gerekebilir)

bu durumda batarya gerilimi değişince A0 pinindeki gerilim de değişecek. dolayısıyla adc den okudugun gerilim de değişecek.

artapon

Alıntı Yaphocam siz pic i beslediğiniz bataryayı mı ölçüyorsunuz?

şimdi şöyle diyelim:
pic i regüle edilmiş bir gerilimle beslediğini düşünelim. o zaman batarya azalsa da belirli bir seviyeye kadar vdd değişmeyeceği için vref de değişmez.

verdiğin devreye göre R3 ün üst ucunu beslemeye bağlamıssın dolayısıyla orası da değişmeyecek.
R3 ün üst ucunu siz bataryaya bağlayın pic in beslemesine değil.(buraya basit bir RC filtre gerekebilir)


bu durumda batarya gerilimi değişince A0 pinindeki gerilim de değişecek. dolayısıyla adc den okudugun gerilim de değişecek.

ama ben gerçekte picin beslemesini ölçmek istiyorum... amacım bu zaten pic e gelen gerilimi ölçüp ona göre pic'te yol vermek...

bu arda acaba hoacm bir tane zenerle sabit bir Vref+ gerilimi mi oluştursak ani ölçümleri tam olarak yapıp karşılaştırması için picin...

bu arada hocam ben pic'e belli gerilim seviyelerinde yol vermek istiyorum aşağıdaki durum doğru mudur?

if (gerilim<=25 && gerilim>23) //2.5v  // gerilim 2.5 volt
                         {
                              output_toggle(pin_d5);
                         }
                    if (gerilim<=23) //2.4V  // LOW BATTERY, gerilim 2.3 volt
                         {
                              birler=12;   
                              onlar=13;
                              output_high(pin_d5);
                         }

hocam yardımlarınız için teşekkürler.. sizlerin sayesinde birşeyler öğrenmiş oluyoruz çok sağolun...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)