ADC sorunu

Başlatan Yasin, 16 Kasım 2014, 10:44:15

Yasin

Pic ile ADC'den 2 tane ölçüm yapıyorum. RA0'dan okuma yapabilirken RA1'e opampı bağlağımdan opampın çıkış voltajı düşüyor. Denemeleri Isis'ten yapıyorum. RA0 girişi 0.07 mikro amper çekerken RA1 girişi 24.3 mili amper çekiyor. Sorun nerede olabilir?

ete

İlgili pin gerektiği gibi ADC girişine ayarlanmamış gibi gözüküyor.

Ete

Yasin

A portu giriş olarak ayarlandı, ADCON1 registerının ilk 4 biti 0 yapıldı. Bu şekilde Tüm girişler analog oluyor ve referans olarak Vcc ve Vss alınıyor.

ete

İşlemci adını söylemediğin için ben emin olamıyorum.

Ete

Yasin

Alıntı yapılan: ete - 16 Kasım 2014, 14:09:57
İşlemci adını söylemediğin için ben emin olamıyorum.

Ete

16F876A.

Elzemefe

certy  kardeş sana  yardımcı  olmak  o kadar zor ki
şu an ortada ne devre var nede  kod hiç bişey yok

hayal etmek çok zor  oluyor
aynısını size sorsalardı siz  nasıl yardımcı olurdunuz.


ete

#6
TRISA.1=0  olarak ayarlanmıştır.
Comparatör iptal edilmemiştir.

Aslında bu soruları cevaplamamak lazım. Bak taksit taksit iş yaptırıyorsun insana. Koysana programı ve şemayı şuraya.

Biz müneccim olmadığımız için ancak yaptıklarına bakarak bildiklerimizi karşılaştırıp sorunu tespit etmeye çalışırız.
Yaptıklarını görmeyince sorunu nasıl tespit edeceğimizi bir düşün istersen. Varsa bildiğin bir yol söyle ona göre bakalım.

Ete

Yasin

Mobildim kusura bakmayın. Eve geldim şimdi.

Şema:



Kod:

@ DEVICE PIC16F876A
@ DEVICE PIC16F876A, WDT_ON 'Watch Dog Timer aktif edildi.
@ DEVICE PIC16F876A, PWRT_ON 'Power On Timer aktif edildi.
@ DEVICE PIC16F876A, PROTECT_OFF 'Kod koruma kapatıldı.
@ DEVICE PIC16F876A, HS_OSC '4 MHz üstü kristal bağlanacak.

ADCON1=%10000000 'ADC pinlerinin tümü analog olarak ayarlandı. VREF+ Vcc'ye, VREF- Vss'ye ayarlandı.

TRISA=1
TRISB=0
TRISC=0

VP VAR WORD 'Pozitif voltajı okumak için ADC değeri
VN VAR WORD 'Negatif voltajı okumak için ADC değeri
AP VAR WORD 'Pozitif akımı okumak için ADC değeri
AN VAR WORD 'Negatif akımı okumak için ADC değeri
VA VAR WORD 'Hesaplanmış pozitif voltajın yerleştirildiği değişken
VE VAR WORD 'Hesaplanmış negatif voltajın yerleştirildiği değişken

DEFINE OSC 20 '20 MHz kristal tanıtıldı.

DEFINE ADC_BITS 10 'Okunacak ADC değeri 10 bit olarak ayarlandı.
DEFINE ADC_CLOCK 2 'Clock bilgisi yüklendi.
DEFINE ADC_SAMPLEUS 50 'ADC örnekleme süresi 50 uS olarak ayarlandı.

DEFINE LCD_DREG  PORTB 'LCD data pinleri PORTB'ye bağlandı. 
DEFINE LCD_DBIT      4 'Data pinleri 4. bitten başlıyor.   
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT     2 'RS pini PORTB.2'ye bağlandı.
DEFINE LCD_EREG  PORTB 
DEFINE LCD_EBIT      3 'E pini PORTB.3'ye bağlandı.
DEFINE LCD_BITS      4 'Veri iletimi 4 bit olarak ayarlandı.
DEFINE LCD_LINES     2 'LCD 2 satır olarak tanımlandı.

