Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

CCS C alıştırma Turlarım

Başlatan Mucit23, 10 Şubat 2012, 15:29:51

F493

Selam,


   Anladım aslında siz 0-1023 arasındaki degeri ekranda gösteriyorsunuz. Formule ihtiyacınız yok. (digital deger için).  Bu sorun proteus dan kaynaklanabilir.(Eger orada deniyorsanız). Proteus devresi varsa paylaşın belki orda birşey vardır. Anlamak için soruyorum bunu neden deniyorsunuz. Değişken referans biraz  garip geldi bana. Eğer öğrenmek amaçlı böyle birşey deniyorsanız şöyle yapın. Oraya trimpot yerine batarya bağlayın ve bir referansa set edip simulasyonu çalıştırın deneyin. Daha sonra referansı degistirip tekrar similasyonu çalıştırın. Çünkü referansın çalışma zamanında değişmesi bana pek doğru gelmedi.

Belki bu yaptıgınız dogrudur ve  biryerlerde kullanılıyordur öyleyse sorun proteusdan kaynalabilir.


Esen kalın.

Mucit23

Hocam değişken referansa ihtiyacım yok.  :) Gerçekte deneme yapıyorum.

Ben sadece referans girişinin çalışmasını anlamak istedim. Aslında bir sensör var çıkış voltajı max. 2.8V Referansı 2.8V yapıp ölçümü hassaslaştırmak amacım.


F493

Selam,

    Şöyle bir deneme yapabilirmisiniz. Hani demiştiniz ya "Referanstaki voltajı 3.130V yapıyorum. Sonra analog girişteki pot ile oynuyorum. Analog girişteki voltajı yaklaşık 3.002 volta getirdiğimde adc max değerini alıyor. Arada yaklaşık 130mv bir fark var. "

Bu sorunun oldugu anda kartın enerjisini kesip tekrar verin(reset değil) ve hiçbir şeye dokunmadan ekrana tekrar bakın. Bir öncesi sorun devam ediyor mu yani aynı degerler mi var yoksa düzeliyor mu. Merak ettim.


Esen kalın.

Mucit23

Hocam yok sorun aynı. Bilmiyorum belki deney kartındanda kaynaklanabilir. Gerçi doğrudan pic bacaklarından gelirim okuyorum. Pek anlam veremedim.

justice_for_all

Olçum noltası ile gnd arasına 100nf kondansator baglayıp oyle deneyin birde.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Mucit23

Birşey sorayım

CCS de aşağıdaki gibi bir tanımlama var

#device adc=10

Buradaki sabiti 10 verisem read_adc fonksiyonu 10bitlik bir değer gönderiyor. 16 yaparsam 16 bitlik bir değer gönderiyor. ADC 10 bit olmasıyla birlikte nasıl 16 bit değerleri alıyorum? 

t2

10 bitlik değer zaten 2bayt yani 16 bit.
Fakat 1023 maksimum değer oluyor.

16 bit okuduğu zaman gelen maksimum değer bu değil mi? Değilse 65535 olabilir. Bunun anlamı da 6kere  sola kaydırma yapılmış demektir.

F493

Selam,

   Genel olarak 8bit, 16bit,32bit şeklinde ifadeler kullanılır.
   8 bit = 0-255 degeri alır.   2^8.
   16bit = 0-6535.   2^16.

   Burada değer 8 bitin üzerindeyse 16bit tir. 10bit 1024 değerini temsil ediyor ve 255'den büyük ozaman bunu 16 bitlik değişkende tutabiliriz.
   00000000 00000000   Görüldüğü gibi 16 bitlik değişkenin içinde sadece 10 bit alan kullanılıyor. Bunu C dilinde ancak 16bitlik değişken içinde tutabilirsiniz.


Esen kalın.

aliveli

#device adc=10
sonuc=  00000000 00000000

#device adc=16
sonuc= 00000000 00000000

gibi olması lazım

F493

Selam,

Alıntı yapılan: aliveli - 22 Kasım 2014, 23:41:10
#device adc=10
sonuc=  00000000 00000000

#device adc=16
sonuc= 00000000 00000000

gibi olması lazım

Ben sizin yazdığınızdan şunu anlıyorum. #device adc=16 yazınca değeri sola dayıyor, #device adc=10 yazınca değeri sağa dayıyor.
Ben bu ifadenin adc'nin kaç bitlik olması gerektiğini tanımlamak için yazıldıgını biliyordum. Değeri sola dayamak için ADFM registerini 1 yapmanız gerekir normal şartlarda.

Esen kalın.

Mucit23

Sabah Sabah CCS ye birşeyler oldu. Hiçbir projeyi derleyemiyorum.
Bilgisayarımdan tamamiyle kaldırıp yeniden kurdum fakat düzelmedi.

Yeni bir boş proje oluşturuyorum.

#include <16F877A.h>
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=20000000)

void main()
{

   while(TRUE)
   {
      //TODO: User Code
   }

}


Hiçbirşey ile oynamadan compile ettiğimde aşağıdaki hataları alıyorum.

Bütün satırlara hata veriyor. Ne oldu bu programa anlamadım daha önce hiç böyle birşeyle kaşılaşmadım.

fatih6761

Hocam PATH'e CCS nin kütüphane klasörünü eklemeyi dener misiniz?
(Bilgisayar>Özellikler>Gelişmiş Sistem Ayarları>Ortam Değişkenleri>Sistem Değişkenlerindeki Path)
bunun sonuna CCS kütüphane dosyalarının bulunduğu(mesela 16f877a.h dosyası) klasörü ekleyin bakalım olacak mı.

Mucit23

Fatih hocam gerek kalmadı desem umarım bana kızmazsınız.

CCS ara sıra böyle yapıyor. Sebebsiz bir şekilde.  2  defa silip yeniden kurdum patch felan yaptım düzelmedi.

Önceden 4.140 kullanıyordum. Şimdi interneti biraz araştırdım 5.040 çıkmış en son. Arada 6-7 sürüm çıkarmışlar. Bayağı bi geride kalmışım. Bende internetten 5.024 bulup kurdum patch felan yaptım. Şuan bir problem yok gibi.

fatih6761

Alıntı yapılan: Mucit23 - 31 Ocak 2015, 13:19:21
Fatih hocam gerek kalmadı desem umarım bana kızmazsınız.

CCS ara sıra böyle yapıyor. Sebebsiz bir şekilde.  2  defa silip yeniden kurdum patch felan yaptım düzelmedi.

Önceden 4.140 kullanıyordum. Şimdi interneti biraz araştırdım 5.040 çıkmış en son. Arada 6-7 sürüm çıkarmışlar. Bayağı bi geride kalmışım. Bende internetten 5.024 bulup kurdum patch felan yaptım. Şuan bir problem yok gibi.
Kızmak ne demek hocam? :) Sorun çözüldükten sonrası önemli değil. Yeni sürüm önemli tabi :)

Mucit23

Bu CCS 'yi yapan mühendisleri meşeden yapılmış bir sopa ile dövmek lazım. Şu programı bi adam edemediler.

5.019 sürümünü kullanıyorum. Kod tamamlama hala düzgün çalışmıyor. Birde While içerisinde Printf komutu yazıyorum printf içerisine strin girmek isteriz ya string girmek için tırnak("") açtığımda derleyici donuyor. Kod yazarken bunu yapıyor. Bunuda yeni gördüm.
Ayrıca bir projede projenin bulunduğu dizin değişirse proje açılmıyor. Kendimi bildim bileli bu sorun var. Hala düzeltemediler. Ciddi ciddi sopayı hakediyorlar.