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


Re: 關於CLKOUT...
#27
資深會員
資深會員


查看用戶資訊
Hahaha....大鍋真是厲害, 一語道破,別說14天後再來看這支程式 ..
其實在思考程式交叉跳躍時 ,往往老婆插句話,偶就全功盡棄, 又得從頭再來..
這也就是說笨鴨無法幹這行的原因啦!這得要犧牲很多事耶..
無法陪老婆聊天. 把咩咩, 放棄玩遙控飛機...而專心寫程式;
這犧牲可是太..太...大啦 !..哈.. 哈...
大鍋的程式真是很簡潔, 易懂, 不會複習 三字經...哈.. 哈...
嗯...好好學起來... 3Q ! 阿里阿多! yiming ....

發表於: 2007/7/24 23:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#26
資深會員
資深會員


查看用戶資訊
我想你的程式改成這樣子會更清楚,以後也會好改很多,這種寫法2個PWM的頻率是一樣的,但工作週期是可調的.

PWM_START:
BSF GPIO,4 ;PWM1
BSF GPIO,5 ;PWM2
PWM_LOOP:
;只要COUNT值到達COUNT1就PWM1 OFF
MOVF COUNT1,W
SUBWF COUNT,W
BTFSC STATUS,C
BCF GPIO,4

;只要COUNT值到達COUNT2就PWM2 OFF
MOVF COUNT2,W
SUBWF COUNT,W
BTFSC STATUS,C
BCF GPIO,5

;增加時間
CALL DEALY_10US
INCF COUNT,F
;如果COUNT=0,就全部從來.
BTFSS STATUS,Z
GOTO PWM
GOTO PWM_START



發表於: 2007/7/24 11:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#25
資深會員
資深會員


查看用戶資訊
可能可以動作吧,只是....你可以試試14天後再來看這支程式...保證你會覺得很陌生,看到頭昏昏,口出三字經...

邏輯方式有點複雜,造成日後維護修改上的困難,再加上你的變數命名和實際功能對應上不太容易..

其實這不只是你的問題,我也常常會發生....

其實你現在的程式,和我寫的蠻接近了.只是我把時間的累加和I/O DEBOUNCE的部分由TIMER處理掉了,所以主程式看起來很簡潔,而要修改的CHK_KEY看起來也比較清楚容易變更,反觀這支程式全部都在一起,沒全部看懂想改個一,二行程式都有困難.

發表於: 2007/7/24 11:10
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#24
資深會員
資深會員


查看用戶資訊
Dear All ;
話說週末不工作 ,其實嗎 ???還是會技癢, 對吧?
於是再次把 yiming大鍋的程式研究一陣子...
Well.... 不懂的地方.. 還是莫宰羊.. 對不起yiming大鍋囉 !!
但是啟發笨鴨另一個想法????
原本12F508的程式 ,2個 PWM 是 Run Alternate 方式;
何不改用 Chop 方式呢 ? 於是小修改一下...
哈..哈... 可以如偶願工作啦 !! Happy happy .
笨鴨的PWM, 只推燈泡, 所以不需要很精確 ,能用就可以啦!!
笨鴨寫的程式 ... 當然也笨啦 !!! Hahaha....
修改如下...(其他部份相同 )
;********************************* PWM Routine ******************************************
pwm
    bsf            GPIO
,4            ;Turn on Red Lamp.
    
bsf            GPIO,5            ;Turn on Blue Lamp.
r_mark
    call            delay_10us        
;
    
decfsz        count,f            ;Minimum Mark pulse 26 x 10us =260us.
    goto        
b_mark            ;
    
bcf            GPIO,4            ;Turn Red lamp off.
    goto        
b_mark_1        ;
b_mark
    decfsz        count2
,f            ;Minimum Mark pulse 26 x 10us =260us.
    goto        
r_mark            ;Maximum Space 10us x 229 2.29ms.
    
bcf            GPIO,5            ;Turn blue lamp off.
    goto        
r_mark_1        ;
r_mark_1
    call            delay_10us        
;
    
decfsz        count,f            ;
    goto        
b_space_1        ;
    
bcf            GPIO,4            ;
    goto        
b_space            ;
b_mark_1
    decfsz        count2
,f            ;Minimuum Space  10us x 16 160us.
    goto        
r_space            ;
    
bcf            GPIO,5            ;
    goto        
r_space_1        ;
b_space
    decf            count3
,f            ;
    goto        
r_space_1        ;
b_space_1
    decf            count3
,f            ;
    goto        
r_mark_1        ;
r_space
    call            delay_10us        
;
    
decfsz        count1,f            ;
    goto        
b_mark_1        ;
    
bcf            GPIO,4            ;
    
bcf            GPIO,5            ;
    
retlw        0                ;
r_space_1
    call            delay_10us        
;
    
decfsz        count1,f            ;
    goto        
b_space            ;
    
bcf            GPIO,4            ;
    
bcf            GPIO,5            ;
    
