続8 8ピンPICでUSB PIC16F505_USBIO
前回はベースラインのPIC16F57でUSBIOの検討を行いましたが、出力1チャンネルというお粗末な仕様でした。
最終的にPIC16F57で多チャンネルUSBIOを実現したいのですが(私にとって)課題も多いということは前回・前々回と、記述したとうりです。
そこで今回は課題解決の糸口として入力4チャンネル、出力4チャンネルの仕様に挑戦してみました。
使用したPICはPIC16F505とPIC16F506(共に14PIN)です。

<回路図>

<回路上の留意点>
PIC16F505/506は設計が旧いためかPIC16F57よりも更に電圧印加の条件がきびしいことがわかりました。
PICにはUSBの5V(若しくはそれ以上)を印加する必要があります。印加電圧が低いと24MHzで正常に作動しません。
<PIC16F505/506の制約とプログラム作成の留意点>
?割り込みが存在しないのはPIC16F57と一緒ですが、問題は"入力ポートの変化をどのタイミングで読みに行くか"です。
16FUSBのオリジナルのプログラムではポートのセットアップ後に無限ループを形成し、無限ループ内部で入力ポートの変化を検出しています。当然割り込みもこの無限ループ中で発生しますので、割り込みが使用できない条件では、入力ポートの変化を検出する際にホストからのSYNCコードを読み飛ばすかも知れません。
入力ポートの変化を検出するプロセスを無限ループ中に置かずに、別な場所に置けないか検討したところ良い場所を見つけました。
興味のある方はソースファイルでご確認ください。安定して作動するようなので懸案がひとつ解決しました。
?フラッシュ領域の制約
PIC16F505/506のフラッシュ領域はPIC16F57の半分の1kワードしかありません。
このサイズに収まるようストリングデスクリプタを割愛しました。サブルーチンの配置も変更しています。
また当初はビットごとに入出力の方向も選択できるようにしたかったのですが、フラッシュの余裕が無くあきらめました。
2014.11.08 追記 続10でビットごとに入出力の方向も選択できるようにしました。
?ポートの割り当て
PIC16F505/506ではPORTBとPORTCがそれぞれ6ビットずつ割り当てられています。
24MHzのクリスタルオシレーターを使用しますので、OSC1に割り当てられているRB5は使用できません。
USBの通信に必要な信号線はD+、D-、SE0の3本ですが、このうちD+はT0CKIと兼用の端子を使用しますのでRC5が使用できません。SE0の端子はD+、D-信号のモニタなので入力専用のRB3を使用します。
結果としてI/Oとして使用可能なポートを以下のように定めました。
出力ビット0 -->RC0
出力ビット1 -->RC1
出力ビット2 -->RC2
出力ビット3 -->RC3
入力ビット0 -->RB0
入力ビット1 -->RB1
入力ビット2 -->RB2
入力ビット3 -->RB4
<ホストプログラム>
16FUSBのホストプログラムを入力4チャンネル、出力4チャンネルの仕様に改造しました。バイナリとソースプログラムを同包しています。
ダウンロード先
http://hp.vector.co.jp/authors/VA058115/
https://drive.google.com/file/d/1DfknE6ZDWnthq43M5Ar9nRMfrVrF7HeY/view?usp=drivesdk
最終的にPIC16F57で多チャンネルUSBIOを実現したいのですが(私にとって)課題も多いということは前回・前々回と、記述したとうりです。
そこで今回は課題解決の糸口として入力4チャンネル、出力4チャンネルの仕様に挑戦してみました。
使用したPICはPIC16F505とPIC16F506(共に14PIN)です。

<回路図>

<回路上の留意点>
PIC16F
PICにはUSBの5V(若しくはそれ以上)を印加する必要があります。印加電圧が低いと24MHzで正常に作動しません。
<PIC16F505/506の制約とプログラム作成の留意点>
?割り込みが存在しないのはPIC16F57と一緒ですが、問題は"入力ポートの変化をどのタイミングで読みに行くか"です。
16FUSBのオリジナルのプログラムではポートのセットアップ後に無限ループを形成し、無限ループ内部で入力ポートの変化を検出しています。当然割り込みもこの無限ループ中で発生しますので、割り込みが使用できない条件では、入力ポートの変化を検出する際にホストからのSYNCコードを読み飛ばすかも知れません。
入力ポートの変化を検出するプロセスを無限ループ中に置かずに、別な場所に置けないか検討したところ良い場所を見つけました。
興味のある方はソースファイルでご確認ください。安定して作動するようなので懸案がひとつ解決しました。
?フラッシュ領域の制約
PIC16F505/506のフラッシュ領域はPIC16F57の半分の1kワードしかありません。
このサイズに収まるようストリングデスクリプタを割愛しました。サブルーチンの配置も変更しています。
また当初はビットごとに入出力の方向も選択できるようにしたかったのですが、フラッシュの余裕が無くあきらめました。
2014.11.08 追記 続10でビットごとに入出力の方向も選択できるようにしました。
?ポートの割り当て
PIC16F505/506ではPORTBとPORTCがそれぞれ6ビットずつ割り当てられています。
24MHzのクリスタルオシレーターを使用しますので、OSC1に割り当てられているRB5は使用できません。
USBの通信に必要な信号線はD+、D-、SE0の3本ですが、このうちD+はT0CKIと兼用の端子を使用しますのでRC5が使用できません。SE0の端子はD+、D-信号のモニタなので入力専用のRB3を使用します。
結果としてI/Oとして使用可能なポートを以下のように定めました。
出力ビット0 -->RC0
出力ビット1 -->RC1
出力ビット2 -->RC2
出力ビット3 -->RC3
入力ビット0 -->RB0
入力ビット1 -->RB1
入力ビット2 -->RB2
入力ビット3 -->RB4
<ホストプログラム>
16FUSBのホストプログラムを入力4チャンネル、出力4チャンネルの仕様に改造しました。バイナリとソースプログラムを同包しています。
ダウンロード先
Bequest333のページ(別館)
https://drive.google.com/file/d/1DfknE6ZDWnthq43M5Ar9nRMfrVrF7HeY/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