楽天市場
[無料でホームページを作成] [通報・削除依頼]

極小ブートローダー PIC10F322 其の4

前々回のUSB-シリアル変換器をPIC12F1822で実装しました。
PIC18F14K50の変換器(CDC)と異なり、こちらはHIDのインターフェースです。
シリアル受信機能は搭載可能ですが、非搭載としブートローダー用に特化しました。

img_20150214-145954.jpg
img_20150214-150023.jpg

ブートローダーホストとしての動作を確認するため、ホストプログラムを作成しました。

img_20150214-150102.jpg


1.HID-シリアル変換器
HID-シリアル変換にPIC12F1822を使用する試みは以前より行っていましたが、極小ブートローダーホストとして動作させるにはTX出力と入力ポートが必要です。
PIC12F1822を使用する場合、外部クロックを74HC04で生成することでTX出力と入力ポートを得ることができます。
img_20150214-150454.png
img_20150214-150538.jpg
PIC12F1822のピン割付け (30MHzで作動させる場合)
RA0:シリアル TX出力
RA1:シリアル RX入力 (未使用)
RA2:USB D+
RA3:入力ポート (書き込みエラー検出用)
RA4:USB D−
RA5:外部クロック入力

PIC12F1822のピン割付け (24MHzで作動させる場合)
RA0:シリアル TX出力
RA1:入力ポート (書き込みエラー検出用)
RA2:USB D+
RA3:SE0 (D+とD−のワイヤードオア出力)
RA4:USB D−
RA5:外部クロック入力

小型化などで74HC04を使用したくない場合にはPIC16F1823を使用します。
PIC16F1823ならば水晶を直結することができます。

PIC16F1823のピン割付け (30MHzで作動させる場合)
RA0:
RA1:USB D−
RA2:USB D+
RA3:入力ポート (書き込みエラー検出用)
RA4:水晶接続
RA5:水晶接続
RC0:
RC1:
RC2:
RC3:
RC4:シリアル TX出力
RC5:シリアル RX入力 (未使用)

PIC12F1822のピン割付け (24MHzで作動させる場合)
RA0:入力ポート (書き込みエラー検出用)
RA1:USB D−
RA2:USB D+
RA3:SE0 (D+とD−のワイヤードオア出力)
RA4:水晶接続
RA5:水晶接続
RC0:
RC1:
RC2:
RC3:
RC4:シリアル TX出力
RC5:シリアル RX入力 (未使用)

2.HID-シリアル変換器の回路規模
○PIC16F1822+74HC04の場合
30MHzで作動させる場合 7.5/30MHz水晶、抵抗5本、コンデンサ3個、ダイオード1個。
24MHzで作動させる場合 6/24MHz水晶、抵抗6本、コンデンサ3個、ダイオード3個。
○PIC16F1823の場合
30MHzで作動させる場合 7.5/30MHz水晶、抵抗3本、コンデンサ3個、ダイオード1個。
24MHzで作動させる場合 6/24MHz水晶、抵抗4本、コンデンサ3個、ダイオード3個。


3.HID-シリアル変換器のファームウエア
試作品はPIC16F1822+74HC04の回路構成とし、30MHzの水晶を接続しました。
30MHz化への変更ポイントは"続続8ピンPICでUSB −16FUSBを30MHzで動かす−"に記載していますので、
ここでは繰り返しません。

入力ポートの状態変化をホストに伝達するためMainルーチンの記述を以下のように変更します。
(この部分をシリアル受信用に書き換えれば、汎用HID-シリアルアダプターとして使用することができます。)

LAST_KEY_STATE    EQU    0x5F        ; 入力ポートの変化を記憶する変数
RI                          EQU    3             ; 入力ポート RA3

Main                                                ; Custom code goes here
        movlw   (1<<RI)
        andwf   GPIO,W
        xorwf    LAST_KEY_STATE,W
        btfsc     STATUS,Z                     ; RI state has changed?
        return                                      ; No

        movlw   (1<<RI)
        andwf   GPIO,W
        movwf   LAST_KEY_STATE

        rlf         LAST_KEY_STATE,W      ;bit3 -> bit4
        swapf    WREG,W                      ;bit4 -> bit0
        andlw    0x01

        MOVWF  Recibido_1
        MOVLW  0x01
        MOVWF  Var_3
        MOVLW  PID
        MOVWF  PosicionPID
        MOVFW  PosicionPID
        MOVWF  FSR
        MOVLW  0x4B            ;'01001011' DATA1
        BTFSS    Data1
        MOVLW  0xC3            ;'11000011' DATA0
        MOVWF  INDF
        BCF        Data1
        BTFSS    INDF, 3
        BSF       Data1
        CALL      CalcularCRC16
        CALL      InsertarCRC16
        INCF      Var_3, F
        CALL      InsertarBitStuffing
        MOVLW  0x08
        ADDWF   Var_2, F
        BSF        InterruptIN
        RETLW   0x00


4.PIC10F322との接続
前々回と一緒です。
img_20150214-151022.jpg

5.PIC10F322ブートローダーファームウエア
前回の66ワードの仕様です。


6.ホストプログラム
16FUSB_HID_DioSampleAPPのソースプログラムを改造して作成しました。
img_20150214-151113.jpg
使用方法
?上段のBrowseボタンを押してHexファイルを選択するか、上段のテキストボックスに入力して転送するHEXファイルを確定します。
?PICの電源をONにし、速やかに下段のFile Transferボタンを押すと転送開始。
?転送に成功すると下段のテキストボックスに"Done"と表示されます。書き込みエラーが発生した場合"Error"と表示されます。


上記ソフト一式は以下からダウンロードできます。

ダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/


https://drive.google.com/file/d/1ELY44uzBgt2AtfDUe-elHUfvp-XUGJK_/view?usp=drivesdk