• 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 »


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#13
資深會員
資深會員


查看用戶資訊
我常弄不清楚 振盪周期  &  指令周期 (⊙o⊙)  
    指令頻率 
fosc 2.5 M
    2.5m 
8k 312.5  想要在 312 指令周期內 達成 (32 = ) 64 step 跟本是不可能

    投機的方法是 用 pic18  內部 PLL 將頻率昇至  40 Mhz 則用 組語則可勉強達成
  套用 hellowanz大 的手法 
:

    
BCF       HIGH_POINT
    CLRF    TEMP_REG
MAIN_L
:
    
CALL    _8K
                      
要在這裡加幾個  NOP 才剛好  8 KHZ 自己算 
                      
基本上 是  PIC16 的指令  ,  但 PIC18 可用
                      
未 DEBUG 你自求多福了
    
GOTO    MAIN_L
_8K
:
    
BTFSC    HIGH_POINT
    
GOTO    TO_LOW
GOTO_HIGH
:
        
NOP
    INCF    TEMP_REG 
F
    MOVLW    0X3F
    ANDWF    TEMP_REG 
W
    MOVWF    PORTD
    BTFSS    TEMP_REG 
6
    
GOTO    G_H_1
    CLRF    TEMP_REG
    BSF    HIGH_POINT
    
RETURN
G_H_1:
    
NOP
    
RETURN
GOTO_LOW:
    
DECF    TEMP_REG F
    MOVLW    0X3F
    ANDWF    TEMP_REG 
W
    MOVWF    PORTD
    BTFSS    STATUS 
Z
    
GOTO    G_L_1
    CLRF    TEMP_REG
    BCF    HIGH_POINT
    
RETURN
G_L_1:
    
NOP
    
RETURN

發表於: 2009/10/28 6:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#12
資深會員
資深會員


查看用戶資訊
MCU可以產生一定程度內的階梯波,但更重要的是適不適合的問題。
根據過往的經歷,這類的,十個裡面有八個方向錯誤。LZ未交待應用項目,自然也就無從得知。如果祇是針對主題的話,個人認為板主正解!

發表於: 2009/10/27 15:51
The Answer to Life, the Universe, and Everything.
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#11
資深會員
資深會員


查看用戶資訊
參照:

redyounger 寫道:
參照:

Beee 寫道:
參照:

redyounger 寫道:
那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆


換石英振盪器, 振盪器頻率不可調 , 可以換
不會組語那就從頭學 , C 絕對比 組語 慢 三倍以上 , 想要發揮 MCU 的極限 只有組語

你的述求 , PIC24 , dsPIC 應該都能輕鬆達成
你的程式 跟本無認任何輸出 , 你要求的輸出到底是 :

0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1 .......

OR

0 , 1 , 2 , 4 , 8 , 4 , 2 , 1 , 0 , 1 ......



首先,應該道歉,我的這篇應當發在8-bit上,寫在16-bit里是弄錯了,pic18f4520是8-bit,先前沒有弄清。

組合語言,也就是彙編語言,我沒有學過,對於一個搞這個的人,在要用的時候應該盡其學,而不應有任何藉口推脫,所以我已經在找英國同學問他們學assembly language的資料了,希望能儘快有所領悟。

對於PIC24,dsPIC,我是不瞭解的。

我的程式要求就是輸出一個從0至31再至0的5-bit周波信號,要盡可能提高無delay的頻率,并在可以達到的範圍內,從輸入端選擇,1,2,4,8khz四種信號輸出。

關於振盪器,據我看到的c18 libraries說明書里是有選擇頻率的,最高可以到25MHz,但是我不知道怎麼調整,目前我選擇的是HS晶振模式,如果選擇HS-PLL可以達到 40MHz。但是如果通過調整振盪器來實現結果,雖然可行,但這樣一來就不能鍛煉programer的編程能力。所以在這裡,最好是能夠通過對code的改進來實現更高效率。


基本上
選定 HS crystal ~~ 那是定頻率的晶體 並不可以調頻
頂多只能降頻率 透過前除器

因為C經過很多次的處理 所以效率遠不及Assembly~
組語的效率 基本上都會高過C 因為那是最貼近晶片的CODE

發表於: 2009/10/27 9:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#10
新會員
新會員


查看用戶資訊
參照:

Beee 寫道:
參照:

redyounger 寫道:
那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆


換石英振盪器, 振盪器頻率不可調 , 可以換
不會組語那就從頭學 , C 絕對比 組語 慢 三倍以上 , 想要發揮 MCU 的極限 只有組語

你的述求 , PIC24 , dsPIC 應該都能輕鬆達成
你的程式 跟本無認任何輸出 , 你要求的輸出到底是 :

0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1 .......

OR

0 , 1 , 2 , 4 , 8 , 4 , 2 , 1 , 0 , 1 ......



首先,應該道歉,我的這篇應當發在8-bit上,寫在16-bit里是弄錯了,pic18f4520是8-bit,先前沒有弄清。

組合語言,也就是彙編語言,我沒有學過,對於一個搞這個的人,在要用的時候應該盡其學,而不應有任何藉口推脫,所以我已經在找英國同學問他們學assembly language的資料了,希望能儘快有所領悟。

