ホーム

08/10/17
最速クロック48MHzの USB付の PIC18F2550  でも作ってみました。

回路図
USB,ICSPコネクター,RA0の回路は使っていないので省略してください。

CNCでプリント基板作成

ソフト作成
クロックは特に意味ないですが、手持ちの12MHzを使いました。
7SEG LED はアノードコモンです。
    LIST        P=PIC18F2550
    #INCLUDE    "P18F2550.INC"
  CONFIG  FOSC = ECIO_EC   ;EXT CLOCK, PORT FUNCTION ON RA6, EC USED BY USB
  CONFIG  FCMEN = OFF      ;FAIL-SAFE CLOCK MONITOR DISABLED
  CONFIG  PWRT = ON        ;PWRT ENABLED
  CONFIG  BOR = OFF        ;BROWN-OUT RESET DISABLED IN HARDWARE AND SOFTWARE
  CONFIG  WDT = OFF        ;HW DISABLED - SW CONTROLLED
  CONFIG  MCLRE = OFF      ;RE3 INPUT PIN ENABLED; MCLR DISABLED
  CONFIG  LPT1OSC = OFF    ;TIMER1 CONFIGURED FOR HIGHER POWER OPERATION
  CONFIG  PBADEN = OFF     ;PORTB<4:0> ARE CONFIGURED AS DIGITAL I/O ON RESET
  CONFIG  LVP = OFF        ;SINGLE-SUPPLY ICSP DISABLED
  CONFIG  DEBUG = OFF     
    ERRORLEVEL  -302    ; SUPPRESS MESSAGE 302 FROM LIST FILE
DEC0    EQU    20H    ; 10進格納場所(10バイト)
DEC1    EQU    21H    ;100MHZ  ;    DEC0が最上位桁でDEC[9]が最下位桁です。
DEC2    EQU    22H    ;10MHZ
DEC3    EQU    23H    ;1MHZ
DEC4    EQU    24H    ;100KHZ
DEC5    EQU    25H    ;10KHZ
DEC6    EQU    26H    ;1KHZ
DEC7    EQU    27H    ;100HZ
DEC8    EQU    28H    ;10HZ
DEC9    EQU    29H    ;1HZ
OVERF    EQU    2AH         
CFB_M    EQU    2EH    ; 一時余り格納場所(SUBで使用)
CFB0    EQU    31H    ;プリスケーラーの値
CFB1    EQU    32H    ;TMR0Lの値
CFB2    EQU    33H    ;TMROHの値
CFB3    EQU    34H    ;TMROのオーバフローによりINCした値
WAIT_CN    EQU    36H
CN    EQU    37H
TEMP    EQU    38H

    ORG    0
    GOTO    INIT
    ORG    8H    ;高割込
    GOTO      INIT
    ORG    18H    ;低割込
    GOTO      INIT

INIT   
    MOVLW    B'00001111'   
    MOVWF    ADCON1        ;ALL DGITAL
    MOVLW    B'11111111'
    MOVWF    PORTB        ;ALL HI
    MOVLW    B'10000000'
    MOVWF    TRISB        ;PORTBをOUTに
    MOVLW    B'11111111'
    MOVWF    PORTC        ;ALL HI
    MOVLW    B'00000000'
    MOVWF    TRISC        ;PORTCをOUTに
    MOVLW    B'10100111'    ;ENABLE,16BIT,PSON,1/256
    MOVWF    T0CON
    CLRF    TMR0L        ;TMR0をクリア
    CLRF    TMR0H        ;TMR0をクリア
MAIN   
     CALL    C_MAIN        ;COUNTER MEIN
    CALL    X4        ;4倍する
    CALL    DCMAIN        ;16進->10進変換
    CLRF    CFB0        ;変数クリヤ
    CLRF    CFB1
    CLRF    CFB2
    CLRF    CFB3           
    GOTO    MAIN
C_MAIN   
    MOVLW    B'00011000'
    MOVWF    TRISA        ; PORTA3 をINPUT MODE=HIGH IMPEDANCE/TMR0の開始
    CLRF    TMR0H        ;プリセレクター自動クリヤ
    CLRF    TMR0L        ;TMR0をクリア 250MSECカウントの始点
    MOVLW     D'117'        ;時間調整
    MOVWF    CN
