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


Browsing this Thread:   1 Anonymous Users




(1) 2 3 4 »


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#37
初級會員
初級會員


查看用戶資訊
謝謝shpeng及Beee的回覆及補充

又長了知識
如果Beee有需要我一定將慘痛的經驗 ~><~ 跟大家分享

以前剛接觸 PIC 的時候是用 PIC16C711 這一顆,一開始就燒了2顆不會動的 MCU 出來,一直燒到第7顆都不會動,才找到問題...AD 暫存器設錯
到了程式完全寫好測試OK,已經燒了34顆有問題的 MCU 了 程式寫好了測試OK了電路板layout好了準備要生產了,客戶沒下文了
還好我不是老闆要不然一定是後面這個表情


比較近的一次遇到的情形是用 PIC16F874A PLCC 44PIN,當時還在測試階段,所以每根I/O腳都拉5點出來以便隨時可作修改,IC座感覺就在洞洞板的正中央,
剛開始時沒用到的I/O腳都設為 輸出 Low 空接 ,結果執行的時候,有時候 Relay 會快速一直 on/off,起初以為是沒用到的I/O腳受到干擾的問題,又將沒用到的I/O腳設為 輸入 Low 接地,結果 Relay 還是會一直快速 on/off,後來又加入了電容等去濾雜訊,結果還是一樣
後來發現了一件神奇的事 剛開始是金屬接近IC座旁的洞洞區的時候(沒有碰到還離有1~3公分,也就是從上空經過),就會聽到聲響感覺板子好像在快速震動 ,但眼睛看不出版子有在動,只有聽到聲響,之後每次試都這樣,一有金屬接近IC座旁的洞洞區就有聲響,
最後發現連手指接近都會有聲響 (難不成是江湖失傳已久的隔空點穴 還是變成 mTouch 了 )
最後種種方法都試過了還是一樣,只好在把程式跟硬體重新檢查一次,看到程式燒錄設定時,發現有一個沒看過的設定 -> Low Voltage Program 而且是 Enabled 的 於是我將它 Disabled之後再測試,就一切都正常了
不管是沒用到的I/O腳都設為 輸出 Low 空接 ,或是沒用到的I/O腳設為 輸入 Low 接地,或是濾雜訊電容等有加沒加都一樣不受影響正常了
害我以為學到了隔空點穴

以上是一些以前遇過的狀況跟大家分享一下
再次謝謝大家的回答

趕快來去寫程式

發表於: 2009/12/3 9:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#36
資深會員
資深會員


查看用戶資訊
參照:

r620 寫道:

再重新檢查了程式,發現一個計算秒的變數沒初始化到 (我設定是 halfSec 初始為 2 用 decfsz 判斷,=0 為 1 秒)


;================================================

真羨慕有寫大程式的經驗 , 以後如有寫超過 2K 程式的時候一定向你請教

INCF        HALFSEC F  ; ( or DECF )
    
BTFSS      HALFSEC 
    
GOTO       IS_1_SEC
IS_HALF_SEC
:
    ....
    ....
;---------------------------------------------++++++++
    
#DEFINE     HALF_SEC      XX_FLAG , 0
ISR:
      .....
      .....
      
MOVLW    1
      XORWF     XX_FLAG 
F      對 HALF_SEC 作 反轉運算
      BTFSS      HALF_SEC 
     
GOTO       IS_1_SEC
IS_HALF_SEC
:
      ....
      ....

發表於: 2009/12/2 18:32

Edited by Beee on 2009年12月02日 21:45:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#35
資深會員
資深會員


查看用戶資訊
參照:

r620 寫道:
謝謝Beee的回覆

用了Beee所講的方式去測了一下 Timer1 的起振時間,測起來平均在 1 秒左右,
我在 Timer1 中斷副程式加入計時程式,從 power on 開始到時間正常顯示這段時間,為 1 分鐘多一點,
也就是說 power on 約 1 秒後 Timer1 外接32768Hz震盪器已經起振完成開始震盪了,而且在這之後的 1 分多鐘,也都正常震盪,
我照Ryang板主所說用 ICD2 去執行程式,發現 Timer1 中斷每次都有發生 但時間顯示沒動作
看了一下暫存器跟變數的內容,發現有一個變數每次停在中斷點時都會減一,不過值是從 255 一直減下來,
再重新檢查了程式,發現一個計算秒的變數沒初始化到 (我設定是 halfSec 初始為 2 用 decfsz 判斷,=0 為 1 秒)

power on ,Timer1 起振後由於 halfSec 沒初始化到,所以一開始 halfSec=0 ,一進入到 Timer1 中斷,
執行到 decfsz halfSec 後,halfSec 的值就變為 255(0-1=255) 計算完這 255 次之後剛好1 分多鐘,Bug 就是在這裡,
Bug 的原因是 halfSec 沒有初始化到
感覺有點對不起大家 ~~~><~~~
不過由於這次大家提供的意見跟除錯方法還有很多寶貴的知識,讓我獲益良多對ICD2的除錯用法也更加了解,再次謝謝大家


以下對2個已解決的狀況作個總結:
1. 程式寫超過程式記憶體 page0(0005h~07ffh無法動作的問題
   狀況:Power On 
or Reset 後程式動一下即當住不動
   原因:位於程式位址 0x04h 的 
[color=CC0000]goto 中斷副程式[/color]前未加入 pagesel 所致,所以其它 call or goto 前雖然有加 pagesel 指令但程式始終會當住,
   解決:於程式 call 
or goto 中斷副程式前加上 pagesel 指令,或是只要有用到 call or goto 之前都加上 pagesel 指令, 例如以下程式碼

         STARTUP CODE
                 nop
;for ICD2 use
                 goto    
主程式段

                 CODE    04H
                 banksel 
var     <---BUG  刪除,會導致主程式,BANK被異動.
                 
push W STATUS PCLATH 等   <---定義於 RAM 0x70~0x7F 區段
[b][color=CC0000]               pagesel 中斷副程式[/color][/b]
[
b][color=CC0000]               goto    中斷副程式[/color][/b]
         
PROG1   CODE
         主程式段
                 pagesel 初始化副程式
                 call    初始化副程式
                                               
<----補一行 pagesel  $
                 
其它初始化指令
         主程式段迴圈
                 主程式指令區段
                 pagesel 主程式段迴圈
                 
goto    主程式段迴圈
         中斷副程式
                 中斷處理程式區段
                 banksel 
var   <--- 刪除
                 pop PCLATH 
STATUS W  等
                 retfie
         PROG2   CODE
                 其它副程式區段
                 end

2. 程式於每次 power on 時需 1 分鐘後才開始正常動作
   狀況:程式於每次 power on 時,主程式正常動作,但LCD顯示副程式於 1 分鐘後才開始動作,但每次 reset 主程式和LCD顯示副程式都馬上正常動作,
   原因:計時變數未初始化所致,導致 Timer1 中斷雖然每次都有進入,但因計時變數數值不正確,造成程式動作不正常,
   解決:將計時變數正確初始化


以上跟大家分享一下,希望對大家會有所幫助
再次謝謝大家的回答


補一下

發表於: 2009/12/2 15:09
少年不知愁滋味,老來方知路難行。
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#34
初級會員
初級會員


查看用戶資訊
謝謝Beee的回覆

用了Beee所講的方式去測了一下 Timer1 的起振時間,測起來平均在 1 秒左右,
我在 Timer1 中斷副程式加入計時程式,從 power on 開始到時間正常顯示這段時間,為 1 分鐘多一點,
也就是說 power on 約 1 秒後 Timer1 外接32768Hz震盪器已經起振完成開始震盪了,而且在這之後的 1 分多鐘,也都正常震盪,
我照Ryang板主所說用 ICD2 去執行程式,發現 Timer1 中斷每次都有發生 但時間顯示沒動作
看了一下暫存器跟變數的內容,發現有一個變數每次停在中斷點時都會減一,不過值是從 255 一直減下來,
再重新檢查了程式,發現一個計算秒的變數沒初始化到 (我設定是 halfSec 初始為 2 用 decfsz 判斷,=0 為 1 秒)

power on ,Timer1 起振後由於 halfSec 沒初始化到,所以一開始 halfSec=0 ,一進入到 Timer1 中斷,
執行到 decfsz halfSec 後,halfSec 的值就變為 255(0-1=255) 計算完這 255 次之後剛好1 分多鐘,Bug 就是在這裡,
Bug 的原因是 halfSec 沒有初始化到
感覺有點對不起大家 ~~~><~~~
不過由於這次大家提供的意見跟除錯方法還有很多寶貴的知識,讓我獲益良多對ICD2的除錯用法也更加了解,再次謝謝大家


以下對2個已解決的狀況作個總結:
1. 程式寫超過程式記憶體 page0(0005h~07ffh無法動作的問題
   狀況:Power On 
or Reset 後程式動一下即當住不動
   原因:位於程式位址 0x04h 的 
[color=CC0000]goto 中斷副程式[/color]前未加入 pagesel 所致,所以其它 call or goto 前雖然有加 pagesel 指令但程式始終會當住,
   解決:於程式 call 
or goto 中斷副程式前加上 pagesel 指令,或是只要有用到 call or goto 之前都加上 pagesel 指令, 例如以下程式碼

         STARTUP CODE
                 nop
;for ICD2 use
                 goto    
主程式段

                 CODE    04H
                 banksel 
var
                 
push W STATUS PCLATH 等
[b][color=CC0000]               pagesel 中斷副程式[/color][/b]
[
b][color=CC0000]               goto    中斷副程式[/color][/b]
         
PROG1   CODE
         主程式段
                 pagesel 初始化副程式
                 call    初始化副程式
                 其它初始化指令
         主程式段迴圈
                 主程式指令區段
                 pagesel 主程式段迴圈
                 
goto    主程式段迴圈
         中斷副程式
                 中斷處理程式區段
                 banksel 
var
                 
pop PCLATH STATUS W  等
                 retfie
         PROG2   CODE
                 其它副程式區段
                 end

2. 程式於每次 power on 時需 1 分鐘後才開始正常動作
   狀況:程式於每次 power on 時,主程式正常動作,但LCD顯示副程式於 1 分鐘後才開始動作,但每次 reset 主程式和LCD顯示副程式都馬上正常動作,
   原因:計時變數未初始化所致,導致 Timer1 中斷雖然每次都有進入,但因計時變數數值不正確,造成程式動作不正常,
   解決:將計時變數正確初始化


以上跟大家分享一下,希望對大家會有所幫助
再次謝謝大家的回答

發表於: 2009/12/2 14:15
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#33
資深會員
資深會員


查看用戶資訊
忘記補充 : 石英振盪是屬於物理振盪(壓電效應) , 要停下來好像沒那麼容易
繼上次實驗(十秒以上), 這次 : 停電 , 短路 , 復電 ( 全部三秒完成 )
得到的數據 約在 2XXXX ( 16進位 ) 上下, 實驗雖不嚴謹 , 但得到的印象是 振盪並未完全停止
這次得到的經驗是 , 要確認 石英 停止振盪 , 最好是 短路後 再等 30 秒

你說第一次 有執行 , 然後要再過 一分鐘 才再執行 ( 第一次 可能是 BUG , 非正常進入 )

道理如上所述 : 諧振後 , 要停下來不容易

發表於: 2009/12/2 0:37
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#32
初級會員
初級會員


查看用戶資訊
謝謝Ryang板主及Beee的回覆

突然想到,我的程式 power on 的時候,時間顯示 00 00 再來 0.5 秒後時間顯示 00:00 再來就要1分鐘後才會顯示 00:01,然後開始正常動作,
: -> 1秒亮滅一次(0.5秒亮,0.5秒滅)
: 的顯示是在 Timer1 中斷直接處理,時間顯示是在時間顯示副程式處理,

也就是說 power on 時,大約1秒左右,Timer1 第一次中斷有執行到(: 有顯示出來),再來 Timer1 中斷就間隔 1 分鐘以後才又執行到,
依這樣分析好像是程式有問題,不過 power on 以後每次 reset 時間顯示都正常(馬上就動作了),這樣感覺程式好象又沒問題

不知哪裡出了問題?
難道是一開始有震盪起來,後來又掉下來,再來又震盪起來

明天到公司的時候再照Ryang板主及Beee的建議來debugger看看,看能不能找出哪裡出問題

一有蛛絲馬跡就馬上PO上來跟大家討論
再次謝謝大家的回答
祝大家晚安

發表於: 2009/12/1 23:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#31
資深會員
資深會員


查看用戶資訊
MCU 16F1936  主頻率 8M 內振 TIMER0 FOC /1 us
每次測試後 
移除電源 並短路三秒 七次數據 16 進位 ) :
  
  
13F9F3 1393DB 105B47 160AB1 149475 11E8E4 132349
最小為 105B47 
-->  1.072 秒  ;  最大為 160AB1 --> 1.445 秒

  程式片斷如下 
:  ( LCD 副程式 不另展出 )
   ...
   ...
   ...
    
RETFIE    
_INIT
:
    
MOVLW        0X20
    MOVWF        FSR0L
    CLRF        FSR0H
    CLRF        INDF0
    INCF        FSR0L 
F
    BTFSS        FSR0L 
7
    BRA            
$ - 3
    CLRF        INTCON
    CLRF        PORTB
    TO_BANK    3
    CLRF        ANSELA
    CLRF        ANSELB
    TO_BANK    1
    MOVLW        1
    MOVWF        PIE1        
PRESET  TMR1IE  ON
    MOVLW        0XC0
    MOVWF        TRISB        
MAKE  PORT_B  OUTPUT Pin0 )
    
MOVLW        0X0F
    MOVWF        TRISC        
MAKE PORT_C 47  OUTPUT
    MOVLW        0X72
    MOVWF        OSCCON        
INTERRAL OSC  8 Mhz
    MOVLW        0            
12.5 ms
    CALL        DELAY        
;  WAITING  FOR  OSC  STABLE
    MOVLW        0X83        
B'10000000'    OSC/16  PULL-UP  ENABLE
    MOVWF        OPTION_REG
    TO_BANK    0
;    BSF            PORTC 4
    CLRF        T1GCON
    CALL        INIT_LCD          
LCD Subroutine
    CLRF        TMR0

    LINE1        1        
LCD Subroutine
    SHOW_STR    T1_TEST        
LCD Subroutine

    BANKSEL       OPTION_REG    
BANK1
    MOVLW        0X80               
TIMER0 FOC /2
    MOVWF        OPTION_REG
    MOVF        OPTION_REG 
,W

    BANKSEL       TEMP_TIME0    
BANK 0
    CALL        SHOW_HEX   
LCD Subroutine
    CLRF        TEMP_TIME1
    CLRF        TEMP_TIME2
    CLRF        TEMP_TIME3
    MOVLW        0X8E
    MOVWF        T1CON
    CLRF        TMR1L
    CLRF        TMR1H
    BCF            T0IF
    BSF            T1CON 
TMR1ON
    CLRF        TMR0
T1_OSC
:
    
BTFSS        T0IF
    
GOTO        T1_OSC_1
    BCF            T0IF
    INCFSZ        TEMP_TIME1 
F
    
GOTO        T1_OSC_1
    INCFSZ        TEMP_TIME2 
F        
    
GOTO        T1_OSC_1
    INCF        TEMP_TIME3 
F
T1_OSC_1
:
    
BTFSS        TMR1L 1       如起振 才可能 為 1
    
GOTO        T1_OSC
    MOVF        TMR0 
W
    MOVWF    TEMP_TIME0

    LINE2         0                 
LCD Subroutine
    SHOW_STR    TIME             
LCD Subroutine
    MOVF        TEMP_TIME3 
W
    CALL        SHOW_HEX          
LCD Subroutine
    MOVF        TEMP_TIME2 
W
    CALL        SHOW_HEX          
LCD Subroutine
    MOVF        TEMP_TIME1 
,W
    CALL        SHOW_HEX          
LCD Subroutine
    MOVF        TEMP_TIME0 
W
    CALL        SHOW_HEX          
LCD Subroutine
    
    BRA    
$

發表於: 2009/12/1 18:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#30
資深會員
資深會員


查看用戶資訊
承版主指示 用這一小段程式 看 TIMER1 起振花了多少時間  ......
    
CBLOCK    0X20
        TEMP_TIME3 
TEMP_TIME2 TEMP_TIME1 TEMP_TIME0
    ENDC
    ORG    0
    
......
    .......



    
BANKSEL       OPTION_REG    BANK1
    MOVLW        0X80
    MOVWF        OPTION_REG
    BANKSEL       TEMP_TIME0    
BANK 0
    CLRF        TEMP_TIME1
    CLRF        TEMP_TIME2
    CLRF        TEMP_TIME3
    MOVLW        0X0E
    MOVWF        T1CON
    CLRF        TMR1L
    CLRF        TMR1H
    BCF        INTCON 
T0IF
    BSF        T1CON 
TMR1ON
    CLRF        TMR0
T1_OSC
:
    
BTFSS        INTCON T0IF
    
GOTO        T1_OSC_1
    BCF        INTCON 
T0IF
    INCFSZ        TEMP_TIME1 
F
    
GOTO        T1_OSC_1
    INCFSZ        TEMP_TIME2 
F        
    
GOTO        T1_OSC_1
    INCF        TEMP_TIME3 
F
T1_OSC_1
:
    
BTFSS        TMR1L 3       如起振 才可能 為 1
    
GOTO        T1_OSC
    MOVF        TMR0 
W
    MOVWF        TEMP_TIME0
    NOP               
;  設中斷點 看花了多少時間

發表於: 2009/12/1 15:29

Edited by Beee on 2009年12月01日 17:09:00
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#29
資深會員
資深會員


查看用戶資訊
1. 以主振盪模式來說 有 LP XT HS 三種模式 32.768Khz 是屬於 LP 低功耗模式

2. 以石英鐘的鐘擺為例 
其驅動力很小又只在週期的一小段時間驅動 鐘擺的質量又大
     如起振時有外力干擾 
要多久才能達到諧振狀況諧振後如有外力干擾 受干擾的是
      驅動力 
or 整個鐘擺 ?

3. 低頻振盪其週期較長 受干擾的機會是否較多 ?

    
所以低頻石英振蕩設計重點是要避免受干擾 所以引線要縮短 必要時用接地環將振盪
電路部份包圍起來 
.....

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


Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
#28
版主
版主


查看用戶資訊
問你一個問題 : Crystal 的起震時間與頻率有沒有關係?

答案是Crystal 頻率越高起振時間時間越短,4 MHz 約 1x mS 就起振了,而 32768Hz 的Crystal 需 500mS ~ 780mS 左右,且還跟工作電壓有關。所以說開機後約 1Sec 才會正常顯示也就不奇怪了。 但你的程式要一分鐘才會正常顯示... 這就要配合設定中斷點的方式去除錯了,看看多久發生第一次的中斷...

發表於: 2009/12/1 13:52
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... ]

教育訓練中心

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