ADCON0 registeri içeriği

Başlatan . Kağan, 30 Mart 2014, 22:46:31

. Kağan

16F88 datasheetinde ADCON0 register ayarında,

Alıntı Yapbit 5-3 CHS<2:0>: Analog Channel Select bits
000 = Channel 0 (RA0/AN0)
001 = Channel 1 (RA1/AN1)
010 = Channel 2 (RA2/AN2)
011 = Channel 3 (RA3/AN3)
100 = Channel 4 (RA4/AN4)
101 = Channel 5 (RB6/AN5)
110 = Channel 6 (RB7/AN6)

burada kullanılacak satıra göre sadece tek kanal analog seçilebilir gibi anlıyorum. Eğer 5 tane analog kanal kullanacaksam (mesela AN0-AN4) nasıl seçim yapmalıyım.

Yazdığım bir kodda RA0-RA4 arasını analog giriş ve RB leri çıkış olarak kullanıyorum ve 16F88 de iç osilatörü 4 mhz de kullanmak istiyorum aşağıdaki gibi bir başlık yaptım fakat biyerde hata var sanıyorum.

 @ __config _CONFIG1, _INTRC_IO & _WDT_ON & _LVP_OFF & _CP_OFF & _MCLR_OFF & _PWRTE_ON  & _WRT_PROTECT_OFF

DEFINE ADC_BITS 10      ' ADCIN resolution  (Bits)   
DEFINE ADC_CLOCK 3      ' ADC clock source  (Fosc/8)   
DEFINE ADC_SAMPLEUS 100  ' ADC sampling time (uSec)

ANSEL  = %00011111  ' AN0, AN1, AN02, AN03 VE AN04 ANALOG, DİĞERLERİ DİJİTAL, DİĞERLERİ DİJİTAL
ADCON1 = %10000000  ' 1024 (10 BİT) hesaplanacak, VREF+AVDD VREF-AVSS
ADCON0 = %11101101  ' internal A/D module RC oscillator,
OSCCON = %01101110  ' İNTERNAL OSİLATÖRÜ 4mhz' E AYARLA
   
CMCON  = 7           ' KOMPARATÖRLER KAPALI   
TRISA  = %00011111   ' RA 0-4 arası GİRİŞ   
TRISB  = %00000000   ' HEPSİ ÇIKIŞ

Hattuşa

çok kanaldan adc okutacaksanız, hangi kanala geçtiyseniz o kanaldan okuma yapmadan önce adcon0 in ilgili adc kanalını aktif edebilirsiniz. ne faydası olur bilemem zira bu şekilde de denedim, hiç dikkate almayıpta denedim ben bir fark göremedim. belki kaçırdığım bişeyler vardır bilmiyorum ama bilen ustalar bize bir açıklama yapar artık...

ete

Basic ile çalışıyorsanız, data sheet içinde "analog to digital (a/d)module" bölümünü açarsın.
En başta Ansel yani Analog select registerini görürsün. Bu registerin ANS0-ANS6 bitlerinden hangisi "1" yapılırsa o pin analog olur. Tabiiki tris registerinde aynı bit "1" yapılarak o pinin giriş olması sağlanır. Sonra adcon1 registerinden ref voltajı, sonucun sağa yaslı olması gibi seçenekler seçilip direk adc okumasına geçilir. Adcon0 registerinin ysptığı bütün
Şleri Basic otomatik yaptığı için ona değer vermeniz gerekmiyor. Data sheet de bakılması gerekn bir bilgide min acquisition time denilen analag ölçüm zamanıdır. Bu zamanı define komutları ile ayaladığınız sürede vermezseniz okuma işlemi yanlış olabilir. Zaten simulasyonda bunu size sürekli ikaz eder.
Hepsi bu.  Anahtar kelime data sheet dir.

Ete

Hattuşa

ete hocam;
şu adc ölçüm zamanı, adc çevrim zamanı konusunda biraz eksiğimiz var gibi, zira datasheette min. adc süresini hesaplıyoruz ama gerçekte tutmuyor, belki configrasyon hatası yapıyorda olabilirim.

ete

16F88 de min ölçme zamanı 19,72us olarak hesaplanıyor. Bu durumda sizin,
DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1     ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 11 ' ADC sampling time (uSec)
tanımlamalarında 11us olan değeri 20 yapmanız uygun olur. Aksi halde sistem arıza verecektir.
Gerçekte tutmayan nedir. ?
Yukarıdaki define tanımlamaları işlemciden bağımsız olarak genel amaçlı verilir. İlk iki tanımlama hemen her işlemci için tutar. Ama üçüncü parametre işlemciye göre seçilmelidir. Burada uzun bir zaman birimi vermekte sakıncalıdır. Gerçek süreye en yakın süre en doğrusu olacaktır. Nedir bu süre onuda biraz açıklayayım. İşlemci içinde bir adet kondansatör vardır. Bu kondansatör çeline komutlara bağlı olarak önce şarj edilir.Sonra analog kanala bağlanarak deşarj olma süresine bakılır. Yada deşarj süresi sayılarak bir değer bulunur. İşte bu sizi okuduğunuz ADC değeridir. Okuma için sistemin en azından 20us beklemesi gerekir. Bu süreyi 3us yaparsanız yada ilk değerde belirtildiği gibi 11us yaparsanız daha kondansatör noşalmadan okuma yapmış olursunuz ki buda size yanlış değer verecektir. Bu nedenle isis tanımlanan okuma süresi ile olması gerekeni daima karşılaştırıp size ikaz verir. Basitçe anlatmaya çalıştım. Gerçekte içerideki işlem dahada karmaşıktır.

Ete

Powered by EzPortal