retlw        0                ;

發表於: 2007/7/24 1:20
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#23
資深會員
資深會員


查看用戶資訊
It's Friday lor , lazy day lar .
吃飽睡足, 等下班啦 ..哈...哈 ...
3Q yiming .... 休息一下下囉 !!!
HAVE A NICE WEEKEND AND TAKE CARE LOR !

發表於: 2007/7/20 23:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#22
資深會員
資深會員


查看用戶資訊
因為用示波器量出來的波形是2300us,+1才會是2400us,算是一種補償吧...
嗯,都可以...只是結果必須是0~255,不然好像會有錯誤..

發表於: 2007/7/20 16:22
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#21
資深會員
資深會員


查看用戶資訊
早上8點就開始看程式,看到晚上10點???
哇晒!!! 好辛苦呦 ! 人生多無趣呀 ? 休息一下吧 ?
休息是為走更長遠的路 對吧 ???
帶個涼椅太陽賞傘, 戴上太陽眼鏡, 喝杯茶,清涼飲料
吃個多拿士,聽點音樂 ....
我們一起去海濱, 看比基尼咩咩去?? 如何呀 ? Hahaha...
告訴你呦.. 老婆學校放暑假, 8月初回台...
嘿.. 嘿 .. it's play time ... go party lor !! hahaha...

昨日進一步用Diode, 按照我想要的接法, 把四個 input SW接好,會工作耶?? 好神奇呦 !!!
Well...開始要發問囉
#DEFINE PWM1_PERIOD_MAX .24+1 ;2400US
(1) ... " +1 " 是幹啥用的 ???
(2).. MOVLW (PWM1_PERIOD_MAX+PWM1_PERIOD_MIN)/2
這麼個指令, 沒用過 ,是不是 任何數字多可以完成 +,- ,x ,/,呢?
在此是 24 + 4 / 2 = 14 = 1400 us lor!
我會試著改一些地方玩玩lor! I hope , I won't kill it. haha..

發表於: 2007/7/19 23:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#20
資深會員
資深會員


查看用戶資訊
留一點給你玩啦,都我做完了你就學不到東西了...
我的按鍵是按一下只動作一次,你之前做的按一下會動很多次,只是你看不出來而已,按著不放就會一直動作.
我每天早上8點就開始看程式,看到晚上10點,如果你也用和我同樣的時間,相信功力也不會比我差的....^^~

每個調整的時間單位是100US.
目前程式的做法是週期固定(要用程式調整),pwm on的時間可由按鍵來調整.
;一開機預設pwm ON的時間長度1200us
#DEFINE PWM1_PERIOD .12 ;1200US
#DEFINE PWM2_PERIOD .12 ;1200US
;限制pwm週期的最大值,配合你要的2.4ms,最大可以到25.5ms
#DEFINE PWM1_PERIOD_MAX .24+1 ;2400US
#DEFINE PWM2_PERIOD_MAX .24+1 ;2400US
#DEFINE PWM1_PERIOD_MIN .4 ;400US
#DEFINE PWM2_PERIOD_MIN .4 ;400US

START:
MOVLW (PWM1_PERIOD_MAX+PWM1_PERIOD_MIN)/2 ;中間值
MOVWF PWM1_ON
MOVLW (PWM2_PERIOD_MAX+PWM2_PERIOD_MIN)/2 ;中間值
MOVWF PWM2_ON
MOVLW .50
MOVWF T100US
BSF GPIO,PWM1
BSF GPIO,PWM2
LOOP:
CALL TIMER
;PWM1
;超過pwm1_on的時間就把pwm1 off
MOVF PWM1_ON,W ;
SUBWF PWM1_CNT,W
BTFSC STATUS,C
BCF GPIO,PWM1
;超過pwm1週期時間就把pwm1 on
MOVLW PWM1_PERIOD_MAX
SUBWF PWM1_CNT,W
BTFSS STATUS,C
GOTO $+3
CLRF PWM1_CNT
BSF GPIO,PWM1
;PWM2
;超過pwm2_on的時間就把pwm2 off
MOVF PWM2_ON,W
SUBWF PWM2_CNT,W
BTFSC STATUS,C
BCF GPIO,PWM2
;超過pwm2週期時間就把pwm2 on
MOVLW PWM2_PERIOD_MAX
SUBWF PWM2_CNT,W
BTFSS STATUS,C
GOTO $+3
CLRF PWM2_CNT
BSF GPIO,PWM2

