• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: PIC16F716的ADC問題
#8
初級會員
初級會員


查看用戶資訊
謝謝版主的回覆
再貼一次


謝謝版主的回覆

SIM可以模擬AD輸入嗎?請教一下謝謝。

我將我發生的狀況跟程式貼上,如下:

MCU為 PIC16F716
VDD=3V
AD的參考電壓為VDD
AD輸入腳為 RA1(第18腳)
LED輸出為 RB1

狀況為:
1. Brown Out Detect 選擇 On 時,AD輸入≧2.7V MCU就當住
2. Brown Out Detect 選擇 Off 時,
AD輸入慢慢增加至 2.5V ,MCU動作正常
AD輸入再增加至 5V ,MCU動作也正常
AD輸入再降至 0V ,
AD輸入再瞬間從 0V 升至 5V ,MCU當住
(只要AD輸入瞬間從 0V 升至 3V以上 ,MCU就會當住)

不曉得為什麼會這樣?是設定有問題嗎?還是有其它原因?
如果有人知道煩請不吝指導,謝謝。(百思不解中)
我再試試,有什麼發現再貼上來。

程式碼如下:


list      p=16f716,r=dec            
          
include "c:incp16f716.inc" 

;Variable definition

ActiveFlag       equ 37h
ADValue          equ 38h
tempW            equ 41h
tempStatus       equ 42h
INTADCount1      equ 49h
INTADCount2      equ 50h
INTADCount3      equ 55h
DelayTime        equ 52h
Count1           equ 53h
Count2           equ 54h

;Program Segment
        org     00h
        nop
        
goto    start

        org     04h
        
goto    ISR

start
        call    Initial

        banksel OPTION_REG
        movlw   
b'11000000'
        
movwf   OPTION_REG
        banksel PIE1
        bcf     PIE1
,ADIE
        banksel INTCON
        movlw   
b'00010000'
        
movwf   INTCON
        bsf     INTCON
,GIE        

        banksel PIR1
        bcf     PIR1
,ADIF
        banksel ADCON0
        movlw   
b'01001000'
        
movwf   ADCON0
        bsf     ADCON0
,ADON
        banksel ADRES
        clrf    ADRES
        banksel PIE1
        bsf     PIE1
,ADIE
        bsf     INTCON
,PEIE

WaitInt
        banksel PORTB
        bsf     PORTB
,1
        call    ADDelay2
        banksel PORTB
        bcf     PORTB
,1
        banksel ADCON0
        bsf     ADCON0
,GO_DONE;.........ADgo
        call    ChkADValue
        call    ADDelay2
        btfsc   ActiveFlag
,0
        
goto    WaitInt
        
goto    end1
;--------------------------------------
Initial
        movlw   1h
        movwf   ActiveFlag
        movlw   0h
        movwf   ADValue
        movwf   tempW
        movwf   tempStatus
        movlw   5h
        movwf   DelayTime

        banksel TRISA
        movlw   
b'00000010'
        
movwf   TRISA
        banksel PORTA
        movlw   
b'00000000'
        
movwf   PORTA
        banksel TRISB
        movlw   
b'00000001'
        
movwf   TRISB
        banksel PORTB
        movlw   
b'00000000'
        
movwf   PORTB

        banksel ADCON1
        movlw   
b'00000100'
        
movwf   ADCON1

        
return
 ;--------------------------------------       
ISR
        movwf   tempW
        swapf   STATUS
,w
        movwf   tempStatus

        banksel PIR1
        btfsc   PIR1
,ADIF
        call    GetADValue

        swapf   tempStatus
,w
        movwf   STATUS
        swapf   tempW
,f
        swapf   tempW
,w

        retfie
;--------------------------------------
StopActive
        banksel INTCON
        movlw   
b'00010000'
        
movwf   INTCON
        bcf     INTCON
,GIE
        
;bcf     INTCON,PEIE;
        ;
banksel PIE1;
        ;
bcf     PIE1,ADIE;
       
        
movlw   0h
        movwf   ActiveFlag
        banksel PORTB
        bcf     PORTB
,1
       
PowerLed
        banksel PORTB
        bsf     PORTB
,1
        call    TestDelay
        bcf     PORTB
,1
        call    TestDelay
        decfsz  DelayTime
        
goto    PowerLed
        movlw   5h
        movwf   DelayTime
        banksel PORTB
        bcf     PORTB
,1
    
        
return
;--------------------------------------
GetADValue
        btfss   ActiveFlag
,0
        
goto    ExitGetADValue

        banksel ADRES
        movf    ADRES
,w
        movwf   ADValue
        banksel PIR1
        bcf     PIR1
