Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

16F676 ANSEL SORUNU

Başlatan Ali_54, 24 Ağustos 2011, 15:12:40

Ali_54

      -Arkadaşlar hayırlı ramazanlar,
676 da ADC ayarları yapmak için ANSEL kaydedicisiyle oynamak gerekiyor. ccs c kullanıyorum. adc kullanmak için 676 da adc komutları yeterli gelmiyor olsa gerek (ansel kaydedicisi yzünden). mesela adc birimi çok az akım (uA) çekmelidir normalde (yani voltmetre davranışı). ama 676 simulasyondada gerçekte de oldukça fazla akım çekiyor. datasheet te de böyle bir not düşmüşler zaten. ANSEL kaydedicisi ayarlanarak dijital giriş çıkış yada analog olarak ayalama yapılıyor diye biliyorum. sorunum ise şu:

       CCS C de Bu ayarı nasıl yapabilirim? Örnek bi kod verebilir misiniz?         

teşekkürler
1 harf öğretenin 4 gün kölesi olurum.

JKramer

Katalogda not düşülmüş dediğiniz kısım sayfa kaçta?

Analog pin'leri belirlemek için;
setup_adc_ports(QW);

QW yazan yere yazacaklarınızı 16F676.h dosyası içinde SETUP_ADC_PORTS() kısmına bakarak öğrenebilirsiniz. (sAN0,sAN1 gibi)

Tagli

Sormadan edemeyeceğim:

Konu neden PicBasic bölümünün altında açılmış?

[Lütfen taşımanın ardından bu mesajı siliniz]
Gökçe Tağlıoğlu

esensoy

#3
ilgili işlemcinin datasheet inden ANSEL register inin adresini bul, (16f676 için 0x91 imiş)
ccs e
#byte ANSEL = 0x91
ekle,

artık kod içerisinde değişkene değer atarmış gibi ANSEL = yazıp değer atayabilirsin
En tehlikeli an "zafer" anıdır.

Ali_54

teşekkür ederim sorun çözülmüştür. aslında ansele gerek kalması. ccs c setup_adc_ports() gibi komutlarla bunu arka planda yapıyor demekki. bi kod çakışması olmuş hatamı buldum. yani hem analog ayarlayıp hemde logic seviyeye çekme komutunu aynı pin için kullanınıca saçmalamış. logic seviye komutunu görmemişim. notun sayfasını soruyordunuz, datasheete 43. sayfada sol alltta kutucuk içinde bir not var. port/pin dijital ayarladığında çok akım çekebilir şeklinde bir not. başıma gelen buydu aslında.. tekrardan teşekkürler
1 harf öğretenin 4 gün kölesi olurum.

Ali_54

birde picbasic te açıtğımın farkında değildim. siteye tam hakim değilim. dikkat edemedim. o yüzden oldu
1 harf öğretenin 4 gün kölesi olurum.

-Hasan-

Alıntı yapılan: emresensoy - 24 Ağustos 2011, 17:04:29
ilgili işlemcinin datasheet inden ANSEL register inin adresini bul, (16f676 için 0x91 imiş)
ccs e
#byte ANSEL = 0x91
ekle,

artık kod içerisinde değişkene değer atarmış gibi ANSEL = yazıp değer atayabilirsin

emresensoy Hocam; bende aşağıdaki gibi yaptım ama çalışmadı.
#byte AN = 0x9F
AN=0x07;

esensoy

çalışmayan nedir?
register a mı ulaşamadın yoksa adc okumamı yapmadı?
En tehlikeli an "zafer" anıdır.

-Hasan-

Hocam; amacım ADC işlemi yapmak değil. 16F877 ' de analog portları dijitale çevirmek. Derlerken hata verdi.

JKramer

AN=0x07; satırını main() dışına yazdıysanız hata verebilir.

-Hasan-

Jkramer Hocam; teşekkür ederim, şimdi oldu.  :)

Ali_54

Hem analog tanımlayıp hem kod içinde dijital komutlarda kullanırsanız bir pini yada portu, picte simulasyonda fena saçmalar, dikkat edin. malesef derleyici hata vermiyor böyle durumlarda.
1 harf öğretenin 4 gün kölesi olurum.

-Hasan-

Alıntı yapılan: Ali_54 - 15 Eylül 2011, 14:58:07
Hem analog tanımlayıp hem kod içinde dijital komutlarda kullanırsanız bir pini yada portu, picte simulasyonda fena saçmalar, dikkat edin. malesef derleyici hata vermiyor böyle durumlarda.

Hocam gerçekten haklısınız. Bunu üretilen ASM kodlarına bakarak bende farkettim. Mesela:

set_tris_a(0xFF)


dediğim zaman ADCON1 ' e otomatik olarak 0x07 yükleniyor. Yani analog portlar otomatik olarak dijital yapılyor.