RGBフルカラーLEDでクリスマスツリー テスト
マジ 疲れた(笑)
点滅パターンは数種類作成してみた・・・
ツリーにしてみると幻想的♪
自分で作れば、既製品に無いもの出来るし、飽きたら点滅パターン書き換えればいいし・・・
AVR ATmega168 + OSTA5131A タイマ0,1、2全て 8ビツト高速PWMで使用
3系統LED接続でテストしたもの
松原 拓也: AVRマイコン活用ブック―オリジナル電子ゲーム&ロボット製作 (わかるマイコン電子工作)
PICマイコンは今までアセンブラ言語でプログラムしてきました。
次にC言語でプログラミングしたかったのですが、PICマイコンのCコンパイラは高価なので、無償のCコンパイラ(WinAVR)が手に入るAVRマイコンを使ってみたくて買った本。現在勉強中・・・
千成 真奈美: はじめてのキッチンガーデン―楽しく育てておいしく食べる (SSCムック―レタスクラブ)
「かみさんがプランターで野菜を作りたい」というので図書館で借りてきた。
アラン ロラン: ツリーハウスで夢をみる
かあちゃんが図書館で借りてきて作りたいらしい(笑)
設計は友達、大工はバイトの知人、土地は他人の土地らしい(笑)
大倉 崇裕: 生還 山岳捜査官・釜谷亮二
「山と渓谷」に連載されていた小説・・・図書館で借りてきたこれは面白い!
マジ 疲れた(笑)
点滅パターンは数種類作成してみた・・・
ツリーにしてみると幻想的♪
自分で作れば、既製品に無いもの出来るし、飽きたら点滅パターン書き換えればいいし・・・
AVR ATmega168 + OSTA5131A タイマ0,1、2全て 8ビツト高速PWMで使用
3系統LED接続でテストしたもの
忘れないうちに一気にトホホ編書いておこう・・・
PICとミニPICプログラマとのオンボード書き込み接続用に秋月の安価な6Pモジュラージャック(6極6芯)を使用することにしたのだが・・・
モジュラーケーブルはいくつか手持ちのあったので、気にしてなかった・・・
これって?げ!4P(6極4芯)じゃん(笑)歳で目が悪いから・・・
まあ、ホームセンターかケーズとかにあるだろうってタカくくってたんですが・・・
TELして聞いたら何処にも無い・・・
「以前は扱ってたのですが今は取扱やめました、インターホンでご使用ですよね?メーカー純正でないと動作しないなど、トラブルが多くて返品がかさんだのでやめました」
・・・それって、ストレート接続か、クロス接続かってことだよね?工作に使用するから回路で対応出来るのでどっちでもいいのだが(笑)
いや、笑ってる場合じゃない(汗)無いんじゃ困る
やべーよ、でもネットで検索したら1社だけあった!即通販で入手!
RJ-11モジュラーケーブル (両側6極6芯コネクタ付き、フラットケーブルタイプ)
ストレート結線タイプ
ミニPICプログラマのアダプタ基板を差し替えて100均ケースに組み込んだもの
ここにもトホホが・・・力余ってケース加工時割れた(笑)機能に関係ないからまあいいや・・・
6Pモジュラー方式はPICだけじゃなく、AVRのオンボード書き込みにも流用できるし良かった!
六神合体ゴッドマーズ!(笑)
トホホ編で書こうかと思っていたのだが、原因も対策も特定出来ないので情報収集中だったのだが・・・
そろそろまた、プリント基板を作成しようと思っていたので、共立電子のHP見てたら・・・
何!サンハヤトの感光基板リニューアルされてるじゃん
クイックポジ感光基板って(笑)ニュータイプ?
「おなじみの感光基板が新しくなり、短時間露光・現像、経年変化による露光時間の変動が少なくなりました。」
何か気になるうたい文句(笑)
以前、10枚セットでまとめ買いしたのがこの旧タイプ
賞味期限的にはまだ問題無いハズなのだが・・・こないだのGPSロガー関係で製作した時、現像ムラやエッチング残りのムラが激しかった・・・
これは現像ムラで修正したもの
これで何とか問題なし・・・
こっちはエッチングムラ・・・あまりしつこくエッチングしてるとパターンの細いところが消失するから~
同じ条件のハズが、基板によっては全く問題ないのもあるし・・・わけわからん(怒)
右端は銅が残って、全くエッチングできていない、トホホ
もう執念だよ!(笑)カッターややすりでパターンを削りだしたんだ(笑)
これでちゃんと動くんだからある意味凄い!
こんなんじゃとうてい表面実装の基板は作れないぞよ
今度、新クイックポジ感光基板で試してみよう、でももし、旧タイプが経年変化による劣化でうまくプリントできなかったのなら、なんだかな~だよ
次は、まとめ買いしないで、必要な分だけ購入しようか・・・
マイコンはATmega168
RGBフルカラーLEDはOSTA5131A
砲弾5mmカソード(-)コモンを使用。各Vfに合わせた電流制限抵抗にした。
トランジスタ2SAと2SCダブル接続でプログラム変更無しでカソードコモンをドライブしテスト
LCDは外して時定数を高速に設定。SINカーブによるPWM
タイマ0,2は8ビツト高速PWM
タイマ1は16ビットカウンタで8,9,10ビット高速PWMを選択できるが8ビツト高速PWMとした、また設定にバグがあったのを修正した。
pwm03.c
modf関数など使用せず、Double型実数をINT型にキャストして、小数点以下を無視し、整数にして8ビット高速PWM値(0から0xff=255)にしているのだが・・・
前述のfabs絶対値計算組合せで負の値を0としているプロセスも、Double型実数をunsigned INT型にキャストしたらできるのかな?負の値はどーなるのか試してみよう!
もっと簡単にできるのかもしれない・・・
ビデオの詳細
RGBフルカラーLEDそれぞれのPWMに下記、正弦波形式を使用
下の式で負の値は0となるようにした。
a,b,c各パラメータで合成された色になる。今回のビデオは下記波形とした
グラフはフリーのBearGrp V2 を使用し描いた
そのまんまです(汗)
正の部分の値を使い負は計算で0にしています。
y=a*sin(pai*b*(x-c)/180) をRGBそれぞれのパラメータの組み合わせで様々な光方を作り出せます。
pwm02.c
てっ言ってるうちに(笑)
画像じゃ解らないけど表題通りに変更して表示できた♪
lcd06.c
printf関数でfloat書式 (%4.5fなど) も表示できているが・・・
マイナス符号でケタずれする?
PICのC18の時みたいに、自前関数を作らないとダメなのか?
ビデオも見て(笑)ありきたりでつまらないですが・・・
pwm01.c
LCD表示プログラムが最適化対策の為、WAITでタイマ2を使用していたので今回は動作させていません
WAITルーチンは_delay_ms や インラインアセンブラ や タイマ使用など色々手法がありようですが、今回、RGBフルカラーLEDでタイマ0,1,2全て8ビット高速PWMに使用したので、WAITは_delay_ms を使用。
リニア変化をSIN波にしてみるつもりだが、LCDに数値を表示させたいので、こっちのWAITも_delay_ms に変更予定。
※メモ;PWM使用の時、ポートの出力設定は必須
RGBフルカラーLEDでテスト
タイマ0,1,2 全て使用
リニアなので変化がわかりにくいかも・・・
赤は肉眼では滑らかなのだがビデオで見るとデジカメの露出の関係か滑らかに見えない;
最期の青白っぽいのは全て点灯させたもの
電流制限抵抗は全て330Ωを使っているがRGBごとに変えてみた方が良いかも・・・
LCDにprintf関数で表示できるらしいので、三角関数を計算させてみた(笑)
#include <avr/io.h>
//printf関数を使用するのに必要なライブラリ
#include <stdio.h>
#include <math.h>
#define M_PI 3.141592653589793238462643
char dd=65;
double xx,yy;
xx=sin(M_PI*dd/180);
yy=cos(M_PI*dd/180);
//fdevopen関数でLCD表示関数を登録
fdevopen(lcd_put_ch, NULL);
メモ;printf関数でfloat書式(例;%4.3f)を使う設定をする。こうしないと実数は表示できないらしい
AVRstudioで・・・
1.ライブラリーのlibm.aとlibprintf_flt.aをリンク
2..リンカーのオプションに-Wl,-u,vfprintfを追加する
printf("sin%d = %2.4f",dd,xx);
printf("cos%d = %2.4f",dd,yy);
こんなワーニングメッセージが出るけどビルド出来る・・・
../lcd05.c:150: warning: passing argument 1 of 'fdevopen' from incompatible pointer type
Build succeeded with 1 Warnings...
多忙で、なかなか進まないが・・・
何処が変わったの?(笑)ってLCD(SC2004C)のDB4~7接続ポートをRD4~7からRC0~3に変更。
プログラム修正 lcd05.c
これで、PWMで3ポート使用出来るハズ・・・LCDはパラメータ確認用で今回は必要ないのだが(笑)
PICのプログラムを参考にしてLCD表示をライブラリ化しとこう・・・
※現在、ATmega168のヒューズビットは初期値のままで、ABL-168は20MHzクリスタルを実装しているが使用せず、内部RC発振で8MHzクロックとなっている。
とりあえずメモ
lcd04.c 最適化対策したもの
LCDの接続ポート図・・・BSch3Vで・・・
※ABL-168は20MHzクリスタル実装
ブレッドボードの様子・・・たったこれだけのことでゴテゴテ状態(笑)
書籍のそのままなので芸が無い(笑)
PWMで3ポート使用する予定なので、LCD接続ポートを変更してテストするつもりなのだが・・・
検索ワードにあってちょっと気になったので・・・
説明書に記載されているので出すまでもないのですが、カーソル位置指定の際、プログラムしやすいようにBSch3Vで書いてありました。
上段がキャラクタLCD表示内部アドレス。下段は実際にコマンドで送るアドレスです。
20文字×4行LCDに他のLCDが共通アドレスとなっています。
誤記あるかも・・・
わかってるって!(笑)
台風で外は大荒れ・・・誰も来ない(笑)
何もかもパラですが、PICでC言語が少しわかる様になってきたので、そろそろこいつもパラでテストしてみよう・・・
ABL-168 共立電子
基盤上にFT232RLを実装しUSBでプログラム書込機能を持ったAVR ATmega168のUSBブートボードです。
AVRstudio です。CのLCDテストプログラムでビルド成功しています。
ちゃんと動くかどうかは別ですが・・・(笑)
専用の書き込みソフト ProgramLoader で書き込みもできました。
あまり、ジムニー乗ってないので全然ジムニーおや爺じゃない・・・
年間走行距離がジムニーより自転車の方が遙かに多いことに気づいた(笑)
今まで、単一動作のプログラムではフローチャート書くまでも無かったのですが・・・
メニューの階層化や、複数ライブラリ化でこんがらがってきたので(笑)
PlanningFlow(試用版)使ってみました。
色付けしている部分が完成しているところです。
厳密にはフローチャートでは無いですが(笑)
頭の整理のために・・・
東総文化会館までノアで走行ログをSMDで再生。
SMDVer6は地図が古いので高速道路が一部無く、道路で無いところを走っています。国道は流れが悪くトロトロでした。
プログラムはメニュー階層化しました。
BB FlashBack Express 2 (日本語版)で画面録画してみました。
フレームレートは粗いです・・・
一旦ファイルに保存してから再度読み込んで経路再生したもの
現在の構成メモです。今まで、測位とログ出力は別プログラムでテストしていましたが、ライブラリ化し統合しました。
main.c メインプログラム
menu.c 初期メニューライブラリ、4×3マトリックスキースキャン関数
lcd18m20.c キャラクタ液晶表示ライブラリ(20Mhz、ビジーチェック無し)
gps.c GT-720FからNMEAセンテンスの文字列受信ライブラリ、I2C EEPROMにログ記録有り無し選択、数値変換、2地点の距離、方位角計算など
eprload.c I2C EEPROM に保存したログを$GPGGA形式で送信するライブラリ
初期メニューで分岐するだけの単純なものなので、今後、割込等で表示切り替えなど盛り込んでいく予定なのですが・・・
メモリは厳しそう・・・
電池駆動でメニューいじくって遊んでたら電池消耗しちゃいました・・・あまり長時間ログ取れないかもです。トホホ
4日、日曜日に出掛ける予定があったのでログ取ってみました。車両はノアでセンタートレイに載せて受信。電源は外部です。
SMD Ver6 は地図が古く高速道路が途中までしか無く道路でないところを走ってますが、田舎で空が開けていて測位精度も良いです。
息子のピアノの先生の講師コンサートが東総文化会館であり、息子と美人の娘(←マジで、笑)を連れて聞いてきました。
先生のピアノも初めて聞いたけど凄かった\@@/
ビデオ撮影禁止だったらしく知らずに撮ってたら怒られちゃいました(笑)
真面目で不真面目、怪傑ゾロリですから~
いつも不真面目ですが(笑)
安全面に関しては真面目、転倒した時や、衝突時に凶器にならないように、材質はアクリル板にしました。
しかし武骨で格好悪いなぁ~、じむにーおや爺にはピッタシ(笑)
ベルクロ固定部作成中・・・

