Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: electricman - 24 Mayıs 2011, 19:31:11

Başlık: pic adc girisi
Gönderen: electricman - 24 Mayıs 2011, 19:31:11
pic16877 analog girisine sensör bagladım ama bagladıgım sensor en fazla 0.45 volt cıkıs veriyor, devreyi kurdugumda adc cevrim olmuyor, hata bende mi yoksa picin en düsük algılama voltajının altındamı bu deger bu sınırı bilen var mı :(
Başlık: Ynt: pic adc girisi
Gönderen: Maxim - 24 Mayıs 2011, 19:44:06
verdiğin detay kadar ancak şöyle cevap verilebilir
"hata sende"
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 24 Mayıs 2011, 19:47:44
yani picin boyle bir sınırı yok tesekkur ederim hemen gözden gecireyim devremi
Başlık: Ynt: pic adc girisi
Gönderen: VFR - 24 Mayıs 2011, 21:52:52
Hata kesinlikle sende. PIC'in 10 bit ADC si var. Bu da demek oluyor ki 5V'u 2^10 = 1024 adımda görebilirsin.
5/1024=48mV hassasiyetle ADC'yi kullanabilirsin.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 19:32:23
programım isis'ta sorunsuz calısıyor ama devreyi kurdugumda ledi bile yakamıyor,sharp sensörü kullanıyorum lm35 i sadece 0,45-0 volt arasını pice girebilmek icin kullandım yoksa onu kullanmıyorum programım ve devre semam bu sekilde, o soylediginiz adım boyunu 0.45/1024 ten tekrar buldum elimdeki orneklerde o sekilde yapmıslar hatalı oldugum bir yer var ama bir türlü bulamadım

[IMG]http://img837.imageshack.us/img837/5417/isid.png[/img] (http://imageshack.us/photo/my-images/837/isid.png/)


#include <16f877.h>

#device ADC=10


#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)

#use fast_io(c)
#use fast_io(e)

#define use_portb_lcd TRUE   

#include <lcd.c> 


#INT_AD               
void ADC_Kesmesi ( )
{
   output_high(pin_c5); 
   delay_ms(200);
   output_low(pin_c5); 
}

unsigned long int bilgi;
float i;     
float mesafe;
int8 j;


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

   set_tris_c(0x00); 
   set_tris_e(0x0F);

   output_c(0x00);   

   setup_adc(adc_clock_div_32); 
   setup_adc_ports(ALL_ANALOG); 
   enable_interrupts(INT_AD);   
   enable_interrupts(GLOBAL);   

   lcd_init();                           

   printf(lcd_putc,"\f UZAKLIK OLCUM");
   delay_ms(1500);

   while(1)   
   {
      set_adc_channel(5);   
      delay_us(20);         
      bilgi=read_adc();     

      i=(0.000439453125*bilgi); 



if (i<0.0200)
mesafe=80;


if ((i<=0.0228) && (i>0.0200))
mesafe=75;

if ((i<=0.0235) && (i>0.0228))
mesafe=70;



if ((i<=0.0245) && (i>0.0235))
mesafe=65;



if ((i<=0.0263) && (i>0.0245))
mesafe=60;



if ((i<=0.0271) && (i>0.0263))
mesafe=55;


if ((i<=0.0287) && (i>0.0271))
mesafe=50;

if ((i<=0.0302) && (i>0.0287))
mesafe=45;


if ((i<=0.0325) && (i>0.0302))
mesafe=40;

if ((i<=0.0355) && (i>0.0325))
mesafe=35;


if ((i<=0.0391) && (i>0.0355))
mesafe=30;



if ((i<=0.0436) && (i>0.0391))
mesafe=25;


if ((i<=0.0460) && (i>0.0436))
mesafe=20;

if ((i<=0.0463) && (i>0.0460))
mesafe=10;

if ((i>0.0460))
mesafe=0;

   
     
      printf(lcd_putc,"\fDijital=%lu",bilgi);
      printf(lcd_putc,"\nUZAKLIK=%f",mesafe);
      delay_ms(25);


   
   
   
   if ((mesafe<=80) && (mesafe>=60))
    { 
    {output_high(pin_c0);
    delay_ms(400);
    output_low(pin_c0);
    delay_ms(400);
    }
    }
     if ((mesafe<60) && (mesafe>=40))
    { 
    {output_high(pin_c0);
    delay_ms(200);
    output_low(pin_c0);
    delay_ms(200);
    }
    }
     if ((mesafe<40) && (mesafe>=20))
    { 
    {output_high(pin_c0);
    delay_ms(100);
    output_low(pin_c0);
    delay_ms(100);
    }
    }
     if ((mesafe<20) && (mesafe>=0))
    {
    {output_high(pin_c0);
   
    }
    }
   }
   
}
Başlık: Ynt: pic adc girisi
Gönderen: emin1 - 25 Mayıs 2011, 20:07:36
sensörü kontrol et.