對於PIC24,dsPIC,我是不瞭解的。

我的程式要求就是輸出一個從0至31再至0的5-bit周波信號,要盡可能提高無delay的頻率,并在可以達到的範圍內,從輸入端選擇,1,2,4,8khz四種信號輸出。

關於振盪器,據我看到的c18 libraries說明書里是有選擇頻率的,最高可以到25MHz,但是我不知道怎麼調整,目前我選擇的是HS晶振模式,如果選擇HS-PLL可以達到 40MHz。但是如果通過調整振盪器來實現結果,雖然可行,但這樣一來就不能鍛煉programer的編程能力。所以在這裡,最好是能夠通過對code的改進來實現更高效率。

發表於: 2009/10/26 19:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#9
資深會員
資深會員


查看用戶資訊
參照:

redyounger 寫道:
那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆


換石英振盪器, 振盪器頻率不可調 , 可以換
不會組語那就從頭學 , C 絕對比 組語 慢 三倍以上 , 想要發揮 MCU 的極限 只有組語

你的述求 , PIC24 , dsPIC 應該都能輕鬆達成
你的程式 跟本無認任何輸出 , 你要求的輸出到底是 :

0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1 .......

OR

0 , 1 , 2 , 4 , 8 , 4 , 2 , 1 , 0 , 1 ......

發表於: 2009/10/26 6:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#8
高級會員
高級會員


查看用戶資訊
因为goto需要耗两个指令.

为了波形不突变,则需要在
incf latd,f
decf latd,f

后加两个nop
incf latd,f
nop
nop
decf latd,f
nop
nop

则周期变为10,000,000/(31*2*3)=53763.440860215053763440860215054Hz

發表於: 2009/10/25 9:32
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#7
高級會員
高級會員


查看用戶資訊
问题简化如下:

在端口d依次依序产生0-31,再30-0.

问如何才能产生最高频率.

10MIPS@pic18.

發表於: 2009/10/25 9:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#6
高級會員
高級會員


查看用戶資訊
for(value=0;value<32;value++)

for(;value>1;value--)


查下汇编后是什么.

这个for要耗时间.

实验下value>0和value>1,汇编后的结果看看是否可以省一个指令吧.

發表於: 2009/10/25 8:55
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#5
高級會員
高級會員


查看用戶資訊
兄弟,goto loop需要时间.可能会造成你波形的不准确.

可能和我这个帖子有点一样,

可参考:

http://bbs.21ic.com/viewthread.php?ti ... hlight=%E6%9E%81%E9%99%90

發表於: 2009/10/25 8:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#4
資深會員
資深會員


查看用戶資訊
main_loop
    btfsc    porta
,1
    call    dac_1    
    btfsc    porta
,2
    call    dac_2
    btfsc    porta
,3
    call    dac_3    
    btfsc    porta
,0
    call    dac_0    
    
goto    main_loop

dac_1
    movlw    .1
    movwf    value
dac_1_0
    movlw    value    
;1    1
    movwf    LATD    
;1    2
    nop
    nop
    nop
    nop        
;4    6
    incf    value
,f    ;1    7    
    btfsc    value
,5    ;2    9    8
    
goto    dac_1_1    ;        10
    nop        
;1    10
    nop        
;1    11
    
goto    dac_1    ;2    13

dac_1_1
    nop                11
    nop                12
dac_1_2    
    movlw    value    
;1    1    13
    movwf    LATD    
;1    2    
    nop
    nop
    nop
    nop        
;4    6
    decf    value
,f    ;1    7
    skpnz        
;2    9    8
    
goto    dac_1_3    ;        10
    nop        
;1    10
    nop        
;1    11
    
goto    dac_1_2    ;2    13

dac_1_3
    btfsc    porta
,1    ;        11
    
goto    dac_1    ;        13
    
return


我實在是太無聊了,居然花了 半小時在算這個

跟據你的想法,我用組語來寫,最快一個period 要640 cycle

10Mhz 一cycle = 0.4us 換算一下是 250us = 4khz

也就是就 c 而言 ,c compiler 已經死而後已~~

雖然用c 是達不到我上面的時序,每個 loop 都一樣長,但是就效能而言,讓人眼睛一亮。


回到你的問題,加到20mhz ,你的程序了不起到 8khz

要再更快,那就要將 period 縮小

例如你不要每次都 ++ ,直接 +2 ,這樣period 就變成 320cycles

周期立刻變成 8khz ,直接+4 period 變成 16khz

但是取而代之的就是出來的波形問題

有一好沒兩好。

另一種解決方式




找顆簡單點的 dac


另外,最快的頻率實際上是這樣做
loop
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    incf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    decf    latd
,f
    
goto    loop


10Mhz 可以產出 60khz

就你的程式要求,產出三角波時,基本上mcu 是沒有餘力做中斷或其它的處理,即然是這樣,那你可以直接將code 展開,

反正flash rom 大的很~~

發表於: 2009/10/25 0:36
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... ]

教育訓練中心

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