久しくやってなかったのですが、本日、カーナビの無料
アップデートの案内がきたので、アップデートを行いま
した。
アップデートに使うアプリは、古いPCにしかないので、
現有のPCにアプリのDLからです。
地図データをDLするのに約、20分程度かかりました。
SDカードに保存ですが、SDカードをカーナビに挿して、
データを書き換えるのにやく15分程度かかりました。
来年の1月で無料アップデートの期限がきれます。
アップデートは、後一回ですね。
アップデートしたナビで、実家行ってみると、途中、ナビ上
ではなかった道が、きちんと表示されてました。
なんていうか側溝に設置されている、大きめの構造物まで
表示が出るようになってました。
衛星写真や実地等で、調査して、
つくられるんでしょうね。
---自作MPGワイヤレス化 (8)---
ほぼでき上がったテスト基板で、ワイヤレス送信のテストを
しました。
有線部分をワイヤレスに置き換えても、目で見えるタイムラグ
は見えないようです。
PICの処理速度も気になりましたが、この程度の信号だと、
ほぼリアルタイムで処理ができるようです。
データの送受信で、処理しきれずに取りこぼしがあるのか
もしれませんが、確かめるまでもないかなと思います。
回路図といえるほどのものではありませんが、覚え書き
の送信の回路図です。MPGのA相B相の信号から、DIRの
信号を作るため、あまっていた、74HC74の
DフリップフロップのICを使ってます。電源と信号のやり取り
の線を結んだだけの回路です。
本当は、自作のMPGに全部組み込んでしまえば、新たな
プログラムを作る必要もなかったのですが、行き当たりばっ
たりの私の性格そのものですね。
---自作MPGワイヤレス化 (7)---
テスト基板とテストプログラムの検証がおわりました。
無事、目的のキャラクターをRS232C経由でPCのターミナル
ソフトに送信できました。
切り替えの判定をするのに、「状態変化割り込み」を
使用しましたが、どうも、隣のポートまで影響をうけるよう
で、「状態判定」のif文をいれて、思った動作になりました。
送信側の問題か、受信側の問題かは、わかりませんでし
た。修正とテストのすんだプログラムです。インクルードし
ている「uart.h」と「uart.c」は、諸兄の作られたものを
そのまま使用してます。
修正main.c
有線での接続では、MPGのダイヤルを結構早く回しても
送信は、ついていけるようです。
「1~7」の数字と、「f」と「b」のキャラクターの送信をしている
ようすです。このキャラクターを受信して、それに応じた処理
をします。受信側のプログラムはできていますので、
ワイヤレスでの、送受信のテストをします。
---自作MPGワイヤレス化 (6)---
テストに使う送信用のプログラムとテスト基板がほぼ完成
しました。
基板にICはさしていませんが、こんなレイアウトになります。
明日は、次のプログラムをICに書き込んで、テストをする
予定です。
今回のプログラムです。main.c
ハードに頼り切っていますので、シンプルなプログラムです。
TXの線をRS232C経由でPCにつなぎ、プログラム通りに
「1~7」の数字と、「f」と「b」のキャラクターの送信ができて、
ターミナルの画面「1~7」の数字と、「f」と「b」のキャラクター
の表示ができると無事成功です。
まあ、一度では成功しないと思いますし、原因を探って
何日か悩むようかなと思います。
今回は、気がかりが一つ。今までののPICライターは、今回
のPICには対応してないので、PICKIT3を使いますが、うまく
書き込めるかどうか、心配です。
それに、プログラムが動いているか確認するための正常動作
する基板がないのです。
トライアンドエラーでやるようです。
---自作MPGワイヤレス化 (5)---
今回自作MPGのワイヤレス化にともなって購入した部品です。
一番下のものは、Xbeeの設定を変えるために、USB経由で
PCに接続するためのアダプターで、○月製です。
一番上の変換基板は、Xbeeに3.3Vの電源を供給するため
の変換基板です。この変換基板で、電源とデーターの受け
渡しのレベルの変換をします。変換されるのは、TX(送信)
RX(受信)だけです。両脇は,言わずとしれたアンテナです。
一番下のは○月で、後のは、○イッチサイエンスから、通販
でもとめました。
全部、○イッチサイエンスでもよかったのですが、
インターフェースの基板は、高かったので、○月のにしました。
一番最初にしたのXbeeの設定を変えるためのXCTUの
インストールですが、詳細は諸兄のHPに譲ることにします。
このソフトを使って、Xbeeの設定を、変更しました。
一つ目・・・・・・・・・ZigBee Routor AT
二つ目・・・・・・・・・ZigBee Coordinater AT
にします。パラメーターを変えるのではなく、ファームウエア
そのもを書き換えているようです。
ZigBee Coordinater ATへの書き換えはうまくいきましたが、
ZigBee Routor ATへの書き方に失敗し、PCに接続した
インターフェース基板から、本体を検索できなくなってしまい
ました。ちょっと、焦りましたが、XCTUをよく見ると、
Xbee Recoveryの項目があり、ここから、ファームウエア
を書き戻すことができ、一安心です。
この辺の操作も、諸兄のHPn記載がありますので、そちら
にゆずることにします。
---自作MPGワイヤレス化 (4)---
部品がとどいたので、あれこれ、やりました。
Xbeeの設定をするのに、XCTUというソフトを使いますが、
新しいバージョンになっていて、当てにしていた諸兄のHP
のバージョンと違ってしまって、操作をするのに戸惑いまし
た。
時間がかかりましたが、やっと、シリアル通信部分をワイヤ
レスに置き換えることができました。
PC→Xbee・・・・ワイヤレス・・・・Xbee→PIC
という構成で、PCからの信号で、PICをコントロールすること
ができました。
キーボードから、数字を打ち込んでいます。その数字によっ
て、LEDの点灯をコントロールしています。A相B相のパルス
の生成もオシロで確認しましたら、大丈夫でした。
どの程度の応答速度があるのか不明ですが、見通しがたち
ました。
構成の詳細は、後日、掲載いたします。
---自作MPGワイヤレス化 (3)---
やっと部品が明日届きそうです。今は、PCからUSBの変換
を通してRS232C経由で、PICの受信のテストをしています
が、RS232Cの部分をワイヤレス化して,実験をしようと思い
ます。
受信側PICのプログラムは、一応完成ですが、実験しなが
ら、A相B相のパルスの調整が必要になるかもしれません。
一応、動いたプログラムです。
main.c
送信に使うPICですが、割り込みを使った送信をしたいと
思ってましたが、諸兄の例題がちょっと難しくで、とりあえず
ポーリングで、組んでみようと思います。
---自作MPGワイヤレス化 (2)---
MPGのワイヤレス化をするにあたって、PICのプログラムを
簡単にするため、今まで使ったことのないPICを選定しまし
た。
送信側に、16F1783を使い、受信側に16F88を使おう
と思います。
16F1783という28PのPIC選定の理由は、状態割り込み
に使える端子が、沢山あることです。18ピンのものも検討
しましたが、状態割り込みとUART割り込みのPINがダブっ
ているので、状態割り込みを7本とれません。
16F1782は28PINのうち、状態割り込みにつかえるのが
なんと、25PINあります。そのうち使うのが7本を状態割り
込みで使います。それに、1本を外部割り込み(パルスの
タイミング取り込み)に使い、後、2本を、CW、CCWの判定
に使います。
合計、7+1+2+VSS+VDDですから。12本だけつかい
ますから、贅沢な使い方だと思います。
---自作MPGワイヤレス化 (1)---
リモコンよろしく自作のMPGをワイヤレス化するという、
無謀な取り組みをしています。
赤外線通信等、信号を変調して伝送するのは、ちょっと
できませんが、RS232Cの延長で、キャラクターの送信
は、有線でできました。
この部分をワイヤレス化すれば、実現できそうです。
そのために、受け手のPICで、A相B相のパルスを生成します。
なかなか実現できませんでしたが、やっと、エンコーダーの
パルスと近い波形を生成することができました。
送り手のPICから、1バイトのキャラクターコードを送り、
受け手のPIC側で、それに応じた処理を行います。
一番の難物がパルスの生成でした。
キーボードから操作してますが、一回キーボードのキーを押
すと一回だけパルスが生成できます。連続で押すと、連続
で生成できました。
有線のRS232Cで送ってますので、ワイヤレス化した時の
応答速度が気になるところですが、まあ、DIYの範囲での
使用ですので、それほど気にしなくてもいいと、思うことに
します。
プログラムは、当初、割り込みで処理する予定でしたが、
ポーリングの処理でも、それほど変わりないようなので、
通常のものに変更しました。
プログラムは、後日掲載します。
---新しい開発環境(8)---
また、また、はまりました。二日ほど、あれこれ悩みました
が結局、プログラムのミスでした。
<はまったことその1>===============
タイマー0とタイマー1の割り込みで、割り込みの関数
部分で、初期値の設定を入れる部分が違ってました。
switch文で、本来なら、switchを抜けてから再設定
しなければならないのに、switchのなかに書いてました。
void interrupt InterReceiver( void ){
if(TMR1IF==1){
if(ccw==0){
if(p_count<6){
p_count++;
}
switch(p_count){
case 1:cwOut=0;
ccwOut=0;
break;
case 2:cwOut=1;
ccwOut=0;
break;
case 3:cwOut=1;
ccwOut=1;
break;
case 4:cwOut=0;
ccwOut=1;
break;
case 5:cwOut=0;
ccwOut=0;
break;
case 6:cwOut=0;
ccwOut=0;
TMR1L = tMr1_Low;//TMR1初期値
TMR1H = tMr1_Hight;//
break;
}
}
(本来の位置)
TMR1IF=0;//割り込みフラグクリアー
}
下記の部分の位置が問題でした。
TMR1L = tMr1_Low;//TMR1初期値
TMR1H = tMr1_Hight;//
6回割り込みさせて、一連の動作がが終わるように組みましたが、
初期値の設定を変えても割り込みの時間がほとんど変わりませんでした。
なんのことはない、割り込みで、6回目に戻ってくる時に
だけ初期値が設定されますので、1回だけは、期待した
時間での割り込みがかかりますが、後の5回は、なんと
設定の最大値、65536まで、カウントアップしてました。
これでは、期待した動作になりません。
期待した動作をさせるには、フラグのクリアーの前に入れ
ないとだめでした。
<はまったことその2>==============
「main」のプログラムでは、必ず無限ループを作りますが、
このなかの処理で、大きな勘違い。
if文で判定をして、動作をさせましたが、if文に一回だけ
入って処理をさせたかったのですが、一回動作をさせた
後に、ifの条件を書き換えなかったので、動作を永遠に
繰り返すことになって、終わりませんでした。
終わりにさせたかったのがタイマー1の割り込みだった
ので、タイマー1の割り込みのストップの方法をあれこ
れさがしてしまいました。分かれば、なんのことはない、
単純なミスでした。最新の開発環境にして、単なるシンタッ
クスミスは、環境の方で指摘してくれるので、文法的な間違
いは、ほとんど時間を賭けずに修正できるようになりました
が、アルゴリズム等のミスは、ダメです。修正に時間がかか
ります。
頭が硬くなってます。