合体方式は「ジェットスクランダー」を参考にしました(笑)
3.2.1.0.発射~♪ スクランダークロスでドッキング・・・
あっ!しまった、わしガンダムヲタクだった(笑)
ミーティアとフリーダムにしとけば良かった・・・
そのまんまです。
プログラミングが下手くそだから仕方ない(笑)
メニュープログラムでは条件文の階層がどーしても深くなって、
「この { はどこの } とつながってるんだっけ?」なんて事がしばしば・・・
秀丸エディタでも対となる{ }がハイライト表示されるのだが画面からスクロールで外れると機能しない・・・
もっと、C言語に特化したエディタは無いか検索したところ Notepad++ がヒットしました。
まだ使い込んでませんが色別表示やハイライト表示でコピペも楽そうです。多少、階層が深くなっても錯覚起こすこともないし・・・
コピペの時に } の位置を選択間違えすることも無い♪
※Delay関数に誤記有ります。
どうしても6.戻るキーではC言語ではタブーのgotoも使ってしまうのだが・・・
メニュープログラムはライブラリ化したし、マトリックスキースキャンも分離し関数化したのでまだマシか(笑)
メニューデモです。
もっと凝ったメニューにすると
か、階層が・・・
階層が・・・
怪僧ラスプーチン
↑わかんねぇだろうな(笑)
前回取ったログの再生ビデオです。
ジムニーでカインズホームへ買い出し
もの凄い速度(笑)
4×3マトリックスキー基板は、共立電子から購入したこれを参考に作りました。
HPから説明図です。R1~4(Rライン)は18F2550のRA0~3に10kΩプルアップ抵抗を介してデジタル入力で接続、C1~3(Cライン)はRC0~2に出力で接続。
ポートAはリセット直後はアナログ入力なので、ADCON1レジスタでデジタルI/Oに設定。
PORTA=0;
ADCON1=0x0F; //デジタルI/O
TRISA = 0b00001111; //RA0-3 INPUT
Cラインを順次0にしてRラインの状態をスキャン、チャタリング対策も盛り込んだ・・・
2行目左がRライン、右がCラインのポート状態を10進数で表示テストしたもの
04_matrixkey KEYmatrix.c
電源投入時、R、Cとも15で 2進 0b1111
これは「1」キーを押したところ・・・ R=14 0b1110、C=6 0b0110
「5」キー・・・ R=13 0b1101、C=5 0b0101
「#」キー R=7 0b0111、C=3 0b0011
では問題です。これは何キーでしょうか?(笑)
※答え、「7」キー R=11 0b1011、C=6 0b0110
これ元にメニュー作ってみよう
本当はポートBの上位ビット変化割込使った方が良いのだがLCD繋いじゃったし・・・
TMR0割込で通信中にチェック入れても大丈夫かなぁ~
実はマトリックスキーは、テストしないで構想だけで基板作って組み込んじゃったのであった・・・
動いて良かった^^;
ほぼ完成してテスト運用しています。
GT720F+PIC18F2550+AT24C1024B×4+ADM3202
電源 006P 9V または外部電源切換式 MPLAB C18でプログラミング
6極6芯ストレートモジュラーケーブルにて、ミニPICプログラマでオンボード書き込み可能
側面に外部シリアルポート(RS232C)ピンを追加、PIC側RXはGT720Fか外部かをスイッチで切換、ログ転送用です。
これによりGT720FのNMEAデータをエコーしてリアルタイムにパソコンに送ることも可能・・・
Dサブ9ピンとのアダプタ
シルバーウイークですが仕事なので出掛ける予定無し・・・
消耗品の買い出しにカインズホームへ行くついでがあったので、ジムニーの助手席に置いてログ取ってみました。
※今まで散々落っことしたりしてそのうち壊れてしまうのではと思われたGT720Fは、本体に両面テープで貼り付けたので分離出来ません。本当は分離してダッシュボード上の方が感度良いと思います。
02_gpstest.c
抜け道のゴルフ場脇の林道も走行
03_eprload.c
林道中一部ロストしているところあり・・・
GPGGAに復元したログを通信ソフトで確認している画面です。EEPROMへの記憶容量を稼ぐため緯度経度のみ記録しているのでそれ以外のデータはダミーです。
プログラムは使いやすい様に書き換えていく予定・・・
私 「起動時に画面にじむにーおや爺専用って出るんだぜ!」
バイトの娘 「あーそういうヲタクっているよね!」
(笑)
ログも取れる YUPITERU ATLAS ASG-1 サイクルコンピュータ並に小型・・・欲しい(笑)
でも、どんどん改良されて2とか3とかすぐ出るんだぜ(笑)
それに比べ、シャア専用じゃなかった(笑)じむにーおや爺専用GPSはでかいなあ(笑)
あ!ちゃんと「じむにーおや爺専用」って書いてあるし・・・(笑)
防水性能0!(笑)
LCDとスイッチ基板の結線が終了・・・
しかし、ごちゃごちゃ(笑)
PIC18F4550と一緒に入手してあった18F2550・・・
4550と同じだが一部コンフィグレーションが異なるので修正・・・
LCDはポートBに接続するが8ビットのうちRB0とRB1はI2Cで使用するので残り6ビットだからビジーチェックは無しにしてR/Wはグランドに接続・・・
EをRB2、RSをRB3、DB4~7をRB4~7に接続でヘッダーファイルを編集。
最初はミニPICプログラマの純正アダプタ部に差して書込。
テストプログラムも動いた♪
モジュラーアダプタをこんな感じで仮接続してオンボード書き込みも出来た♪
スイッチ基板の右4個がオンボード書き込みスイッチでMCLR、Vdd、RB6、RB7の切換になる。
モジュラーケーブル接続による書き込みは便利なので、ハーネス付け替えて正式にミニPICプログラマのケースに組み込もう・・・
GT720Fはこんな感じでオーバーハングさせて取り付ける予定・・・果たしてうまくいくかどうか(笑)
スライスしたケースにロック用溝掘らないといけないことに気づいた・・・
そろそろ、トホホ編書くかな・・・(笑)
GPSモジュール部は合体していませんが外観はこんな感じ・・・
4×3マトリックスキーと各種切換スイッチ基板部
秋月の安価で小型のスライドスイッチとタクトスイッチを使用、ケースには両方ともΦ4.5の穴で実装出来る♪
ハンダ付けは安定しないので万力に挟んでこんな感じで・・・
一部修正してますが(笑)LCDとスイッチが所狭しと並ぶ・・・
メイン基板のハンダ付けも終わった・・・
ジャック部の穴開けはこんな感じでマスキングテープ貼って、四隅を細いドリルで穴開けしてアクリルカッターで溝を掘って行く・・・
開いた(笑)筋トレは必須(笑)
仕上げはまだですが位置はこれでいいでしょう・・・
各基板の結線はこれから・・・
最初に・・・
今まで実験してきた構成だとGPSモジュールGT720FはRS232Cレベル出力だからPICとの接続にはレベルコンバータIC(ADM3202など)が必要になり、あまりコンパクトにならない、
また、レベルコンバータ内蔵のせいかGT720Fの消費電流は大きい(秋月HPで150mAと記載)ので乾電池駆動でどれほどの時間持つかどうか・・・GT720Fの発熱が大きいのも気になるところ・・・
なので、TTL出力のGPSモジュールの方が持ち運びには向いているのかも知れないが、新たに購入する気も起きないので、とりあえず試作することにした(笑)
電流も一応測定してみた・・・LCDの消費電流は少ないから、LEDバックライトは必要な時だけスイッチで点灯させる方式にして・・・
電源は006P 9V電池を使うとして、PICは40ピンの18F4550に変えて28ピンの18F2550にして、ここまで小さくできればと思ったが・・・
液晶(LCD)は小型のSD1602で・・・
PCBEでレイアウトしてみると、かなり無理ある(笑)
やっぱり、最初は欲張らずにこのくらいか!
アンテナはどーする?お!このケースいいんじゃない・・・でも深すぎ・・・
プラのこでスライスしちゃいました(笑)
一方、16F877Aテストボードを流用した18F4550は手狭になってきて、こんな100円均一ケースに移植中(笑)
やっぱ、18F4550用テストボードも作らないと・・・
もろもろ、合わせてPCBEで
877A改で4550テストボード基板・・・これは大丈夫だろう・・・
モジュラーやDCジャックも実装してみた・・・
DCジャックやUSB-Bコネクタは2.54ピッチで書くの簡単なんだが
モジュラーはピッチも違うし図面も無いしで、ノギスで実測してPCBEで描いて部品ライブラリに追加(笑) この後修正も入れているので画像は最終寸法ではありません
ミニPICプログラマのアダプタも作り替えてモジュラー追加・・・
導通チェックしてからハーネス付け替える予定・・・
元に戻ってGPSロガーは・・・
主要部品を仮載せしてみた、こんな感じでいーんじゃない ・・・
モジュラーと外部電源用DCジャックも実装・・・
今回は長くなるのでここまで(笑)
実は、色々問題が噴き出したのだが後日に・・・・
パソコン環境改善の為、新しいLAN DISK HDLP-G500を導入
手前が新で奥に見えるのが古いLAN DISK
セットアップして主要ファイルを移動して使い始めていたのですが・・・何か変?
プリント基板作成ソフトPCBEでモジュラージャック等の部品を作成していて、一旦登録した部品を描き直す為に「部品削除」を実施・・・
あれ?削除されてないぞ???部品ライブラリはテキストファイルなので直接、秀丸エディタで編集してみることに・・・いらない部分を削除して「上書き保存」した。
あれ?上書き保存が反映されず前のファイルのまま???ファイルのコピーは問題ない・・・「名前を変えて保存」すれば変更も反映されている???
別のアプリで作成したファイルやPCBEの基板ファイルはちゃんと変更保存出来ている???
なんじゃこりゃぁ~
犯人はこれ!ファームウエアVer1.00に問題有り・・・一部ファイルって何だよ(怒)
手順通りファームウエアをVer1.00からVer1.01に書き替えて「上書き保存」が出来る様になりました。
IOーDATA 結構こういうの多い(笑)製品は魅力的なのだが・・・気が付かなかったらどーすんだよ(笑)
これ問題でかいぞ!トホホ
HSP3 (HotSoupProcessor3) でCOM8に文字列を送信する簡単なプログラムを書いてみた。
仮想コムポートソフト Virtual Com Port 2 を起動してCOM8とCOM9をクロス接続する。
COM9でオープンしたAcknowrich で受信させてみた。
1台のパソコンで通信プログラムのチェックが出来るのは嬉しい(笑)
テキストファイル書込の簡単なテストプログラムも試してみた・・・
もう少し勉強すれば何とか形にできそう・・・
スクリプト言語システム HSP3 凄いなこれ!
前回、GPSモジュールGT-720Fのログを記録してパソコンの電子地図スーパーマップルデジタル(以下SMD)に送ることまで出来た。
このログはSMD上で保存出来るし、再び再生させることも可能なことがわかった。
余談;ログ記録は1秒ごとですが、再生はインターバル無しだったので約3kmの道のりを1分17秒で走行している・・・町内時速120kmで爆走だ(笑)
これは再生モード
しかし、先行きグーグルマップや別のソフトとの連携の為、PICとRS232C通信でコントロールしログのテキストファイル保存も検討中・・・
パソコン側のソフトはHSP3.0 や VB VC# などで作ることを考えている・・・
通信チェックの為、仮想コムポートソフト Virtual Com Port 2 導入
1台のパソコンで2つの通信プログラム間の送受信ができるもの。
フリーで使うには起動後5分の制限があるがチェックするだけなら十分か(笑)
まずこれを起動してクロスするコムポートを指定、ここではCOM8とCOM9
いつも使っている通信ソフト Acknowrich
COM9でオープン
チェックの為、新たに導入した通信ソフト Rs232c (そのまんまだな笑)
こっちはCOM8でオープン
ちゃんとソフト間で通信できている♪
息子のケータイが壊れた!
ここへ来て痛い出費かと思ったが新規0円があったのでそれにした。
ソニーウォークマンケータイ・・・左が新!
充電ホルダーにスピーカーが装備されている。またFMトランスミッターも内蔵!
私のケータイも真ん中のボタンが押しても反応しなくなっていたので・・・(笑)
左が以前の音楽も聞けない「簡単じゃねーか!(笑)、右が新でカメラに特化したもの・・・
ホルダーにスピーカーは無い(笑)
これでどーだ!(笑)24段階レベルメーター
本日のネタでは無いです。以前に改造してパソコンで音楽を聞いています。
パイオニアの古いパソコンスピーカーを分解・・・
ハンダ吸引器でアンプ基板からスピーカー配線を外す・・・
ドリルで穴を大きくする(笑)
レベルメーター用分岐配線を合わせてハンダ付けし直す・・・
もう片方はここから取り出す・・・
レベルメーターの絶対値回路へつなぐ端子を取付・・・
レベルメーターLEDはエンビ板に固定した・・・
詳細は「GT-720F の走行ログをスーパーマップルデジタルで再生してみた♪」を見て(笑)
注;BGMの会話に他意はありません
ノアでGT-720Fの走行ログを取ってみた。2行目右「No」が「LOG」になった時、I2C EEPROMに書込中。
これを別プログラムで$GPGGAに復元して電子地図スーパーマップルデジタルVer6のGPSナビゲーションモードで再生させてみたもの。
※データが一部不連続で飛んでいる所あります。
選挙の事前投票に行くついでにログ取ってみました。車両はノアです。
gps_epr03 通信速度は9800bps
ビデオから変換した画像なので解像度悪いです。2行目右の「No」が「LOG」に表示された時がI2C EEPROMに保存中。後でビデオUPしますが瞬間しか表示されません。
最大アドレスで「END」を表示して書込は停止します。スイッチ等でのメニューオペレーションはこれから考えるので、今は電源投入後、アドレス最初から上書きする仕様です。
GLCD(グラフィック液晶)はメモリーオーバーでキャラクタ液晶に戻しました・・・
下は別プログラムで$GPGGAに復元し送信テストしたものです。緯度経度情報以外はデタラメな値です。通信速度は電子地図に合わせ4800bpsにしました。
epr_logdemo02
これを電子地図スーパーマップルデジタルVer6 のGPSナビゲーションモードで走行ログ再生させてみました。
カシミールでも取り込めるようにしてみたい・・・
後はメニューだな・・・
もうひとつはまったのはこれ・・・
書籍に記載のプログラムは256kbit(キロビット)AT24C256B を使って
/* グローバル変数、定数宣言 */
#define MAX_EEPROM 0x0200 //Maximum 0x8000
char chipadrs; //IC chip address
int address;
でしたが、1Mbit(メガビット) のAT24C1024B の場合
/* グローバル変数、定数宣言 */
#define MAX_EEPROM 0xF9F8 // 1M EEPROM/2=512kビットMAX
unsigned char chipadrsw;
unsigned int addressw;
って変数の型にしなければならない。
拡張I2C EEPROMの規格は512キロビツトで最大8個まで接続ですから1メガビットには1個に2ページあることは以前に書きました。
アドレスは16ビットでデータは8ビット単位です。
「512キロビットは何ビット」って検索するとグーグル電卓が答えてくれます。すげぇ~
512キロビット=524288ビット
ちなみに1メガビット=1048576ビットです。
524288ビット/8ビット=65536 が最大アドレスになります。
緯度経度データは19文字で
(例) 3537.456314022.2430
のようにしますから1データは19×8=152ビット
524288/152=3449.263・・・で3449データ記録できますから
3449×19=65531を最大アドレスとし16進数で0xFFFB
※プログラム0xF9F8になってますね(汗)512キロビットを512000ビットで計算ミスしちゃってます(笑)
epr_logdemo01というダミー書込テストプログラムではchar型で問題なく動いて(何で動くんだよ)、GPSと組み合わせたgps_epr03では途中までしか書き込めなかった?・・・
(※プログラムファイル名は自分の為のメモです)
なので変数型がアンマッチに気づくのに時間がかかってしまった(笑)
char -128~127
unsigned char 0~255
int -32768~32767
unsigned int 0~65535
アドレスの変数型はunsigned int にしなければだめでしょう。
固定測位ですがgps_epr03で記録した緯度経度をepr_logdemo01で読み出したもの
約1秒で記録だから512キロビットで3449秒=57.48分記録出来る。
1Mbit(メガビット) のAT24C1024B で2倍の約115分、4個で約460分(7.6時間)か・・・
これを$GPGGAに戻して電子地図に送信する部分を作らねば・・・
簡単に言ってますが、かなりはまりました。
I2C EEPROMからGLCD用フォントの読込で成功したのでGPSログの書込も簡単だろうと思っていました。
I2C EEPROMへの書込プロセスは書籍の改造で問題ないのですが・・・大元の連続文字受信プログラムに問題がありました。偶然旨く行っていた感じです。
メモって置きます。USART用にオーバーランエラーやフレーミングエラー回避の1文字受信用getc_err()関数(直接レジスタ操作)を作成しましたが、流れを下記の様に記述しないと動作が不安定でフリーズしたりします。
<こことか・・・>
while(1)
{
<ここで前処理あれば済ませる>
// USART初期設定 非同期で9600bps
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_HIGH, 129);
<この間に余計なプロセスを入れない>
data1 = getc_err(); //1文字受信
if(data1==dol1) //センテンスの開始$の検出
<文字列判断条件文などは問題無いが、配列などに受信した文字を格納するまで時間のかかる計算や液晶表示、EEPROMへの書込などを挟まない>
CloseUSART(); // 一旦通信を終了
<この後に計算や液晶表示、EEPROMへの書込をする>
OpenUSARTしたら文字を配列等に取り込みCloseUSARTしてからもろもろ処理すれば良いことになります。GPSモジュールGT-720Fは電源が投入されると1秒間隔で文字列を連続で送り続けますから、受信側で繋いだり切ったりしてやるということです。処理が終わったら再度OpenUSARTして取り込みを繰り返します。
OpenUSARTと受信関数の間に液晶表示が2行くらいあっても動きますが3行くらいからフリーズしたりして(笑)・・・まあ考えれて見れば当然のことなんですが・・・最初はCloseUSART無くても動いてたんですから(笑)
EEPROMからフォント読み出しでも問題なくて、ログ書込で動作がおかしくなってきたんですから犯人探しに時間がかかりましたよ(笑)
$GPGGA文字列を検出したら適当なフラグを立てて判断し、EEPROMに書き込みますから実質1秒に1回書込です。
タイマ0で1秒ごとに書込もやってみましたが、旨くタイミングが合えば正常に動作していますがズレると突然とんでもない動作します(笑)文字を配列などに取り込み中に時間のかかる割込などさせない方が良いでしょう(笑)
ああ修行が足りない
C18でI2C EEPROM AT24C1024B の書込読み出しプログラムでテストをして、後閑哲也氏のSG12864Aのフォントファイルを書き込んでみた。
これは後閑哲也氏のフォントファイルで、Font[192][5]の2次元配列で構成されていて、8ビット5カラムで1フォントデータになっている。
並びはアスキコード順となっている。(0x20コードから開始)
このファイルデータをEEPROMに書込、USARTでパソコンの通信ソフトAcknowrichに読み出してみた。バイナリデータを16進で1行に5アドレス分表示している。
左の2ケタは拡張I2Cの上位と下位アドレスである。
SG12864Aのライブラリファイルで配列からフォントデータを呼び出すプロセスをI2Cのアドレスから呼び出すプロセスに改造・・・
オリジナル(2次元配列)
for(i=0; i<5; i++)
lcd_Write(cs, Font[letter-0x20][i], 0);
lcd_Write(cs, 0, 0);
改造後(I2C)
chipadrs=0xA0; //EEPROMチップアドレス
address=(letter-0x20) * 5; //ASCIIコードからEEPROMアドレスに変換
<中略>
for(i=0; i<5; i++){
data1 = ReadEE(chipadrs, address+i); //I2CEEPROM読み出し
lcd_Write(cs, data1, 0);
}
文字をINT型にキャストしてアスキーコードを得ているので、それぞれ赤字の部分で読み出し数値に変換している。
文字Aならアスキーコード0x41なので2次元配列の場合、0x41-0x20
I2Cのアドレスの場合、(0x41-0x20)×5=0xA5 となる。
※実際のプログラムは1行18文字を21文字に改造してあり、フォントデータがGLCDの左右のチップをまたぐ為、上記を基本とし若干複雑になっています。
これで多少メモリが復活しました。フォントデータの大きさも気にする必要はありません。
2の補足衛星数と4の海抜高度(数値に変換して表示)を追加できました。
1.現在地緯度経度、3.進行方位角、5.速度(ノットを時速に換算)
6.目標地点緯度経度、7.目標地点方位角計算値、8.進行方位に対する目標方位角計算値、9.目標までの直線距離計算値
メモリは依然厳しい状態で・・・計算をもう少し見直すか、ATAN計算を小細工プログラムにするかしないとログ取りプロセスは追加できないかも?
修行が足りない(笑)
メモリーいっぱいいっぱいですが・・・
ちゃんと動作しています。
GLCDは仮固定なので移動運用は出来ないのですが、固定測位でセンサーを動かして見ています。
速度が多少変化して方位角も変わるので円の指針が合わせて動きます。
指針の示している方角が進行方向に対する目標地点です。
しばらく修行するのでお休みするかも?・・・
USBコネクタと電源コネクタ
足の穴は広げないといけない・・・
万能基板でチェック・・・
こんな感じか(笑)
6Pモジュラージャックは2.54ピッチじゃないので万能基板で確認出来ない・・・
プリント基板の余りに穴開けして取付確認・・・
マトリックスキーは共立電子から購入した
あ~だんだん、こんがらがって来た(笑)
前回、AT24C256B でテストしたが 1M のAT24C1024Bを入手・・・
あれ?デバイスアドレスピンA0,A1,A2がA1,A2しかない?・・・英文のデータシートでA0はP0になっている・・・
あー!、内部にメモリーページが2ページあってP0がアドレスなのかぁ~そういうことか!
アドレス000から111までなら8個のデバイスがパラレルに接続できるが、こいつは*00~*11で4個までってことになるよね!内部に2ページで8個と同じって事だ・・・
って事はこのプリント基板は書き直しだ(笑)
やっぱし、ブレッドボードで確認しよう(笑)
危ねぇ危ねぇ
まじで・・・これ以上複雑な事できないじゃん(笑)
フォントもカタカナの部分減らしてだよ(笑)計算しすぎか?
目標方位と進行方位の差分方位角もビジュアルに表示できて面白いのだが・・・
フォントをプログラム内に持ってきてるのに無理あるんだろうなぁ・・・外部メモリに記憶させるとか・・・
GLCD(グラフィック液晶)はとりあえずペンディングだなぁ~
メモリーもいっぱいいっぱいだが・・・わしも、いっぱいいっぱい(笑)
オリジナルの1行に18文字を21文字表示できるように改造・・・
以前作成の、キャラクタLCDで作成した数値を文字に変換して表示する関数をグラフィックLCD用に改造してテスト表示したもの・・・空白がきちんと処理されているか確認の為、一旦表示エリアを0で敷き詰めてから描画させている。これにより正常に表示されていることが確認出来た。
この表現力は凄い・・・詳細は後日に・・・こればっかし(笑)
7行目、8行目の数値は、円の指針の先端座標(x、y)です。動きに合わせて変化しています。
イメージデータは表示出来ていません(泣)
円を描いて指針が動く部分はGT-720Fの差分方位角をビジュアル化する為のタタキ台です !(笑)
三角関数で10°置きに直線を描いて円に補完しています。表示位置や大きさ、角度の分解能は変更可。
なんとか電子工作室の後閑哲也氏 PIC24H C30用 SG12864A ライブラリをPIC18F4550 C18 用に書き換えて移植出来た。
こちらのフォントは192個?あって豊富、呼出も一般的なC言語の手法であるところの、文字を int型にキャストしてASCIIコードを得る方法で配列から選択している
char c1 = 'a';
int code1 = (int)c1;
Electron Craft - 趣味の電子工作 さん の PIC16F CCS-C のSG12864用ライブラリも 18F4550 C18 に書き換えて移植出来た。
こちらのフォントは入力文字からSWITCH文でフォントデータを選択する手法になっている。フォントのカラム数が一定で無いので密度は高いが・・・
文字ズレも生じる。数値は文字ズレ起こすと問題有るが、アルファベットは密度高い方が体裁が良いかも・・・
ネットではその他、2バイト漢字フォントもあったけど移植できるかなぁ?使わないか(笑)
後閑哲也氏オリジナルのフォントファイルはC18では
const char Font[192][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " 0x20
{ 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! 0x21
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22
MPLINK 4.32, Linker
Copyright (c) 2009 Microchip Technology Inc.
Error - section '.idata_glcd_lib1.o' can not fit the section. Section '.idata_glcd_lib1.o' length=0x000003c0
Errors : 1
となりコンパイラが通らない・・・
試しに2次元配列を Font[192][5] から Font[32][5] に減らすとビルド出来た!?
メモリ使用量もこんなもの・・・
変数の修飾子 const を rom に変えてみたら Font[192][5] でもビルド出来るぞ!?(ちなみにramじゃダメでした)
rom char Font[192][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " 0x20
{ 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! 0x21
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22
参考にメモリ使用量です。
他にもC18用に色々書き換えなきゃコンパイラが通りません・・・
ちなみにディレイ関数は換算できるようにエクセルで表を作成しました。
まじで、日々是勉強なり(笑)
しばらく、実家に行ってて帰って見れば状況が一変(笑)
いたしかたない・・・重荷にもなってたようだし・・・なんとか急場の穴埋めも出来たし・・・
「DTMがやりたい!」という息子の情報収集も兼ねて、実家からの帰り途中に神田の三省堂に寄って書籍を色々購入・・・
今の心境はまさしく帯に書かれたこれ!(笑)
かなり以前に購入したが眠っていたグラフィック液晶 SG12864A ・・・
接続用プリント基板も作成済みでしたが後回しで一度も動作させてなかった・・・
18F4550 を稼働させたので、今回これもなんとか動かしてみようと思う。
データDB0~7はポートDに接続、ポートCはRC0、1がI2Cで使用するのでRC2~7をD/I、R/W、E、CS1,CS2,/RESに接続。
また誤記だ!(笑)ポートCでは無くBだ、RB0,RB1がI2CなのでRB2-7に上記を接続 2009.08.11訂正
(注※、I2Cポートは16F877Aと異なっている)
この液晶、動作が速いようでビジーチェックは必要ないみたい・・・
データシートも英文しかない(笑)
他力本願を狙ってたのだが・・・ネットで調べてもC18で動作させた情報は無いようで(笑)
PICで有名な後閑哲也氏はPIC24F C30 で動作させていて 18F4550 C18 用に書き換えたつもりだったが、うまくコンパイラが通らない(笑)
他にPIC16F CCS-C で作っている方がいて、これをC18に書き換えたつもりでもコンパイラが通らない(笑)
C言語自体が勉強不足なのと、それぞれのコンパイラの相違もあって・・・
このグラフィック液晶はキャラクタ液晶ほど初期化などのプロセスが複雑ではないので、とりあえずフォントファイルなどを組み込まずマニュアルの手順通りでアルファベットのAをデータで表示成功!
ここで気が付いたこと「CCS-C の時はPICのポートの初期化は意識せずに問題無かった(ほんとは問題有り?)、C18はセオリー通りに初期化しないと動作がおかしい」・・・当たり前か(笑)
関数のプロトタイピングや変数の扱いがC18の方がCCS-CよりANSI-Cに近いんじゃないのかな?言い換えるとCCS-Cの方が賢いのかも知れない(笑)
一般的なC言語を少し勉強してヘッダーファイルを作成して関数のプロトタイピングや変数の指定、ディレイ関数を自分の環境に合わせて作成したりしてなんとかフォントファイルも組み込めた・・・
これはフォントファイル使用して描画したもの
「A」だけじゃ面白くないから「GT720F」を描画してみた(笑)
解像度はイマイチだけど文字の大きさもキャラクタ液晶と違い自由に変えられるし、図形やグラフも描画できるハズだし・・・
やっぱバックライトはホワイトLEDの方がいいなぁ~出さないかな(笑)
SC2004Cと比べてもこの大きさで情報表示量が格段に多いことになる。
GT-720Fの情報や計算した結果や、方位を図形で表示させるには最適のハズ(笑)
本格的なプログラムはこれからだが・・・
18F4550が16F4550になってたので修正 2009.08.11
ベランダでバーベキューすることになり、少し離れたスーパーまで食材買い出しにジムニーで3人乗り(笑)かみさんが、運転席助手席の赤レカロシートのせいで狭くなった後席で撮影した物・・・ 前回設定の目標地点から遠ざかる方向です・・・ ちょっと誤動作してる?kmのところにmが付いてる?ケタづれ防止してるのだが、電源投入時に誤動作することがあるようだ。また方位角の差分計算は見直す予定。 GPS車速は妥当な値かな?そのうち車速パルス計算と比較してみたいと思います。 BGMはイングヴェイ・マルムスティーンのCryingです。
同一計算条件で、877Aでは5°置きの値を参照するプログラムで130°でしたが、
4550ではC18でATANも問題なく計算出来ます。約128°です。
1行目は目標地点の緯度経度。
2行目はGT-720FのGPGGAから現在地緯度経度。
3行目はGPRMCから速度(ノット)を時速に換算。2地点間の距離を計算。
4行目右は2地点間の方位角を算出したもの。左はGPRMCから進行方位角です。中央は右から左を引いたもの 、+の場合は進行方向右に目標がある。-の場合は左に目標があることになります。
※固定測位なので進行方位角は安定しません。
※ATAN計算の分母が0になるときは条件式でATAN計算せずに0になるようにしました。
0°から180°まで1°置きにsin、cos計算。
先に作成した関数で表示OKだと思う。実際の計算は角度をラジアンに変換しています。
前回の考え方を発展させて関数化してみました。色々、数値入れてチェックしてみましたが、これで大丈夫でしょう(笑)
かなり長いプログラムになってしまったので掲載しません。
1.整数部の桁ズレ防止の為、桁値を指定するようにし、空きにはブランクを入れるようにした。(空きは0で表示も可能)
2.負の値は扱えないので、計算は絶対値とし、負の場合の-表示部分を追加した。
3.小数部も整数部同様、第何位まで表示するか指定するようにした。
※;単純に0.5678×10^4=5678 だけでは 0.0078×10^4のような場合78となって文字変換しても78で0078にはならないところを修正(笑)。
使ったライブラリ
#include <p18f4550.h>
#include <delays.h>
#include <lcd18m20b.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
/* 関数プロトタイピング */
// 浮動小数点実数の液晶表示 x=実数,real_n=整数桁,deci_n=小数桁 //
void lcd_float(float x,int real_n,float deci_n);
作成した関数でテスト処理させた内容です。
lcd_cmd(0xC0); //2行目
lcd_float(34.5678,5,4);
lcd_cmd(0x94); //3行目
lcd_float(1234.5678,5,3);
lcd_cmd(0xD4); //4行目
lcd_float(-34.00789,8,4);
通常の実数値入力では34.5678が34.5677になるようなことはなく切り捨てになることがわかると思います。3行目、4行目
これ液晶ライブラリに組み込んだ方がいいかも・・・
まだバグあるかもですが、これでGT-720Fのデータを計算して表示してみたいと思います。
そもそも何がANSI-C準拠で何がC18特有なのかも理解していない・・・(笑)
だから試行錯誤で液晶表示で確認するしかない(笑)
1.C18の液晶表示ライブラリは40MHz用を20MHz用に改良してビジーチェックを追加した。
2.C18のUSART(RS232C)受信関数は、CCS-CのERRORSのようなオーバーランエラー、フレーミングエラー処理の適当な命令が見つからないので、直接レジスタ操作する関数を作って対応。
(※;直接レジスタ操作の方法はCCS-CよりもC18の方が行いやすい)
前にも書いたが、CCS-Cは出力も拡張で液晶に
printf(lcd_data,"cos(pi*%lu/180)",data);
なんてこともできるから%書式さえきちんと書けば、浮動小数点実数値でも文字列に変換して液晶表示できるけど・・・
C18はそんな便利な機能は無い!(笑)
数値を文字列に変換できるのは整数だけ(笑)
でも浮動小数点実数を整数部と小数部に分ける関数がある・・・これだ!
実行結果です。
34.5678 なんだが 34.5677 になってる????確認要・・・
プログラムソースです。
小数点部はZ=0.5678 なので小数第四位まで表示するなら10000倍して整数化した後、文字列変換すれば良いハズ。
// 追加ヘッダーファイル
#include <lcd18m20b.h> // LCD表示(20MHz,ビジーチェック有り)
#include <math.h> // 数学関数
#include <stdlib.h> // 文字列関数
/* 関数プロトタイピング */
// 無し
/* 変数の定義 */
char STRTMSG[] = "18F4550 math.h test"; // 開始メッセージ
char dodo1[]="."; // 小数点
float x=34.5678; // テスト用の浮動小数点実数
float y; // 整数部格納変数
float z; // 小数部格納変数
char yy[4]; // 文字配列、整数部用
char zz[6]; // 文字配列、小数部用
/* メイン関数 */
void main (void){
////入出力設定
TRISB = 0; // PORTB全部出力設定
lcd_init(); // LCD初期化
lcd_clear(); // LCD消去
lcd_str(STRTMSG); // 開始メッセージ表示
lcd_cmd(0xC); // カーソルOFF
//// メインループ
while(1)
{
z = modf(x,&y); // 小数点部=z,整数部=y
ultoa(z*10000,zz); // 小数点部zをn倍して整数化し文字列に変換→zz
ultoa(y,yy); // 整数部yを文字列に変換→yy
lcd_cmd(0xC0); // 2行目
lcd_str(zz); // 小数部の表示
lcd_cmd(0x94); // 3行目
lcd_str(yy); // 整数部の表示
lcd_cmd(0xD4); // 4行目
lcd_str(yy); // 整数部の表示
lcd_str(dodo1); // 小数点.の表示
lcd_str(zz); // 小数部の表示
} // while(1)end
}
これを関数にしてプロトタイピングすれば計算後の液晶表示も容易になるかな・・・
詳細は後日に・・・
夏バテかなぁ~疲れて詳細書く気力無し・・・
CCS-C と C18 かなり違う・・・
とりあえず文字列処理まで出来たが課題は山積み・・・
息子「今週末、こち亀に香里奈が出るから元気出せよ!」
オレってそういう奴?(笑)
研究社の英和辞典、引っ張り出してきて・・・(笑)
16F877AのPDFは234ページだったけど、18F4550は430ページもある・・・しかも英文で(笑)
パソコン画面で見るのは老体にはつらい(笑)ので印刷しちゃいました・・・
※以下、勝手に解釈して想像も含まれていますので間違っているかもしれません。あしからず・・・
少しづつ解ってきました・・・18F4550のクロックダイアグラムです。
以前の外付け10MHzのセラロックを付けると内部で40MHzになるような18Fシリーズとは異なるみたいです。
恐らくUSB機能搭載に合わせた?PLLはUSBの仕様に合わせてある?
内蔵PLLは4MHz入力で、てい倍の96MHzを発生します。USBフルスピードで、半分の48MHzを使用します。
従って、PLLには4MHzの倍数のクロックをデバイドして入力することになり、外付けのセラロックは4,8,12,16,20,24,40,48MHzから選択することになります。
10MHzは不可ってことになりますよね?
20MHzのセラロックだったら5でデバイドして4MHzにします。コンフィグの指定です。
#pragma config PLLDIV=5,USBDIV=2
一方、マイコン本体(MCU)で使用するクロックは外付けセラロック(20MHz)のものをそのまま使用する場合
#pragma config FOSC=HS
かPLLから出力されたクロック(96MHz)を使用する場合
#pragma config FOSC=HSPLL_HS
をコンフィグで選択できます。さらにCPUDIVで両方の場合でクロックが分割できます。
コンフィグ無指定だとHSの場合は/1(20MHz/1→20MHz)、HSPLL_HSの場合は/2(96MHz/2→48MHz)となります。
以下コンフィグヘルプファイルから抜粋です。
秋月電子通商から通販で購入・・・
40ピンの18F4550と28ピンの18F2550も手配した。
このデバイスはポートCのRC3ピンが無くてVUSBピンになっている。それ以外は16F877Aとピンコンパチなのでとりあえずテストボードに差し替えて見ることにしました。
将来的にはRC3の差し間違えを無くす為、18F4550の専用テストボードを作る予定・・・
で!なかなか877AがICソケットから外せなかったのですが、小さいマイナスドライバーでこじってなんとか外しました。
そのまま4550を差そうとしましたが、足が広がっていて差さりません。
いつもやっている足曲げ(笑)
無事差さった。換装完了!!!
コンフィグワードとかまだまだ勉強不足でイマイチ動作が不安定なのですが、液晶表示テストプログラムが動いてます。
本体のプログラムと別に液晶ライブラリソースをlcdlib18.cを追加してlcdlib18.hヘッダーファイルのプロトタイピングで受け渡すのですがこのファイルも前回同様パスを追加しないと認識しませんでした。
書籍のソースに対して私のテストボードはRSがRB1、E(STB)がRB0なので変更。R/WはRB2に接続されているがライブラリがビジーチェックを行わない仕様なので
LATBbits.LATB2=0; // R/W常にLOW,BusyCheck無し
としました。
コンフィグはとりあえず下記で設定・・・
#include <p18f4550.h>
#include <delays.h>
#include <lcdlib18.h>
/* コンフィギュレーションの設定 */
#pragma config FOSC=HS, FCMEN=OFF, IESO=OFF, PWRT=ON
#pragma config BOR=ON, BORV=0, VREGEN=OFF,WDT=OFF, WDTPS=1024
#pragma config MCLRE=ON, LPT1OSC=OFF,PBADEN=OFF, CCP2MX=ON
#pragma config STVREN=OFF, LVP=OFF, ICPRT=OFF,XINST=OFF,DEBUG=OFF
#pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF
#pragma config CPD=OFF, WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF
#pragma config WRTB=OFF, WRTC=OFF, WRTD=OFF, EBTR0=OFF
#pragma config EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
18F452などとはかなり異なってます。452から始めれば良かったかな?(笑)
コンフィグの設定はMPLAB IDEのヘルプから見れます。PLLの設定が良く解らない?・・・
452のコンフィグでビルドすると当然エラー(笑)
先の4550用コンフィグでとりあえずビルドできました。
設定してないコンフィグはデフォルトでどーなるの?MPLAB IDEで確認出来ます・・・
FOSC=HS だから PLLは分割しないになってる?うーん?
レゾネータ(セラロック)20MHzでも10MHzでも動くし・・・
まあ、慌てずにいろいろ試してみよう・・・
ちなみに書込はミニPICプログラマとW509で出来ます。
CCS-Cの方がDELAY関数がクロック周波数設定できたり・・・
出力も拡張で液晶に
printf(lcd_data,"cos(pi*%lu/180)",data);
なんてこともできるから数値でも液晶表示できるけど・・・
C18はなんかアセンブラに近い感じ(笑)
877Aがフリーダムだったら、4550はストライクフリーダムくらいになった気分♪
凄くわかりやすいでしょ(笑)
18F4550・・・まだ持ってないんですが(笑)
C18でATANが計算できるのか?チェックプログラムでビルド出来ました。他は何もしないプログラムなので何の意味も無いですが(笑)
絶対値計算の関数はCCSCではABS()でしたがC18はFABS()なので修正しました。英文のライブラリーPDFを参照・・・
実はC18にはATAN2(x、y)関数もある。すげぇ~
16F877Aと殆どピンコンパチの様なのでやっぱ18F4550が有力候補だな♪
ミニPICプログラマでも書き込みできるようだし・・・
方位角の計算式は組めるのですが・・・
16F877AでATAN(アークタンジェント)を使うとメモリーオーバーする。
ほんと色々試してみましたが駄目・・・もう時間の無駄って感じ(笑)
下記は距離計算を外して、ATANを5°置きの計算値を参照する小細工プログラムで実行させたもの・・・
経度の変位分に緯度のCOS計算が含まれていますがメモリーオーバーしません。
130°です。スーパーマップルで印刷して角度を分度器で測ると50°です。
第2象限なので真北を0°として180°-50°=130°となります。
この方位計算に先の距離計算を組み込むとまたメモリーオーバーです。
COS計算を外して緯度30°のCOS30°計算値を使用した小細工プログラム(笑)です。メモリー85%です。
誤差ありますが関東近辺では使えそう(笑)
ちなみに速度ノットはkm/hに換算しました。
とりあえずこれで誤魔化して使って(笑)
同じ計算を2度しないように下記のようにセパレートにしたりしたのだがコンパイラの方が頭良くてふつうに書いても最適化してるようで(笑)
////緯度変位関数
float dp(float p1,float p2)
{
float di;
di=abs(p2-p1);
return(di);
}
////経度変位関数
float dq(float p1,float q1,float p2,float q2)
{
float di,hp1;
// float pai=3.141592;
// hp1=(p1+p2)/2;
// hp1=hp1 * pai/ 180.0000;
// di=abs(q2-q1) * cos(hp1);
di=abs(q2-q1) * 0.8191;
return(di);
}
////2地点距離算出関数
float dist(float dp,float dq)
{
float pai=3.141592;
float di;
di=sqrt(pow(dq,2)+pow(dp,2));
di=6370.0000 * di * pai / 180.0000;
return(di);
}
////2地点方位角算出関数
long azimuth(float p1,float q1,float p2,float q2,float dp,float dq)
{
long dpq,azi1;
dpq=dq/dp*10000;
if(dp==0)
{azi1=90;}
else
{
if(dpq>=0){azi1=0;}
break;
if(dpq>=875){azi1=5;}
break;
if(dpq>=1763){azi1=10;}
break;
if(dpq>=2679){azi1=15;}
break;
if(dpq>=3640){azi1=20;}
break;
if(dpq>=4663){azi1=25;}
break;
if(dpq>=5774){azi1=30;}
break;
if(dpq>=7002){azi1=35;}
break;
if(dpq>=8391){azi1=40;}
break;
if(dpq>=10000){azi1=45;}
break;
if(dpq>=11918){azi1=50;}
break;
if(dpq>=14281){azi1=55;}
break;
if(dpq>=17321){azi1=60;}
break;
if(dpq>=21445){azi1=65;}
break;
if(dpq>=27575){azi1=70;}
break;
if(dpq>=37321){azi1=75;}
break;
if(dpq>=56713){azi1=80;}
break;
if(dpq>=114301){azi1=85;}
}
if(q2 >= q1 && p2 >= p1) //第1象限
{
}
break;
if(q2 >= q1 && p2 < p1) //第2象限
{
azi1=180-azi1;
}
break;
if(q2 < q1 && p2 < p1) //第3象限
{
azi1=azi1 + 180;
}
break;
if(q2 < q1 && p2 >= p1) //第4象限
{
azi1=360-azi1;
}
return(azi1);
}
18F4550あたりに浮気するか?16F新シリーズ待つか?計算だけ別のPICにさせるとか(笑)
何でこんなに手間かかるの?(笑)
MPLAB IDE V.8.30 は起動しないから始まって・・・
C18Compiler V3.32ではこんなエラーが出て
error [1027] unable to locate ******
ヘッダーとリンカーのパスを通す。
error - could not find file 'c018i.o'.
ライブラリのパスを通す。
でやっとテストソースでビルド出来た・・・
CCS-Cの方が勝手にパス通してくれるから便利なんだが・・・
18FシリーズはC18がおすすめのようで・・・
それとも新16Fシリーズが出るの待つかな(笑)
後でOpenOfficeで清書するとして、忘れないうちにメモ書き
緯度方向距離は緯度変化分ラジアンに地球半径を掛けて円弧を計算する。
経度方向距離は経度変化分ラジアンに地球半径が緯度の余弦に比例させた半径と掛けて円弧を計算する。
この「緯度の余弦」の緯度は基準点か目標点か2点の単純平均値をとるかは考え方が色々ある様ですが、ここでは平均値としました。どれを取っても近距離では変わらないかも?です。
あとは三平方の定理から距離を算出。
一方、方位角は真北を0度として東回りに角度が増えるとすると、ATAN(アークタンジェント)で計算出来ますが求まる値は0~90度なので、2地点の緯度・経度の大小条件で象限ごとに角度が決まることになると思います。
なぶり書きですんません・・・
何か電子工作か?プログラミングか?数学の計算してんだか?どんどん脱線していくジムニー親爺(笑)
前回、調べた球面三角法での2地点の距離計算ですが・・・
距離が100kmくらい長いと計算できるのですが・・・数kmの近距離だと0kmと計算されてしまう(笑)
きちんと確認していないので想像ですが、恐らく計算精度の問題でしょう。
上の式で2地点間の距離が近いとCOSθは限りなく1に近い値になる。θを求めるのにACOS(アークコサイン)を使うのだがこの精度が低いとθが0になる為、0に何掛けたって0になってしまう。
CCSCコンパイラの標準算術関数のACOSは-1.0~1.0の値を扱うとある。1.0と0.9は区別出来ても0.99は1.0と計算されて0ラジアンになるのではないか?後日検証してみます。
1行目は目的地の緯度経度。
2行目はGT-720Fから得た現在地の緯度経度。
3行目は距離計算値です。
メモ(gps004.c)
////2地点距離算出関数
float dist(float x1,float y1,float x2,float y2)
{
float pai=3.14159265;
float xr1,xr2,yr1,yr2,hx1,hxr1,di;
float dco,dco2;
hx1=(x1+x2) / 2;
hxr1=hx1 * pai / 180.00000000;
xr1=x1 * pai / 180.00000000;
yr1=y1 * pai / 180.00000000;
xr2=x2 * pai / 180.00000000;
yr2=y2 * pai / 180.00000000;
di=6370.000000 * acos(sin(xr1)*sin(xr2)+cos(xr1)*cos(xr2)*cos(yr1-yr2));
return(di);
}
140kmくらい離れたところだと計算出来ます。
式の出所が明確でないので調べてから後日載せますが、ACOSを使わない計算式を用いた結果です。
上記の緯度経度同様に計算して4.22kmと算出されています。
メモ(gps005.c)
////2地点距離算出関数
float dist(float x1,float y1,float x2,float y2)
{
float pai=3.14159265;
float xr1,xr2,yr1,yr2,hx1,hxr1,di;
float dco,dco2;
hx1=(x1+x2) / 2;
hxr1=hx1 * pai / 180.00000000;
xr1=x1 * pai / 180.00000000;
yr1=y1 * pai / 180.00000000;
xr2=x2 * pai / 180.00000000;
yr2=y2 * pai / 180.00000000;
dco2=sqrt(pow(abs(yr1-yr2)*cos(hxr1),2)+pow(abs(xr1-xr2),2));
di=6370.00000000 * dco2;
return(di);
}
自宅付近からワングーまでの距離です(笑)スーマーマップルの計算値とも合っていると思われます。
同様に140kmくらいはほぼ同じ計算結果となります。
とりあえずこれでいいや(笑)
パソコンのEXCELだったらACOS計算も精度高いのだが・・・
うーん手強い・・・(笑)
方位角の計算もATAN2(x,y)を使ったりして(笑)どーすんの!
自転車・徒歩での近距離使用がメインと考えるから近似式で良いでしょう。別に測量するわけでもないし・・・
LCD表示のレイアウトはイマイチですが・・・
2行目は前回と同様GPGGAから緯度の文字列をそのまま表示したもの
3行目は前回の緯度に加え経度の文字列を数値に変換して度数計算したもの
4行目はGPRMCから速度(ノット)と方位角を表示したものです。とりあえず文字列そのままです。
面倒だからマスキングはやめました(笑)
GT-720Fを少し動かすと速度出ます!方位角は固定測位だと数値が安定しません。当然ですが・・・
これに電子コンパス組み合わせたら凄いよな・・・
次は球面三角法から目標点に対する直線距離と方位角を算出させて見たいと思います・・・
10日の金曜日に用事があったので少々・・・
GT-720Fはビニールテープでダッシュボードに固定・・・
歯医者の駐車場(笑)・・・虫歯が有るのではなく月一度の検査です。
帰りにスーパーの駐車場で(笑)
今日は息子とカレーを作るのだ!
計算は合ってるって当たり前(笑)
詳細は「C言語でなんとかGT-720Fの文字列を処理出来た♪」を見て(笑)
C言語・・・勉強の日が浅いのでかなり手こずった(笑)
ここまで出来れば後は同様の処理なのでなんとか形になると思う。
アセンブラの時はGT-720Fの文字列をキャラクタ液晶にそのまま表示しただけでしたが・・・
※;液晶に数値を表示する時もテーブルを参照して数字文字に置き換えなければならない
画像はアセンブラの時のもの
C言語では文字列を配列に格納する。クセがあって手こずりましたが、アセンブラと似たプロセスで1文字づつ処理して何とか出来ました。
メモ;配列はテーブルと同様にエンドポイントを0で識別している。設定配列数をオーバーすると変なアドレスにジャンプして動作がおかしくなるのはアセンブラと同じ。
もしかしたら、もっとスマートな手法があるかもしれませんが(笑)
また、C言語なら文字列を数値、それも浮動小数点実数に変換できる関数がありますから下記のようなことも出来ます♪
NMEA-0183では緯度(経度も同様)が3537.4560と出力される。
これは35度37.4560分の意味である。
度に換算すると35+37.4560/60=35.6242となる。変数は浮動小数点実数に変換されていますので球面三角法の公式を使って2地点の最短距離を算出したりも出来ちゃうと思う(笑)
メモリが許せばですが(笑)
文字列の数値変換
idol = atof(idodo) + atof(idohn)/60; //数値変換
lcd_cmd(0x94); //3行目
printf(lcd_data,"=%2.4fdeg",idol);
getc()関数で1文字受信したら直ちにパソコンに送信する簡単な関数を作ったので同時にこんなことが出来ます。
unsigned char getc_p()
{
// char data1;
data1=getc();
printf("%C",data1);
return data1;
}
これを見る限りでは測位状態だと3回に1回、GPGSVセンテンスが出力されている?
それともプログラムの影響かな(笑)
手持ちのI2C EEPROM AT24C256B があったのでブレッドボードで仮接続して書込、読み出しテストまで終了した。
1個しかないのでアドレスA0,A1,A2は000で・・・
16F877AテストボードにもI2C通信用にピンを立ててあったのでそこへ接続・・・
本当はSRAMを使った方が書込速度や容量、コンパクト性の面で有利なんですが、接続が多いし、表面実装部品のハンダ付けもしたことないし・・・これだけハンダ付けしてても、いまだに下手だし(笑)
今回、EEPROMは256kbitですが、1MbitのものもあるしI2Cならパラレルに接続できるし、これでログ取ってみるつもり・・・
緯度・経度のテキストのみで記録インターバルが5秒置きくらいならなんとかなるかなぁ?(笑)
追記;こんな本読んで勉強してます。
詳細は「RS232通信用プリプロセッサのERRORSパラメータ追加で受信OKでした」を見て(笑)
前回の記事「CCS社Cコンパイラの標準入出力関数は難有り?・・・」でCCS社Cコンパイラの入出力関数gets()がGT-720Fからの受信でフリーズする件、入力関数を使用せずに直接レジスタ操作でUSARTにしていましたが、gets()関数でもRS232通信用プリプロセッサのERRORSパラメータ追加でフリーズせずに受信OKでした。
直接レジスタ操作ではなく関数使えて良かった♪
#use rs232(BAUD = 9600,XMIT = PIN_C6, RCV = PIN_C7,ERRORS)
バイブルとしてこれ読んでたんですが・・・(改訂版出てます)
ERRORS エラー発生を保存する。”RS232_ERRORS”に保存。・・・しか書いてない(笑)

日曜日に用事で成田に行ったのですが、待ち時間の間にCCS社Cコンパイラの代理店データダイナミックスの日本語マニュアルをパラパラ読んでまして
ERRORS 受信の際のエラーを”RS232_ERRORS”に返します。エラーが発生するとポートをリセットします。
あ!これだ(笑)
右が日本語マニュアル・・・直訳でおかしな日本語もありますが・・・
MPLABでビルド時、RS232_ERRORSを使用してない主旨の警告が出ますがプログラムの実行上問題ないようです。
GT-720Fから受信ピンでNMEA文字列をキャラクタLCDに表示し、そのまま送信ピンからパソコンに送ってみました。※デュアルポートではありません。
これを見る限りでは「GPGGA」「GPGSA」「GPRMC」のみ出力してるようです。「GPVTG」は無い・・・
ブログライトから投稿できないぞー(怒)
アセンブラでつまずいたのと同じ現象が起こる(笑)
パソコンからの受信では問題ない。しかしGPSセンサーモジュールGT-720Fからの受信では2文字受信してフリーズする。PIC内蔵のダブルバッファのお陰で2文字は受信するがゴミデータなどによってオーバランエラーやフレーミングエラーが発生してフリーズするものだと思われる。
アセンブラプログラムの時も同じ現象だったのでエラー回避プロセスを追加して対策した。
CCS社Cコンパイラの標準入出力関数 getc() はどーする?この組み込み関数内のプロセスでフリーズしてるんだよなぁ~
いろいろ手法はあるようですが・・・C言語は日も浅く勉強不足で(笑)
面倒なのでCCS社Cコンパイラの標準入出力関数を使わずにC言語で直接レジスタを操作してアセンブラと同じプロセスでエラー処理付きUSART(RS232C)にしてみた。
また、PICでは有名な後閑哲也氏のキャラクタ液晶ライブラリは、液晶がつながっていない場合のフリーズ回避のため、ビジーチェック無しで適当なウエイトを設けてある。
こちらも高速で動作させる為、ビジーチェック有りに改造してしまった(笑)
結果!とりあえずC言語でもGT-720Fから受信した文字データを連続表示するところまでは出来た!♪
追記;ブログライトからXML-RPCによる投稿が出来なくなった原因は下記でした。アカウント設定変更で投稿出来ました。
エンドポイント;ベーシック・プラス・プロをお使いの場合
旧 http://app.cocolog-nifty.com/t/api
新 https://app.cocolog-nifty.com/t/api
09.07.07追記 文中、putc()とありましたがgetc()の誤りで訂正しました。
国土地理院のHP見ましたがかなり複雑な計算で(笑)
とりあえず地球を完全な球とみなした簡易的な球面三角法で・・・
2地点の緯度経度を X1,Y1 X2,Y2 として距離Lは
で求まるらしい・・・
| A地点 | |
| 緯度X1 | |
| 35 | 度 |
| 18 | 分 |
| 53.44 | 秒 |
| 35.31484444 | 度 |
| 0.61636031 | ラジアン |
| 経度Y1 | |
| 139 | 度 |
| 27 | 分 |
| 52.37 | 秒 |
| 139.4645472 | 度 |
| 2.434115539 | ラジアン |
| B地点 | |
| 緯度X2 | |
| 35 | 度 |
| 28 | 分 |
| 36.36 | 秒 |
| 35.47676667 | 度 |
| 0.619186386 | ラジアン |
| 経度Y2 | |
| 139 | 度 |
| 26 | 分 |
| 27 | 秒 |
| 139.4408333 | 度 |
| 2.433701653 | ラジアン |
| cosθ=d | |
| 0.99999595 | |
| θ=cos^-1d | |
| 0.002846144 | |
| 地球半径R(km) | |
| 6370 | |
| AB地点間距離L(km) | |
| 18.12993642 | |
スーパーマップルSMDで約18km・・・ほぼ一致する。でも距離が短くなると誤差が増えるらしい・・・
以前の神奈川の境川・引地川サイクリングでノアをデポした泉の森公園駐車場に戻るのに苦労したので・・・(笑)
千葉の検見川の浜の駐車場なんかもそーだが夕方4時30分でゲートが閉鎖されてしまうのでリターンに手こずるとヒヤヒヤもん。
PIC C言語で計算できるか?
三角関数計算が必要な理由がわかったでしょ(笑)
素直にポケットナビ買えって言われそーですが(笑)
「GPSデータロガー」の為のその1ってところか(笑)
今では、安価でデータロガー付きでUSB接続できるGT-730Fなどあるので自作の意味あるのか?って言われそーですが・・・
GT-720Fの使い道ですが、
車載では1.液晶へ速度、方位、高度などのGPSモニターとデータロガー 2.モービルPC+電子地図でナビゲーション
※ナビがあるので2については試して見たいだけ、ノアはAVIC-HRZ099、ジムニーはNVX-M7000搭載。
自転車や徒歩では1.小型液晶へGPSモニターとデータロガー
を考えています。
GoogleMapへの走行ログの表示の仕方などは書籍等に記載されていますので特にここでは取り上げません。
私が所有している電子地図はスーパーマップルデジタルVer6です。最新版はVer9だと思います。(以下SMD)
GPSセンサーを接続してナビゲーションできる機能があります。
測地系はWGS-84(世界)と東京どちらでも使用できるようです。
NMEAのうちRMC/GLL/GAAに対応ってあるけどGAAって何だよ?(笑)たぶんGGAの誤記だろうな・・・
GPSセンサーモジュールのGT-720Fを繋いでリアルタイムにナビってのはありきたりで面白くないわけだ・・・
そこでPICにGPSセンサーのフリをしてもらい認識するか試してみた!
シリアル送信するテキストデータは下記。
GPGSV
ADDWF PCL,F
DT "$GPDTM,W84,,00.0000,N,00.0000,W,,W84*53",0DH,0AH,0
GPRMC
ADDWF PCL,F
DT "$GPRMC,225446.00,A,3536.2729,N,14024.6821,E,000.5,054.7,191194,06.2,W,A*68",0DH,0AH,0
何度か試したが認識せず・・・
キャリッジリーターンとラインフィードが無いとダメなんじゃないか?追加したけどダメ
GPRMCだけじゃだめなんじゃないか?で、GPGSVも追加したがダメ
そー言えば通信速度ってこれでいいのか?GT-720Fのデフォルト9600で試してた。あれ?何処にも記載がないぞ!
ネットでSMD Ver9のFAQに4800ってあるじゃないか!おまけにGAAがGGAに直ってるし(笑)
4800に変更・・・40Hを81Hに・・・
;-----------USART初期設定--
MOVLW 024H
MOVWF TXSTA
MOVLW 81H ; 4800 (9600->40H)
MOVWF SPBRG
BCF STATUS,RP0 ; Set bank 0
MOVLW 090H
MOVWF RCSTA
通信ソフトのアクノリッチ(AcKnowrich)で確認。約1秒置きにPICからデータが送られている。
SMDで認識できた♪(笑)
GPRMCだけでも良いかも・・・
・・・ってことはGT-720Fも4800に変更しないと認識しないんだ・・・
これでPICを疑似GPSセンサーとして認識してるわけだ!
これなら車での林道走行ログや、自転車のサイクリングログ、登山のコースログなどを保存して、帰宅後に電子地図上で何倍速かで再現するなんてことができそーですよね♪
ノアに装着・・・
息子が、たい焼き食べたい!というので、ノアに仮装着、やっと移動運用できました。
緯度 35+36.2729/60 経度 140+24.6821/60
ワングーに居ます(笑)
1ノットは1時間に1海里進む速さ、1海里=1.852km
1ノット=1.852km/h
画像の速度は10.2ノット=1.852×10.2=18.9km/h
※ワングーの駐車場内だと思います。息子が撮影(笑)
自転車に搭載したほうが面白そう・・・
記録媒体はどーするかな?
そうそう電池駆動の為に消費電流も測定してみよう・・・
詳細は「GT-720F は GPVTG センテンスを出力してない???」を見て(笑)
固定測位ですが、データは多少ばらつくようです。
BGMは陰陽座 梧桐(あおぎり)の丘です。
未確認ですが・・・パソコンの通信ソフトで取り込めばハッキリするのですが・・・
購入直後にパソコンに接続してその後、PIC接続専用に配線してしまったから確認が面倒で(笑)
画面キャプチャーしとけば良かった・・・
メーカーのデータシートには記載されてるから、デフォルトで無くてGPSViewerで設定変更できるのかも?それとも私のプログラムがおかしいのかな?
今回は、GPGGA と GPRMC から抽出してみました。
GPGGAから 緯度、経度、測位衛星数、海抜高度
GPRMCから 速度(単位ノット)、年月日
野蛮なプログラムなので、センテンスが読めないと無限ループに陥るのじゃ(笑)
今のところ上の2つは読めないってことはないんだが・・・
追記;2階家屋内でも最高10個衛星測位できたようです。
GPVTG が読めれば速度km/hが表示できたのだが・・・
ノットじゃなぁ~船じゃないんだから(笑)
「C1001UBとTC74HC4511AP」って書いたら
アンマッチって思った人いたでしょう???早く言ってよね(笑)
16F877Aはポートが沢山有るから液晶とGPSモジュールGT-720Fに加えて3桁7セグスタティックドライブユニットも接続した。
BCDコードを送って表示もOKだ!・・・しかし変・・・暗い(笑)
今まで電圧計で使用したC533SRとか7セグの使用経験あったので甘く見た・・・机上計算だけでブレッドボードでテスト点灯すらしとらん・・・
VFっていくつだったっけ?仕様書を見返す・・・手書きのなぶり書き計算が残ってた(笑)
VF3.5Vで計算してる。電流制限抵抗は150Ωにした(笑)・・・これDPだけ、7セグはVF7Vが正解、思い違いが激しいな・・・
BCDデコーダ/7セグドライバICのTC74HC4511APって5V仕様・・・
VF7Vに電源電圧5Vってアンマッチじゃん(笑)
ガッビーン!!!
駄目だこりゃって・・・チョットまてよ・・・TC4511BPってあるよね♪ピンコンパチで3~18V電源電圧で動作する奴、これに差し替えて9Vか12Vでドライブすればリカバリできるか!電流制限抵抗値が変わるとハンダ吸引して抵抗21個付け替えないといけないから、なるべく今のままの抵抗が使える電圧を選べばいいし・・・
とりあえずこれでもテストはできるからゆっくり落ち着いてIC(TC4511BP)を手配しよう・・・
実はこのテストユニット、16芯フラットケーブルが無かったので作りっ放しで動作チェックもしてなかった(笑)
先日、「ノアのスライドドア開かず」の件で本納のトヨタに行ったついでに茂原まで足を伸ばしアルシマ無線でケーブルを買ってきたので初めてテストした!
注;茂原にこりん星人はいませんでした(笑)
ケーブル圧接型ソケットも初めて使用したので、ここでも誤りが(笑)
フラットケーブルに3桁のBCDコードを順序よく配列するようにBOXプラグをプリントしたつもりが逆転して配列滅茶苦茶・・・まあ、ケーブルの反対側相手コネクタ接続するときにクロスしてハンダ付けで問題なかったのですが、次回の為の覚え書きです。
参考画像です。
圧接したあとに試しに外して見ました・・・ロック部を小さいマイナスドライバーや端子抜き工具などで浮かすと外れます。
8×2で16ピンの互い違い構造が良く判ると思います。
ストレインリリーフも手配してありましたが今回は未使用です。
んで何がしたいかって?
長くなるので今回はここまで(笑)
とりあえずここまで出来た♪
所在地バレバレなので適当に数値をマスキングしてあります。2階家屋内で測位したデータです。海抜高度は61.2mなのかぁ(笑)
緯度(北緯) 35度3×.×527分→35+3×.×527/60
経度(東経) 140度2×.×393分→140+2×.×393/60
GoogleMapに計算した右の形式で緯度経度を入力すれば位置確認できます。 自宅が表示できました。
とりあえずGT-720FのNMEA-0183フォーマットのGPGGAセンテンスから情報を抽出しました。
あと測位衛星数、GPZDAセンテンスから年月日、UTC時刻、GPVTGセンテンスから方位と速度など抽出したいと思っています。
ここからは覚え書きです。今回PCではまりまくりました(泣)
下記は緯度経度まで表示したもの、これに海抜高度を追加表示させようとプログラムを追加増大すると正常に動かない(泣)
どう見直してもフローは合っている。どうして??????
今回のプログラムはテーブルを多用しています。下記の様なPCLにプラスするものです。
;--------GPS DATA比較領域------------
GPSADD1
ADDWF PCL,F ; PC+OFFSET
DT "GPGGA",0
;---------液晶表示データ領域------------
TABLE
ADDWF PCL,F ; PC+OFFSET
DT "GPS GT720F NMEA-0183",0
PICはPCレジスタに従ってプログラムを実行しています。プログラムメモリは13ビットでPCLATHレジスタが上位5ビット、PCLレジスタが下位8ビットになっています。
PCLレジスタは下位8ビットなので0xFFまで表現できます。テーブルのようにPCLにプラスする動作では8ビットの最大0xFFまでは良いのですが、これを越えてしまい0x100になってしまうと上位PCLATHに繰り上がり反映されない為、とんでもないアドレスにジャンプして正常に動作しなくなります。
最初、テーブルはメインとサブルーチンの間に配置してありました。プログラムが小さいうちは良いのですが、メインプログラムが増大していくとテーブルのプログラムアドレスが知らぬうちにずれて0xFFを越えてしまい正常に動作しなくなります。
テキストエディタで無意識にプログラム書いていると判りません。MPLABでアセンブラをビルドした時に生成されるリスト(拡張子が.lst)のファイルを開いて見ると良く解ります。
青丸は0xFFまで、赤丸のテーブルデータは越えて0x100以上になっています。これは正常に動作しません。
テーブルを先頭に移動したものです。
ORG 0
GOTO START
<ここにテーブルを置く>
START
テーブルの最期のデータは0xFFを越えていません。言い換えると0xFFまではデータを追加できるということです。正常に動作します。
あ~はまりまくり(笑)でも勉強になった!
GPSモジュールは移動で使わないと面白くもなんともない・・・電源は車でのバッテリー使用と、自転車、徒歩の電池使用の2通り考える・・・
詳細は「GT-720Fの連続文字列を液晶に表示・・・」を見て(笑)
最終的には液晶の指定アドレスに必要な情報だけ表示が目標ですが、何を何処に表示するか考え中(笑)
とりあえず受信が正常に行われているかのチェック用に連続文字列の液晶表示にしてみた。
下の画像は前回の受信した文字列をそのまま表示したもの。液晶の内部アドレスが飛んでいるため1行づつ順番には表示されません。
液晶表示内部アドレスです。
図はBSch3Vで描いてBMPで保存しJpegに変換トリミング後Pcrewで色つけしました(笑)
20文字×4行と他の16文字×2行などと互換を取っているため内部アドレスが飛んでいます。プログラム制御無しに文字を描いていくと1行目の次は3行目に表示されます。クリックして拡大出来る画像です。
そこでテーブルと条件分岐で1行づつ順番に描くプログラムにしてみました。解りやすいように意図的に19文字×4行表示にしています。定数を変えることにより他の16文字×2行などにも対応出来ます。最下段表示完了すると画面をクリアしてホーム00Hから描くようにしました。
さらに改行コードで次の行に飛ぶようにすればもっと見やすいかも?です。
GPSモジュールGT-720Fは電源を投入すると赤のLEDが点灯して直ちにNMEA-0183フォーマットを1秒更新(1Hz)で送出します。測位できててもできていなくてもです。2階建ての1階家屋内では測位出来ません。2階では家屋内でも測位できるようです。測位すると赤LEDがゆっくりと点滅します。
1Hzで受信し液晶表示するプロセスではPIC内蔵の受信ダブルバッファだけで正常表示出来ていると思われます。更新が1秒間に5回(5Hz)など高速のGPSモジュールもありますが、正常に表示するには外部受信バッファが必要になるかもしれません。
画像は測位できていない状態で$GPGGAの北緯Nが0000.0000になっています。
なんで測位できた画像じゃないのかって?
家で測位したら「ジムニーおや爺」の正体バレバレじゃん(笑)
そのうち移動でテストしてみます。バッテリー駆動も検討しないと・・・
先日の秋葉原行きは訳あって防犯設備の増設が目的だった・・・これでまず経費がかさむ(泣)
その上、今月はカード払いで、ギターと河村隆一コンサートチケット代がまとめて(泣)

せっかく秋葉原まで来たんだから・・・
めいどのみやげ~萌~♪
じゃなかった(笑)
うちの娘 「あまりカワイくないですねぇ?」
たしかにおまえのほうがかわいいよ♪(笑)
わし 「オレなんでチラシ貰ったんだろ?・・・」
娘 「そっち系の人だと思われたんじゃないですか?(笑)」
・・・ああ、わしゃあおたくだよ!(笑)
冗談はさておき、せっかく秋葉原まで来たんだから電子部品の購入をしたいのだが、今月と来月はカード払いが高額で(泣)
秋月電子で安価なGPSモジュールGT-720Fを手持ちの現金で購入・・・
一見、GPSアンテナ?ってくらい小型ですがRS232CレベルコンバーターIC内蔵のGPSモジュールです。
受信形式 54パラレルチャンネル L1c/Acode
通信プロトコル NMEA-0183 9600bps 8 N 1
測地系 WGS-84
電源 DC3.8V~8V 180mA(5V時)
秋月でもうひとつの選択肢GPS-52Dはデフォルト測地系が東京(TOKYOMeanSolution)だし少し高いのでパスした。
ネット検索ではストロベリーリナックスのTTL、RS232C両出力のものや指先に乗るくらい小型の物もあったのですが・・・
安価な上にコネクターとの接続加工が容易なこともGT-720Fを選択した理由です。
付属のハーネス付きコネクター。両端は同じ形状なので半分に切ってアダプターが2個作れます♪
6本ありますが、接続するのは4本・・・秋月のHPにありますがメーカーのPDFは本当に間違っています(笑)
解説書なども含めてこういったところが秋月電子のいいところ♪
ハーネスをハンダで接続し熱収縮チューブで保護・・・
反対側は電源、GND、通信線をジャンパーピンにハンダ付け
熱収縮チューブで保護
PIC16F877Aテストボードには5V電源、GND、RS232C通信線の接続ピンを設けてあったのでそこへ接続♪
NMEA-0183フォーマットのデータをたれ流し状態で液晶に表示できた♪
パソコンに繋げば通信ソフトにも同様に取り込めます♪
RS232C受信プログラムはエラー処理を追加しました。実はここで少しはまってしまった。今週忙しいので詳細は後日に・・・
詳細は「なんだかんだで文字列判断出来た♪」を見て(笑)
GPSのNMEA-0183フォーマット・・・
こういう共通規格って良く出来てるよな♪
1.まず受信データを1文字ずつ読みセンテンスの開始$を判断する。
2.$があったら指定のアドレスフィールド(今回はGPGGA)が一致するか判断する。
テーブルに格納したアドレスフィールド文字列(今回はGPGGA)と1文字ずつ比較して全て一致したら次のプロセスへジャンプさせる。
一致しない場合は1.へ戻る(画像の①は「GPG」まで一致して表示し、そのあと不一致で最初に戻っています)
注;テストプログラムは動作チェックの為、1文字ずつ一致した場合、表示させてます。(画像の①)
3.デリミタ(,)を判断し数えて表示させたいデータフィールドへ来たら次のデリミタ(,)が現れるまで、1文字ずつ表示する。
今回は2番目のデリミタ(,)のデータを表示させています。動作チェックの為、次のデリミタ(,)が現れたら「D」を表示させています。これによりNULL値のチェックができます。
(画像の②は2番目デリミタデータがNULL値なので「D」を表示、③はtest02なので「test02D」と表示。)
あとは複数の情報を抽出し、液晶の指定アドレスに表示できるように体裁整えればいい♪
GPSモジュールがTTL出力ならばPICとの接続はハーネスが短い場合、RS232Cレベルコンバーター無しでTTL直結でいいかも・・・
ハーネスが長ければGPS-ADM3202-RS232Cケーブル-ADM3202-PICかな・・・
誰か、わしにいらなくなったGPSモジュール頂戴(笑)
これは廃紙に手書きでプログラム考えたときのもの(笑)
黄丸のオンボード書き込みピンのおかげでプログラムの書換作業効率が上がった♪
でも抜き差しが硬いので6芯モジューラージャック化を検討中・・・
アセンブラは下記です。バグあるかも知れない・・・
<中略>
LOOPRX00
BTFSS PIR1,RCIF
GOTO LOOPRX00
MOVLW '$'
SUBWF RCREG,W
BTFSC STATUS,Z
GOTO DOLL1
GOTO LOOPRX00
DOLL1
CLRF POINT
LOOPRX01
BTFSS PIR1,RCIF
GOTO LOOPRX01
G_A_S
MOVF POINT,W
CALL GPSADD1
ADDLW 0
BTFSC STATUS,Z
GOTO GPS_D1
SUBWF RCREG,W
BTFSC STATUS,Z
GOTO G_A_E
GOTO LOOPRX00
G_A_E
CALL (液晶の ビジーチェックへ)
MOVF RCREG,W
CALL (液晶のデータ表示へ)
INCF POINT,F
GOTO LOOPRX01
GPS_D1
CLRF D_P
LOOPRX02
BTFSS PIR1,RCIF
GOTO LOOPRX02
MOVLW 2CH
SUBWF RCREG,W
BTFSC STATUS,Z
GOTO D_C1
GOTO LOOPRX02
D_C1
INCF D_P,F
MOVLW D'2' ; デリミタ2番目かチェック
SUBWF D_P,W
BTFSC STATUS,Z
GOTO G_S_O1
GOTO LOOPRX02
G_S_O1
LOOPRX03
BTFSS PIR1,RCIF
GOTO LOOPRX03
MOVLW 2CH
SUBWF RCREG,W
BTFSC STATUS,Z
GOTO D_E1
CALL (液晶の ビジーチェックへ)
MOVF RCREG,W
CALL (液晶のデータ表示へ)
GOTO LOOPRX03
D_E1
INCF D_P,F
CALL (液晶の ビジーチェックへ)
MOVLW 'D'
CALL (液晶のデータ表示へ)
GOTO LOOPRX00
;--------GPS アドレスフィールド比較文字列データ領域---
GPSADD1
ADDWF PCL,F ; PC+OFFSET
DT "GPGGA",0
<中略>
詳細は「とりあえずアセンブラで$を判断させてみた・・・」を見て!(笑)
つまらん動画でスンマソン(笑)
GPSのNMEA-0183フォーマット・・・
軽く肩の筋トレしながら睨んでたら(笑)流れが見えてきた・・・
$GPGGA,,3444.0000,N,13521.0000,E,1,(省略)
とりあえず出来るかどーかは別として(笑)流れ・・・
1.まず受信データを1文字ずつ読みセンテンスの開始$を判断する。
2.$があったらアドレスフィールド(GPGGAなど)が一致するか判断する。これはテーブルに格納した文字列と1文字ずつ比較して全て一致したら次のプロセスへジャンプさせる。
3.デリミタ(,)を判断し数えて表示させたいデータフィールドへ来たら次のデリミタが現れるまで、液晶の指定アドレスに1文字ずつ表示する。
ってのはどーかな(笑)
1をテストしてみた。アセンブラは下記です。
<中略>
LOOP00
BTFSS PIR1,RCIF
GOTO LOOP00
MOVLW "$"
SUBWF RCREG,W
BTFSC STATUS,Z
GOTO DOLL1
GOTO LOOP00
DOLL1
CALL (液晶の ビジーチェックへ)
MOVF RCREG,W
CALL (液晶のデータ表示へ)
GOTO LOOP00
<中略>
実行結果画像です。パソコン側通信ソフトはアクノリッチ(AcKnowrich)。
PIC16F877Aの電源投入後、液晶にCGRAMを含むテスト表示を行い、パソコンへ文字を送信し受信待ちとなります。
パソコンから適当に$を含む文字を送信すると液晶には$だけ表示されます。当然$がなければなにも表示しません。
ここまでは簡単だが・・・2と3が難しい(笑)
1文字づつしか処理出来ないし・・・アセンブラで書くと結構大変かも・・・
試しにアクノリッチ(AcKnowrich)で送信し16F877Aで受信
改行コード無しと改行コード有りで送信してみた。
ちなみにLCDもアクリルパネルをカット、曲げ穴加工で100円均一ケースに固定した。
これでだんだん作業効率が上昇する。
LCDに対応するアスキーコードが無いから赤丸みたいな不明の2文字表示になる(笑)
改行コードはCR(キャリッジリターン)とLF(ラインフィード)の2文字の組合せ・・・
このコードを受信したらLCDに文字表示せずLCDの指定アドレスに飛ぶなどの条件分岐ができそーだが・・・
大昔使ったラインエディタとか思い出す(笑)
文字列の一致判断、さてどーするか?アセンブラかC言語か?
GPSモジュールのNMEA-0183フォーマットから欲しい情報だけ抜き出してLCD表示とかやってみたいのだが・・・
RS232Cのシリアル通信、ちょっと時代遅れ(笑)でも基本だから・・・
パソコンとの接続のためDサブ9ピンメスコネクタのハンダ付け
877Aテストボードにはハーネス接続部を実装済みなのでハンダ付け
100円均一のケースに入れ、ケースの縁にコネクタ取付の溝加工を施す。
なかなか上手に出来ました!(笑)
最初のテストではACM0802C-NLW-BBHを接続しましたが8文字2行じゃ情報量少ないので
20文字4行のSC2004CSWBに変更、白色LEDバックライトに変更になってますが、発色はうーんかな・・・
母艦PCのRS232Cポートはナンバーディスプレイアダプタに接続していて占有されている。古い切換BOXを引っ張り出してきて接続し「ハイパーターミナル」で試そうと思ったが・・・良く解らん(怒)
今度はシリアルUSB変換ケーブル(IO-DATA USB-RSAQ2)を持ってきてつなぐ
コントロールパネルのシステムのプロパティでデバイスマネージャーを開くと仮想COMポートはCOM2になっている。
フリーのアクノリッチ(AcKnowrich)って読むんですか?複数のCOMポート(仮想を含む)を同時に監視出来るソフトを使ってみました。
送信プログラムでPIC16F877Aから文字送信・・・うわっオーバーフローで流しっぱなしだぁ(笑)
あれ何度か試してたら文字化け?通信設定が変わってる?
左クリックしてもダメ、どーやって戻すかしばらく悩みましたが右クリックでドロップダウンリストが現れて設定変更出来ます♪
元に戻った!今度は受信プログラムを追加してパソコンから送信・・・
「ヒゴロカラシュクダイダスゾー!」って打ち込んだ(笑)
受信したデータを液晶に表示できた♪
とりあえずここまでできればまた遊べそう♪(笑)
PIC16F873 と 873A 、877 と 877A 持ってるんだが・・・
87xのリファレンスマニュアルは日本語版がある。87xAは英語版のみ・・・
ともに230ページはあってパソコン画面で見るのは年寄りには辛い(笑)
なので印刷しちゃいました(笑)比べてみると良く解る。
例えばINTCONレジスタなんかビミューに異なってます。ADCONも・・・って皆知ってますよね♪
87xシリーズのプログラムを87xAシリーズ用に書き換える時注意せねば♪
まあ、誰でも考えそうなネタですが・・・(笑)
回路図です。絶対値回路は書籍に記されていた物そのままなので記載してません。それをPIC16F873のRA0入力でA/D変換し、ポートCに6段階レベルで出力、RC1、RC2はCCP出力に使用できる回路なので、RC0、3、4、5、6、7となっています。6段階のLEDをパラレルに4個接続し、カソードをトランジスタ駆動してポートBでスイッチングし、ダイナミック点灯させます。最初RB0、1、2、3で駆動しましたがRB3が壊れてるのかドライブしない?でRB7、6、5、4に変更しました。プログラムも同時に修正したので犯人はプログラムかもしれません(笑)
TR1は2SC1815、R2は3.3kΩです。LEDの電流制限抵抗R1はとりあえず330Ωとしてますがダイナミック点灯だと輝度が足りないかも知れないので抵抗値をもう少し下げた方がいいかも知れません。
基板剥きだしだと、そのうち壊しそうなので100円均一のケースに固定しました。
実験用に秋月で入手した安価なLED多数。
これでレベルメーター部を製作
パラレル接続部は黒色ハーネスで空中配線です。下手にプリント基板にするとスペース取ると思います。
先行き何かに組み込むかもしれないので一応、万能基板を黒塗装しました。
実はこの時、事件発生!湯煎したスプレー缶を熱くて落としてしまった!
破裂するかと思いました(汗)底が変形して膨れ上がってます。気を付けねば・・・
カソードドライブ回路は基板に組んでしまって
LED電流制限抵抗は調整のためブレッドボードで・・・
ダイナミック点灯なのでポート数越えて表示出来ます♪。また左右LRchを12段階レベルメーター出力×2とかプログラムで対応できると思います。
別に用途は無いけど試したかっただけ(笑)
6段階×4chダイナミック点灯で24段階レベルメーター・・・
お手玉モードはキャリーオーバーです。
詳細は後で・・・
あ~しんどい・・・両面基板作れないと空中配線が・・・
「それっ楽しいんですかぁ?」って聞かれちゃうしぃ・・・でもプログラム組むのに数学も使うんだぜ♪(笑)
急遽、ダイナミック点灯にも対応出来るように赤のジャンパーピンを追加した。
うーん、結構うまくまとまったでしょ♪
今回、MIL規格のコネクタも実装した・・・多芯フラットケーブル手配しないと・・・
数学教えるのでペースダウンでした(笑)
ビデオばかりですんません
最大レベルを1秒ホールド後、徐々にレベルダウンするように計算し、それに通常のレベルメーターを論理和演算して表示させています。お手玉みたいで面白いでしょ(笑)
タイマー20ms×50=1秒最大レベルをホールド
タイマー20ms×2=40msごとに最大レベルをダウンさせる
途中で急に曲を止めていますが、レベルダウン状態が良く判ると思います。
曲は 「Shy Guy」 -Diana King-
スピーカー出力を絶対値回路を通してPIC16F873でA/D変換してレベル表示するプログラム・・・
リアルタイムにレベル表示する変数1に最大レベルを更新記憶する変数2を追加し、それをお互いに論理和計算してレベルメーターのポートに出力してみました。また最大レベル変数2はTMR0のタイマーで1秒置きに0クリアしています。
1秒は長いかな?色々試すと面白いかも?
※873のTMR0は初めて使った・・・
ビジュアル的にどーよ(笑)プログラムでどこまで工夫できるか?・・・
動作が不安定の要因が絞り込めないと今後も不安だから、とりあえずウィークポイントと思われる箇所は確実に対策する・・・
プリント基板を作る時、空きスペースが勿体ないからこんなピン用基板をいくつかコピーしとくと良い
で、これを使ってレゾネータ基板を作った。画像は10MHz用・・・
裏・・・
これで接触不良は無し♪ 20MHz用も作成しとけば用途によって使い分けられる・・・
こいつも入手してあるので接続基板を作る予定・・・1個しか無いから(笑)
超高精度クリスタルモジュール KTXO-18S 12.8MHz±1ppm
が・・・犯人はこれでは無かった・・・PICの未使用ピンの初期化の問題でも無い・・・
84AのCGRAMテストプログラム 表示成功した後に液晶の初期化プロセスを少々いじってそのままテストせず忘れていたのだ!
それをベースに877A用プログラムに書き換えたから当然動作不安定となる(笑)・・・突然思い出すんだよなぁ、歳かなぁ~
液晶の初期化プロセスを元に戻したらOK♪ まあ大体プログラムが犯人なんだけどね!
やりっぱなしにしないで、きちっと整理しとかなきゃダメだぁ(笑)
ちゃんと動くか?心配~(笑)
緑丸のピンはミニPICプログラマでオンボード書き込み用
赤丸はMCLR切換スイッチ(秋月にて)、黄丸はプログラムピンの切り離しスイッチ2回路(共立にて)
青丸は急遽レベルコンバータICの切り離しをスイツチを追加しようとしたがスペースが無いのでジャンパーピンにした。
水色の丸は16F84Aテストボードでも採用したレゾネータ差込用・・・これがあとでアダになる(泣)
1回路の基板用スイッチは秋月で手配したが2回路用は共立エレショップにあったのでサンプルとして手配・・・1個80円弱かな
赤丸の10MHzのレゾネータ差してますが、どーも接触が悪いのか動作が安定しない・・・ピンと基板の破片とでハンダ付けしたもの差し込んだ方が確実かも・・・
簡単なプログラムで動作確認とも考えたが・・・液晶くらい動かせないと仕方ないから・・・
84AのCGRAMテストプログラムを877A用に書き換えて・・・相変わらずアセンブラですが・・・
ポートB接続だったのでポートはそのままBに接続、一応未使用ピンは初期化したつもり、変数のアドレスは全て書き換えた・・・
スイッチ切換でオンボード書込も問題なし♪
※メモメモ・・・プログラム書込時、PICの電源を他のICやLEDなどから切り離すスイッチもあった方がいい・・・USBから余計な電流が流れる・・・
ACM0802C-NLW-BBH・・・
レゾネータに触れると動作不安定・・・これが犯人じゃなくて未使用ピンの初期化プロセスがおかしいのかな?
誰がヤクタタズじゃ~(笑)
プリント基板作成する以前の空中配線で、テストボードといってもレベルメーター付き、ボリュームでFETを介してライトなどのPWMコントローラーに特化したものだった・・・
色々テストするには使いづらいので今回摘出(笑)
レベルメーター部は秋月で買った在庫限りのLEDユニットだった・・・2.54ピッチにはきっちり入らない(泣)
プリント基板化しようか?どーしようか?873これ以上使うかなぁ~(笑)
本文、特にありましぇん・・・
LIVIN' LA VIDA LOCA -RICKY MARTIN-
前回作成の絶対値回路を16F873テストボードに接続・・・デバイスは873Aじゃなかった、古いので(汗)
電源電圧5V基準の8ビットA/D変換で分解能255、入力が1V超えるかどーかですがLED点灯レベルはプログラムで調整出来ますから自由自在・・・まーなんでもありありってとこです。
絶対値にしとけばマイコンに接続できますから~後は煮るなり焼くなりお好きにどーぞ・・・
要は数字のお遊びで(笑)
※携帯音楽プレーヤー→アンプスピーカー→絶対値回路→PIC16F873→LEDレベルメーター
こういう時、安価で便利なのが秋月電子通商のピンヘッダオスメスセット・・・でもいくらあっても足りない(笑)
製作途中の877Aテストボード・・・
これも途中ですが、C-1001UBもヘッダでこのくらい浮かせれば下に74HC4511APが収まる・・・
前屈みで作業してたら腰が痛い・・・(笑)
いまさらなんで絶対値回路なの?
(笑)
以前書いたセイコーさんから入手したDC-DCコンバータ TDK CRZ0512WC
この正負両電源をオペアンプ072に繋ぐ・・・
ブレッドボードでうまくいったので、ブレッドボードを他のテストで使いたいから、慌ててプリント基板化してしまった・・・
ICソケットをハンダ付けしたところで・・・あれ??????
透かしてみたりして(笑)・・・・やっぱ変??????
CRZ0512WC の +12Vと-12Vがオペアンプの入力ピンに逆転して接続してるじゃん(笑)
この基板、1度しか作らないからPCBEで部品ライブラリ作らず汎用IC図使って書いたから錯覚起こしたみたい・・・
やっぱ部品ライブラリはちゃんと作らんとダメだ!
とりあえず修正できるかチェックだがPCBEの確認印刷で、反転して2倍で出力するのはいいとして、デフォルトは部品が黄色なので紙の上では確認しずらい
画面上では黄色の方が見やすい
確認印刷時一時的にレイヤーでシルク(部品)の色を黒系に変えてやる・・・
プリント基板作る前にこれやっとけば良かったんだ、以前の電子コンパスなど成功しまくりで調子に乗ってしまった(笑)
で印刷すればチェックできる・・・
修正できそう♪ 同時に2枚作っちゃったしぃ~(泣)
ハーネスでクロスさせるためヤスリやカッターで線を削る
リューターで穴追加してハーネスでクロスしてとりあえず修正出来た(笑)
完成♪・・・・一時はどーなるかと思った(笑)
絶対値回路のみで増幅はしていません。2チャンネルあります。
大きめの電解コンデンサーは、高価なオーディオ専用ではありませんが無極性バイポーラ型って言うんですか?、初めて使いました。この辺の部品も共立エレショップで・・・
後で動作ビデオ載せますが、そのテストに使ったものです。
スピーカー分岐線とパソコン用アンプスピーカー、シーグランドの安物携帯音楽プレーヤー(笑)
穴開け用リューターにフットスイッチを追加した。
前に書いた共立エレショップで購入したEFS-Aです
接続方法は2系統・・・
電源コードの被服剥いて・・・
片方をカット・・・
踏んだ時OFFとなる様に白黒線を接続・・・
※緑線にも電源コネクタを付ければ踏んでONかOFF2通りに使える
位置決めの時、フットスイッチを踏んでドリル刃の先端を基板に当てられるので作業効率が格段にアップした♪
後は老化のせいか?先端が暗くてよく見えないので白色LEDでリングライトを作ろうかと考えている(笑)
これは課題というかメモ(笑)
しばらくプリントプリント基板作ってないと、エッチングの状態忘れてしまうから(笑)
縦型噴流式小型エッチング漕もキッチンボックスを流用して目線の高さで使いやすくし、収納もしやすくしてある。
投げ込み式ヒーターは40℃~45℃でセットしても・・・電源入れ放しだとすぐ50℃以上になりそーなので適当に温度計見ながら電源オフにする。
温度センサー付けるほどの作業でもないし・・・
紙フェノール基板の場合ですが・・・これはまだまだ
赤矢印の黄色っぽい部分(裏面のと同じ色かな?)は銅が溶けてエッチング出来てる部分、青矢印はまだなところ(笑)
あまし、お金を掛けないで・・・(笑)
露光・・・感光・・・ですか・・・説明書には蛍光灯使用だと30分なんだけど、画像の様な状態では50分~60分感光させた方が現像時間が短時間で済むようだ
30分でも50分でも同じように出来るんだが・・・30分だと現像に時間がかかってなかなか溶けないし、微妙に感光不良がでたりする・・・
一番上の安物クランパーで赤丸の部分が浮くことがあって線がぼやける・・・
下の画像の赤丸は丸が大きくなってくっついてしまった(笑)のでヤスリで削って修正・・・
2カ所修正済み
バキュームクランパーや紫外線露光器は高価だからなぁ・・・何か安価に対策しよう(笑)
そーいえば以前、空中配線で作った7セグLED用テストボード・・・こんな感じで浮かしてたんだ・・・
C-1001UB はデカイ!共立エレショップで購入・・・
74HC4511APが7セグLEDの下に収まりそう・・・
両面基板が作れれば基板の裏でもいいんだが・・・
おもいっきし配線が交差するから、空中配線とミックス仕様にした(笑)
PCBEで知恵の輪状態、もーぐちゃぐちゃでわけわからんが・・・これでうまくいくんだろうか(笑)
で!作っちゃいました・・・穴開けはこれから・・・
両面基板は難しいだろうなぁ~図面は描けても感光時の位置決めとか・・・スルーホールのインサーターとか・・・ずれたら最期(笑)
PIC 16F88 簡易電圧計のところで使った C-533SR のようなダイナミック点灯ではなく、スタティックって言うんですかね?それで表示してみるつもり・・・
74HC4511AP を3個使って4×3=12ポートで3ケタのデータ送る
でも両面基板が作れるわけもなく・・・あまりコンパクトにならないなぁ・・・こういう時は空中配線の方がコンパクトになる(笑)
とりあえずテストボードで試してから作り直すか・・・
さてどーするか?74HC4511AP+C-1001UB
注;作成途中です。図中の青ジャンパー線は抵抗の足長タイプの部品作ってなかったので表現上の代用です。プリント基板なので最終的に線と穴があればいいんだから(笑)
なにい~どこがヤクタタズじゃぁ~(笑)
秋月電子通商より 白色抜き文字表示タイプ 8文字×2行キャラクタ表示液晶モジュール
ACM0802C-NLW-BBH です。
CGRAMテストプログラムで表示してみました。初期化プロセスでSC2004Cなどと待ち時間が異なる様ですが、もともと必要以上に待ち時間取ってあったので同じプログラムで表示できました。この液晶はバックライトを点灯しないと文字が見えません・・・
プリント基板感光用に蛍光灯30分カウントダウンタイマーを作る予定・・・(あくまでも予定、笑)
タイトルの通りです(笑)
とりあえず完成、もう少し手直しするかも・・・
バイトに動作説明したら・・・
娘「やっと役に立つもの作りましたね!」
何!、俺今まで役に立たない物作ってたんだ、トホホ(笑)
娘「前に作ったあれとか・・・」
私「あー電子コンパスね・・・あれ娘が持ってったきり戻ってこないし・・・」
娘「誰が持ってったの?」
私「いや・・・○○さんが・・・わたしのも作ってって言うから・・・」
娘「今頃捨てられてるか、その辺に埋もれてますね・・・」
うわぁ~ひどいぞB型(笑)
早朝バイトも・・・
「それ何か意味あるんすか?」
・・・(笑)
他にも、もろもろ進めてますが、これ先に作ってしまわないとブレッドボードが空かない(笑)
こんな簡単な回路、回路図書かなくても作れそーですが(笑)
いつも整理が悪くて後で見返すとなんだか解らず、再び調べる手間がかかっているから・・・
部品のデータシートは無くなる前に適当なフォルダに保存整理してある。
リレーやIC、トランジスタの足配置なんかも書き込んどけば後々便利・・・
ゴールデンウイークですが、わたしはぜんぜんゴールデンじゃない(泣)
前回、「ポットのAC100V分岐」と「メロディICのテスト」は完了した。今回は組込ケースです。
ケースは何にしようか迷いましたが、たばこの景品の携帯音楽プレーヤー用スピーカーBOXを使うことにしました。
一応ステレオでインピーダンス8Ω、0.25Wのスピーカーが2個入っています。スピーカーは1個しか使わないので片方外そうとしましたが接着剤で固定されてて外れません・・・
短気なので(笑)ぶった切ってしまいました
無理矢理引っぱがせ~
外れた(笑)
内部の余計なバリ取ってスピーカー1個仕様に・・・
外したスピーカーは別の何かに使おう(笑)
開いたスペースに基板を入れる。単純な回路なので万能基板をカット、定規とカッターで切れ目入れて
いつも机の角で割る・・・
干渉部をカットしてヤスリで整える・・・
ケースのへこみを利用して基板固定の穴開けてネジで固定・・・1カ所でOK
次はスイッチ、秋月電子で購入した基板用・・・
小型スライドスイッチSS12D01G4(4個入り)で100円、安い!
基板用だがこーすれば・・・
ケースに3つ穴開けるだけで・・・スイッチ完成♪
CR2032電池ホルダー、メロディIC、増幅用トランジスタ、抵抗、電解コンデンサを基板に実装するからリレーはスピーカーの下に貼り付ける予定・・・
磁力の影響を受けるかな?秋月電子でY14H-1C-5DS、1個80円は安い!
ACアダプターからの電源コード用穴にグロメット付けたし・・・
とりあえず今回はここまで!(笑)
プリント基板穴開け用リューターボール盤をさらに使いやすくするためフットスイッチを共立エレショップで購入・・・
EFS-A
電源プラグを接続加工しなければなりません(笑)
確かビックホーンに乗ってた頃に購入してデリカに移植搭載して現在はジムニーに搭載のポータブル電源・・・
かれこれ20年以上使い回している(笑)ここんとこフル充電できないのとすぐ上がる為、経済的寿命が来たと思われ、鉛蓄電池を交換しました。
前に1度交換したのが2002.3.14で・・・今2009.4.21・・・だから7年も使ってる(笑)
前回は画像記録は電池しか無かったので今回は記録しました。2002年時の画像
こっちは今回手配した密閉型(シールドタイプ)鉛蓄電池、12V7.2Ah×2個、秋月電子通商より通販で購入。同じGS YUASAですがデザインが変わってますな!
分解は簡単そうですがコツもある、肩掛けベルトの金具はペンチでこじって変形させて外しますが、使わないので前回外したきりです。
本体ネジ4本の他にライト部のカバーのネジを外し、はめこんであるユニットをこじって外しますがコツ要ります。
危ないからフューズ外すの忘れずに
本体を開いたところ、配線が突っ張って全開しません
ハーネスを端子から引き抜きますが・・・差込位置をデジカメで記録、こういう時便利ですな♪
やっと全開(笑)
あとはファストン端子部を抜き差しして新品電池と交換するだけ・・・
ストライクフリーダム起動(笑)
次は何年持つかな?(笑)
実家に行く用事があったので片道100kmくらい走行テストできた!
普通のノアのコックピットじゃないなぁ~これ(笑)
自作のトリップは111.2km
純正のトリップは109.5km
車速パルスカウント251で100mの設定結果だ!
メモメモ・・・251×111.2/109.5=255・・・に調整してみるか・・・かろうじて1バイト(笑)
トリップは本来の目的じゃないんだが・・・
スモールワールドUM66T-68Lと一緒にUM3561も購入、昔なつかし4種類の音が出る(笑)・・
とりあえず1種類鳴らしてみた。4種鳴りますがビデオに撮れず・・・
たばこの景品のスピーカー8Ω0.25Wにつないでみた。
これは使う予定無し(笑)部品が揃わず「湯沸かしポット電源外れアラーム」がなかなか完成しない・・・
タイヤ1回転で5パルス相当のパラメーターに変更して走行テスト・・・
純正スピードメーターとほぼ同じ速度となった。
車速コンパレーターは時速15km以下で作動するようにした。
これをフロントカメラシステムに接続予定・・・
車速表示は単純なプログラムの都合上タイムラグがあるが、車速コンパレーターでカメラスイッチ切換にどう影響するか?
BGMの「ハバネラ」は気にしないで(笑)
まとまった時間が取れず、どこにもいけないないのでビデオ撮影(笑)
せっかく作ったジムニーのLEDリヤフォグも防犯ライト化している。
PIC16F84AにPA.EXEでプログラムした初期の作品・・・
PWMもどきで点滅し、疑似割込で点滅モードを変える・・・
テールやハイマウントブレーキと同一の高輝度LEDを使用してリヤフォグとしても十分なのでは?・・・
先日、セイコーさんから入手した 非絶縁型DC-DCコンバータIC TDK CRZ0512WC ブレッドボードでテストしてみました。
テストした回路図です。DC13.8Vくらいから3端子レギュレータで一旦DC5Vにして+-12Vを作るわけわからん(笑)回路
末尾WCは末尾Wに対しコンデンサ内蔵タイプなので外付けコンデンサ不要かもしれない・・・データシート推奨値に対して47マイクロFの電解コンデンサしか手持ちが無かったのでそれを使用した。負電圧側の電解コンデンサの極性に注意。
ブレッドボード配線です。
電圧測定です。DC5Vから確かに+12Vと負電圧の-12Vが出来ています。
両電源のオペアンプの基準電圧に使用する予定・・・
このICの仕組みとか、負電圧とか良く解らないけど
不思議(笑)
思えば整備マニュアルの「トランスアクスル回転軸1回転/4パルスに相当」の回転軸ってどこの事だ?
たぶんFFのドライブシャフト(=タイヤ)の事では無いのだろう・・・
もう1度良く読んでみよう(笑)
FRの場合、駆動軸といったらプロペラシャフトでトランスミッション(FRベース4WDの場合はトランスファー)のアウトプットだからここで1回転4パルスだったらデフのファイナルギアレシオが関係してアクスルシャフト(=タイヤ)回転になるよな・・・
ジムニーの車速信号読み取りユニットは簡単に取り外せるので、プログラムの書換は家の中でできる(笑)
ノアはアッパーボックスの蓋に取り付けたので一々取り外しは面倒だ・・・
ミニPICプログラマもオンボード書き込みアダプタ追加したし、ノアの基板にもオンボード書き込みピンを実装した。
なのでブログ始める以前にやってたモービルPCを復活させようかな?
以下は昔の画像・・・
息子に踏み潰されて液晶が液漏れしたメビウス君・・・(怒)
液晶を分解分離したメビウス君・・・
注;本体の隠しネジなど全て分解しないと液晶は分離出来ません
液晶無しで小型外部液晶で動作チェックのメビウス君・・・
ノアに搭載したメビウス君・・・あっ!メビウス君が写ってない(笑)
ナビは壊れた憎きAVIC-ZH9MDだ!(笑)
メビウス君本体のセットアップは小型液晶じゃ不便なのでエレコムの切替器を使用し母艦と接続・・・
モービルPC復活させると走行中(=戦闘中)にプログラム書き換えたりして・・・(笑)
ラクスクライン「キラ・・・危ないから走行中(=戦闘中)にガンダムのプログラム書き換えるのはやめて!・・・」
(笑)
息子が音楽に凝りだして・・・(おいおい野球はどーした?笑)
電子コンパスは娘の所へ行ったきり戻ってこないし(笑)
湯沸かしポットの電源コード抜けアラームは娘がディズニーがいいって言うし(笑)
次は音楽に関係するものでも作ろうかと思っている。
利用している電子部品の通販サイトは、秋月電子通商、マルツパーツ、共立エレショップなどですが、今回欲しい物は一部取扱がありません。
今回はセイコーさんで TDK CRZ0512WC を購入。昇圧型DC-DCコンバータICです。
DC5V入力で+12Vと負電圧の-12Vを発生することが出来るらしい。
湯沸かしポットの電源コード抜けアラーム用メロディIC(スモールワールソ)他もイーエレさんに発注したし(笑)
ブレッドボードでテストしてみて上手くいくかわからないけどまあ
お遊びですから~(笑)
追伸;こんな本買いました・・・
・・・トヨタはタイヤ1回転あたり5パルス相当ってことだ(笑)
整備マニュアルなんてそんなもの(笑)
JIS D5601
機械式メーターワイヤー1回転あたり4パルス・・・
時速60kmで637(ワイヤ回転/分)×4(パルス)
=2548(パルス/分)
=42.46(パルス/秒)
タイヤ外径625mm、車速60km/hのタイヤ回転数 8.49(回転/秒)
42.46(パルス/秒)/8.49(回転/秒)=5(パルス/回)
現在の電気式スピードメーターも同じらしい・・・
※ちなみに日産はワイヤ1回転2パルスらしいので、タイヤ1回転で2.5パルスになる・・・
わたしの車速信号読み取りプリント基板は割込スイッチを2個付けられるようにしてあるので、TMR0タイマ割込のサンプリングパラメーターを微調整出来るようにプログラムしてみるかも・・・液晶表示なんかしないで車速でなにかしたいだけならアバウトで良かったんだが・・・
今、原因不明の腹痛です(泣)しっしんも出るし・・・
まあ、お遊びなんで、あまり考えすぎると病気になっちゃいますから~(笑)
純正スピードメーターではなくナビの接続情報で車速を比較確認しようとしたんですが・・・
AVIC-HRZ099 は車速パルスカウントはあるが、車速表示が無い・・・
やくたたず(笑)
この辺、ソニーの古いNVX-M7000の方がマニアック・・・
まあ引くルートもマニアックなんですが(笑)
以下はストロボ使用で撮影です。実際はフードの中は暗いです。
リードスイッチのジムニーの様にゆっくり前進してタイヤ1回転で何パルスかの確認は、ノアの場合、スキッドコントロールコンピューターが微速前進で信号を出さないので
無理(笑)
わたし「・・・あのさ、ジムニーとノア2台で同じスピードで走行してさぁ・・・、無線で速度表示を確認するってのはどう???」
かみさん「・・・・・・・・・・・・・・・・・・・・」
へえへえ(汗)わかりましたトホホ(笑)
本当は1回転で5パルス相当なんじゃないの?・・・ちがうか(笑)・・・
とりあえず低速での動作はOK・・・厳密なチェックは時間が取れてから・・・
プログラムはとりあえずSD1602 16文字2行用プログラムをノアの車速パラメーターに変更してSC2004C 20文字4行に表示しています。ヒステリシス無しコンパレータ付きです。
車速コンパレータ用LEDインジケーターを液晶の脇に設置、ちと明るすぎかも・・・
明日は息子の入学式でかみさんがノアを使用するし、普段かみさん使用がメインなので、何かこれを接続することによる不具合があった時のことを考えて、車速信号を物理的に切り離す青矢印のスイッチと赤矢印のメイン電源スイッチを追加しました。かみさんが乗る時はOFFにしておきます。
※車速信号インターフェース74HC14の直前に分圧器がありますが、多少でも電流を消費していると思います。オペアンプのボルテージフォロアなど高インピーダンスで電流を流さず電圧を読み取るのが良いのかもしれない・・・勉強不足で良く解りましぇん(笑)
ジムニーはわたししか使わないから何でもありあり(笑)
ジムニーの純正スピードメーターとの比較じゃ良く解らない・・・
そうだナビNVX-M7000の接続情報の車速と比較できるじゃん
日中サングラスかけるとスモークアクリル板が偏光して液晶がよく見えない、その上、歳のせいで小さい字が読めない(笑)
おまけに運転しながら同時に2カ所見るのは
無理(笑)
息子が「ケンタッキーフライドチキン」が食べたいと言うので買いに行くついでに比較してもらった!
純正175/80R16のところ185/85R16大径タイヤ履かせてるので純正メーターとは誤差がある。
PICの車速計算はタイヤ動荷重半径ではなくカタログ外径値を用いている・・・
わたし「どのくらい誤差ある?」
息子「???????」
わたし「・・・・上読んで、すぐ下読んで(笑)」
息子「57km・・55km・・」
息子「45km・・43km・・」
息子「○○km・・・・スピードオーバーだよ(怒)」
そーじゃなくて(笑)・・・50km/h付近で2km/hのズレがあるみたいだがタイムラグもあるしナビの車速精度も不明だしまあこんなもんかな(笑)・・・
息子にビデオ撮ってもらったが私がひとりで撮ったのよりブレまくり・・・
やくたたず(笑)
スモークアクリル板カバーをライトブルーで作り直してみた・・・夜間は明るすぎるかも・・・
AC100Vの分岐まで完了
穴開け
グロメット装着
穴は2つ開けた
挿入(笑)
丸端子を電工ペンチで装着しハンダで補強
ターミナルに共締め
底蓋を戻し今回はとりあえずここまで・・・
電源コードが外れた時の警報は電子ブザーにしようと思っていたが・・・
ミ○キーヌが「ディズニーがいいです♪」(笑)
わしゃ良い娘のお願いに弱い(笑)
1個70円くらいのメロディIC UM66T-68L 曲目「スモールワールド」 が入手できそーなので手配するかな・・・(笑)
今までで一番良く撮れてる(笑)
ビデオ撮りながらマニュアルシフトアップは辛い・・・
ノア用の配線を終了してオンボードでCGRAMテストプログラムを書き込み動作させたところです。
ジムニー用専用基板は実車搭載しました。
走行テストでヒステリシスコンパレータプログラムにバグ判明(泣)・・・
ヒステリシス無しコンパレータは動作OKです。
↑↑↑わかんねぇだろうな・・・
「マグネット式電源コードコネクタ」、コードを足などで引っかけた時にポットが転倒して熱湯がこぼれてやけどなどの事故になるのを防止する機能だと思われますが、お店で使用してると、知らぬ間にコードが抜けててカップめんにお湯入れる時に水になってて慌てる時があります。
とりあえずテーブルが押されてもコードが挟み込まれないように画像の赤丸のストッパーを設けました。
それでも外れる場合を想定して、コードが外れたらブザーがなるなどの装置が作れないか考えてみました。
色んな方法が考えられますが・・・まずAC100Vがポット側から分岐できないか分解することにしました。
底の黒キャップを外します。
イジリ止めトルクスねじになっています。
外す工具T20いじり止めトルクスビットです。
底蓋を外してみました(笑)
細工出来そーです♪
電源が切れるとブザーを鳴らすにはPICを電池で駆動させるとして・・・
AC100VはACアダプタでDC5Vに変換して入力検知するってのはどうかな?
つづく(笑)
最近のコメント