PICの開発にMPLAB_X_IDE(v5.50)とMCC(v5.3.0)を使っているが、最近、PIC16F1455で新規のプロジェクトを作ろうとしたところ、「デバイス未対応」エラーメッセージが出てMCCが起動しなくなった。
これは、MCCのV5.3.3のバージョンにバグがあるものと思われる。
同じエラーは他の方からも報告があり、その解決策の一つとして、「趣味と仕事は両立できるのか」に紹介されている方法で、V5.2.1へのダウングレードをすると(V5.0.3と表示されているが・・)、途中で確認メッセージが出てくるが、MCCを起動することができた。
なお、MCCのCoreのバージョンを一度ダウングレードしたプロジェクトを再度OpenしてもMCCのバージョンは維持されているようです。
新しいCore v5.4.0のリリースが準備されているので、いずれは解決すると思えるのだが・・。
前報(abc836)でPIC16F1455を使ってパソコンと簡単にUSB通信ができること判ったが、返信データの改行が行えなかった。そこで、送信プログラム変更と、通信に割り込みを使用し、デジタル出力(LEDの点灯)も付け加えることにした。
前報ではUSBの状態をPOLINGモード確認していたので、USBDeviceTasks()を一定時間毎に呼び出す必要があったが、INTERRUPTモードでは、USBDeviceTasks()ハンドラー内でUSBDeviceTasks()が実行されるので、メインループ内にUSBDeviceTasks()を記述する必要がなくなる。ただし、「グルーバル割り込み」と「通信割り込み」を許可する必要がある。
なお、テスト回路はabc836より一部変更した
テスト用回路(VRは今回未使用) | MCCによるUSB設定 (デフォルトのままINTERRUPTにチェック) |
System Moduleでclockを48MHzに設定 | Pin ManagerでRA5をデジタル出力に設定 |
Interrupt Moduleで割込確認 | Pin Module設定 (RA5はPinModuleで「LED」と名付けた) |
USB送信サブルーチンでは、送信準備ができるまで待ち、その後、データをセットし、CDCアプリケーションを実行している。
なお、USB受信で文字列を取得しても受信バッファーに文字列の終わりを示す\0(ヌル文字)が追加(送信?)されず、受信文字の後ろにゴミ文字が残ることがあり、正しい受信文字数とならないことがあるので、受信をする前にclrBuffer()で受信バッファーをクリアしている。
|
【実行結果】
abc736で開発したUSB通信ソフトを使って、パソコンとPICとのUSB通信を行ったところ、送った文字列がそのままエコーバックされた。また、文字列の最初の文字の最下位ビットが1(例えば'1'や'a')の場合はLEDが点灯し、最下位ビットが0(例えば'0'や‘b’)の場合はLEDが消灯した。
しかし、文字や改行が正しくエコーバックされないことが時々発生した。そこで、通信データを解析したところ、改行コードとして0DHのみが送受信されていたが、abc736の通信ソフトを再度ビルドし直したところ、0DHと0AHが送受信され、abc736では改行が正常に行われようになった。しかしabc737ではデータは正しいが、改行が1または2度行われることがあり、もう少し検討する余地がありそう。
Wordで差し込み印刷を行うと、1レコード毎に1ページが印刷される。しかし、宛名や領収書などで1枚の用紙に複数のレコードを差し込んで印刷したいことがある。これを実現するには、
このままでは、全て最初のレコードのみが差し込まれるが、「ルール」から<<Next Record>>を選んで挿入すると、それ以降には次のレコードのデータが差し込まれる。そこで、この<<Next Record>>を必要な分だけ差し込むと、複数のレコードを1ページに差し込むことができる。
希望通りにデータが差し込まれるか確認するには、「結果のプレビュー」で確認できる
【差し込みのルール】 | |
---|---|
Ask | (問い合わせ) |
Fill-in | (文字列の書込) |
If...Then...Else | (条件により・・) |
Merge Record # | (レコードの差し込み) |
Merge Sequence # | (差し込み順序) |
Next Record | (次のレコード) |
Next Record If | (条件により次レコード) |
Set Bookmark | (ブックマークの設定) |
Skip Record | (条件によりレコードをスキップ) |
差し込み前 | 差し込み後 |