GOTO LOOP
;************************************************
CHK_KEYIN:
MOVF TGPIO,W
XORWF OGPIO,W
MOVWF TEMP
CHK_UP1:
;按鍵1,功能隨便你定義
BTFSC GPIO,SW_UP1
GOTO CHK_DN1
MOVLW B'00000001' ;SW_UP1
ANDWF TEMP,W
BTFSC STATUS,Z
GOTO CHK_DN1
INCF PWM1_ON,F
;pwm1 on max的限制,要做到100%,最大限制就會等於pwm1的週期時間
MOVLW PWM1_PERIOD_MAX-PWM1_PERIOD_MIN
SUBWF PWM1_ON,W
BTFSS STATUS,C
GOTO CHK_DN1
DECF PWM1_ON,F
CHK_DN1:
;按鍵2,功能隨便你定義
BTFSC GPIO,SW_DN1
GOTO CHK_UP2
MOVLW B'00000010' ;SW_DN1
ANDWF TEMP,W
BTFSC STATUS,Z
GOTO CHK_UP2
DECF PWM1_ON,F

MOVLW PWM1_PERIOD_MIN
SUBWF PWM1_ON,W
BTFSC STATUS,C
GOTO CHK_UP2
INCF PWM1_ON,F
CHK_UP2:
;按鍵3,功能隨便你定義
BTFSC GPIO,SW_UP2
GOTO CHK_DN2
MOVLW B'00000100' ;SW_UP2
ANDWF TEMP,W
BTFSC STATUS,Z
GOTO CHK_DN2
INCF PWM2_ON,F

MOVLW PWM2_PERIOD_MAX-PWM2_PERIOD_MIN
SUBWF PWM2_ON,W
BTFSS STATUS,C
GOTO CHK_DN2
DECF PWM2_ON,F
CHK_DN2:
;按鍵4,功能隨便你定義
BTFSC GPIO,SW_DN2
GOTO EXIT_CHK_KEY
MOVLW B'00001000' ;SW_DN2
ANDWF TEMP,W
BTFSC STATUS,Z
GOTO EXIT_CHK_KEY
DECF PWM2_ON,F

MOVLW PWM2_PERIOD_MIN
SUBWF PWM2_ON,W
BTFSC STATUS,C
GOTO EXIT_CHK_KEY
INCF PWM2_ON,F
EXIT_CHK_KEY:
GOTO MQ1

發表於: 2007/7/19 9:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#19
資深會員
資深會員


查看用戶資訊
haha.. it's working lor ! 3Q yiming ....

我希望的控制方式如下...

UP = 兩個PWM, 同時可以由最少20%或其他% PWM to 100% ( High ). 100us pulse @ 20%. Duty cycle = 3ms to H.
DOWN = 兩個PWM , 同時可以 由最100% (High) 或其他%to 20% PWM. H to 20% pulse.
UP_DN =同時 一個PWM UP, 另一個PWM DOWN.
DN_UP =同時 一個PWM DOWN 另一個PWM UP .

目前用兩個10F200 用 diode 把 up + up pin & down + down pin並用再 接2個 SW ,one as up sw , other as down sw; 同時控制兩個10F200 .
然後 一個 up pin + 另 一個 down pin 用 diode 並接 SW ,as up + dn sw , 同時控制兩個10F200 一個 up一個 down .
再然後 一個 down pin + 另一個up pin用 diode 並接 SW ,
as dn + up sw,同時控制兩個10F200 一個 up一個 down .
然後 呀? 有一個 power SW , ON - OFF lor!
耶 .... 不知道說的清不清楚耶 ..haha.

yimin ... 把笨鴨的製作想的太專業化啦 !不需要太精密啦!

你好厲害ㄜ! 不過寫程式當職業.... 笨鴨做不來 !
當興趣咩??? 還不錯, 會滿有成就感的 ,, haha.


發表於: 2007/7/19 0:55
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於CLKOUT...
#18
資深會員
資深會員


查看用戶資訊
endc,selbank,selpage是PIC compile特有的指令,都好用很好用,用起來也不容易出錯.
equ,define則是大部分的compile都能用的指令,只是我用習慣了,改天換MCU習慣也不用改.而且對RAM的分配也會比較清楚.
RA EQU 05h......這個用法則是和PIC定義檔的用法一樣,好處是對相同位址的RAM可以有多個命名來使用.
例如:
PORTA equ 05h
RA equ 05h
則PORTA,RA都是對05H操作.

#define PWM1_PERIOD 1200
define通常是用來定義常數,一般來說看到1200不會知道這個數字有什麼意義,但看到PWM1_PERIODE就知道是PWM1的週期,有助於日後看程式.

WDT通常我在實驗時都會打開,那是用來協助debug用,萬一程式跑到某個死迴圈(died loop)時,就會重開機,因為死迴圈不會做clrwdt.在出貨時如果為了省電才會把WDT OFF.

其實以上這些東西你不會,很多人也都不會是正常的,我是太閒翻PIC datasheet翻到的,還花了點時間做實驗才知道的.其實不只這些指令,其它還有像宣告compile時只列出錯誤不列出警告,預設是10/16/8進制,...有時間的話你也可以去翻翻這些資料來看看玩玩蠻有恴思的,但對寫程式的幫助不大...^^~

嗯,可以到100%或是0%是配合你給我的資料才增加上下限的...



發表於: 2007/7/18 13:38
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... ]

教育訓練中心

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