2015-08-26 20:07 | カテゴリ:PIC応用回路
今日は、ちょっとマニアックな内容です。
RS232のシリアル通信の問題が解決しましたので、そのデータを使用して、グラフィカルなオブジェクトを操作するステップに進みます。

さて、通信で取り込んだASCIIのデータはバイト単位ですが、このLCDディスプレイのソフトは2バイト/ワードですので、データのパッキングが必要です。
何か良い方法はないかと、マニュアルを見ていると、良さそうな関数がありました。
それは「TO( )」関数です。
これは、文字を出力する対象を、LCDパネルや、RS232通信などの出力装置だけでなく、「文字配列変数」にも出力できると言うものです。
しかも、文字変数に出す際は、2バイトを1ワードにパックしてくれるので、一石二鳥です。

これを使って、PUTCH( )関数でASCIIコードを一つずつ送り出すと、温度などの数字文字列を作成できます。
あとは、この数字の文字列を、算術数字変数に変換すればよいことになります。

一旦、文字数字変数ができれば、あとは算術数字の変数に変換すればよいのですが、これは、専用の関数が無いようで、サンプルの変換プログラムがありました。
これを使用することにします。

これらを間違えない様にプログラミングすれば、
RS232でデータをASCIIで受信し、それを数字の文字列にまとめて、更にそれを数値変数に変換し、その変数で、グラフィカルオブジェクトのメーターなどを動作できるわけです。

受信したASCII文字を文字列にパックするには、具体的には、TO( )関数を使用して、この様なプログラムで出来そうです。

// Receive 1st data (2 bytes)

rs232(); //シリアルポートからデータを1バイト読み込む
to(in_data); //putch関数の出力先をin_data[]配列にリダイレクトする
putch(char); //データ(char)を書き込む

rs232(); //2バイト目の処理

to(APPEND);
putch(char);
str_int_conv(); //得られた文字配列を数字変数に変換し
temp1 := num_data; //その数値をグラフィカルオブジェクトの変数としてtemp1に代入する


と言う感じです。


また、文字配列を数字に変換する部分は、

i := 0 ;
num_data := 0 ; // init number
repeat
ch := in_data[i / 2] ;      // extract word
if (i & 1)    // keep high or low byte, as appropriate
ch >>= 8 ;
else
ch &= 0xff ;
endif
if (ch == 0) break ;    // exit on null
num_data *= 10 ; // mult what we have so far by 10
num_data += ch & 0x0f ; // add in current character, after converting to number
i++ ;    // move to next char
forever


です。

で、とりあえず動作するプログラムが出来ました。細かい調整は必要ですが。

DSC01223.jpg

左から、外気温度、室内温度、右側の上が気圧で、下が湿度です。

良く見ると気圧のスケールとメモリがあっていませんでした。

修正しました。

DSC01227.jpg


ついでに、色を買えて、デジタル表示も追加してみました。

2015-08-26 00:07 | カテゴリ:PIC応用回路
当面、このLCDディスプレイと悪戦苦闘すると思いますので、タイトルを変えました(笑)


このLCDディスプレイの開発環境ソフトに慣れてきました。
いくつかのプログラミングモードがあって、ビジュアルCの様にグラフィックのパーツを画面に並べて、イベントハンドラーを設定
して、プログラミング言語をあまり入力しなくてもソフトが組めるモードや、純粋なプログラミング言語だけで、組むモード、それ
らを組み合わせたものなどがあります。

こちらの目標は、RS232通信で、取得したデータを、グラフィカルなメータなどの表示に反映することにしましたので、まずは
、通常のプログラミングモードで、RS232通信で、温度計・湿度計・気圧計の例のデバイスからデータを読み込み、それが正し
く読み込まれているか確認する為に、画面に数字を表示するところまでをまずは検討します。

プログラミング言語のマニュアルと内蔵関数のレファレンスを参考に、色々調べていましたが、いくつか検討する必要がある問題が
わかりました。

まずは、グラフィカルメータ等の表示は、数値変数で与える必要があります。
しかし、RS232で送られてくるデータは、温度などのASCIIデータです。したがって、ASCII文字列から数値データに

変換しなければなりません。
しかも、このプログラミング言語は、16ビットワードで、変数も文字も16ビット単位です。
8ビットのASCIIデータをうまく変換しなければなりません。
つまり、8ビット単位で受信したASCIIデータをとりあえず、温度などをあらわす数字文字列に仕上げ、それを数字変数に変換
する必要があるということです。