CMAIN0    CALL     DISPLAY       
    DECFSZ    CN,F       
    GOTO     CMAIN0       
    MOVLW    D'8'        ;時間調整
    MOVWF     WAIT_CN        ;
    DECFSZ    WAIT_CN,F
    BRA    $-1
    NOP
CMAIN1    MOVLW    B'00010000'
    MOVWF    TRISA        ;PORTA3をOUT TMR0の停止 250MSECカウントの終点
    MOVFF    TMR0L,CFB1    ;TMR0のDATAをCFB1に
    MOVFF    TMR0H,CFB2
TOGGLE    BSF    PORTA,3        ;PORTA4のトグル
    BCF    PORTA,3
    DECF    CFB0,F
    MOVF    TMR0L,W
    SUBWF    CFB1,W        ;CFB1-TMR0=0であれば Z=1
    BTFSC    STATUS,Z    ;TMR0Lが+1になるまでトルグ
    GOTO    TOGGLE
    RETURN            ;CFB0への PRESCALER値の取込完
DISPLAY                           
    MOVF    DEC0,W         ;100MHZ桁   
    CALL    TABLE    ;
    MOVWF    PORTB               
    BCF    PORTC,7               
    CALL    WAIT           
    BSF    PORTC,7               
    MOVF    DEC1,W         ;10MHZ桁   
    CALL    TABLE    ;
    MOVWF    PORTB               
    BCF    PORTC,6               
    CALL    WAIT           
    BSF    PORTC,6               
    MOVF    DEC2,W         ;1MHZ桁   
    CALL    TABLE    ;
    MOVWF    PORTB               
    BCF    PORTC,2               
    CALL    WAIT           
    BSF    PORTC,2               
    MOVF    DEC3,W         ;100KHZ桁   
    CALL    TABLE    ;
    MOVWF    PORTB               
    BCF    PORTC,1               
    CALL    WAIT           
    BSF    PORTC,1               
    MOVF    DEC4,W         ;10KHZ桁
    CALL    TABLE    ;
    MOVWF    PORTB
    BCF    PORTC,0
    CALL    WAIT           
    BSF    PORTC,0               
    MOVF    DEC5,W         ;1KHZ桁
    CALL    TABLE    ;
    MOVWF    PORTB
    BCF    PORTA,5
    CALL    WAIT           
    BSF    PORTA,5               
    MOVF    DEC6,W         ;100HZ桁
    CALL    TABLE    ;
    MOVWF    PORTB
    BCF    PORTA,2
    CALL    WAIT           
    BSF    PORTA,2               
    MOVF    DEC7,W        ;10HZ桁   
    CALL    TABLE    ;
    MOVWF    PORTB       
    BCF    PORTA,1
    CALL    WAIT           
    BSF    PORTA,1               
    MOVLW    D'27'        ;時間調整
    MOVWF     WAIT_CN        ;
    DECFSZ    WAIT_CN,F
    BRA    $-1
    NOP
    RETURN   
WAIT                ;TMR0のオーバフロー(TMR0IF)のCHK
    MOVLW    D'255'        ;時間調整
    MOVWF     WAIT_CN        ;
    DECFSZ    WAIT_CN,F
    BRA    $-1
    MOVFF    INTCON,OVERF    ;チェックした瞬間を保存
    BTFSC    OVERF,2        ;TMR0IF
    INCF    CFB3,F        ;
    BTFSC    OVERF,2        ;
    BCF    INTCON,TMR0IF    ; フラグクリヤ
    RETURN            ;
;-------------------------------------------------------------
TABLE
    ANDLW   B'00001111'    ;下位4ビット有効
    MOVWF    TEMP        ;SAVE
    MOVF    PCL,W        ;PCLATU,PCLATHにPCコピー
    RLNCF    TEMP,W        ;X2
    ADDWF    PCL,F          ;ADD TO PC REG
