Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
我想你的程式改成這樣子會更清楚,以後也會好改很多,這種寫法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
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
可能可以動作吧,只是....你可以試試14天後再來看這支程式...保證你會覺得很陌生,看到頭昏昏,口出三字經...
邏輯方式有點複雜,造成日後維護修改上的困難,再加上你的變數命名和實際功能對應上不太容易.. 其實這不只是你的問題,我也常常會發生.... 其實你現在的程式,和我寫的蠻接近了.只是我把時間的累加和I/O DEBOUNCE的部分由TIMER處理掉了,所以主程式看起來很簡潔,而要修改的CHK_KEY看起來也比較清楚容易變更,反觀這支程式全部都在一起,沒全部看懂想改個一,二行程式都有困難.
發表於: 2007/7/24 11:10
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
Dear All ;
話說週末不工作 ,其實嗎 ???還是會技癢, 對吧? 於是再次把 yiming大鍋的程式研究一陣子... Well.... 不懂的地方.. 還是莫宰羊.. 對不起yiming大鍋囉 !! 但是啟發笨鴨另一個想法???? 原本12F508的程式 ,2個 PWM 是 Run Alternate 方式; 何不改用 Chop 方式呢 ? 於是小修改一下... 哈..哈... 可以如偶願工作啦 !! Happy happy . 笨鴨的PWM, 只推燈泡, 所以不需要很精確 ,能用就可以啦!! 笨鴨寫的程式 ... 當然也笨啦 !!! Hahaha.... 修改如下...(其他部份相同 )
;********************************* PWM Routine ******************************************
發表於: 2007/7/24 1:20
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
It's Friday lor , lazy day lar .
吃飽睡足, 等下班啦 ..哈...哈 ... 3Q yiming .... 休息一下下囉 !!! HAVE A NICE WEEKEND AND TAKE CARE LOR !
發表於: 2007/7/20 23:28
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
因為用示波器量出來的波形是2300us,+1才會是2400us,算是一種補償吧...
嗯,都可以...只是結果必須是0~255,不然好像會有錯誤..
發表於: 2007/7/20 16:22
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
早上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
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
留一點給你玩啦,都我做完了你就學不到東西了...
我的按鍵是按一下只動作一次,你之前做的按一下會動很多次,只是你看不出來而已,按著不放就會一直動作. 我每天早上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
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
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
|
|||
|
Re: 關於CLKOUT...
|
||||
---|---|---|---|---|
資深會員
|
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
|
|||
|