pic18f2520 tuhaf adc okuması??

Başlatan ghistmanzero, 21 Ağustos 2017, 11:19:32

ghistmanzero

bi iki tane flame sensor ile adc okuma yapmaya çalışıyorum  ama değerler baya saçma geliyor .flame sensorden gelen veri hep sabit . ıkı tane es değer direnci 5v u bölmek için kullandım .maksat 2.5  v tatakı analog değeri okumak için. değer=128 şeklinde okunuyor .sensörden veri okuyamamayı geçtim ben değişkeni unsigned long int olarak tanımladım ama niye max 256 ya kadar sayıyor bu.sebebini  anlamadım :/  bi fikri olan var mı ?
kodlarım:
#include <main.h>
 

unsigned long int x,deger;
   
void main()
{
 
   setup_CCP1(CCP_OFF) ;
   setup_CCP2(CCP_OFF) ;


 //  lcd_init();
   set_tris_a(0xff);
   output_a(0x00);
   
   setup_adc(ADC_CLOCK_DIV_32);
   setup_adc_ports(ALL_ANALOG);
   
   while(TRUE)
   {

 for(int i=0;i<4;i++)
 { 
   output_high(pin_b0);
   
   set_adc_channel(1);
   delay_us(25);
   
   deger==read_adc();
   
  printf(" okunan deger=%Lu",deger);
    printf("\f");
   delay_ms(500);
   output_low(pin_b0);
   delay_ms(500);
 }
 
   
   
   }

}


header dosyam
#include <18F2520.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
//#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NOMCLR  
//#fuses H4

 
#use delay(crystal=12MHz)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ghistmanzero

Alıntı yapılan: serkancetin - 21 Ağustos 2017, 11:28:37
Tek adc kullanmışsın

evet hani sadece bir pini adc olarak kullanmaya çalıştım. çoğaltma olayını sonra yapcam ama sadece tek bir pini adc olarak kullanarak 16 bit cözünürlükte bir dijital veri elde etmeye çalışıyorum .kod bunun için uygun mu acaba ? benim elde etmek istediğim sonuç 5v ta 65536(16 bit) ve  0 da ise yine 0. ama benim kod galiba her 256 dan sonra resetleniyor gibi birşey :/ nerde hata yapıyorum anlamadım. açıklayabilir misiniz acaba?

sifirzero

Kullanacgin sensorun kutuphanesi mevcutmu
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ghistmanzero

Alıntı yapılan: serkancetin - 21 Ağustos 2017, 11:50:10
Kullanacgin sensorun kutuphanesi mevcutmu
kütüphanelik bir durum yok aslında. sensör bir vcc  bir gnd ve bir de analog çıkışa sahip . direk potansiyometre okur gibi okunması lazım.arduino ile kullanımını filan inceledim. normal adc okuması hani. benim asıl anlamdığım şey neden max 256 gösteriyor. hani 8 bit gösteriyor ama ben long int (16 bit) tanımladım  :D yine ilginç bir sıkıntı olacak galiba.

sifirzero

Analog cıkışa sahip ise dijatal alamazsın ki.long yüksek bir değer
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

Her ucu analog yapmissin voltaj [size=78%]degerleri ver tek uctan okuma yap.kac volt calistircak isen ona gore hesp yap5 mi 2.5v mu[/size]
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ghistmanzero

Alıntı yapılan: serkancetin - 21 Ağustos 2017, 12:13:41
Analog cıkışa sahip ise dijatal alamazsın ki.long yüksek bir değer
Dijital almaya çalışmıyorum zaten . hani pic adc okuması yapıp bunu dijitale çevirmiş olacak. ekranda görünecek olan 256 ve 128 değeri zaten dijital oluyor. gerilim değeri analog oluyor.ben sadece dijital okuma yapmaya çalışıyorum.

gokhangokcen

#8
İşlemcinin datasheet'ine baktığımda 10 bit adc'si olduğunu gördüm. Sen ise 16 bit olarak programa belirtmişsin. Sanırım sorunun bundan kaynaklanıyor. Maksimum çözünürlüğün 10 bit. Bu şekilde düzenleyip dener misin?

edit:

deger==read_adc();   // burada bir hata yapmışsın. "==" değil tek "=" olacak.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

ghistmanzero

Alıntı yapılan: gokhangokcen - 21 Ağustos 2017, 12:52:08
İşlemcinin datasheet'ine baktığımda 10 bit adc'si olduğunu gördüm. Sen ise 16 bit olarak programa belirtmişsin. Sanırım sorunun bundan kaynaklanıyor. Maksimum çözünürlüğün 10 bit. Bu şekilde düzenleyip dener misin?

edit:

deger==read_adc();   // burada bir hata yapmışsın. "==" değil tek "=" olacak.



:/// ben 16 bit diye aratıp bulmuştum sözde bu pici :/ yanlış bakmışım demek ki. bu durumda 5 v gerilimde max 255 alabilirim zaten. cevaplar için teşekkürler

fahri-

Kullandığınız işlemci 10 bit. Alacağınız max değer 1023 dür. İşlemciyi 8 bit olarak kullanırsanız max 255 değer alırsınız. Pic in 12 bit ADC si olan modelleri de var. Onlardan da max 4095 değer alırsınız.