Analog Ölçüm Hatası

Başlatan musti463, 30 Aralık 2013, 04:37:01

musti463

Merhaba,

ISIS de çalıştırdığım kod ve devre de analog girişe 5V verdiğim zaman 40.15 metre göstermesi gerekiyor ve ISIS de 5V da 40.15m gösteriyor.Fakat devreyi gerçekte kurdum; 5V da 37.4m ile 38.3m arasında değer değişiyor.Bu değişkenlik ve 2m kadar eksiklik neden oluyor?
Mustafa Emir SADE

Tagli

Giriş değişmese bile küçük bit oynuyordur muhtemelen. Giriş de değişiyor olabilir. Ayrıca, PIC'in beslemesi 5'i biraz geçiyorsa onu referans alır, tam 5 volt girişte 1023'ten küçük değer döndürebilir.
Gökçe Tağlıoğlu

camby


Maxim

mV yazmak istemiş üşenmiş heralde  :)

metaltrrocker

Alıntı yapılan: Maxim - 30 Aralık 2013, 10:28:08
mV yazmak istemiş üşenmiş heralde  :)
Belirtmemiş ama mesafe sensörü kullanıyor olabilir:)

Tagli

Bazen kızıyoruz bu tür mesajlara ama aslında kendine göre bir eğlencesi de yok değil. "Aklımdan bir sayı tuttum, bilin bakalım" tadında. Herkes bir varsayımda bulunuyor, birşeyler sallıyor, o salladığına göre iyi-kötü, bulanık-net çözüm üretiyor falan. Bence gayet eğlenceli.  :)
Gökçe Tağlıoğlu

camby

musti ilgili ve kendini geliştirmek isteyen bir arkadaşımız

ama bu tip şeylerde destek isterken üşenmezsen daha yararlı olur bizler için : ) en azından daha saygılı olur.

Eğlenceli tarafı da oluyor tabi ama işe başlamadan önce hadi 1-2 başlığa daha bakıyım diyorum kahvem bitene kadar ve ADC 45 metre çıktı gibi bir soru görüyorum : )

arada kullandığın katsayı bile yanlış olabilir , adc den uzaktayız sonuçta

mistek

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

musti463

#8
:) kusura bakmayın arkadaşlar.Analog ölçümün yapıldığı girişe, uzunluk sensörü bağlı ve grafik ekranda gerilim belli bir katsayı ile çarpılarak metre ye dönüştürülüyor.

mesaj birleştirme:: 30 Aralık 2013, 13:59:59

18F46K22 kullanıyorum 10 bit çözünürlüğü var.Dolayısıyla 1024 ayrı kademe var.ISIS'de 0 bilgisinde 10.8 metre gösteriyor 1023 bilgisinde 40.15 metre gösteriyor.Yani 2 metre oynama, 69 bilgi değişikliğiyle veya voltaj olarak 0.34 V değişimle mümkün.Buda çok fazla. Voltaj sabit(FLUKE 87 ile ölçüyorum) olmasına rağmen bu değişikliğe anlam veremedim.Çözüm öneriniz var mı?
Mustafa Emir SADE

camby

dahili referansı vardı sanki o çipte , onun hassasiyeti daha fazla olması lazım , ona bir baksana

Ersin

Kullandığın sensörü bilmiyorum ama 40 metre de 2 metre hata ve 10bit adc de  normal değil mi , bu %5 hata eder.

musti463

#11
sensör yerine pot kullanıyorum şuan ayrıca min. uzunluk 10.8 metre max. uzunluk 40.15 metre olduğundan %7 hata çıkıyor buda çok fazla.

*Breadboard üzerinde sadece PIC'in analog giriş pinlerinin gerilimini ölçtüğümde pinler boşta olmasına rağmen 1.5V ile 0.5V gerilimler gördüm.Bu sorunu yazılımsal olarak mı çözeceğiz,yazılımsal ise nasıl çözeceğiz (CCS C kullanıyorum)
Mustafa Emir SADE

Maxim

yukarıda sorulmuş olmalı
adc ref değeri kaç volt?
yada besleme tam kaç volt?
5.00v mu ?

musti463

#13

mesaj birleştirme:: 30 Aralık 2013, 21:02:15

Sorun hala devam ediyor.Yazılımı değiştirdim ekranda okuduğu voltaj bilgisini yazacak şekilde değiştirdim.PIC beslemesi 5.02V iken ve analog giriş pinine 5.02 uyguladığımda ekranda 4.55V ile 4.65V arasında değişken değer görünüyor.Sizin uygulamalarınızda da sonuç böyle değişken mi oluyor?Neden 5.02V uyguladığım halde ekranda 4.55V ile 4.65V arasında değişen değer çıkıyor?

Analog ile ilgili kod şu şekilde:

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HSH
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOPLLEN                  //4X HW PLL disabled, 4X PLL enabled in software
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES WDT_SW                   //No Watch Dog Timer, enabled in Software
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOMCLR                   //Master Clear pin used for I/O
#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)
#DEFINE fast_glcd
#define VSS_VDD

#use delay(clock=10000000)

   setup_wdt(WDT_OFF); 
   setup_adc_ports(sAN0|sAN1|sAN2|sAN3);
   setup_adc(ADC_CLOCK_INTERNAL);    
   port_b_pullups (TRUE);

   set_adc_channel(0);
     
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   uzunluk=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
   uzunluk_voltaj=0.0048828125*uzunluk;   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor ve KALİBRASYON yapılıyor

   uzunluk_islem=uzunluk_voltaj*5.87+10.8;//////////formüllerde kullanılacak
   uzunluk_gosterge=uzunluk_voltaj*5.87+10.8;//////////grafik ekranda kullanılacak
   
   glcd_box(15,25,60,46,0); //
   sprintf(uzunluk_str,"%.2g",uzunluk_voltaj);//float to string işlemi gerçekleştiriliyor
   glcd_text57(17,31,uzunluk_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
   


   
Mustafa Emir SADE

Tagli

Okunan ham ADC değerini bir ekrana bastır. 1023 veya yakın birşey görüyor musun onu bir kontrol et.
Gökçe Tağlıoğlu