Önce sensöre 5V gerilim ver
çıkışına bir voltmetre bağla
voltmetrede en kısa mesafedeki gerilimle en uzun mesafedeki gerilimi ölç
sensörün doğru çalıştığından emin ol

sharplar hassas en ufak ters bağlantıda yanıyor.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 20:16:02
problem o degil onun cıkısını kontrol ettım dedigim gibi 0.45 volt cıkıs veriyor sharp GP2D12
Başlık: Ynt: pic adc girisi
Gönderen: yasir - 25 Mayıs 2011, 20:16:49
hangi sharp sensörünü kullanıyorsunuz? Kodu nedir. Bazı modellerde( çin mallarının hepsi de diyebiliriz) bağlantı şekilleri sihay gnd, kırmızı +5, sarı data şeklinde olmayabiliyor.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 20:32:06
yukarıda soyledıgım sensör, sensörde problemim yok bu degerleri zaten ölcerek size söyledim
Başlık: Ynt: pic adc girisi
Gönderen: Tagli - 25 Mayıs 2011, 20:36:18
Şimdi internetten baktım da, o sensörün mesafeye göre 0.45 - 2.45 volt aralığında bir çıkış vermesi gerekiyor. Burada (http://zuff.info/SharpGP2D12_E.html) bir grafik var. Öncelikle buradaki değerlerin yaklaşık olarak tutup tutmadığını kontrol et.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 20:38:56
evet ama datasheette 2 deger var 0.45-2.45 üstünde 0.25-0.55, aldıgım yerde hepsini denedm 5 volt girise hepsi aynı cıkısı veriyor bende orada tıkanıyorm zaten
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 25 Mayıs 2011, 21:46:16
adc yaparken, denetleyici ref+ ve ref- arasındaki gerilimi senin istediğin çözünürlükte böler, eğer dışardan birşey bağlamışsan, piclerde ref+ - ref-= 5v dur, yani yaptığın çevrimde sana gelen bilgiler 5v=1024, 0v=0 olarak gelecektir, eğer sen 0.45-0 arasında çok çok hassas ölçüm yapmak istiyorsan ref+ - ref- =0.45v değerini sağlayacak besleme vermen gerekir, ama ben sanıyorum ki senin burda yaptığın işlemde buna gerek yok sen          " i=(0.000439453125*bilgi);"  bu çarpım işleminin doğru olduğuna emin misin, 0.45/1024 yapmışsın ama bunu 5/1024=0.0048828125 ile değiştir misin, büyük ihtimalle bu işlem sonucunda istediğin çıkışı alacaksın, eğer olmazsa, 0.00217265625 dene bu ikisinden biriyle istediğin sonuca kesinlikle ulaşacağını düşünüyorum.

bir tavsiye: sharp ile mesafe ölçümü için bu kadar if caseleri oluşturmana gerek yok, sharpın grafiğindeki değerleri olduğu gibi excele yaz, excel sana grafiğin fonksiyonun çıkarsın :) sen de milimetrik ölçümlerle eğlenme bak :)
Başlık: Ynt: pic adc girisi
Gönderen: Tagli - 25 Mayıs 2011, 22:04:57
Bence sensör bozuk. Son olarak sensöre yakın bir yerde beslemeler arasına 10 - 20 uF gibi bir kapasitör koy. Datasheet'te öyle yazıyordu diye hatırlıyorum ama bundan da pek umutlu değilim.
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 25 Mayıs 2011, 22:18:00
ben kullanıyorum aynısından ve bu şekilde kullanıyorum, dediğim excel fonksiyonunu da çıkardım, her bir santimi tek tek hesaplayabililyorum, biraz daha kasarsam, yani 16 bit adc kullansam milimetre bile ölçerim gibi geliyor :)
Başlık: Ynt: pic adc girisi
Gönderen: yasir - 25 Mayıs 2011, 22:24:04
sarıya gnd, kırmızı +5 vererek multimetre yardımıyla bir ölçüm yap istersen hocam. bağlantı şekli o şekilde de olabilir.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 22:33:22
dediklerini hemen yapıyorum...tavsiyen icin tesekkürler ama hicbir grafige uymuyor ki cıkıs hangi grafigin degerlerini aktarayım excele :) birde senin yaptıgın programı buraya kopyalayabilirmisin.....nerelere kondansatör atmadım ki ama datasheet dısına cıktım hep.
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 25 Mayıs 2011, 22:42:29
thayır söylemek istediğim grafik şu şekilde, senin sharpın datasheetindeki grafikte her bir voltaja karşılık gelen mesafe değerleri vardır, excelde bir sütüna 8 den başlayarak 80( 8 den 80 e dedim çinkü benim kullandığım 8 cm altını ölçmeiyor, tabi bunu mekanik bir uyanıklık ile çözdüm ben de :) ) e kadar satır satır  yazarsın, bir başka sütuna da bunların denk geldiği voltaj değerlerini yazarsın,( internette biraz araştır excelde grafik çizme diye ) daha sonra excel sana bunun grafiğini de verir, voltaja bağlı olarak mesafenin fonksiyonunu da verir, hatta fonksiyonun kaçıncı dereceden olmasını istersen ezcel o dereceden fonksiyonu çıkarır
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 25 Mayıs 2011, 22:44:55
dedigini anladım ama datasheetteki degerlere hic ugramıyo kac tane denedım yine aynı cıkıs gerilimini veriyo(düsük olan) ama datasheetteki grafik 2.45 voltlardan bahsediyor.
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 25 Mayıs 2011, 23:00:05
adc hesaplamada söylediğim değişiklikleri yaptın mı
Başlık: Ynt: pic adc girisi
Gönderen: VFR - 25 Mayıs 2011, 23:33:23
Alıntı yapılan: yasir - 25 Mayıs 2011, 22:24:04
sarıya gnd, kırmızı +5 vererek multimetre yardımıyla bir ölçüm yap istersen hocam. bağlantı şekli o şekilde de olabilir.
Kırmızı         +5V
Sarı             Çıkış
Siyah           GND
Olmalıydı, eğer dediğiniz gibi yaptıysanız sensör bozulmuş olabilir
Başlık: Ynt: pic adc girisi
Gönderen: yasir - 25 Mayıs 2011, 23:39:21