;                 -GFEDCBA      7SEGMENT のA〜F  1で発光
    DT    B'00111111'    ;LETTER 0
    DT    B'00000110'    ;LETTER 1       
    DT    B'01011011'    ;LETTER 2      A   
    DT    B'01001111'    ;LETTER 3     ____
    DT    B'01100110'    ;LETTER 4     F    |    | B
    DT    B'01101101'    ;LETTER 5    |_G__|
    DT    B'01111101'    ;LETTER 6     E    |    | C
    DT    B'00000111'    ;LETTER 7    |____|   
    DT    B'01111111'    ;LETTER 8      D
    DT    B'01101111'    ;LETTER 9
    DT    B'00000000'
    DT    B'00000000'
    DT    B'00000000'
    DT    B'00000000'   
    DT    B'00000000'
    DT    B'00000000'   
X4    BCF    STATUS,C    ;*2 250MS 計測値を4倍する32BIT
    RLCF    CFB0,F
    RLCF    CFB1,F
    RLCF    CFB2,F
    RLCF    CFB3,F
    BCF    STATUS,C    ;*2
    RLCF    CFB0,F
    RLCF    CFB1,F
    RLCF    CFB2,F
    RLCF    CFB3,F
    RETURN
;---------------------------------------------------------
;32BITバイナリ→10進変換 変換後CFBは破壊
;CFBに32BITデータを置く。(CFB3:CFB2:CFB1:CFB0)
;DECに答えが格納(DEC0:DEC1:...:DEC8:DEC[9])
DCMAIN    MOVLW    H'29'
    MOVWF    FSR0L        ; 格納場所初期値
    CALL    DEVIDE        ; 最下位変換
    CALL    DEVIDE        ;10回繰り返し
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE
    CALL    DEVIDE        ; 最上位変換
    RETURN
DEVIDE    MOVLW    D'32'        ;÷10サブルーチン
    MOVWF    CN        ; 32ビットくり返し
    CLRF    CFB_M
DEVIDE0    BCF    STATUS,C
    RLCF    CFB0,F
    RLCF    CFB1,F
    RLCF    CFB2,F
    RLCF    CFB3,F
    RLCF    CFB_M,F
    MOVLW    B'11110110'
    ADDWF    CFB_M,0
    BTFSC    STATUS,C
    MOVWF    CFB_M
    BTFSC    STATUS,C
    INCF    CFB0,F
    DECFSZ    CN,F
    GOTO    DEVIDE0
    DECF    FSR0L,F
    MOVFF    CFB_M,INDF0    ; 余り
    RETURN
;   
    END

従来とPIC18Fシリーズは結構変わっています。     
CONFIGの設定方法
DATAテーブルの使用方法(特にPCが2ステップです)
MOVFF 命令が追加されて使いやすい
バンク切替が不要
TMR0が16ビットに

31.75486MHz測定中
作っては見ましたが、最高30MHzしか測定できません。
ソフト、ハード がいけないのか不明 これではPIC18F を使う意味がありません。何か勘違いか!!
どなたか御指導ください。


ところで私の住んでいる所で産業フェアーが開催されました。

オリジナルマインドの 新型CNC 板金で作ってコストダウンした 機種です。


CNCにボールねじは高くて手が出ませんが これは良さそうです。
「多条ねじ」 ナットとのセットでいくら位するのか?


このステッピングモーターは軸の中にねじが切ってあり非常に簡単にcncが出来ます。


見にくいので違うセットをもう一枚


シンクロも最近のものはカラフルで格好いい




ついでに基準クロックの確度を測定してみました。
16MHzのものは      15.999.915Hz 誤差 85Hz
16MHzの次のものは16.000.078Hz  誤差 78Hz
12MHzのものは      11.999.829Hz  誤差171Hz  でした。

結構精度が良いので基準になるカウンターを持っていない方は無調整で7桁位までは使えそうです。

秋月の10個100円の7SEG LED GL9A040G の接続図です。

各7SEGに順電流20mA Peakで100mA 流します。4.25mcd ですので暗いです。

秋月の4個100円の2桁 7SEG LED SL-9263-22 の接続図です。