# PIC mikrokontrolleri >  Digitāls vs analogs

## kvaris

Sveiciens!
Esmu diezgan ilgi ņēmies ar savu mīļo PIC16F676. Manuprāt, jauks čips. Lieta tāda, ka es izlasīju ANSEL reģistra aprakstu.

Vai tur ir teikts, ka, pārveidojot kādu kanālu no digitālā par analogo, tiek bloķēta VISA digitālā ķēde??? Es tā secinu, jo mana ilgā čakarēšanās ar šo čipu mani līdz šādam secinājumam ir atvedusi. Iestatīju kā analogo ieeju gan AN0, gan AN4, un PIC digitālos signālus vairs nesaprot. Viss ir it kā nokonfigurēts, kā nākas. Tad, kad notīru ANSEL visu pa 0, viss ir pilnīgi kārtībā.
Pielikumā - PIC16F676 pinu izvietojums.

Paldies
Varis

----------


## next

Kaapeec visa?
Tikai ieejas, uz aaru jau straadaa, tikai jaauzmanaas ar RMW.

----------


## kvaris

Paldies, next, bet, piemēram, ja man RC0/AN4 ir konfigurēta kā analogā ieeja, varētu būt, ka pārtraukuma malas uz RA2/INT kontrolieris nesaprot?

----------


## next

Iepostee kodu, tad buus par ko parunaat.

----------


## kvaris

list      p=16f676, R=DEC     ;list directive to define processor
 #include <p16f676.inc>        ;processor specific variable definitions

 __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
        CBLOCK 0x20
 temp1,temp2,temp3,temp4,temp,registrs
        ENDC
 errorlevel -302
 org 0x00
 goto Main
 org 0x04
 goto ISR
Main 
init clrw
 clrf temp
 clrf registrs
 clrf temp1
 clrf temp2
 clrf temp3
 clrf temp4
 clrf porta
 clrf portc
 bsf status,rp0
 bsf trisa,2
 bsf trisa,0
 bcf trisc,4
 bsf intcon,gie
 bsf intcon,inte
 bsf option_reg,6
 bcf status,rp0
 bcf t1con,0
 movlw 7
 movwf cmcon
 bsf status,rp0
 clrf eeadr
 clrf eedata
 movlw b'01110000'
 movwf adcon1 
 clrf ansel
 bcf status,rp0
 bcf adcon0,chs0
 bcf adcon0,chs1
 bcf adcon0,chs2
 bsf adcon0,7
 bcf adcon0,6
 bsf adcon0,0
te goto te
aizture movlw 255
 movwf temp
 decfsz temp,f
 goto $+2
 goto $+6
 movlw 255
 movwf registrs
 decfsz registrs,f
 goto $-1
 goto $-7
 return
ISR bsf adcon0,1
 btfsc adcon0,1
 goto $-1
 bsf status,rp0
 movf adresl,w
 movwf eedata
 bcf status,rp0
 call rakst
 bsf status,rp0
 incf eeadr,f
 bcf status,rp0
 movf adresh,w
 bsf status,rp0
 movwf eedata
 bcf status,rp0
 call rakst
 bsf status,rp0
 incf eeadr,f
 bcf status,rp0
 bcf intcon,intf
 retfie
rakst bsf  STATUS,RP0  ;Bank 1
 movf eeadr,w
 movwf eedata
 bsf  EECON1,WREN  ;Enable write
 bcf intcon,gie
 movlw  0x55   ;Unlock write
 movwf  EECON2   ;
 movlw  0xAA   ;
 movwf  EECON2   ;
 bsf  EECON1,WR  ;Start the write
 BTFSC  EECON1,WR  ;Test WR bit for end of write
 GOTO  $-1
 BCF  EECON1, WREN
 bcf  STATUS,RP0  ;Bank 0
 return
 end

----------


## next

Es taa saprotu ka shitas ir tas kas darbojas (clrf ansel).
Vajadzeeja jau to kas neiet.

----------


## kvaris

Jā, tā būtu gan prātīgāk: Lūk, nestrādājošais kods:
    list      p=16f676, R=DEC     ;list directive to define processor
    #include <p16f676.inc>        ;processor specific variable definitions

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC


        CBLOCK 0x20
    temp1,temp2,temp3,temp4,temp,registrs
        ENDC


    errorlevel    -302


    org    0x00
    goto    Main


    org    0x04
    goto    ISR


Main    
init    clrw
    clrf    temp
    clrf    registrs
    clrf    temp1
    clrf    temp2
    clrf    temp3
    clrf    temp4
    clrf    porta
    clrf    portc
    bsf    status,rp0
    bsf    trisa,2
    bsf    trisa,0
    bsf    trisc,4
    bsf    intcon,gie
    bsf    intcon,inte
    bsf    option_reg,6
    bcf    status,rp0
    bcf    t1con,0
    movlw    7
    movwf    cmcon
    bsf    status,rp0
    clrf    eeadr
    clrf    eedata
    movlw    b'01110000'
    movwf    adcon1    
    bsf    ansel,4
    bcf    status,rp0
    bcf    adcon0,chs0
    bcf    adcon0,chs1
    bsf    adcon0,chs2
    bsf    adcon0,7
    bcf    adcon0,6
    bsf    adcon0,0


te    goto    te


aizture    movlw    255
    movwf    temp
    decfsz    temp,f
    goto    $+2
    goto    $+6
    movlw    255
    movwf    registrs
    decfsz    registrs,f
    goto    $-1
    goto    $-7
    return


ISR    bsf    adcon0,1
    btfsc    adcon0,1
    goto    $-1
    bsf    status,rp0
    movf    adresl,w
    movwf    eedata
    bcf    status,rp0
    call    rakst
    bsf    status,rp0
    incf    eeadr,f
    bcf    status,rp0
    movf    adresh,w
    bsf    status,rp0
    movwf    eedata
    bcf    status,rp0
    call    rakst
    bsf    status,rp0
    incf    eeadr,f
    bcf    status,rp0
    bcf    intcon,intf
    retfie


rakst    bsf     STATUS,RP0     ;Bank 1
    movf    eeadr,w
    movwf    eedata
    bsf     EECON1,WREN     ;Enable write
    bcf    intcon,gie
    movlw     0x55         ;Unlock write
    movwf     EECON2         ;
    movlw     0xAA         ;
    movwf     EECON2         ;
    bsf     EECON1,WR     ;Start the write
    BTFSC     EECON1,WR     ;Test WR bit for end of write
    GOTO     $-1
    BCF     EECON1, WREN
    bcf     STATUS,RP0     ;Bank 0
    return


    end


Iepriekšējā kodā biju uzrakstījis bcf trics,4 nevis bsf trics,4 bet testa brīdī gan bija OK.

----------


## next

Ansel pie iesleegshanas ir FF.
Paskaties uzmaniigi savaa pirmajaa bildee, tur viss redzams.

----------


## kvaris

Paldies, next, ka pateici! Nemaz nezināju, kas tās ir bitu vērtības, uC startējot.

----------