Kırmızı         +5V
Sarı             Çıkış
Siyah           GND
Olmalıydı, eğer dediğiniz gibi yaptıysanız sensör bozulmuş olabilir
[/quote]

bu genel format zaten.. bazı sharplardaki bağlantı şekli dediğim şekilde de olabiliyor. 2ya021(kodundan tam emin değilim)de öyle mesela. belki bu modelde de böyle bi saçmalık vardır diye düşünerek söylemiştim. bu arada daha önce çok kez ters veya yalnış voltaj verdiğim oldu sharplara. hala bi sharp bozmuş değilim.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 26 Mayıs 2011, 00:13:33
yinede olmuyor... eger ben bu gelen voltajı opamp yardımıyla yükseltsem cok dalgalanmalar olur mu?
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 26 Mayıs 2011, 21:11:44
Alıntı yapılan: Tagli - 25 Mayıs 2011, 22:04:57
Bence sensör bozuk. Son olarak sensöre yakın bir yerde beslemeler arasına 10 - 20 uF gibi bir kapasitör koy. Datasheet'te öyle yazıyordu diye hatırlıyorum ama bundan da pek umutlu değilim.
bu dedigini yaptıktan sonra 0.5-1.8V arası cıkıs alıyorum artık teşekkür ederim ama bu sefer de 60 cm den sonra sadece 0.01 V degisiyo simdi de bu sorunu halletmem gerekiyor
Alıntı yapılan: jackal183 - 25 Mayıs 2011, 23:00:05
adc hesaplamada söylediğim değişiklikleri yaptın mı
adım büyüklügünü degistirdim dedigin gibi programdaki sorun cözüldü gibi, board üzerine kurdugumda calısmıyordu(programda lcd var ama ben board üzerinde kullanmıyordum) programdan lcdyi kaldırınca adc okuyup led yaktıran bir program yazdım calıstırdı 0.50 lik degerleri pic algılayabildi
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 27 Mayıs 2011, 00:30:06
değişim 0.01 volt ise adc çzönürlüğünü artır, 16 bit yap ya da daha önce söylediğim ref+ ve ref- gerilimleri harici olarak kendin ver
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 27 Mayıs 2011, 17:55:17
aynen öyle yapmam gerekiyor cok tesekkür ederim
Başlık: Ynt: pic adc girisi
Gönderen: jackal183 - 27 Mayıs 2011, 18:42:26
ancak aklında bulunsun 16 bit yapmak tek başına çzöüm olamaybilir, 16 bit yaptığın zaman filtre eklemen gerekebilir
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 27 Mayıs 2011, 21:22:50
isiste o devre calıstı ama bu sefer de lcd yi calıstımadım :'( 2*16 lcd 16 bacaklı, simulasyondaki degerlerin aynısını girdim yanı bacakları bagladım calısmadı besleme gerilimi 5v deiil mi acaba orada mı yanılıyorum acm1602KA
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 27 Mayıs 2011, 21:42:42
boarda kurmanın kotu yanı temassızlık cok oluyor lcd de calıstı tesekkür ederm ilgine...
Başlık: Ynt: pic adc girisi
Gönderen: fahri- - 27 Mayıs 2011, 21:54:33
kullandığınız pic de adc 16 bit olmaz. max 10 bit.
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 28 Mayıs 2011, 13:20:09
arkadaslar hepinize tesekkür ediyorun hersey yoluna girdi ilginize tesekkürler
Başlık: Ynt: pic adc girisi
Gönderen: Tagli - 28 Mayıs 2011, 15:23:14
Sorunu nasıl çözdün?
Başlık: Ynt: pic adc girisi
Gönderen: electricman - 01 Haziran 2011, 17:02:24
kondansatoru 100nf bagladım gerilim deger aralıkları duzelti 0.01 degil daha yuksek sekilde oldu