,ADIF
        
return
ExitGetADValue
        banksel PIR1
        bcf     PIR1
,ADIF
        
return
;--------------------------------------
ChkADValue
        btfss   ActiveFlag
,0
        
goto    ExitChkADValue

        movlw   D
'119'
        
bcf     STATUS,C
        bcf     STATUS
,DC
        bcf     STATUS
,Z
        subwf   ADValue
,w
        btfsc   STATUS
,Z
        
goto    ADStop
        btfsc   STATUS
,C
        
goto    ADStop

        
return

ADStop
        call    StopActive
        banksel ADCON0
        bcf     ADCON0
,ADON
        
return
ExitChkADValue
        
return
;--------------------------------------        

;

ADDelay2
        movlw    D
'66'
        
movwf    INTADCount1
        movlw    D
'100'
        
movwf    INTADCount2
        movlw    D
'100'
        
movwf    INTADCount3
ADDelay2Loop
        decfsz   INTADCount3
        
goto     ADDelay2Loop
        movlw    D
'100'
        
movwf    INTADCount3
        decfsz   INTADCount2
        
goto     ADDelay2Loop
        movlw    D
'100'
        
movwf    INTADCount2
        decfsz   INTADCount1
        
goto     ADDelay2Loop
        
return
;--------------------------------------

TestDelay
        movlw    D
'250'
        
movwf    Count1
        movwf    Count2
TestLoop
        decfsz   Count2
        
goto     TestLoop
        movlw    D
'250'
        
movwf    Count2
        decfsz   Count1
        
goto     TestLoop
        
return
end1
        end

發表於: 2005/1/18 8:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#7
版主
版主


查看用戶資訊
請利用右方「搜尋」功能,找「貼程式」這三個字。以前有人說明得很清楚了。

發表於: 2005/1/17 22:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#6
初級會員
初級會員


查看用戶資訊
呃...請問一下...
程式碼要怎麼貼格式才不會變掉,謝謝。

發表於: 2005/1/17 14:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#5
初級會員
初級會員


查看用戶資訊
謝謝版主的回覆

SIM可以模擬AD輸入嗎?請教一下謝謝。

我將我發生的狀況跟程式貼上,如下:

MCU為 PIC16F716
VDD=3V
AD的參考電壓為VDD
AD輸入腳為 RA1(第18腳)
LED輸出為 RB1

狀況為:
1. Brown Out Detect 選擇 On 時,AD輸入≧2.7V MCU就當住
2. Brown Out Detect 選擇 Off 時,
AD輸入慢慢增加至 2.5V ,MCU動作正常
AD輸入再增加至 5V ,MCU動作也正常
AD輸入再降至 0V ,
AD輸入再瞬間從 0V 升至 5V ,MCU當住
(只要AD輸入瞬間從 0V 升至 3V以上 ,MCU就會當住)

不曉得為什麼會這樣?是設定有問題嗎?還是有其它原因?
如果有人知道煩請不吝指導,謝謝。(百思不解中)
我再試試,有什麼發現再貼上來。

程式碼如下:
list p=16f716,r=dec ; list directive to define processor
include "c:\inc\p16f716.inc"

;Variable definition

ActiveFlag equ 37h
ADValue equ 38h
tempW equ 41h
tempStatus equ 42h
INTADCount1 equ 49h
INTADCount2 equ 50h
INTADCount3 equ 55h
DelayTime equ 52h
Count1 equ 53h
Count2 equ 54h

;Program Segment
org 00h
nop
goto start

org 04h
goto ISR

start
call Initial

banksel OPTION_REG
movlw b'11000000'
movwf OPTION_REG
banksel PIE1
bcf PIE1,ADIE
banksel INTCON
movlw b'00010000'
movwf INTCON
bsf INTCON,GIE
;--------------------------------------
banksel PIR1
bcf PIR1,ADIF
banksel ADCON0
movlw b'01001000'
movwf ADCON0
bsf ADCON0,ADON
banksel ADRES
clrf ADRES
banksel PIE1
bsf PIE1,ADIE
bsf INTCON,PEIE
;--------------------------------------
WaitInt
banksel PORTB
bsf PORTB,1
call ADDelay2
banksel PORTB
bcf PORTB,1
banksel ADCON0
bsf ADCON0,GO_DONE;.........ADgo
call ChkADValue
call ADDelay2
btfsc ActiveFlag,0
goto WaitInt
goto end1

Initial
movlw 1h
movwf ActiveFlag
movlw 0h
movwf ADValue
movwf tempW
movwf tempStatus
movlw 5h
movwf DelayTime

