Analaog kanaldan okunan rakamsal değer

Başlatan . Kağan, 10 Nisan 2014, 09:28:07

. Kağan

Aşağıdaki kodda An5 den 1,2 volt verdiğimde 74 değeri görüntüleniyor. 2,4 verdiğimde bu değer yükselmesi gerekirken 46 ya düşüyor. Acaba nerede yanlış yaptım? Göz gezdirirseniz sevinirim. (İşlemci 16f88)

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

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

ANSEL  = %01111111  '
'ANSEL = 0
ADCON1 = %10000000  ' 1024 (10 BİT) hesaplanacak, VREF+AVDD VREF-AVSS
'ADCON0 = %11101101  ' internal A/D module RC oscillator,  11000000
OSCCON = %01101110  ' İNTERNAL OSİLATÖRÜ 4mhz' E AYARLA
   
CMCON  = 7           ' KOMPARATÖRLER KAPALI   
TRISA  = %00000000   ' RA tamamı ÇIKIŞ   
TRISB  = %01100000   '
CCP1CON.2=1 'bu  iki komut ile PWM sinyali açılmış olacaktır
CCP1CON.3=1
T2CON = %00000101     'Bölücü 1/1 olarak verildi ve TMR2 aktif hale  getirildi.
PR2=124                'PWM-Peryot= (124+1) x 4 x ¼ x 1 =500 us  ve F=1000/50 = 2 KHz PWM  frekansı dır.
.
.
.
.

OLCUM VAR WORD
ORTALAMA VAR WORD
I VAR BYTE
ILK VAR WORD

pause 100

ortalama = 0
i = 0
ILK=0
OLCUM=0


ANA:

  OLCUM=0   
  ORTALAMA =0
            FOR I = 0 TO 24         
                ADCIN 5 , OLCUM   
                ORTALAMA = ORTALAMA + OLCUM
            NEXT I
                OLCUM = ORTALAMA/25
   

  LCDOUT $FE,1
  PAUSE 150
  LCDOUT $FE,$80, "SNC: "         
  LCDOUT $FE,$84, DEC2 olcum       
  PAUSE 100

GOTO ANA

ete

Hangi işlemci olduğu belli değil!!!. AN5 bildiğim kadarı ile işlemcilerin A portunda yer alır. AN5 pini madem analog okuma yapılacak giriş olarak ayarlanması gerekir. Sizde TRISA registerine sıfır değeri verilmiş hepsi çıkış yapılmış.
Terslik burada olabilir.

Ete

. Kağan

İşlemci 16 F 88 yazmıştım farketmemişsiniz.

secretagent

#3
AN5 kanalı C portunda bulunuyor. Programda C portu yönlendirilmemiş.

. Kağan

16f88 de c portu bulunmuyor. f877 ile karıştı sanırım.

secretagent

pardon ben 16f688 ile karıştırmışım.

MS_59

sorun aşağıdaki satırda olabilir
LCDOUT $FE,$84, DEC2 olcum,,, bunu LCDOUT $FE,$84, DEC olcum  şeklinde deneyin bakalım çünkü sizin yazdığınız şekilde sadece 2 hane gösterilecek
mehmet

ete

16F88 ibaresini görmedim daha doğrusu göremedim. Programda sigorta ayarlarının üstüne kapatılmış satır olarak ilave edilmesi en doğrusudur. 2 ay sonra programı açtığınızda sizde unutacaksınız.

Her neyse programda tek kusur;
LCDOUT $FE,$84, DEC2 olcum
şeklinde verilen satırda. DEC2 ifadesi ölçüm değeri 3-4 hane de olsa yalnızca 2 hanesini yazdırıyor. Sizde ölçüm değeri odur zannediyorsunuz.

Ete

. Kağan

Teşekkür ederim. Farketmemişim. Bazen baksakta göremiyoruz.

. Kağan

#9
Şimdi 4 haneli okuyorum fakat ölçüm yaklaşık yarım  değerde görüntüleniyor. Örneğin 1,2v için Okuduğum değer 745 +-25 olarak okunuyor. Bu niçin olabilir?

ete

Referans Voltajı seçimini ADCON1 registeri yapıyor. Bu registerin 5-4 nolu bitleri bu işi ayarlamaktadır (Ref:Datasheet).
Bu bitler %00 olursa Besleme voltajları aynı zamanda referans girişleri oluyor ki sizin seçiminiz bu.
O halde analog girişe 5V verirseniz karşılığında 1023 değerini okursunuz.
5/1024=0,0048828125 birim ADC değerimiz oluyor. 1,2/0,0048828125=245,76 ~246  okumanız gerekirdi.
745 nereden çıkmış anlamadım.
Program verilmediği için yukarıda verilen programa göre konuşuyorum.
1,2V karşılığı 1023 değerini okuyabilmek için ADCON1 registeri 5-4 bitlerine %10 değerini vermeniz ve RA3 pininden ise 1,2V referans voltajı vermeniz gerekir. Hariçten referans voltajı girecekseniz AN3 pini de ANSEL registerinden analog giriş olarak ayarlanması gerekiyor.

Ete


Powered by EzPortal