Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PIC16C711 ADC

Başlatan mesmert, 30 Nisan 2009, 11:58:39

mesmert

pic 16c712 ile 220VAC sebekeyi okumak istedim ama bir türlü çalistiramadim

giris ise asagidaki gibi dirençlerle yaptim ama bir türlü sonuç alamadim

hata nerde olabilir tecrübe eden daha önce oldumu acaba arkadaslar
220 >----/\/\/\-------*------/\/\/\------>RA1
              475k         I        2k2
                           I
                           I
                           <
                            >4k7
                           <
                           I
                           I
                           I
                          ---- 
                           Gnd


BSF	STATUS,RP0
	MOVLW	B'00000000'
	
                MOVWF	ADCON1
	MOVLW	B'00000010'
	MOVWF	TRISA
	BCF	STATUS,RP0
	CLRF	TRISA
	MOVLW	B'11001001'	
	MOVWF	ADCON0
	NOP
	NOP
	BSF	ADCON0,GO
WAIT_ADC
	BTFSC	ADCON0,GO
	GOTO	WAIT_ADC
	MOVF	ADRES,0
	MOVWF	AC_DEGER

Maxim

picin ayağına gelen AC sinyali doğrultmayı düşünmüyormusunuz ?
diyot,kondansatör falan ?

omenek

DONUSUM   ;analog/dijital dönüşüm rutini
         BSF         ADCON0,2
         NOP
         BTFSC   ADCON0,2
         GOTO     $-1
         MOVF     ADRES,W
         BCF       PIR1,6
         RETURN
;******************************************
JUMPDURUM
   MOVLW   B'01001001'  ;Kanal 1 jumper
   MOVWF   ADCON0
   CLRF   SAYAC2
   DECFSZ   SAYAC2,F
   GOTO   $-1
   CALL   DONUSUM
   MOVWF   JUMPER
   BCF   ADCON0,0
   RETURN
;*********************************************
Adcon0 a değer yazdıktan sonra
biraz gecikme kullanmak gerekiyor
ben 255us kullanıyorum ama daha
düşük değerlerde belki yeterli olur
denemek lazım.

camby

Bende de 16c72a var ve ADC okuyamadım birtürlü nerede yanlış yapıyorum?
Go/Done bitine 1 verip işleme başladıktan sonra go/done bitinin 0 olup olmadığını kontrol etmeyecekmiyiz?
Alıntı Yap;==========KONFİGÜRASYON===========

PRG      bsf       STATUS,5   ;Bank1'e geç   
      movlw       0
      movwf      TRISB      ;B portunu çıkış olarak ata
      movlw        b'00011111'
      movwf       TRISA      ;A portu giriş olarak ata
      movlw      b'00000100'
      movwf      ADCON1      ;RA0 ve RA1 ADC girişi olarak atandı
      bcf       STATUS,5   ;Bank0'a geç
      movlw      b'00000001'
      movwf      ADCON0      ;ADC açıldı
      clrf      PORTB      ;Ledleri Söndür   
      clrf      PORTA

;==========ANA PROGRAM============

TEKRAR      bsf      ADCON0,2              ;Ölçüme başlama için GO/DONE bitini 1 yap
      
ADCBEKLE   btfsc      ADCON0,2   ;GO/DONE biti 0 oldu mu
      GOTO      ADCBEKLE   ;Hayır işlem devam ediyor
      movf       ADRES,W      ;Ölçülen Analog sonucunu W yazmacına yaz
      sublw      b'01111010'   ;Ölçülen değerden 122 çıkar
      btfsc      STATUS,0   ;ADRES-122= negatif ise 1 satır atla
      bsf      PORTB,0      ;ledi yak   
      bcf      PORTB,0      ;ledi söndür
      CALL      BEKLE
      GOTO      TEKRAR
   END

mrtclk0891

LIST                p=16F72
INCLUDE            "p16F72.inc"
__CONFIG            0X3F31
;ERROR               level302

;değişkenler   
   CBLOCK   0x21
SAYAC1                  
SAYAC2         
TTEMP   
TIMECOUNT
ADCOKU        
ADCSONUC
ART      
ENDC

ORG                 0X0000
CLRF                PCLATH
GOTO                ANAPROGRAM
ORG                 0X0004
RETFIE



ANAPROGRAM


MOVLW               .255
BANKSEL             TRISA
MOVWF               TRISA
CLRF                TRISB
BCF                 STATUS, RP0
CLRF                PORTB
;MOVLW              0X41;B'01000001';65
;MOVWF              ADCON0
MOVLW               B'10000000';-128 0X80;
BCF                 STATUS,RP0
MOVWF               ADCON1
MOVLW            .0
MOVWF            ART
CLRF                ADCOKU
CLRF                ADCSONUC
GOTO                ANA


ANA

CALL                CEVIR1
BANKSEL             PORTB
BSF                 PORTC, 0
MOVF                ADCOKU, W
MOVWF               PORTB
CALL                BEKLE
GOTO                ANA


CEVIR1
MOVLW               B'11000001'
MOVWF               ADCON0
CALL                GECIK
BSF                 ADCON0, GO
BTFSC               ADCON0, GO
GOTO                $-1
MOVF                ADRES, W
MOVWF               ADCOKU
RETURN


CEVIR

RLF                 ADCOKU, F
RLF                 ADCOKU, F
RLF                 ADCOKU, W
ADDLW               B'01000001';D65

BANKSEL             ADCON0
MOVWF               ADCON0
BSF                 ADCON0, 2

ADC1

BTFSC               ADCON0, 2
GOTO                ADC1

MOVF                ADCSONUC, F
BTFSS               STATUS, Z

GOTO                ADC2

BSF                 STATUS, RP0
MOVF                ADRES, W
RETURN

ADC2

BCF                 STATUS, RP0
MOVF                ADRES, W
RETURN

GECIK

MOVLW            0X03
MOVWF            ADCSONUC
DECFSZ            ADCSONUC, F
GOTO                $-1
RETURN
 

BEKLE      
   CLRWDT
   MOVLW   d'30'
   MOVWF   TTEMP
TTT31   
   MOVLW   D'100'
     MOVWF   SAYAC1
DON113       
   MOVLW   D'100'
   MOVWF   SAYAC2
DON223      
   CLRWDT
   DECFSZ  SAYAC2,f
   GOTO    DON223
   DECFSZ  SAYAC1,f
   GOTO    DON113
   DECFSZ   TTEMP,f
   GOTO   TTT31

   RETURN

END                            
______________________________________________________________

burda arkadaşlar referans yok iç referanslı ra 0 port tan adc okur portb den okuduğu bilgileri sayısal olarak verrir şuan calışan program
örnek kod calışması olabilir lm 35 okumak için iş görürr yalnız sıcaklık ökalibrasyonu yapmak gereke bilir.