banksel TRISA
movlw b'00000010'
movwf TRISA
banksel PORTA
movlw b'00000000'
movwf PORTA
banksel TRISB
movlw b'00000001'
movwf TRISB
banksel PORTB
movlw b'00000000'
movwf PORTB

banksel ADCON1
movlw b'00000100'
movwf ADCON1

return

ISR
movwf tempW
swapf STATUS,w
movwf tempStatus

banksel PIR1
btfsc PIR1,ADIF
call GetADValue

swapf tempStatus,w
movwf STATUS
swapf tempW,f
swapf tempW,w

retfie

StopActive
banksel INTCON
movlw b'00010000'
movwf INTCON
bcf INTCON,GIE
;bcf INTCON,PEIE;
;banksel PIE1;
;bcf PIE1,ADIE;

movlw 0h
movwf ActiveFlag
banksel PORTB
bcf PORTB,1

PowerLed
banksel PORTB
bsf PORTB,1
call TestDelay
bcf PORTB,1
call TestDelay
decfsz DelayTime
goto PowerLed
movlw 5h
movwf DelayTime
banksel PORTB
bcf PORTB,1

return
;
GetADValue
btfss ActiveFlag,0
goto ExitGetADValue

banksel ADRES
movf ADRES,w
movwf ADValue
banksel PIR1
bcf PIR1,ADIF
return
ExitGetADValue
banksel PIR1
bcf PIR1,ADIF
return
;
ChkADValue
btfss ActiveFlag,0
goto ExitChkADValue

movlw D'119'
bcf STATUS,C
bcf STATUS,DC
bcf STATUS,Z
subwf ADValue,w
btfsc STATUS,Z
goto ADStop
btfsc STATUS,C
goto ADStop

return

ADStop
call StopActive
banksel ADCON0
bcf ADCON0,ADON
return
ExitChkADValue
return


;

ADDelay2
movlw D'66'
movwf INTADCount1
movlw D'100'
movwf INTADCount2
movlw D'100'
movwf INTADCount3
ADDelay2Loop
decfsz INTADCount3
goto ADDelay2Loop
movlw D'100'
movwf INTADCount3
decfsz INTADCount2
goto ADDelay2Loop
movlw D'100'
movwf INTADCount2
decfsz INTADCount1
goto ADDelay2Loop
return
;

TestDelay
movlw D'250'
movwf Count1
movwf Count2
TestLoop
decfsz Count2
goto TestLoop
movlw D'250'
movwf Count2
decfsz Count1
goto TestLoop
return
end1
end

發表於: 2005/1/17 13:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#4
版主
版主


查看用戶資訊
如果AD的參考電壓(Vref+)設為內部的Vcc, 那AD輸入電壓>=Vcc 時轉換的結果就會以Full Scale呈現其值為 0xFF,
你可以用軟體模擬(MPLAB SIM)方式看看AD值為0xFF時程式會做何種動作。

發表於: 2005/1/13 9:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#3
初級會員
初級會員


查看用戶資訊
ㄜ...沒有ICD2

謝謝熱心公益的回答
ADC讀完後有判斷流程
>設定值 程式停止
=設定值 再繼續讀AD值
<設定值 再繼續讀AD值
我再試試看
看有什麼結果再貼上來跟大家討論一下

發表於: 2005/1/13 8:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F716的ADC問題
#2
高級會員
高級會員


查看用戶資訊
有幾個疑問 , 你的ADC讀完後是否有什麼判斷流程 ? 會不會是ADC大於你的判定值就跳錯程式區 ?

用ICD2看看就知道當在那了,

發表於: 2005/1/11 14:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


PIC16F716的ADC問題
#1
初級會員
初級會員


查看用戶資訊
版主您好:

我有一個PIC16F716的ADC問題想要請教一下
ADC的參考電壓為電源電壓
兩秒讀一次AD值

狀況為:
只要ADC的輸入電壓在AD的讀取時間內大於電源電壓
MCU就當住了(看執行到什麼動作就當在那不動)
但是將ADC的輸入電壓降下來之後,
MCU又接著回復正常動作,AD正常讀取,

不知造成以上狀況的原因為何?
是否是AD設定有誤?
還是有哪裏沒有設定到?

程式碼是從PIC16C711轉過來的
只做了一些相關暫存器設定的調整,其餘不變
不過PIC16C711的ADC輸入電壓,
在AD的讀取時間內大於電源電壓時
MCU動作一切正常,
且於讀取時AD值判斷為大於所設定的AD值,MCU並不會當住

以上問題還請版主指點一下,謝謝.



發表於: 2005/1/10 16:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------