Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
版主
|
請利用右方「搜尋」功能,找「貼程式」這三個字。以前有人說明得很清楚了。
發表於: 2005/1/17 22:13
|
|||
|
Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
初級會員
|
呃...請問一下...
程式碼要怎麼貼格式才不會變掉,謝謝。
發表於: 2005/1/17 14:01
|
|||
|
Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
初級會員
|
謝謝版主的回覆
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
|
|||
|
Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
版主
|
如果AD的參考電壓(Vref+)設為內部的Vcc, 那AD輸入電壓>=Vcc 時轉換的結果就會以Full Scale呈現其值為 0xFF,
你可以用軟體模擬(MPLAB SIM)方式看看AD值為0xFF時程式會做何種動作。
發表於: 2005/1/13 9:42
|
|||
|
Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
初級會員
|
ㄜ...沒有ICD2
謝謝熱心公益的回答 ADC讀完後有判斷流程 >設定值 程式停止 =設定值 再繼續讀AD值 <設定值 再繼續讀AD值 我再試試看 看有什麼結果再貼上來跟大家討論一下
發表於: 2005/1/13 8:28
|
|||
|
Re: PIC16F716的ADC問題
|
||||
---|---|---|---|---|
高級會員
|
有幾個疑問 , 你的ADC讀完後是否有什麼判斷流程 ? 會不會是ADC大於你的判定值就跳錯程式區 ?
用ICD2看看就知道當在那了,
發表於: 2005/1/11 14:47
|
|||
|
PIC16F716的ADC問題
|
||||
---|---|---|---|---|
初級會員
|
版主您好:
我有一個PIC16F716的ADC問題想要請教一下 ADC的參考電壓為電源電壓 兩秒讀一次AD值 狀況為: 只要ADC的輸入電壓在AD的讀取時間內大於電源電壓 MCU就當住了(看執行到什麼動作就當在那不動) 但是將ADC的輸入電壓降下來之後, MCU又接著回復正常動作,AD正常讀取, 不知造成以上狀況的原因為何? 是否是AD設定有誤? 還是有哪裏沒有設定到? 程式碼是從PIC16C711轉過來的 只做了一些相關暫存器設定的調整,其餘不變 不過PIC16C711的ADC輸入電壓, 在AD的讀取時間內大於電源電壓時 MCU動作一切正常, 且於讀取時AD值判斷為大於所設定的AD值,MCU並不會當住 以上問題還請版主指點一下,謝謝.
發表於: 2005/1/10 16:07
|
|||
|