続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
久しぶりの更新になります。
以前、12MHzの内臓クロックで作動するLPC810のHID-シリアルアダプターをご紹介しましたが、LPC810の単価が300円に高騰してしまいました。!!!
LPC810は高速動作が可能な一方でコードが大きくなる欠点があり、またADCが非搭載なことから300円では継続して購入する気になりません。
その一方で前から試してみたかったPIC16F18313がパーツ屋さんで購入できるようになり、早速購入してHID-シリアルアダプターを製作しましたのでご紹介します。
(PIC16F18XXXデバイスは12MHz系の内臓クロックをサポートしているため、LPC810のように単品でUSBデバイスが製作可能です。)
○PIC12F1822のHID-シリアルアダプター(左)との体格比較

○開発の方針
1.ソフトウエアは従来どうりDMLさんのものを使用。
2.USBデバイスとホストとの転送量を2バイトにし、ボーレートの変更とRTS出力をサポートする。
3.いきなりPIC16F18313での開発は無謀なので、以下の順でPIC16F18313に対応させる。
3-1)PIC12F1822のファームウエア(続4 8ピンPICでUSB 16FUSBの改良版で紹介)をベースにソフトウエアを見直す。
続4 8ピンPICでUSB 16FUSBの改良版のページではオリジナルから7項目の変更を行いました。
今回更に以下の項目について変更を行いました。
(拡張ミッドレンジの命令に特化し、PIC16F18313への移植を容易にするため。)
⑧割り込み時のオートコンテキスト機能を使用して未使用な変数(RAM)を削減。
Rec_W, Rec_STATUS, Rec_FSR, Rec_PCLATH など。
⑨ジャンプテーブルの処理を ADD PCL,W 命令から BRW 命令に変更。
BRW 命令は256ワードの境界を意識せずに使用できるためプログラムの自由度が向上する。
⑩タイマー0の使用を止める。
PIC12F1822とPIC16F18313ではタイマー0の仕様が異なるため、両者で共通仕様のタイマー2を使用。
⑪多重割り込みの廃止:タイマー0の割り込みを廃止し、INT割り込みのみ使用する。
INTCONのGIEビットを常にセットする仕様とし、割り込み許可・禁止に関わるコードを削減。
3-2)PIC12F1822のファームウエアを2バイト転送の仕様に変更し、ホストからボーレートの変更が行えるようにする。
○レポートデスクリプタのデータ転送量を2バイトに変更。
○ボーレート変更の処理を追加。(ホストからSPBRGH/Lのデータを転送する仕様)

3-3)ファームウエアをPIC16F18313へ移植。
○24MHz外部クロックから24MHz内臓クロックへの変更。
○PPSを使用してピン割付けを変更。 INT(D+) --> RA5, TX --> RA0
○RTS出力機能のサポート。

○PIC12F1822とPIC16F18313の違い(参考)

○回路図

○配線図

○ループバックホスト

ダウンロードはこちらから (PIC12F1822のソフトウエアも同包しています。)
https://drive.google.com/file/d/1TPFEqZNBM4mhHzFKy2lrcmIn3uvMjzXl/view?usp=drivesdk
以前、12MHzの内臓クロックで作動するLPC810のHID-シリアルアダプターをご紹介しましたが、LPC810の単価が300円に高騰してしまいました。!!!
LPC810は高速動作が可能な一方でコードが大きくなる欠点があり、またADCが非搭載なことから300円では継続して購入する気になりません。
その一方で前から試してみたかったPIC16F18313がパーツ屋さんで購入できるようになり、早速購入してHID-シリアルアダプターを製作しましたのでご紹介します。
(PIC16F18XXXデバイスは12MHz系の内臓クロックをサポートしているため、LPC810のように単品でUSBデバイスが製作可能です。)
○PIC12F1822のHID-シリアルアダプター(左)との体格比較

○開発の方針
1.ソフトウエアは従来どうりDMLさんのものを使用。
2.USBデバイスとホストとの転送量を2バイトにし、ボーレートの変更とRTS出力をサポートする。
3.いきなりPIC16F18313での開発は無謀なので、以下の順でPIC16F18313に対応させる。
3-1)PIC12F1822のファームウエア(続4 8ピンPICでUSB 16FUSBの改良版で紹介)をベースにソフトウエアを見直す。
続4 8ピンPICでUSB 16FUSBの改良版のページではオリジナルから7項目の変更を行いました。
今回更に以下の項目について変更を行いました。
(拡張ミッドレンジの命令に特化し、PIC16F18313への移植を容易にするため。)
⑧割り込み時のオートコンテキスト機能を使用して未使用な変数(RAM)を削減。
Rec_W, Rec_STATUS, Rec_FSR, Rec_PCLATH など。
⑨ジャンプテーブルの処理を ADD PCL,W 命令から BRW 命令に変更。
BRW 命令は256ワードの境界を意識せずに使用できるためプログラムの自由度が向上する。
⑩タイマー0の使用を止める。
PIC12F1822とPIC16F18313ではタイマー0の仕様が異なるため、両者で共通仕様のタイマー2を使用。
⑪多重割り込みの廃止:タイマー0の割り込みを廃止し、INT割り込みのみ使用する。
INTCONのGIEビットを常にセットする仕様とし、割り込み許可・禁止に関わるコードを削減。
3-2)PIC12F1822のファームウエアを2バイト転送の仕様に変更し、ホストからボーレートの変更が行えるようにする。
○レポートデスクリプタのデータ転送量を2バイトに変更。
○ボーレート変更の処理を追加。(ホストからSPBRGH/Lのデータを転送する仕様)

3-3)ファームウエアをPIC16F18313へ移植。
○24MHz外部クロックから24MHz内臓クロックへの変更。
○PPSを使用してピン割付けを変更。 INT(D+) --> RA5, TX --> RA0
○RTS出力機能のサポート。

○PIC12F1822とPIC16F18313の違い(参考)

○回路図

○配線図

○ループバックホスト

ダウンロードはこちらから (PIC12F1822のソフトウエアも同包しています。)
https://drive.google.com/file/d/1TPFEqZNBM4mhHzFKy2lrcmIn3uvMjzXl/view?usp=drivesdk
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT