• 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...
#17
資深會員
資深會員


查看用戶資訊
Sorry 沒看到這一段 ;
我原始想法是, PWM duty cycle = 300 Hz 約 3Ms ;
300 Hz 是考量 視覺暫停, 其實PWM 準不準, 眼睛看不出lar !
debounce 嗎? 沒想到這個問題, (其實 跟本不知道).haha.
8 bit = 255 x 10us per bit = 2.55ms (可以啦)

PWM咩? 只是利用10us per step delay 而完成 mark .
那 space 呢? 取補數就完成啦 !
example mark =30 時 (30 x 10us =300us).
space = 255 -30 = 225 x 10us =2.25ms.
Mark = 254 後 就跳到 "H"
所以 Mark 變化是約 20% to 100% = H.
Space 約 0% to 80% .

bounce 嗎? 燈光反應後, 眼睛跟本看不出.
目前用10F200寫的程式, RUN的 還不錯 .
只可惜要用兩棵10F200 , 是笨了些; 笨鴨笨方法囉 !!haha.

發表於: 2007/7/18 12:37
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


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


查看用戶資訊

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


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


查看用戶資訊
file download是我把原始檔上傳到免費的網路空間,再連結給大家下載,你有原始檔就可以自己做個新的專案了吧,這有什麼神奇?!
FSR,你要看16F57的data sheet比較清楚啦~
基本上一組pwm和N組pwm是一樣的,你會不會有改到什麼東西造成第2組pwm沒動作??按鍵都有加個100K電阻pull hi吧.
我做的是2組可調式的PWM,我手頭上沒有東西可以試啦~你就自己稍微改一下下吧,改chk_keyin那一段就可以了,重要的是那個timer的程式架構要能看懂,對以後寫各種程式都很有幫助的,
因為我用的是3M博士燈,不閃光,不傷眼睛哦~

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


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


查看用戶資訊
"file download ", 可以直接建個新專案 ????
哈.. 哈... 笨鴨就是笨鴨, 又學到一招 ; 3Q lar !
板主要笨鴨進化 , 看來還有段路要走呦 . 哈.. 哈...

嗯... 程式用到 Timer0 & FSR ???
笨鴨還不會用的 ,咚, 咚 ; 尤其是 FSR... 不瞭???

燒個12F508 測試,發現一個問題 ,
PWM1 UP and DOWN 正常 , PWM2 無法控制 ,不知錯在那兒?

還有呀? 兩個PWM控制方式, 應該是如此 (Sorry 未說清楚) ---->

UP = 兩個PWM, 同時可以由最少20% PWM to 100% ( High ).
DOWN = 兩個PWM , 同時可以 由最100% (High) to 20% PWM.
UP_DN =一個PWM UP, 另一個PWM DOWN.
DN_UP =一個PWM DOWN 另一個PWM UP .
因為有兩支燈管 ,一隻是白色, 另一隻是藍色;
所以可以調色差, 台灣應該也有的買.
因為會閃爍, 對眼睛不好 ,所以才想試圖改改它...
也希望個位也可以受惠囉 ... haha.


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


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


查看用戶資訊
不用key in吧,我有把原始檔做在上面的file download沒看到嗎??可以直接建個新專案,編譯後就可以燒錄了,但我用的是57你要記得把device,include換回508..其它應該都相同吧..
說到腳位就神奇了,看了data sheet才發現,原來16F57,16F505,12F508居然是同一個系列的IC,都只有tmr0,和一些I/O可以用,只是rom,I/O數量有些不同而已.因為只有16F57的模擬模組,剛好手邊有57轉505的小板子就拿來用了,又剛好505的上半部的腳位就剛好是508的腳位,於是乎就照你的腳位定義了.

發表於: 2007/7/17 8:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


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


查看用戶資訊

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


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


查看用戶資訊
改好了,但有稍微做了一些調整..
file download

;************************************************
; PROJECT: 2組可控制的PWM輸出
; EDITOR : YIMING
; DATE :2007/07/16
;************************************************
#INCLUDE <P16F5X.INC>
;USER DEFINE RAM
OSCCAL EQU H'0005'
GPIO EQU H'0006'
TEMP EQU H'0008' ;COMM USE
WORK EQU H'0009' ;COMM USE
T100US EQU H'0010'
TGPIO EQU H'0011' ;TEMP GPIO
OGPIO EQU H'0012' ;OLD GPIO
PWM1_ON EQU H'0013'
PWM2_ON EQU H'0014'
PWM1_CNT EQU H'0015'
PWM2_CNT EQU H'0016'
;************************************************
#DEFINE PWM1_PERIOD .12 ;1200US
#DEFINE PWM2_PERIOD .12 ;1200US
#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
;************************************************
;GPIO=05H
SW_UP1 EQU .0
SW_DN1 EQU .1
SW_UP2 EQU .2
SW_DN2 EQU .3
PWM1 EQU .4
PWM2 EQU .5
;************************************************
ORG 0H
MOVWF OSCCAL
INIT:
MOVLW B'10000001' ;TIMER0 PRESCAL 1:4
OPTION
MOVLW B'00001111'
TRIS GPIO
MOVWF GPIO ;CLRF GPIO

MOVLW H'08'
MOVWF FSR
CLRF_RAM:
CLRWDT ;CLRF RAM 10H~1FH
CLRF INDF
INCF FSR,F
BTFSS FSR,5 ;20H
GOTO CLRF_RAM
CLRF FSR ;B0
DLY_250MS:
CLRWDT
DECFSZ WORK,F
GOTO DLY_250MS
DECFSZ TEMP,F
GOTO DLY_250MS
GOTO START
;************************************************
TIMER:
CLRWDT
MOVLW H'17'
SUBWF TMR0,W
BTFSS STATUS,C
GOTO TIMER

CLRF TMR0
INCF PWM1_CNT,F
INCF PWM2_CNT,F
DECFSZ T100US,F
GOTO MQ1
MOVLW .50
MOVWF T100US
;5MS DEBOUNCE I/O
DEBOUNCE_IO:
MOVLW B'00001111'
ANDWF GPIO,W
MOVWF WORK
XORWF TGPIO,W
BTFSS STATUS,Z
GOTO TRAB
MOVF WORK,W
MOVWF OGPIO
TRAB:
MOVF WORK,W
MOVWF TGPIO
GOTO CHK_KEYIN
MQ1:
RETLW .0
;************************************************
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
MOVF PWM1_ON,W
SUBWF PWM1_CNT,W
BTFSC STATUS,C
BCF GPIO,PWM1

MOVLW PWM1_PERIOD_MAX
SUBWF PWM1_CNT,W
BTFSS STATUS,C
GOTO $+3
CLRF PWM1_CNT
BSF GPIO,PWM1
;PWM2
MOVF PWM2_ON,W
SUBWF PWM2_CNT,W
BTFSC STATUS,C
BCF GPIO,PWM2

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:
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

MOVLW PWM1_PERIOD_MAX-PWM1_PERIOD_MIN
SUBWF PWM1_ON,W
BTFSS STATUS,C
GOTO CHK_DN1
DECF PWM1_ON,F
CHK_DN1:
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:
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:
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
;************************************************
END

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


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


查看用戶資訊
嗯,CALL RETLW 各佔2US,另一個好處是省一個RAM位址(count).
看完了,這樣子是2個pwm輪流送,這樣時的PWM時間不準,會有問題的
pwm1 on count3,off count4+count5+count6(其實count5,6時間無法控制)
pwm2 on count5,off count5+count3+count4(其實count3,4時間無法控制)
你直接抓gp0~gp4的值來用,借用pwm的時間來處理I/O dobounce感覺有點怪怪的,卻又覺得好像可以...
不合理的地方是pwm時間不固定,那debounce的時間就不固定應該會有一點點的彈跳現象,因為debounce的時間太短了.
覺得可以的是,雖然debounce時間太短,會有按一下等於按很多下的感覺,但一次10US的微調實在看不出效果,但如果按一下有幾百us的變化,卻又是剛剛好的.只是感覺不容易調到一個很準的值,但人眼對光沒那麼敏感,應該是OK.
其實我覺得你要的2個PWM用單一個508就能做到了,只是你的程式寫法有問題,我要想一下該怎麼寫..
那4個按鍵是你自己加的吧,++,--,+-,-+,我想是你自己做測試要用的吧...
我想你應該知道pwm的範圍和最小的微調量吧,是多少呢??
260US~2.39MS 對嗎??