次に、RS232の受信についてですが、ある条件で、受信データが正しく受信できないことがあるようで、このあたりの条件もチ
ェックしなければなりません。

まず、RS232で所定のデータがちゃんと受信できているか、簡単な確認プログラムを作成してチェックしました。
一文字づつASCIIデータを読み込んでそれをLCDに順次表示するものです。

実行すると、温度や気圧湿度などのデータが期待通りLCDに表示されました。
順調なスタートです。

DSC01221.jpg

次に、これに見易い様に、区切りなどを入れてこのテストプログラムを完了としようとしましたが、この区切りの文字(たとえばa)を表示するPRINT文を挿入した途端、LCD表示がデタラメニなってしまいました。

DSC01222.jpg


これがそのプログラムの問題の一部です。

while(1)
char := serin1();
// Loop until LF command.
if (char == 0x0A)
break ;
endif
print ([CHR]char);
// print ("a"); // -----------------これが問題の行です
wend
print("\n");


ここでコメントアウトしてあるPRINT文を実行するか否かで、結果が劇的におかしくなってしまいます。
PRINT文を実行しないと、ちゃんと表示されます。
PRINT文を実行すると、こうなってしまいます。

これはもうお手上げ。
私の手には負えません。
そういう時は、この4D SYSTEMSのフォーラムに質問すれば、エンジニアの人や、他のユーザが教えてくれます。
このあたりは、この会社のすばらしいところです。

screen1.jpg


質問をポストして、コーヒーを飲んでいたら、もう返事がありました。
そうそう、申し送れましたが、この会社はオーストラリアの会社で、日本と-1時間の時差なので、ありがたいです。

screen2.jpg

で、返事を見ますと、なになに、マニュアルを良く見ろ!と?

RS232の送受信のリファレンスマニュアルを見ましたが、特にそれらしいところはありません。
で、アプリケーションノートの所で、SERIALで検索したら、一つヒット。
これを見ると、
「SERIAL inputの関数は、データが入力されるまで、待たない」
と、ありました。
つまり、プログラムで、シリアルポートを見に行って、データがあれば読み出して、それを返すけれど、データがまだ受信されてい

なければ、「-1」を返す、とあります。

私のプログラムは、シリアルデータを受信するまで待って、それを持ち帰ることを前提で組んでいましたので、そこでおかしくなっ

た様です。
でも一般は、PICのC言語でも、データが受信するまで待っているのだけれど、、、、

まー、とりあえず、問題は解決しました。
ちゃんとシリアル通信で、受信できるようになりました。



2015-08-24 22:45 | カテゴリ:PIC応用回路
Nゲージコントローラの新規製作を模索しています。

手持ちの機器は、uLCD-43PTと言う機種です。
4.3インチのTFT液晶モデルで、スクリーンにタッチ機能も備わっています。
これを手持ちのアルミのケースに収めました。(汚い配線でお恥ずかしい)

DSC01215.jpg


プログラムの実行は、内蔵されているCOMポート経由でPCに接続し、専用のプログラム開発環境からダウンロードして実行することになります。
また、それ以外にももう一つCOMポートがあり、それを利用して外部機器と接続できます。
そのために、RS232通信ICを取り付けました。

DSC01214.jpg


電源は、外部から5Vを供給します。そのための端子や電源SWを取り付けて、開発環境が出来ました。


プログラム開発中はリセットスタートになりますので、リセットボタンを設けました。
このリセット回路は、端子を単純にGNDに落とすのではなく、TRなどのオープンコレクタ出力でドライブしなければならない仕様になっています。
面倒ですが、その為に、TRとコンデンサー、抵抗で空中配線のリセット回路を追加しました。

DSC01212.jpg


ようやく、これでプログラムの開発が可能になりました。

とりあえず、簡単なデモプログラムを作成してみました。

DSC01219.jpg


予め準備されている「メーターのパーツ」などを画面に貼り付け、大きさや色、メーターのメモリなどを設定すれば、プログラムから制御することが出来ます。

2015-08-23 22:33 | カテゴリ:ヘリコプター
天気が良かった!


RCクラブの飛行場へ久しぶりに出かけてきました。
一時の酷暑も、今日は少し和らいで、直射日光をさえぎるテントに入っているとそれほど暑くはありませんでした。
しかし、それにしてもすばらしいRC日和で、楽しい一日でした。


Holiday.jpg

ところで、RCヘリが写っていますが、どこか分かりますか?
大きな雲の上の境界の中央辺りです。
2015-08-21 11:42 | カテゴリ:PIC応用回路
Nゲージコントローラの新規製作を妄想しています。


何といっても、PICを使用して製作しますので、LEDピカピカは絶対条件です。
マスコンの位置表示、ブレーキの制御レベル、速度表示、各種表示、などなど、かっこよく見せる為のアイデアはかなりあります。
これらを実現する為には、7セグメントLEDやLEDランプを多数並べ、それらをPICで点滅制御しなければなりません。

手持ちの基板に、手持ちのLEDパーツを並べるとこんな感じです。

DSC01191.jpg



これらのLEDが、ピカピカ点滅するのを眺めつつ、Nゲージを運転するのもよさそうです。


余りにもLEDの数が多いので、直接のドライブはピンの数が不足して無理なようです、
ダイナミック点灯をしなければならない感じです。
と言うわけで、PICでTRを使用してダイナミック点灯する回路とプログラムを試験的にブレッドボード上に組んで、動作確認をして見ました。

DSC01198.jpg

DSC01199.jpg


二個の二色LEDをダイナミック点灯するテストです。
ちゃんと動作しました。
このときの点灯サイクルは、約800マイクロ秒毎に、8つのポートをドライブする設定です。



7セグメントLEDが4個(8+4)、2色LED(赤と緑)が、8個x3列=24個、スイッチ類が3個、外部機器からコントロールする為のRS232用のピンが2個、PWMとあれやこれやで、、、
PICの入出力ピン数が足りません。
今、考えているのは、PIC16F877(33ピンI/O)ですので、多少LEDを減らしても、このPICをLED表示専用に
して、PWMやSW類は別途PICを使い、それらをRS232かi2cで通信させて、組み上げるしかありません。

これはちょっと大仕事になりそうです。
しかもダイナミック点灯をしつつ、RS232で通信しなければなりませんので、プログラム的にも高度です。

困った、困った。


悩んでいると、2年前に購入した、4インチくらいの大きさのカラーLCDディスプレイを思い出しました。
このディスプレイは、LCDに高度なCPUが組み込まれ、簡単な言語でLCDに文字や絵を書けるもので、それ自体に、通信機能やI/Oポートも備えています。
また、タッチパネル式の為、スイッチ(タッチ)入力も可能です。

uLCD-43_s_01.jpg



実は、購入したまでは良かったのですが、マニュアル類がすべて英語だったので、開発プログラミング環境をPC上にセットアップしたまでは良かったのですが、C言語の様な専用プログラミングを理解できず、放置してありました。

今回、意を決して再度プログラミングにチャレンジして、何とか作法が理解できました。
ちょっとデモプログラムを組んで見ましたが、これを上手く活用できれば、Nゲージコントローラの速度計や圧力計「風」の表示や、各種表示も出来そうです。
制御情報を、別途PICからコマンドで送ってやれば出来そうです。

ちょっとこの方向でも検討してみます。


2015-08-18 20:30 | カテゴリ:1/24モデル
カウンタックのリトラクタブルヘッドライトの工作をしています。
ライト用のチップLEDをどのように取り付けるべきか、悩んでいます。
白色のプラ部品を透過してチップLEDを光らせようかと計画しましたが、ライトレンズ部品の裏側にスペースがほとんど無く、ライトの反射部品に穴を開けてLEDを埋め込まなければ、入らないことが分かりました。
そこで追加工作をすることに。

写真撮りました。
この4枚の写真の違いが分かりますかね??

DSC01205.jpg


まず、先日製作したメッキパーツのライト反射板に黒く塗装した枠の部品を取り付けました。

DSC01206.jpg


続いて、メッキを剥がした反射部分をもう一度シルバーに塗装し、

DSC01207.jpg



透明パーツのレンズを取り付けました。

DSC01208.jpg


裏側は、LEDを差し込む穴が開いています。



2015-08-15 18:45 | カテゴリ:1/24モデル
カウンタックの製作


お盆の為、あまり進んでいません。
カウンタックの特徴の一つである、リトラクタブルのヘッドライトの製作をしています。
できれば、ライトのUP・DOWNが出来るようにしたいと思います。
ちょうつがい部分はなんとか出来ました。

DSC01194.jpg

DSC01195.jpg

DSC01203.jpg

DSC01204.jpg

DSC01196.jpg

2015-08-13 18:19 | カテゴリ:コントローラ
Nゲージのコントローラを作りたいと、妄想しています