PORTB=0 'PORTB'nin tamamı low yapıldı.
PORTC=0 'PORTC'nin tamamı low yapıldı.

PROGRAM: 'Ana döngü
GOSUB D_OKU
GOSUB HESAP
GOSUB LCD
GOTO PROGRAM

D_OKU: 'ADC okuma
K:IF ADCON0.2=1 THEN K
ADCIN 0,VP
ADCIN 1,VN
ADCIN 2,AP
ADCIN 3,AN
RETURN

HESAP: 'Voltaj ve akım için hesaplama
VA=(VP+1)*/125
VE=(VN+1)*/125
RETURN

LCD: 'LCD'ye yazdırma
LCDOUT $FE,$80,"+V: ",DEC3 VA/10,".",DEC1 VA//10,"V"
LCDOUT $FE,$C0,"-V: ",DEC3 VE/20,".",DEC1 VE//10,"V"
RETURN

END

ete

TRISA=1 vererek yalnızca PORTA.0 girişini aktif etmiş oluyorsun. Halbuki AN1 de Analog giriş olması gerekir. Dolayısıyla,
TRISA=%00000011 şeklinde bir komut kullanman gerekir. Ancak programa bakınca , şemada herhangi bir giriş yapılmış olmasada AN2 ve AN3 pinlerinden de okuma yapılmış gözüküyor. Bu durumda komut TRISA=%00001111 şeklinde olmalıdır.
16F876A da default A portu Komparatör olarak açılır. Bu özelliğin iptal edilmesi gerekir. CMCON=7 komutu da programa ilave edilmelidir.

Şemaya bakarak AN1 pininde ne olup bittiğini anlamak zor. Belkide simulasyon dosyalarınıda buraya koyman gerekir.
Ancak deneyerek ne olup bittiğine bakmak gerekir.

Ete

Yasin

#9
Alıntı yapılan: ete - 16 Kasım 2014, 22:13:16
TRISA=1 vererek yalnızca PORTA.0 girişini aktif etmiş oluyorsun. Halbuki AN1 de Analog giriş olması gerekir. Dolayısıyla,
TRISA=%00000011 şeklinde bir komut kullanman gerekir. Ancak programa bakınca , şemada herhangi bir giriş yapılmış olmasada AN2 ve AN3 pinlerinden de okuma yapılmış gözüküyor. Bu durumda komut TRISA=%00001111 şeklinde olmalıdır.
16F876A da default A portu Komparatör olarak açılır. Bu özelliğin iptal edilmesi gerekir. CMCON=7 komutu da programa ilave edilmelidir.

Şemaya bakarak AN1 pininde ne olup bittiğini anlamak zor. Belkide simulasyon dosyalarınıda buraya koyman gerekir.
Ancak deneyerek ne olup bittiğine bakmak gerekir.

Ete

Dediğiniz değişiklikler yapılarak düzelmiştir. Sağolun. AN2 ve AN3'ten akım sensörü bağlanarak akım okunacak. Hangi sensörü kullanacağıma karar vermediğim için boş kaldı şimdilik. Ben TRISX=0 veya TRISX=1 yapınca ilgili değerin tüm bitlere verildiğini sanıyordum.

İlyas KAYA

#10
TRISA=1
Komutu yanlış değil mi ? TRISA=1 der iseniz bu binary olarak %000001 dir.
Yani sadece A.0 giriş olarak ayarlanır.

Eğer tamamı giriş olsun istiyorsanız

TRISA=%111111   yapın ve terkrar deneyin.

Aynı zamanda madem tüm girişler analog olacak öyle ise ADCON1=0 yapın

Düzenleme: Ben ADCON1 tablosunu incelerken ETE bey cevap atmış..
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal