Re: 請問PIC16F877如何除頻?
|
||||
---|---|---|---|---|
版主
|
您在以下的程式段中:
MainLoop call Oper ;運算X(k+1)=A*X(k)+B*U call PortC_Out ;輸出X(k)到PortC call XK1TOXK ;疊代X(k+1)到X(k) goto MainLoop 有沒有加運算的截止條件?也就是說,當X(K)的值已經到最大了,要怎麼辦呢? 您的程式,看來只有讓輸出信號越來越大,總共一次而已。而且,如果沒加任何的DELAY的話,肯定是會一下子就頂到最大值。 所以,建議: 1、加上述的截止條件,讓它可以跳出MainLoop迴圈;然後,在MainLoop迴圈外頭再加一層迴圈,讓信號可以重覆出現。 2、或者,您乾脆用示波器的one shot功能,來抓那個瞬間信號好了。 還有,也許問題是出在別的地方。那麼,最好掛上ICD2或ICE才容易找bug。
發表於: 2005/6/22 14:41
|
|||
|
Re: 請問PIC16F877如何除頻?
|
||||
---|---|---|---|---|
高級會員
|
參照:
請問您的輸出是Sin波嗎? 若是, 則步階信號訊號會長在Sin波上, 您可以利用示波器把訊號的時間軸調到最大就可以看到 若是輸出是DC, 則有可能是工作頻率太快, 您可以加個Delay試試看
發表於: 2005/6/22 9:58
|
|||
人生最長久的擁有是珍惜 但是大都在失去後才發現
|
||||
|
Re: 請問PIC16F877如何除頻?
|
||||
---|---|---|---|---|
新會員
|
下面是我的程式流程
我有寫一個疊代的迴圈 但是結果一樣 不知道這樣是不是版大的意思 還是說還要在寫一個迴圈?? 麻煩了~~ ====================== ;;;;程式宣告 ;;;;定義自訂變數暫存器名稱 ;;;;設定程式組譯起始位置 org 0x00 nop goto mainprogram ;;;;主程式 mainprogram call Initial MainLoop call Oper ;運算X(k+1)=A*X(k)+B*U call PortC_Out ;輸出X(k)到PortC call XK1TOXK ;疊代X(k+1)到X(k) goto MainLoop ;初始化副程式 ;給使用者設定係數 Initial 起始Xk=0 banksel PORTC clrf PORTC ;將PORTC的輸出清除為零 banksel TRISC clrf TRISC banksel ADCON1 movlw B'00001110' movwf ADCON1 bsf TRISA,0 banksel ADCON0 movlw B'10000001' movwf ADCON0 return ;;;;運算 ;;;;XK1TOXK副程式 ;;;;A/D轉換副程式 ;;;; END
發表於: 2005/6/22 6:57
|
|||
|
Re: 請問PIC16F877如何除頻?
|
||||
---|---|---|---|---|
版主
|
如果您的程式真的有正確動作,只是因為太快而看不到那個暫態的話;您可以讓它做迴圈,重覆地送信號,那就應該可以看到鋸齒波了。
發表於: 2005/6/21 23:01
|
|||
|
請問PIC16F877如何除頻?
|
||||
---|---|---|---|---|
新會員
|
因為我目前使用20Mhz的石英震盪器
我設計一個DSP系統 需用到疊代運算 XK1=A*XK+B*U YK=XK A=0.9048 B=0.0952 U=2V電壓輸入經過AD轉換成AD_variable值 XK=起始為0 當我使用PORTC輸出 經過我自己所組裝的D/A電路 在示波器上所看到的只是2V電壓 理論上輸出應該是會產生一個步階信號慢慢的逼近2V電壓才對 所以我這樣的情形不知道是不是工作頻率太快 請問能夠使用除頻嗎 請問該如何使用 麻煩各位專家了 謝~~
發表於: 2005/6/21 10:02
|
|||
|