3月に、以前製作したNゲージコントローラを手直しして、VVVF風の音が出る、低速発進運転が可能になりました。
機能的にはNゲージコントローラとしては、これでよいのですが、操作性としては、マスコンにあたるつまみがVRなので、クリックかんがありません。
また、加速はVRを回転さるにつれてしていきますので、実車のように、ノッチを入れて、徐々に加速していくと言うものではありません。
また、デザイン的には、つまみが一つと、LEDバーの表示が一つ。
いわゆる、カッコいいものではありません。



内部は、単純なPICのPWMを使用した回路に、FETを接続して、電流を確保しています。

DSC00814.jpg

せっかく、PICのXC8言語を勉強していますし、ここらで、ちょっと見てくれの良い、Nゲージコントローラを製作したくなりました。
アセンブラは。細かな操作には向いていますし、直感的に書けますが、ちょっと複雑な動作を記述するにはかなり煩雑で、バグ取りも大変です。
C言語は、その辺りが楽です。
私の実力でも何とか出来そうな感じがします。

ジャンク箱に、20年も前に製作した、たたみ1畳のレイアウト(レールを敷いただけで、シナリーはなし、挫折しました)用に製作したポイント切り替えBOXがありました。
もう、スイッチのいくつかは、「バカ」になっていて、切り替えられないスイッチになっています。
ポイントの切り替え方向を表示するLEDは、TTLで制御するようになっていますが、ポイントを切り替える際のコンデンサーの放電ノイズで、誤動作するなど、問題がありました。

そこで、これを分解して、このケースを活かして、コントローラを製作しようと思います。

DSC01186.jpg

中は、こんな感じです。
パネル面が斜めになっていて、カッコはよさそうです。

DSC01188.jpg

ただ、パネル面はスイッチやLEDを取り付けていた穴が多数開いていて、これを隠すような設計をしなければなりません。

DSC01189.jpg

一部、「生きている」スイッチの再利用も出来そうです。

私のやり方は、「外見のデザイン重視」です。
とにかく、かっこ良さが第一です。
それで、まずは、デザインを書いてみて、

DSC01185.jpg

こんな物が出来ればいいなぁ、と。

もちろんLEDピカピカの電飾付です。
2015-08-12 16:04 | カテゴリ:1/24モデル
カウンタック作業を進めています


内装をして、ドアの内張りを忘れていました。
説明書では、艶消し黒の指定ですが、YouTubeの作例では内装と同じベージュ系で塗装されています。
黒よりこちらのほうが綺麗なので、無い装飾と同じ色で塗装しました。
そうは言っても、内装と同じ色をもう一度再現するのは難しいのですが、トライして見ました。
夜目遠目のうちでしょうか。似た色に出来ました。

DSC01184.jpg


ついでにダッシュボードも黒ではちょっとコントラストがきついので、茶色に変更。
下に塗ってあった黒がちょうど透き通って、良い感じになりました。
怪我の功名でした。

DSC01183.jpg


さて、電飾の仕込みのアイデアを考えています。
ヘッドライトのめっきパーツをチェックしていたら、白色のプラにメッキしてあることが判明。
思い切って、ランプの内側と裏側のメッキをはがしてみました。

DSC01178.jpg

DSC01177.jpg


白いパーツなので、裏から「白LED」を当てれば、ちょうど良い光量になりそうです。
チップLEDがくっきり見えすぎてしまうこともなさそうです。

続いてテールランプです。
これも白色のプラにメッキでした。赤色と黄色のLEDが入るところの表と裏のメッキを削ってみました。

DSC01179.jpg


これで発光のテストをして、良ければこの方法で進める予定です。
2015-08-11 18:18 | カテゴリ:1/24モデル
インテリアの製作をしています。


今回は、ボディーカラーをレモンイエローにすることにしました。
インテリアの配色は、薄いアイボリー系にして、少し明るいインテリアの雰囲気にしていきます。

DSC01168.jpg

DSC01170.jpg

スイッチパネルは指定色のつや消し黒ですが、アクセントに灰皿(?)の周りとスイッチはシルバーlに。

DSC01172.jpg


車内の内張り色と、シートの色は少し濃淡を変えて、アクセントにします。

DSC01171.jpg


ダッシュボードは、つや消しの黒に塗装しました。
車内色と比較すると、少しコントラストが付き過ぎかなぁという感じがします。
あとで調整するかもしれません。
スイッチ類の塗装色指定がありませんので、それなりに後で塗装します。

DSC01173.jpg

DSC01174.jpg


シートを乗せるとこんな感じです。