注意:以下のファームウェアは内部クロックを使用した場合のものです。外部クロックを使用する場合は、まず、Easy Setupタブを開いて①Oscillator Selecctと②External Clockを下図のように設定します。
次に、Registersタブを開いてACTENをdisabledにします。
EAGLEというソフトウェア(試用版)で作成した回路図と実際の回路の写真を示します。回路は、ユニバーサル基板(サンハヤト株式会社 ICB-86)上で組んでいます。22pFのコンデンサーはチップ型のものを用い、写真のように基板裏面に半田づけをしています。そして、水晶発振子(Xtal)には16MHzのものを用いています。
注意1:内部クロックを使用する場合(Active Clock Tuning機能を使用する場合には内部クロックを使用します)、2つの22pFのコンデンサーと水晶発振子は必要ありません。
注意2:12NHzの水晶発振子を用いることもできますが、その時にはSystem Modulesを適当に設定してください。
作成した回路がきちんと働いているかどうかを確かめます。ファームウェアblinck1455int.X.zipをPICに書き込み、実行します。
1.ピンヘッダJP2には何も繋がない状態にします。また、ピンヘッダJP1にはファームウェア書き込み器(たとえばICD3)を接続します。
2.blinck1455int.X.zipを解凍して出てくるblinck1455int.XフォルダーをMPLABXProjectsフォルダー(私の場合はC:\Users\yts\MPLABXProjects)の中に入れます。
3.MPLAB X を立ち上げ、blinck1455int.Xフォルダーの中にあるプロジェクトを読み込みます(MPLAB XのメニューからFile->Open Project...を選択)。
4.Projectsウィンドウにおいて、blinck1455intと書かれた箇所をマウスで右クリックして、サブメニューを出します。そのサブメニューのSet as Main Projectという項目がありますので、それを選択します。blinck1455intが太文字になったことを確認します。
5.ファームウェアを走らせるために、MPLAB X のツールバーからRun Main Projectアイコン()をマウスでクリックします。すると、次のように、書き込み器(プログラマー)として何を使うかを尋ねられますので、IDC3などを選択します。OKボタンを押すと、ビルド(コンパイルとリンク)を行ったのち、ファームウェアをPICに書き込み、実行するまで自動で行ってくれます。
6.ファームウェアを走らせると、約1秒周期のパルス( 5V, 0V, 5V, ...) がPICの7番ピン(RC3ピン)から出力されますので、テスターで、このピンの電圧を測定してください。もし、パルスが出ていなければ回路に問題がありますので、回路を再チェックしてください。 main.cの中身をみれば、何をしているのかが簡単に分かると思います。
マウスを模倣(emulation)します。具体的にはマウスカーソルがディスプレイ上で四角を描きます。ファームウェアはhid_mouse1455int.X.zipです。
1.PICの8番ピンを抵抗10kΩでプルアップします(回路図中、8番ピンと5Vラインの間に10kΩを入れる)。このPICのCポートは”内部プルアップ”に対応していませんので、外部プルアップが必要になります。
2.PIC基板とPCをUSBケーブルで接続します。
3.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
4.ディスプレイで、マウスカーソルが四角を描きます。
5.PICの8番ピンをGNDに接触させるたびに、マウスカーソルが止まったり、動いたりします。
キーボードを模倣(emulation)します。ファームウェアはhid_keyboard1455int.X.zipです。
1.PICの8番ピンを抵抗10kΩでプルアップします(回路図中、8番ピンと5Vラインの間に10kΩを入れる)。このPICのCポートは”内部プルアップ”に対応していませんので、外部プルアップが必要になります。
2.PIC基板とPCをUSBケーブルで接続します。
3.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
4.適当なエディッターソフトウェア(秀丸、ノートブック、ワードなど)を起動させます。
5.PICの8番ピンをGNDに接触させるたびに、a、b、c・・・・・の順にタイプされて行きます。
6.このプロジェクトでは、キーボードについている3つのLED(Num Lock、Caps Lock、Scroll Lock)のうち、Caps Lockに対応しています。パーソナル・コンピュータに接続されているキーボードで、Caps Lockの設定・解除(shiftキーを押しながらCaps Lockを押す)で、PIC基板の7番ピンがHになったり、Lになったりします。
一般的(Generic)HIDでPICとパーソナル・コンピュータの間でデータを交換します。ファームウェアはhid_custom1455int.X.zipです。
1.PIC基板とPCをUSBケーブルで接続します。
2.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
3.パーソナル・コンピュータ用のアプリケーション・ソフトウェアはhid_custom_utilities.zipです。hid_custom_utilitiesフォルダーの中にあります。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。hid_custom_utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、下のボックスに現れるはずです。
USB(vendor specific class)でPICとパーソナル・コンピュータの間でデータを交換します。ベンダークラスは、ベンダー側(供給側)が定義するクラスでHIDより汎用性が有るクラスです。PIC18F2550の章で紹介した2550_WinUSBも参照ください。ファームウェアはvendor_basic1455int.X.zipです
注意:MMCのデフォルトでは、ベンダークラスのProduct ID(PID)は0x0Aとなっています。0x53に変える必要があります。PID=0x0AはCDCのPIDとして使用しているからで、また、Microchip社が提供しているベンダークラス用のデバイス・ドライバーはPID=0x53用だからです。
1.PIC基板とPCをUSBケーブルで接続します。
2.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
3.デバイストライバーを組み込みます。具体的には、vendor_basic_utilities.zipを解凍して出てくるvendor_basic_utilitiesフォルダー内のwinusb_installerフォルダーの中にあるUSBDriverInstaller.exeを実行します。Instrall Driversボタンを押すとデバイスドライバーがインストールされます。なお、すでにインストールされたデバイスドライバーを削除するときはRemove Driversボタンを押します。
4.パーソナル・コンピュータ用のアプリケーション・ソフトウェアはvendor_basic_utilities.zipを解凍して出てくるvendor_basic_utilitiesフォルダーの中にあります。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。apps\vendor_basic\utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、下のボックスに現れるはずです。
ファームウェアはcdc_basic1455int.X.zipです。
上記PIC基板をCDC(Communication Device Class)機器として、パーソナル・コンピュータと接続し、PIC基板とPCの間でデータのやり取りを行います。PCからCDC機器としたPIC基板を見ると、PCはPIC基板をまるでRS232C機器であると認識します。したがって、PC上でRS232C機器と通信を行うための”Tera Term”なるアプリケーション・ソフトウェア(ウェブで検索ください。フリーソフトです。)を利用するだけで、PCからPIC基板を制御できるようになります。
1.PICの8番ピンを抵抗10kΩでプルアップします(回路図中、8番ピンと5Vラインの間に10kΩを入れる)。このPICのCポートは”内部プルアップ”に対応していませんので、外部プルアップが必要になります。
2.PIC基板とPCをUSBケーブルで接続します。
3.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
4.Windows10(21H2)では、CDC用標準デバイスドライバ(Usbser.sys)を使用するようです。つまり、PIC基板とPCをUSBケーブルで接続すると自動的にこのドライバーが組み込まれまれるようです(別途ドライバーを組み込む必要がない)。ポート番号を調べるために、ComNumber.zipを解凍して出て来るフォルダーのなかのComNumber.exeをPC上で実行します。実行ダイアログ画面からポート番号はCOM3ということが分かります。
5.PC上でTera Termを起動して、メニューから”設定->シリアルポート”を選択すると、シリアルポート設定画面が以下の様に現れるので、ポート番号(今の場合COM3)、ボーレートを57600 bps(など適当)、データビットを8ビット、 パリティはなし, ストップビットを1、フロー・コントロールはなし、と設定してください。 設定が終わったら、シリアルポート設定画面を閉じ、メニューから”設定->設定の保存”を選択して、シリアルポート設定内容をファイルに保存しておくと、次回の接続時には、自動的に保存した設定内容が反映されます。
6.キーボードから適当なキーを押下すると、押したキーに対するアスキーコードに1を足したものが、Tera Termの画面に現れるはずです。たとえば、”1”なるキーを押下すると、”2”がTera Termの画面に現れるはずです。
7.PICの8番ピンをGNDに接触させるたびに、"Button pressed."なる文字列がTera Termの画面に現れるはずです。
8.参考までに、パーソナル・コンピュータ用のアプリケーション・ソフトウェアをcdc_utilities.zipに入れておきました。解凍して出てくるcdc_utilitiesフォルダーの中にあるCDCapprication_VCフォルダーは[Visual C++用]で、CDCappricationフォルダーは[C#用]です。cdc_utilitiesフォルダーの中の実行ファイル(CDCapprication_VC.exeかCDCapprication.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに234と現れれば、正常に動作しています。送信された文字列のそれぞれの文字にアスキーコードで1足されたものが、下のボックスに現れます。なお、 ソースコードのコンパイルにはVisual Studio Community 2022を使用しました。
1つのPICの中に、互いに独立な2つのHIDを実現し、パーソナル・コンピュータとの間でデータを交換します。ファームウェアはhid+hid1455int.X.zipです。
1.PIC基板とPCをUSBケーブルで接続します。
2.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
3.パーソナル・コンピュータ用のアプリケーション・ソフトウェアは2interface_utilities.zipです。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。
2interface_utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディット・ボックスと2つのボタンを持ったダイアログ・ウィンドウが現れます。上のエディット・ボックスに適当な文字列を入れて、ボタンのどちらかを押すと、下のエディット・ボックスに文字列が現れます。入力した文字列の最初の文字だけが変化します。たとえば、上のエディット・ボックスに“123” と入れて、"INT1"ボタンを押すと、下のエディット・ボックスに“223”が現れます。入力した文字列の最初の文字にアスキーコードで1を足したものが、‘2’ = ‘1’ +1となって、下のエディット・ボックスに現れる文字列の最初の文字となります。文字列の他の部分はそのままPICを経由してPCへと返ってきます。もし、"INT2"ボタンを押すと、下のエディット・ボックスに“323”が現れます。入力した文字列の最初の文字にアスキーコードで2を足したものが、‘3’ = ‘1’ +2となって、下のエディット・ボックスに現れる文字列の最初の文字となります。
なお、もしも、一般的HIDやHID+マウス・プロジェクトを過去に使用していた時には、使用していたドライバーをusbdeview-x64(Webで検索してください)などで、前もってアンインストールしておく必要があります(同じPIDとVIDを使用しているため)。
1つのPICの中に、互いに独立なHID1つとHIDマウス1つを実現し、パーソナル・コンピュータとの間でデータを交換します。ファームウェアはhid+mouse1455int.X.zipです。
1.PIC基板とPCをUSBケーブルで接続します。
2.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
パーソナル・コンピュータ用のアプリケーション・ソフトウェアは2interface_utilities.zipです。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。
2interface_utilities.フォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディット・ボックスと2つのボタンを持ったダイアログ・ウィンドウが現れます。上のエディット・ボックスに“123” と入れて、"INT1"ボタンを押すと(INT2ボタンは意味がありません)、下のエディット・ボックスに“223”が現れます。入力した文字列の最初の文字にアスキーコードで1を足したものが、‘2’ = ‘1’ +1となって、下のエディット・ボックスに現れる文字列の最初の文字となります。 また、上のエディット・ボックスに'y'から始まる文字列を入れ、"INT1"ボタンを押すとマウスカーソルが右に50だけ移動します。
なお、もしも、一般的HIDやHID+HIDプロジェクトを過去に使用していた時には、使用していたドライバーをusbdeview-x64(Webで検索してください)などで、前もってアンインストールしておく必要があります(同じPIDとVIDを使用しているため)。
USB シリアル変換器を作成します。ファームウェアはcdc_serial_emulator.X.zipです。
1.PIC基板とPCをUSBケーブルで接続します。2.MPLAB Xを立ち上げて、ファームウェアをPICに書き込み実行します。
3.USB シリアル変換器のピンヘッダJP2の1、2、3番ピンは、それぞれRX、TX、GNDです。ループバック・テストのため1番ピンと2番ピンを接続します。
4.Tera Termを起動して、ボーレートを57600 bps、データビットを8ビット、 パリティはなし, ストップビットを1、フロー・コントロールはなし、と設定してください。パーソナル・コンピュターのキーボードから、適当な文字を打ち込むと、その文字がTera Termウィンドウ上に現れます。USB シリアル変換器のピンヘッダJP2の1番ピンと2番ピンの接続を解除すれば、文字を打ち込んでも、Tera Termウィンドウ上に文字が現われることはありません。
5_1.RTS、CTSによるハードウェア・フロー制御を行いたい場合は、usb_device_config.hの172行目に次のような定義文がありますのでコメントを解除してください。
//#define USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL
RTSは7番ピン、CTSは8番ピンにファームウェア(euart.hの77行目と78行目)にて設定されます。
5_2.テストのためにCTS(8番ピン)を抵抗10kΩでプルアップします(回路図中、8番ピンと5Vラインの間に10kΩを入れる)。ファームウェアは必ずクリーン&ビルドして、その後PICに書き込み実行します。Tera Termを起動して、パーソナル・コンピュターのキーボードから適当な文字を打ち込んでも何も表示されません。しかし、CTSをGNDに落とすと、それまでに打ち込んだ文字が全部一挙に表示されます。
内部クロックを使用していますので、水晶発振子(16MHz)とコンデンサー(C3とC4の22pFのコンデンサー)は必要ありません。さらに、一度PICにファームウェアを書き込んでしまえば、もう書き込み用の配線は必要がなくなります。ファームウェアを書き込んだPIC16F1455を使い、それ用の新たな基板を作れば以下の写真の様にコンパクトになります(RTSとCTSは使用していません)。これを「USB シリアル変換器」と呼ぶことにします。