PICC de toplama sorunu ??

Başlatan shark27, 25 Şubat 2011, 18:17:03

shark27

arkadaşlar merhaba...

pic16f877'nin analog 2 girişine qrd1114 sensörleri bağladım..

10 bit ADC işlemi yapıyorum.

sensörler ayrı ayrı beyaz çizgiyi gördüğünde 10 civarı ,görmediği zaman ise  800 civarı bir değer görüyorum lcd de...

programın başında

long sensor[2];
long toplam=0,toplam1=0;
long sayı=0;
tanımlamalar yaptım....

programın ana kısmı içinde;

for(k=0;k<2;k++)
{
toplam=toplam+(sensor*sayı);
toplam2=toplam2+sensor;
toplam=toplam+1000;
}

printf(lcd_out"\f toplam=%ld",toplam);
printf(lcd_out"\n toplam2=%ld",toplam2);


diyelimki 2 sensorde beyaz çizgiyi görmediği anda ikisinin değeri 800 ekranda gözüküyor.
o zaman
toplam değerini hesaplıyorum 800000 çıkması gerekiyor;
toplam2 değeri ise 1600 çıkması gerekiyor.

ekranda toplamın değeri 38400 veya benzeri bir değer gözüküyor.
toplam2 değeri ise  1600 yani toplam2 nin değeri doğru ama toplam değerinde hata var

yardım edebilrmisiniz neresinde hata yapıyorum veya yanlış düşünüyorum
kolay gelsin ii çalışmalar

KONYALI

long tanımının CCS C içerisinde int16 ya eşit olduğu yazıyor yardım dosyasında. Bu tiplede unsigned olarak 0 - 65535 signed için -32768 - 32767 tanımlayabilirsiniz. 800000 gibi bir değeri tutması için değişkeni long long tipinde belirtmelisiniz.



shark27

başka bir yerde şu şekilde yazıyor

long ifadesi 32 bit ve işaret içeren sayılar için kullanılan bu tanımda sayının -2147483648 ve +2147483647 arasında olması gerekir

shark27

bir yerde şunu gördüm bilen varmı acaba??

" PICC  derleyicisinde printf fonksiyonu long ve float veri çeşitleri için kullanılamaz"

yani bu lcd ye long ifadeyi yazdıramammı demek oluyor bu ??:(

fahri-

PICC dediğiniz CCS C mi?
eğer CCS C ise printff ile long ta yazdırırsınız float değer de . bir problem yok.

JKramer

Yeni mesajlara tıklayınca ben de karıştırıyorum, Hi-Tech bölümündeymişiz :).

Hi-Tech için data tipleri : http://www.microchipc.com/HiTechCFAQ/#_Toc475127507

shark27

arkadaşlar çok ilginç bu arada yanlış yere yazmışım CCS kullanıyorum

şimdi sensor[0] ın değeri 200

bu değeri toplam=sensor[0]*1000 şeklinde çarptırdığımızda toplamın değeri 200000 olur:) yanılıyomuyum:)

yalnız tanımlamada

long sensor[8] olarak tanımladığımız için long ta 16 bit olduğu için sığmıyor

ben bugün

int32 sensor[8] olarak tanıttım bu sfefer ekranda 3392 yazıyor

nedir bu hata anlamadım gitti

shark27

yeni bi deneme yaptım problemi şöle anlatayım

sensor[0]=200;
   toplam=1000;
   toplam=toplam*sensor[0];

sensor[0] long olarak toplam ise int32 olarak tanımlandı ekranda toplamın değeri 200000 olarak görülüyor

aşağıdaki şekilde yazışdıüğında yani direkt 1000 sayısı ile çarpıldığında yanlış sonuç çıkıyor

 
  sensor[0]=200;
   toplam=1000*sensor[0]; deyince toplamın değeri 3392 gözüküyor.

niye böle oluyor sizce?