877 adc yaparken pıne el degınce 5v okurmu

Başlatan mame, 03 Ocak 2009, 02:13:13

mame

merhaba 877 ye sadece 0 nolu kanaldan adc yaptırırken bu pıne elımı degdıgımde lcd den 700-800-900 degısen degerler okuyorum.hıc bıtsey degdırmedıgımde 150 ham degerı ıle 700 e kadar degısen degerler okuyorum.adc ortalama alma yontemınıde denedım olmadı ayarlarım asagıda oldugu gıbı.bu tarz oynak degerler almamak ıcın ne yapmalıyımdevrede yapmam gereken bısey varmı adc onune herhangı bır eleman mesala
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_off
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
DEFINE OSC 4
'*****GİRİŞ VE ÇIKIŞLAR*****
TRISA=%00111101
TRISB=0
TRISC=%00000111
TRISD=0
TRISE=0
ADCON1=%10001110  '7. bit 1 yapıldı 10 bit sonuç almak için.
OPTION_REG=%10000101         'SADECE PORTA.0 ANALOG DIGERLERI DIGITAL CALISACAK
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE  ADC_CLOCK       3               'Clock kaynağı (3=rc)
DEFINE  ADC_SAMPLEUS     50
PORTB=0
PORTC=0
PORTD=0
PORTE=0
'*****LCD_DEFINE TANIMLAMALARI*****
DEFINE LCD_DREG      PORTB  'LCD DATA BACAKLARI PORTB'YE BAĞLI
DEFINE LCD_DBIT      4      'LCD DATA BACAKLARI  PORTB.4'DEN                     BAŞLIYOR
DEFINE LCD_EREG      PORTB  'LCD ENABLE BACAĞI PORTB'YE BAĞLI
DEFINE LCD_EBIT      3      'LCD ENABLE PİNİ PORTB.3 BAĞLI
DEFINE LCD_RSREG     PORTB  'LCD RS PİNİ PORTB'YE BAĞLI
DEFINE LCD_RSBIT     2      'LCD RS PİNİ PORTB.2 BAĞLI
DEFINE LCD_BITS      4      'LCD 4 BİT HEBERLEŞME YAPIYOR
DEFINE LCD_LINES     2      'LCD 2*16
pause 500

basla:

ADCIN 0,HAM
BAK:  IF ADCON0.2=1 THEN BAK

lcdout $fe,$1,"ham=",dec4 ham
pause 500
goto basla
end
bayrakları bayrak yapan üstündeki kandır,toprak eğer uğrunda ölen varsa vatandır.

ete

Analog giriş olan PortA.0 da mutlaka bir şey bağlı olması gerekir. Her hangi bir şey bağlı değil ise pin floating denilen yüzer pozisyonda kalır ve nereye meylederse o tarafa doğru gider. AYnen su yüzeyine bırakılmış top gibi nereye itersen oraya gider. Bu nedenle genelde analog pinler amalog olarak açılmışlar ise pinde bir şey bağlı olmalıdır. Pinin gezinmesini istemiyorsanız yüksek omajlı bir direnç ile GND ye çekebilirsiniz. Direncin değerini deneme ile bulabilirsiniz. Mesela 1M olabilir.

Şayet pine bir şey bağlı ve yine gezer konumda kalıyor ise bağladığınız sistemde bir sorun olabilir. Çünki bu pin sonuçta gelen 0-5V seviyesini ölçecek şekilde ayarlanmıştır. Ortada gelen bir voltaj yok ve sistem yüksek empedanslı davranıyor ise yine yüzer konumda kalacaktır. Dolayısıyla elinizi bile dokundursanız ki bu hareket topu ittirmek ile aynı anlama gelmektedir, pin hemen konum değiştirir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Tagli

Alıntı yapılan: "ete"Pinin gezinmesini istemiyorsanız yüksek omajlı bir direnç ile GND ye çekebilirsiniz. Direncin değerini deneme ile bulabilirsiniz. Mesela 1M olabilir.
Hocam bu direnci kullanmamızın sebebi nedir? Ben deneme yaparken +5V veya GND hattını doğrudan analog girişe bağlıyordum. Acaba bu şekilde kullanmak PIC için zararlı mıdır?
Gökçe Tağlıoğlu

ete

İllaki bir direnç bağlanması gerekmiyor. Ben boşta kalmış pinler için bu lafı etmiştim. Direk bir yerlere bağlıyorsanız zaten sorun yok.
Olaya biraz daha açıklık getirelim isterseniz.
- Elimizde 877 gibi bir işlemci var ve biz bunun yalnızca 2 ADC girişini kullanacağız. PortA.0 ve PortA.1. Ref voltajları olarak picin besleme sini kullanacağız.
Data sheete bakarsanız ADCON1 registeri bu işi yapmakta ve orada ilk 4 bit analog girişleri ayarlamaktadır. Tablonun son sütununda aslında bize 2/0 seçimi gerekli yani 2 analog girişi sıfır referans girişi. ancak böyle bir seçeneğin olmadığını göreceksiniz En yakın seçenek 3/0 seçeneğidir. Bu seçenekte A0 -A1 ve A3 analog diğer pinler ise digital olarak ayarlanmaktadır. Mecburen bu seçeneği seçiyorsunuz. Siz 2 adc kullanacağınıza göre AN3 yani PortA.3 kullanılmayacak ancak analog olarak seçili kalacaktır.
Bu pini direk GND ye bağlayarak bir nevi emniyete alabilirsiniz. Boşta da bıraksanız bir sorun olacağını sanmıyorum. Çünki program içinde ona ait bir ölçme ve hesaplama yapmayacaksınız.
Diğer iki pine ölçecek bir şeyler bağlamak gerek. Bir amaç için bu pinleri ADC giriş olarak seçtiniz çünki . O halde boşta bırakmaktansa mutlaka seviyesi 0-5V arasında değişen bir kaynak bağlanması gerekir. Bu bir voltaj kaynağı, bir opamp çıkışı bir sensör çıkışı olabilir.
ADC olarak ayarlanmış bir girişe direk GND vermek yada direk +5V vermek de bana mantıklı gelmiyor. Çünki bir varyasyon olmayacağı için her zaman sabit değerler hesap edilecek girişlerdir bunlar. Yani ya daima sıfır verir yada daima 1023 verir. Ne işe yarıyacak bu değerler tabiiki hiç.
Umarım dediklerim anlaşılmıştır.

Son bir şey ekleyeyim. Genelde analog girişleri 1K lık dirençten geçirerek girerim ben. Bu direnç sizin ölçmenizi etkilemez ama bir kısa devre anında yada voltajın beklenenden yüksek gelmesi durumunda adc girişlerini biraz olsun korur.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mame

ete hocam ad 0ıle su bsevıye olcmek ıstıyorum
sensor olarakta kablo olacagı ıcın sızın dedıgınıze yanı bosta kaalma durumuna su olmadıgında gelecek. ad0 dan 1024 yanı 5v durumunu olcecegım.bu durumda 1mohm dırencı sanırım gnd ye baglamalıyım tabı sonuc alamazsam dırenc degerını degıstırecegımıde aklıma yazıyorum.
cevap ıcın teşekkür ederım.
bayrakları bayrak yapan üstündeki kandır,toprak eğer uğrunda ölen varsa vatandır.

mame

ete hocam 1mohm dırencle gnd ye bagladım bosta adc ucu 0-0007 arası salınım yapıyor buda benım ısımı gorur teşekkür ederım.
bayrakları bayrak yapan üstündeki kandır,toprak eğer uğrunda ölen varsa vatandır.