16F877 de ADC sorunu

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
912
Puanları
131
Merhaba
Arkadaşlar Altaş yayınlarından PIC 16F877A adlı kitaptaki ADC ile ilgili bir çalışmayı hazırladım ama sorunu çözemedim.Yazılım hata veriyordu değişiklerle programı çalışır hale getirdim ama pot ile ADC okuyamıyorum.Nerede hata yapıyorum?
Teşekkürler.
 

Ekli dosyalar

  • PWM_DENEME.rar
    32.9 KB · Görüntüleme: 1
adcon0 ve adcon1 registerlarını set ettinizmi?
birde şemada pota bağlı yukarı çekilmiş 10k var. bu durumda potunuz en üst seviyedeyken bile 2.5v üstü okuyamazsınız. 10k yı çıkarıp direk bağlarsanız o ucu range daha geniş olur.
 
Hocam burdaki yazılımın amacı ne, tam anlamadım açıkçası.. Anladığım kadarıyla 5V luk referansta 10 bit ölçüp 2 MSB bitini sallıyor.. Kalan 8 LSB biti de PORTB ye atıyor ilk yazılım.. Yani adc aslında 10 bit ölçüm yaptığı halde 5V referansta 1,25 V a kadar doğru ölçüyor, 2,5V a kadar 1,25V eksiğini, 3,75V a kadar 2,5V eksiğini, 5V a kadar da 3.75V eksiğini gösteriyor PORTB de..

LIST P=16F877
INCLUDE "P16F877.INC"
__CONFIG H'3F31'
KANALNO EQU 0X70
SONUCBYTE EQU 0X71

ORG 0
CLRF PCLATH

;BSF STATUS,5
;MOVLW H'FF'
;MOVWF TRISA
;MOVLW H'00'
;MOVWF TRISB
;MOVLW H'00'
;MOVWF TRISC
;MOVLW H'00'
;MOVWF TRISD
;MOVLW H'00'
;MOVWF TRISE
;CLRF PORTA
;CLRF PORTB
;CLRF PORTC
;CLRF PORTD
;CLRF PORTE

GOTO ANA_PROGRAM
ORG 4
KESME
RETFIE

ADC_OKU
BCF STATUS,C
RLF KANALNO,F
RLF KANALNO,W

IORLW B'01000001'

BANKSEL ADCON0
MOVWF ADCON0
BSF ADCON0,2

ADC_J1
BTFSC ADCON0,2
GOTO ADC_J1
MOVF SONUCBYTE,F
BTFSS STATUS,Z
GOTO ADC_J2
BSF STATUS,RP0
MOVF ADRESL,W
RETURN


ADC_J2
BCF STATUS,RP0
MOVF ADRESH,W
RETURN


ANA_PROGRAM
MOVLW D'255'
BANKSEL TRISA
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
CLRF PORTB
CLRF PORTE
MOVLW 0X41
MOVWF ADCON0
MOVLW 0X80
BSF STATUS,RP0
MOVWF ADCON1

ANA_J1
MOVLW 0X02
MOVWF KANALNO

CLRF SONUCBYTE
CALL ADC_OKU
BANKSEL PORTB
MOVWF PORTB
;*********
MOVWF PORTE
;********
GOTO ANA_J1

END

Hocam alttaki satırda kanal no RA1(AN1) olarak kullanılmış.. Kalın yazılı komutlarda.. KANALNO registeri seçeceğiniz kanalın 2 katı olmalı.. Mesela 3 nolu kanal için 6 girilmeli o registere..

10 bit okuduğu halde 8 bit LSB bitini portb ye atıyor..

Gelen bilgiler aslında 2 registerde veriliyor.. ADRESH ve ADRESL.. Bu programa göre adcon0, 2MSB bitini ADRESH'ta kalan düşük değerlikli 8 biti de ADRESL de veriyor ve programda SONUCBYTE daima sıfır olduğu için sadece ADRESL satırını PORTB ye atıyor.. Altı çizili komutlar işleniyor yani..
 
Son düzenleme:
c dilinde yzılmış olsa idi size yardımcı olurdum ama bu dili bilmiyorum
 
Merhaba
Evet yazılımı ben de tam olarak analiz edemediğim için sordum.Yapacağım işlerin yazılımlarını ekseriyetle kendim yazarım.ADC konusuna yeni başladım sistemi tam olarak çözemedim(neyin ne olduğunu ve nasıl çalıştığını)özellikle ADRESL ve ADRESH saklayıcılarını anladım da oluşan bilgilerin nasıl registerlere atıldığını tam kavrayamadım.Teoriye biraz daha kafa yorayım bakalım.
 
Abi pdfsinde detaylıca anlatılmış.. Çok büyütülecek bişey yok aslında adc de.. Sanırım bazı pdflerde 3-5 bilgi eksik oluyor o yüzden soru işareti kalmıştır aklınızda.. Yine asmde adc ile ilgili sormak istediğiniz bişey olursa özelden yazabilirsiniz.. Çoğu şeyi anlatabilirim..
 
Hocam burdaki yazılımın amacı ne, tam anlamadım açıkçası.. Anladığım kadarıyla 5V luk referansta 10 bit ölçüp 2 MSB bitini sallıyor.. Kalan 8 LSB biti de PORTB ye atıyor ilk yazılım.. Yani adc aslında 10 bit ölçüm yaptığı halde 5V referansta 1,25 V a kadar doğru ölçüyor, 2,5V a kadar 1,25V eksiğini, 3,75V a kadar 2,5V eksiğini, 5V a kadar da 3.75V eksiğini gösteriyor PORTB de..

Hocam alttaki satırda kanal no RA1(AN1) olarak kullanılmış.. Kalın yazılı komutlarda.. KANALNO registeri seçeceğiniz kanalın 2 katı olmalı.. Mesela 3 nolu kanal için 6 girilmeli o registere..

10 bit okuduğu halde 8 bit LSB bitini portb ye atıyor..

Gelen bilgiler aslında 2 registerde veriliyor.. ADRESH ve ADRESL.. Bu programa göre adcon0, 2MSB bitini ADRESH'ta kalan düşük değerlikli 8 biti de ADRESL de veriyor ve programda SONUCBYTE daima sıfır olduğu için sadece ADRESL satırını PORTB ye atıyor.. Altı çizili komutlar işleniyor yani..

Yorumlamana hayranım. :)
 

Forum istatistikleri

Konular
129,775
Mesajlar
929,984
Kullanıcılar
452,539
Son üye
cmllsb

Yeni konular

Geri
Üst