............count3
.........+----------+
..........|.............|
--------+.............+----------------------------------------------
..............................count4
.....................................................count5
..................................................+----------+
...................................................|.............|
..........--------------------------------+..............+--------------
.......................................................................count6

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


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


查看用戶資訊
3Q lor, Dealy 程式簡潔多了 ,
有個地方不了.. 呼叫副程式4us , 是指 Call delay_10us 佔用2us ; retlw ,0 佔用 2us 對不對呢?

Ok ...上主菜啦 ... yami yami ...ㄜ依西內 , haha.
工作情況很滿意 , 兩個10F200 的PWM不會漂移, 請參考囉!
兩個程式很相同, 只差在Master 送出SYNC,
而Slave 測試 SYNC.

; PIC10F200 FOR TBT LAMP Master 07-12-2007
#include <p10F200.inc> ; processor specific variables
; Configure: Controls the reset pin, code protect, oscillator selection, WDT.
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF &_IntRC_OSC
;*****************************[Defines & Variable Assignments]****************
cblock 0x10
mark_v ; For PWM MARK register.
space_v ;For PWM SPACE register.
count ; For delay loop register.
count1 ; For delay loop register.
count2 ; For delay loop register.
count3 ; For PWM mark temporary register.
count4 ; For PWM space temporary register.
endc
;****************************[Reset Vector]*********************************
ORG 0x000 ; PIC goes here (Origin of code) after reset.
movwf OSCCAL ; Load the oscillator calibration factor.
movlw b'10000111' ; Disable wake on pion change and Enable pull-ups resister,max pre-scaler
OPTION ;
movlw b'00001010' ; Set GP1,3, to an input, GP0,2 to outputs.
TRIS GPIO ; GP1= UP,GP3 = DOWN, GP0=SYNC O/P, GP2 = PWM.
;-----[Main routine]---------------------------------------------------------
start
movlw d'25' ;Minimum power setting.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
loop
btfss GPIO,1 ;Check GP1 if goes to L.
goto up ;
btfss GPIO,3 ;Check GP3 if goes to L.
goto down ;
keep
movf mark_v,w ;
movwf count3 ;
movf space_v,w ;
movwf count4 ;
bsf GPIO,0 ;Sync CLK output.
goto $+1 ;2us delay,
goto $+1 ;2us delay,
bcf GPIO,0 ;
call pwm ;
goto loop ;
loop_1
bsf GPIO,0 ;SYNC on.
btfss GPIO,1 ;Check GP1 if goes to L.
goto up ;
btfss GPIO,3 ;Check GP3 if goes to L.
goto down ;
goto pw_100 ;
;***************************** Up Routine **********************************
up
movlw d'254' ;Maximum power refrence.
subwf mark_v,w ;Mark_v - 254 = ?
btfsc STATUS,C ;Check C Flag.
goto pw_100 ;If mark_v >= 254 then C = 1.
incf mark_v,f ;Increment Mark_v register.
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
;***************************** Down Routine *******************************
down
movlw d'25' ;Minimum power refrence.
subwf mark_v,w ;Mark_v - 25 = ?
btfss STATUS,C ;Check C flag.
goto pw_20 ;If mark_v < 25 then C = 0.
decf mark_v,f ;Decrement mark_v register.
comf mark_v,w ;The contents of mark_v register are complemented and store into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
;***************************** PWM Routine *******************************
pwm
bsf GPIO,2 ;Turn on PWM.
call delay_10us ;
decfsz count3,f ;Minimum Mark = 26 x 10us =260us.
goto pwm ;Maximum Mark = 239 x 10us = 2.39ms.
bcf GPIO,2 ;Turn PWM off.
pwm_1
call delay_10us ;
decfsz count4,f ;Minimuum Space = 10us x 16 = 160us.
goto pwm_1 ;Maximum Space = 10us x 229 = 2.29ms.
retlw 0 ;
;********************************** Power Rate ****************************
pw_100
movlw d'254' ;Maximum Power setting.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
bsf GPIO,2 ;
goto loop_1 ;
pw_20
movlw d'25' ;Minimum power refrence.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
; *****************************[Delay routine]*******************************************
delay_10us
movlw d'3' ;
movwf count ;
loop_3
decfsz count,f ;
goto loop_3 ;
retlw 0 ;
end

; PIC10F200 FOR TBT LAMP SLAVE 07-12-2007
#include <p10F200.inc> ; processor specific variables
; Configure: Controls the reset pin, code protect, oscillator selection, WDT.
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF &_IntRC_OSC
;*****************************[Defines & Variable Assignments]****************
cblock 0x10
mark_v ; For PWM MARK register.
space_v ;For PWM SPACE register.
count ; For delay loop register.
count1 ; For delay loop register.
count2 ; For delay loop register.
count3 ; For PWM mark temporary register.
count4 ; For PWM space temporary register.
endc
;****************************[Reset Vector]*********************************
ORG 0x000 ; PIC goes here (Origin of code) after reset.
movwf OSCCAL ; Load the oscillator calibration factor.
movlw b'10000111' ; Disable wake on pion change and Enable pull-ups resister,max pre-scaler
OPTION ;
movlw b'00001011' ; Set GP0,1,3, to an input, GP2 to outputs.
TRIS GPIO ; GP1= UP,GP3 = DOWN, GP0=SYNC I/P, GP2 = PWM.
;-----[Main routine]---------------------------------------------------------
start
movlw d'25' ;Minimum power setting.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
loop
btfss GPIO,1 ;Check GP1 if goes to L.
goto up ;
btfss GPIO,3 ;Check GP3 if goes to L.
goto down ;
keep
movf mark_v,w ;
movwf count3 ;
movf space_v,w ;
movwf count4 ;
btfss GPIO,0 ;Check Sync CLK.
goto $-1 ;
call pwm ;
goto loop ;
loop_1
btfss GPIO,1 ;Check GP1 if goes to L.
goto up ;
btfss GPIO,3 ;Check GP3 if goes to L.
goto down ;
goto pw_100 ;
;***************************** Up Routine **********************************
up
movlw d'254' ;Maximum power refrence.
subwf mark_v,w ;Mark_v - 254 = ?
btfsc STATUS,C ;Check C Flag.
goto pw_100 ;If mark_v >= 254 then C = 1.
incf mark_v,f ;Increment Mark_v register.
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
;***************************** Down Routine *******************************
down
movlw d'25' ;Minimum power refrence.
subwf mark_v,w ;Mark_v - 25 = ?
btfss STATUS,C ;Check C flag.
goto pw_20 ;If mark_v < 25 then C = 0.
decf mark_v,f ;Decrement mark_v register.
comf mark_v,w ;The contents of mark_v register are complemented and store into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
;***************************** PWM Routine *******************************
pwm
bsf GPIO,2 ;Turn on PWM.
call delay_10us ;
goto $+1 ;2us
decfsz count3,f ;Minimum Mark = 26 x 10us =260us.
goto pwm ;Maximum Mark = 239 x 10us = 2.39ms.
bcf GPIO,2 ;Turn PWM off.
pwm_1
call delay_10us ;
goto $+1 ;2us
decfsz count4,f ;Minimuum Space = 10us x 16 = 160us.
goto pwm_1 ;Maximum Space = 10us x 229 = 2.29ms.
retlw 0 ;
;********************************** Power Rate ****************************
pw_100
movlw d'254' ;Maximum Power setting.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
bsf GPIO,2 ;
goto loop_1 ;
pw_20
movlw d'25' ;Minimum power refrence.
movwf mark_v ;
comf mark_v,w ;The contents of mark_v register are complemented and stored into w.
movwf space_v ;Stored w into space_v register for PWM reference.
goto keep ;
; *****************************[Delay routine]*******************************************
delay_10us
movlw d'2' ;
movwf count ;
loop_3
decfsz count,f ;
goto loop_3 ;
retlw 0 ;
end


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


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


查看用戶資訊
嗯,蠻多東西可以玩的,一樣一樣慢慢來吧...這個只是要產生PWM所以有沒有電路圖沒什麼差的,主程式我還要花點時間看,但delay_10us有另一種寫法給你參考.我覺得看起來比較簡潔.
delay_10us:
goto $+1 ;2us
goto $+1 ;2us
goto $+1 ;2us
retlw .0 ;呼叫副程式4us
電路圖可以申請個免費網路空間來儲放.我都用hinet空間.

發表於: 2007/7/15 22:06
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... ]

教育訓練中心

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