2009年11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

最近のトラックバック

無料ブログはココログ

役に立ったAVRマイコンの本

読書

電子工作

2009年11月12日 (木)

RGBフルカラーLEDでクリスマスツリー テスト

マジ 疲れた(笑)
点滅パターンは数種類作成してみた・・・
ツリーにしてみると幻想的♪
自分で作れば、既製品に無いもの出来るし、飽きたら点滅パターン書き換えればいいし・・・
AVR ATmega168 + OSTA5131A タイマ0,1、2全て 8ビツト高速PWMで使用

3系統LED接続でテストしたもの

2009年11月 5日 (木)

サイクリングに使えるGPSロガーを構想トホホ編その2・・・6芯モジュラーケーブルが売ってない(笑)

忘れないうちに一気にトホホ編書いておこう・・・

PICとミニPICプログラマとのオンボード書き込み接続用に秋月の安価な6Pモジュラージャック(6極6芯)を使用することにしたのだが・・・

モジュラーケーブルはいくつか手持ちのあったので、気にしてなかった・・・

これって?げ!4P(6極4芯)じゃん(笑)歳で目が悪いから・・・

rj11_01.JPG

まあ、ホームセンターかケーズとかにあるだろうってタカくくってたんですが・・・

TELして聞いたら何処にも無い・・・

「以前は扱ってたのですが今は取扱やめました、インターホンでご使用ですよね?メーカー純正でないと動作しないなど、トラブルが多くて返品がかさんだのでやめました」

・・・それって、ストレート接続か、クロス接続かってことだよね?工作に使用するから回路で対応出来るのでどっちでもいいのだが(笑)

いや、笑ってる場合じゃない(汗)無いんじゃ困る

やべーよ、でもネットで検索したら1社だけあった!即通販で入手!

RJ-11モジュラーケーブル (両側6極6芯コネクタ付き、フラットケーブルタイプ)

ストレート結線タイプ

rj11_02.JPG

rj11_03.JPG

ミニPICプログラマのアダプタ基板を差し替えて100均ケースに組み込んだもの

minipicpro01.JPG

ここにもトホホが・・・力余ってケース加工時割れた(笑)機能に関係ないからまあいいや・・・

minipicpro02.JPG

minipicpro03.JPG

6Pモジュラー方式はPICだけじゃなく、AVRのオンボード書き込みにも流用できるし良かった!

六神合体ゴッドマーズ!(笑)

2009年11月 4日 (水)

サイクリングに使えるGPSロガーを構想トホホ編・・・げ!クイックポジ感光基板って(笑)

トホホ編で書こうかと思っていたのだが、原因も対策も特定出来ないので情報収集中だったのだが・・・

そろそろまた、プリント基板を作成しようと思っていたので、共立電子のHP見てたら・・・

何!サンハヤトの感光基板リニューアルされてるじゃん

クイックポジ感光基板って(笑)ニュータイプ?

「おなじみの感光基板が新しくなり、短時間露光・現像、経年変化による露光時間の変動が少なくなりました。」

何か気になるうたい文句(笑)

nzpxxk.jpg

以前、10枚セットでまとめ買いしたのがこの旧タイプ

print01.JPG

賞味期限的にはまだ問題無いハズなのだが・・・こないだのGPSロガー関係で製作した時、現像ムラやエッチング残りのムラが激しかった・・・

これは現像ムラで修正したもの

print04.JPG

print05.JPG

print06.JPG

これで何とか問題なし・・・

こっちはエッチングムラ・・・あまりしつこくエッチングしてるとパターンの細いところが消失するから~

同じ条件のハズが、基板によっては全く問題ないのもあるし・・・わけわからん(怒)

print08.JPG

右端は銅が残って、全くエッチングできていない、トホホ

print11.JPG

もう執念だよ!(笑)カッターややすりでパターンを削りだしたんだ(笑)

これでちゃんと動くんだからある意味凄い!

こんなんじゃとうてい表面実装の基板は作れないぞよ

print14.JPG

今度、新クイックポジ感光基板で試してみよう、でももし、旧タイプが経年変化による劣化でうまくプリントできなかったのなら、なんだかな~だよ

次は、まとめ買いしないで、必要な分だけ購入しようか・・・

 

 

 

 

2009年11月 3日 (火)

クリスマス用にフルカラーLED多接続検討中・・・

マイコンは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

2009年10月26日 (月)

ATmega168+RGB LED+LCDで正弦波PWM ちょっとメモ・・・

modf関数など使用せず、Double型実数をINT型にキャストして、小数点以下を無視し、整数にして8ビット高速PWM値(0から0xff=255)にしているのだが・・・

前述のfabs絶対値計算組合せで負の値を0としているプロセスも、Double型実数をunsigned INT型にキャストしたらできるのかな?負の値はどーなるのか試してみよう!

もっと簡単にできるのかもしれない・・・

ATmega168+RGB LED+LCDで正弦波PWM

ビデオの詳細

pwm_lcd02.JPG

RGBフルカラーLEDそれぞれのPWMに下記、正弦波形式を使用

sin_pwm.png

下の式で負の値は0となるようにした。

abs.png

a,b,c各パラメータで合成された色になる。今回のビデオは下記波形とした

グラフはフリーのBearGrp V2 を使用し描いた

RGB_LED_PWM.jpg

2009年10月25日 (日)

ATmega168+RGB LED+LCDで正弦波PWMビデオ

そのまんまです(汗)
正の部分の値を使い負は計算で0にしています。
y=a*sin(pai*b*(x-c)/180) をRGBそれぞれのパラメータの組み合わせで様々な光方を作り出せます。

pwm02.c

2009年10月21日 (水)

AVR ATmega168(ABL-168) LCD のWAIT を_delay_ms に変更

てっ言ってるうちに(笑)

画像じゃ解らないけど表題通りに変更して表示できた♪

lcd06.c

lcd_wait01.JPG

printf関数でfloat書式 (%4.5fなど) も表示できているが・・・

マイナス符号でケタずれする?

PICのC18の時みたいに、自前関数を作らないとダメなのか?

AVR ATmega168(ABL-168) PWM テストメモ

ビデオも見て(笑)ありきたりでつまらないですが・・・

pwm01.c

pwm01.JPG

LCD表示プログラムが最適化対策の為、WAITでタイマ2を使用していたので今回は動作させていません

WAITルーチンは_delay_ms や インラインアセンブラ や タイマ使用など色々手法がありようですが、今回、RGBフルカラーLEDでタイマ0,1,2全て8ビット高速PWMに使用したので、WAITは_delay_ms を使用。

リニア変化をSIN波にしてみるつもりだが、LCDに数値を表示させたいので、こっちのWAITも_delay_ms に変更予定。

※メモ;PWM使用の時、ポートの出力設定は必須

 

AVR ATmega168 でPWM ビデオ

RGBフルカラーLEDでテスト
タイマ0,1,2 全て使用
リニアなので変化がわかりにくいかも・・・
赤は肉眼では滑らかなのだがビデオで見るとデジカメの露出の関係か滑らかに見えない;
最期の青白っぽいのは全て点灯させたもの
電流制限抵抗は全て330Ωを使っているがRGBごとに変えてみた方が良いかも・・・

2009年10月20日 (火)

AVR ATmega168 (ABL-168)でLCDにprintf関数で表示・・・

LCDにprintf関数で表示できるらしいので、三角関数を計算させてみた(笑)

printf02.JPG

printf01.JPG

#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をリンク

PO01.jpg

2..リンカーのオプションに-Wl,-u,vfprintfを追加する

PO02.jpg

 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...


 

2009年10月15日 (木)

ABL-168 LCD接続ポート変更

多忙で、なかなか進まないが・・・

何処が変わったの?(笑)ってLCD(SC2004C)のDB4~7接続ポートをRD4~7からRC0~3に変更。

プログラム修正 lcd05.c

BB_ABL168_04.JPG

これで、PWMで3ポート使用出来るハズ・・・LCDはパラメータ確認用で今回は必要ないのだが(笑)

PICのプログラムを参考にしてLCD表示をライブラリ化しとこう・・・

ABL168_TEST2.jpg

※現在、ATmega168のヒューズビットは初期値のままで、ABL-168は20MHzクリスタルを実装しているが使用せず、内部RC発振で8MHzクロックとなっている。

 

2009年10月 9日 (金)

ABL-168 キャラクタLCDテスト・・・

とりあえずメモ

lcd04.c 最適化対策したもの

LCDの接続ポート図・・・BSch3Vで・・・

※ABL-168は20MHzクリスタル実装

ABL168_TEST.jpg

ブレッドボードの様子・・・たったこれだけのことでゴテゴテ状態(笑)

BB_ABL168_01.JPG

書籍のそのままなので芸が無い(笑)

BB_ABL168_02.JPG

BB_ABL168_03.JPG

PWMで3ポート使用する予定なので、LCD接続ポートを変更してテストするつもりなのだが・・・

2009年10月 8日 (木)

キャラクタLCD表示内部アドレス?・・・

検索ワードにあってちょっと気になったので・・・

説明書に記載されているので出すまでもないのですが、カーソル位置指定の際、プログラムしやすいようにBSch3Vで書いてありました。

上段がキャラクタLCD表示内部アドレス。下段は実際にコマンドで送るアドレスです。

20文字×4行LCDに他のLCDが共通アドレスとなっています。

誤記あるかも・・・

LCD表示アドレス.jpg

わかってるって!(笑)

ABL-168 をそろそろ動かそうか・・・

台風で外は大荒れ・・・誰も来ない(笑)

何もかもパラですが、PICでC言語が少しわかる様になってきたので、そろそろこいつもパラでテストしてみよう・・・

ABL-168 共立電子

基盤上にFT232RLを実装しUSBでプログラム書込機能を持ったAVR ATmega168のUSBブートボードです。

ABL-168.JPG

AVRstudio です。CのLCDテストプログラムでビルド成功しています。

ちゃんと動くかどうかは別ですが・・・(笑)

AVRstudio01.jpg

専用の書き込みソフト ProgramLoader で書き込みもできました。

AVRProg.jpg

あまり、ジムニー乗ってないので全然ジムニーおや爺じゃない・・・

年間走行距離がジムニーより自転車の方が遙かに多いことに気づいた(笑)

 

2009年10月 6日 (火)

PlanningFlow(試用版)使ってみました・・・

今まで、単一動作のプログラムではフローチャート書くまでも無かったのですが・・・

メニューの階層化や、複数ライブラリ化でこんがらがってきたので(笑)

PlanningFlow(試用版)使ってみました。

色付けしている部分が完成しているところです。

flow01.jpg

厳密にはフローチャートでは無いですが(笑)

頭の整理のために・・・

走行ログ10月4日

東総文化会館までノアで走行ログをSMDで再生。
SMDVer6は地図が古いので高速道路が一部無く、道路で無いところを走っています。国道は流れが悪くトロトロでした。
プログラムはメニュー階層化しました。

BB FlashBack Express 2 (日本語版)で画面録画してみました。
フレームレートは粗いです・・・

一旦ファイルに保存してから再度読み込んで経路再生したもの

あまり意味無いですが・・・

サイクリングに使えるGPSロガーを構想・・・その8 Notepad++ でプログラムソースをライブラリ化し統合♪

現在の構成メモです。今まで、測位とログ出力は別プログラムでテストしていましたが、ライブラリ化し統合しました。

main.c メインプログラム

menu.c 初期メニューライブラリ、4×3マトリックスキースキャン関数

lcd18m20.c キャラクタ液晶表示ライブラリ(20Mhz、ビジーチェック無し)

gps.c GT-720FからNMEAセンテンスの文字列受信ライブラリ、I2C EEPROMにログ記録有り無し選択、数値変換、2地点の距離、方位角計算など 

eprload.c I2C EEPROM に保存したログを$GPGGA形式で送信するライブラリ

初期メニューで分岐するだけの単純なものなので、今後、割込等で表示切り替えなど盛り込んでいく予定なのですが・・・

memory01.jpg

メモリは厳しそう・・・

電池駆動でメニューいじくって遊んでたら電池消耗しちゃいました・・・あまり長時間ログ取れないかもです。トホホ

4日、日曜日に出掛ける予定があったのでログ取ってみました。車両はノアでセンタートレイに載せて受信。電源は外部です。

SMD Ver6 は地図が古く高速道路が途中までしか無く道路でないところを走ってますが、田舎で空が開けていて測位精度も良いです。

tousou_log.jpg

息子のピアノの先生の講師コンサートが東総文化会館であり、息子と美人の娘(←マジで、笑)を連れて聞いてきました。

先生のピアノも初めて聞いたけど凄かった\@@/

ビデオ撮影禁止だったらしく知らずに撮ってたら怒られちゃいました(笑)

真面目で不真面目、怪傑ゾロリですから~

2009年9月27日 (日)

サイクリングに使えるGPSロガーを構想・・・その7 合体テスト(笑)

いつも不真面目ですが(笑)

安全面に関しては真面目、転倒した時や、衝突時に凶器にならないように、材質はアクリル板にしました。

しかし武骨で格好悪いなぁ~、じむにーおや爺にはピッタシ(笑)

ベルクロ固定部作成中・・・

gpsch01.JPG

gpsch02.JPG

gpsch03.JPGgpsch04.JPG

gpsch05.JPG

合体方式は「ジェットスクランダー」を参考にしました(笑)

3.2.1.0.発射~♪ スクランダークロスでドッキング・・・

あっ!しまった、わしガンダムヲタクだった(笑)

ミーティアとフリーダムにしとけば良かった・・・

 

2009年9月25日 (金)

じむにーおや爺専用GPS メニューテストビデオ

そのまんまです。

サイクリングに使えるGPSロガーを構想・・・その6 メニュー用ライブラリ作成で Notepad++ 使ってみました♪

プログラミングが下手くそだから仕方ない(笑)

メニュープログラムでは条件文の階層がどーしても深くなって、

「この { はどこの  とつながってるんだっけ?」なんて事がしばしば・・・

秀丸エディタでも対となる{ }がハイライト表示されるのだが画面からスクロールで外れると機能しない・・・

もっと、C言語に特化したエディタは無いか検索したところ Notepad++ がヒットしました。

まだ使い込んでませんが色別表示ハイライト表示でコピペも楽そうです。多少、階層が深くなっても錯覚起こすこともないし・・・

notepad01.jpg

コピペの時に } の位置を選択間違えすることも無い♪

notepad02.jpg

※Delay関数に誤記有ります。

どうしても6.戻るキーではC言語ではタブーのgotoも使ってしまうのだが・・・

メニュープログラムはライブラリ化したし、マトリックスキースキャンも分離し関数化したのでまだマシか(笑)

メニューデモです。

menu01.JPG

menu02.JPG

menu03.JPG

menu04.JPG

menu05.JPG

もっと凝ったメニューにすると

か、階層が・・・

階層が・・・

怪僧ラスプーチン

↑わかんねぇだろうな(笑)

2009年9月23日 (水)

じむにーおや爺専用GPS ログ再生ビデオ

前回取ったログの再生ビデオです。
ジムニーでカインズホームへ買い出し
もの凄い速度(笑)

2009年9月22日 (火)

サイクリングに使えるGPSロガーを構想・・・その5 マトリックスキーの動作テスト

4×3マトリックスキー基板は、共立電子から購入したこれを参考に作りました。

mkey01.JPG

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ラインの状態をスキャン、チャタリング対策も盛り込んだ・・・

mkey02.jpg

2行目左がRライン、右がCラインのポート状態を10進数で表示テストしたもの

04_matrixkey   KEYmatrix.c

電源投入時、R、Cとも15で 2進 0b1111

mkey03.JPG

これは「1」キーを押したところ・・・ R=14 0b1110、C=6 0b0110

mkey04.JPG

「5」キー・・・ R=13 0b1101、C=5 0b0101

mkey05.JPG

「#」キー R=7 0b0111、C=3 0b0011

mkey06.JPG

では問題です。これは何キーでしょうか?(笑)

mkey07.JPG

※答え、「7」キー R=11 0b1011、C=6 0b0110

これ元にメニュー作ってみよう

本当はポートBの上位ビット変化割込使った方が良いのだがLCD繋いじゃったし・・・

TMR0割込で通信中にチェック入れても大丈夫かなぁ~

実はマトリックスキーは、テストしないで構想だけで基板作って組み込んじゃったのであった・・・

動いて良かった^^;

サイクリングに使えるGPSロガーを構想・・・その4 シリアルポート用のコネクタも追加、ログ取ってみました♪

ほぼ完成してテスト運用しています。

GT720F+PIC18F2550+AT24C1024B×4+ADM3202

電源 006P 9V または外部電源切換式 MPLAB C18でプログラミング

gcase23.JPG

6極6芯ストレートモジュラーケーブルにて、ミニPICプログラマでオンボード書き込み可能

gcase22.JPG

側面に外部シリアルポート(RS232C)ピンを追加、PIC側RXはGT720Fか外部かをスイッチで切換、ログ転送用です。

これによりGT720FのNMEAデータをエコーしてリアルタイムにパソコンに送ることも可能・・・

gcase18.JPG

gcase19.JPG

Dサブ9ピンとのアダプタ

gps_log02.JPG

gps_log04.JPG

シルバーウイークですが仕事なので出掛ける予定無し・・・

消耗品の買い出しにカインズホームへ行くついでがあったので、ジムニーの助手席に置いてログ取ってみました。

※今まで散々落っことしたりしてそのうち壊れてしまうのではと思われたGT720Fは、本体に両面テープで貼り付けたので分離出来ません。本当は分離してダッシュボード上の方が感度良いと思います。

02_gpstest.c

gps_log01.JPG

抜け道のゴルフ場脇の林道も走行

03_eprload.c

gps_log05.jpg

林道中一部ロストしているところあり・・・

gps_log06.jpg

GPGGAに復元したログを通信ソフトで確認している画面です。EEPROMへの記憶容量を稼ぐため緯度経度のみ記録しているのでそれ以外のデータはダミーです。

gps_log07.jpg

プログラムは使いやすい様に書き換えていく予定・・・

私 「起動時に画面にじむにーおや爺専用って出るんだぜ!」

バイトの娘 「あーそういうヲタクっているよね!」

(笑)

 

2009年9月20日 (日)

じむにーおや爺専用GPSテストビデオ(笑)

とりあえずテスト(笑)

物欲・・・ATLAS ASG-1(笑)

ログも取れる YUPITERU ATLAS ASG-1 サイクルコンピュータ並に小型・・・欲しい(笑)

でも、どんどん改良されて2とか3とかすぐ出るんだぜ(笑)

asg-1.jpg

それに比べ、シャア専用じゃなかった(笑)じむにーおや爺専用GPSはでかいなあ(笑)

あ!ちゃんと「じむにーおや爺専用」って書いてあるし・・・(笑)

gcase21.JPG

防水性能0!(笑)

2009年9月19日 (土)

サイクリングに使えるGPSロガーを構想・・・その3 一部結線してテスト、オンボード書き込みも出来た♪

LCDとスイッチ基板の結線が終了・・・

しかし、ごちゃごちゃ(笑)

gcase10.JPG

PIC18F4550と一緒に入手してあった18F2550・・・

gcase11.JPG

4550と同じだが一部コンフィグレーションが異なるので修正・・・

LCDはポートBに接続するが8ビットのうちRB0とRB1はI2Cで使用するので残り6ビットだからビジーチェックは無しにしてR/Wはグランドに接続・・・

EをRB2、RSをRB3、DB4~7をRB4~7に接続でヘッダーファイルを編集。

最初はミニPICプログラマの純正アダプタ部に差して書込。

gcase12.JPG

テストプログラムも動いた♪

モジュラーアダプタをこんな感じで仮接続してオンボード書き込みも出来た♪

スイッチ基板の右4個がオンボード書き込みスイッチでMCLR、Vdd、RB6、RB7の切換になる。

モジュラーケーブル接続による書き込みは便利なので、ハーネス付け替えて正式にミニPICプログラマのケースに組み込もう・・・

gcase13.JPG

gcase14.JPG

GT720Fはこんな感じでオーバーハングさせて取り付ける予定・・・果たしてうまくいくかどうか(笑)

gcase15.JPG

スライスしたケースにロック用溝掘らないといけないことに気づいた・・・

gcase16.JPG

そろそろ、トホホ編書くかな・・・(笑)

 

 

2009年9月18日 (金)

サイクリングに使えるGPSロガーを構想・・・その2 スイッチとLCDおよびジャック部

GPSモジュール部は合体していませんが外観はこんな感じ・・・

gcase09.JPG

4×3マトリックスキーと各種切換スイッチ基板部

秋月の安価で小型のスライドスイッチとタクトスイッチを使用、ケースには両方ともΦ4.5の穴で実装出来る♪

swb02.JPG

ハンダ付けは安定しないので万力に挟んでこんな感じで・・・

swb01.JPG

一部修正してますが(笑)LCDとスイッチが所狭しと並ぶ・・・

gcase08.JPG

メイン基板のハンダ付けも終わった・・・

gcase07.JPG

ジャック部の穴開けはこんな感じでマスキングテープ貼って、四隅を細いドリルで穴開けしてアクリルカッターで溝を掘って行く・・・

gcase01.JPG

開いた(笑)筋トレは必須(笑)

gcase03.JPG

仕上げはまだですが位置はこれでいいでしょう・・・

gcase04.JPG

各基板の結線はこれから・・・

 

2009年9月16日 (水)

サイクリングに使えるGPSロガーを構想・・・その1

最初に・・・

今まで実験してきた構成だとGPSモジュールGT720FはRS232Cレベル出力だからPICとの接続にはレベルコンバータIC(ADM3202など)が必要になり、あまりコンパクトにならない、

また、レベルコンバータ内蔵のせいかGT720Fの消費電流は大きい(秋月HPで150mAと記載)ので乾電池駆動でどれほどの時間持つかどうか・・・GT720Fの発熱が大きいのも気になるところ・・・

なので、TTL出力のGPSモジュールの方が持ち運びには向いているのかも知れないが、新たに購入する気も起きないので、とりあえず試作することにした(笑)

電流も一応測定してみた・・・LCDの消費電流は少ないから、LEDバックライトは必要な時だけスイッチで点灯させる方式にして・・・

amp03.JPG

電源は006P 9V電池を使うとして、PICは40ピンの18F4550に変えて28ピンの18F2550にして、ここまで小さくできればと思ったが・・・

gpslog02.JPG

液晶(LCD)は小型のSD1602で・・・

gpslog03.JPG

PCBEでレイアウトしてみると、かなり無理ある(笑)

log2550_01.jpg

やっぱり、最初は欲張らずにこのくらいか!

gpslog01.JPG

アンテナはどーする?お!このケースいいんじゃない・・・でも深すぎ・・・

gpslog05.JPG

プラのこでスライスしちゃいました(笑)

gpslog04.JPG

一方、16F877Aテストボードを流用した18F4550は手狭になってきて、こんな100円均一ケースに移植中(笑)

4550case01.JPG

やっぱ、18F4550用テストボードも作らないと・・・

もろもろ、合わせてPCBEで

4550TESTB.jpg

877A改で4550テストボード基板・・・これは大丈夫だろう・・・

モジュラーやDCジャックも実装してみた・・・

4550TESTB02.JPG

DCジャックやUSB-Bコネクタは2.54ピッチで書くの簡単なんだが

usb01.JPG

usb02.JPG

モジュラーはピッチも違うし図面も無いしで、ノギスで実測してPCBEで描いて部品ライブラリに追加(笑) この後修正も入れているので画像は最終寸法ではありません

moju01.JPG

ミニPICプログラマのアダプタも作り替えてモジュラー追加・・・

moju02.JPG

導通チェックしてからハーネス付け替える予定・・・

moju03.JPG

元に戻ってGPSロガーは・・・

gpslog06.JPG

主要部品を仮載せしてみた、こんな感じでいーんじゃない ・・・

モジュラーと外部電源用DCジャックも実装・・・

gpslog07.JPG

今回は長くなるのでここまで(笑)

実は、色々問題が噴き出したのだが後日に・・・・

2009年9月 7日 (月)

LAN DISK HDLP-G500 のファーム1.00は問題有り

パソコン環境改善の為、新しいLAN DISK HDLP-G500を導入

hdlp_01.JPG

手前が新で奥に見えるのが古いLAN DISK

hdlp_02.JPG

セットアップして主要ファイルを移動して使い始めていたのですが・・・何か変?

プリント基板作成ソフトPCBEでモジュラージャック等の部品を作成していて、一旦登録した部品を描き直す為に「部品削除」を実施・・・

pcbe-e01.jpg

あれ?削除されてないぞ???部品ライブラリはテキストファイルなので直接、秀丸エディタで編集してみることに・・・いらない部分を削除して「上書き保存」した。

あれ?上書き保存が反映されず前のファイルのまま???ファイルのコピーは問題ない・・・「名前を変えて保存」すれば変更も反映されている???

別のアプリで作成したファイルやPCBEの基板ファイルはちゃんと変更保存出来ている???

なんじゃこりゃぁ~

犯人はこれ!ファームウエアVer1.00に問題有り・・・一部ファイルって何だよ(怒)

hdlp_04.jpg

hdlp_03.JPG

手順通りファームウエアをVer1.00からVer1.01に書き替えて「上書き保存」が出来る様になりました。

IOーDATA 結構こういうの多い(笑)製品は魅力的なのだが・・・気が付かなかったらどーすんだよ(笑)

これ問題でかいぞ!トホホ

 

2009年9月 3日 (木)

仮想COMポート2・・・

HSP3 (HotSoupProcessor3) でCOM8に文字列を送信する簡単なプログラムを書いてみた。

仮想コムポートソフト Virtual Com Port 2 を起動してCOM8とCOM9をクロス接続する。

COM9でオープンしたAcknowrich で受信させてみた。

1台のパソコンで通信プログラムのチェックが出来るのは嬉しい(笑)

com04.jpg

テキストファイル書込の簡単なテストプログラムも試してみた・・・

txt01.jpg

txt02.jpg

もう少し勉強すれば何とか形にできそう・・・

スクリプト言語システム HSP3 凄いなこれ!

 

仮想COMポート・・・

前回、GPSモジュールGT-720Fのログを記録してパソコンの電子地図スーパーマップルデジタル(以下SMD)に送ることまで出来た。

このログはSMD上で保存出来るし、再び再生させることも可能なことがわかった。

余談;ログ記録は1秒ごとですが、再生はインターバル無しだったので約3kmの道のりを1分17秒で走行している・・・町内時速120kmで爆走だ(笑)

log_test09.jpg

これは再生モード

log_test10.jpg

しかし、先行きグーグルマップや別のソフトとの連携の為、PICとRS232C通信でコントロールしログのテキストファイル保存も検討中・・・

パソコン側のソフトはHSP3.0 や VB VC# などで作ることを考えている・・・

通信チェックの為、仮想コムポートソフト Virtual Com Port 2 導入

1台のパソコンで2つの通信プログラム間の送受信ができるもの。

フリーで使うには起動後5分の制限があるがチェックするだけなら十分か(笑)

まずこれを起動してクロスするコムポートを指定、ここではCOM8とCOM9

com01.jpg

いつも使っている通信ソフト Acknowrich

COM9でオープン

com02.jpg

チェックの為、新たに導入した通信ソフト Rs232c (そのまんまだな笑)

こっちはCOM8でオープン

com03.jpg

ちゃんとソフト間で通信できている♪

 

2009年9月 2日 (水)

0円でケータイを変えた!(笑)ビデオ

詳細は「0円でケータイを変えた!(笑)」を見て(笑)

息子のウォークマンケータイ。ホルダーにスピーカー付き・・・

私のケータイは24段階レベルメーターを接続・・・勝ったな!(笑)

しょーもないネタですんまそん(笑)

0円でケータイを変えた!(笑)

息子のケータイが壊れた!

ここへ来て痛い出費かと思ったが新規0円があったのでそれにした。

ソニーウォークマンケータイ・・・左が新!

keitai09.JPG

充電ホルダーにスピーカーが装備されている。またFMトランスミッターも内蔵!

keitai08.JPG

私のケータイも真ん中のボタンが押しても反応しなくなっていたので・・・(笑)

左が以前の音楽も聞けない「簡単じゃねーか!(笑)、右が新でカメラに特化したもの・・・

keitai02.JPG

ホルダーにスピーカーは無い(笑)

keitai05.JPG

これでどーだ!(笑)24段階レベルメーター

keitai06.JPG

レベルメーター用にパソコンスピーカー改造

本日のネタでは無いです。以前に改造してパソコンで音楽を聞いています。

パイオニアの古いパソコンスピーカーを分解・・・

spk01.JPG

spk02.JPG

ハンダ吸引器でアンプ基板からスピーカー配線を外す・・・

spk03.JPG

ドリルで穴を大きくする(笑)

spk04.JPG

レベルメーター用分岐配線を合わせてハンダ付けし直す・・・

spk05.JPG

もう片方はここから取り出す・・・

spk06.JPG

レベルメーターの絶対値回路へつなぐ端子を取付・・・

spk07.JPG

spk08.JPG

レベルメーターLEDはエンビ板に固定した・・・

24level201.JPG

2009年8月27日 (木)

GT-720F の走行ログをスーパーマップルデジタルで再生してみた♪ビデオ

詳細は「GT-720F の走行ログをスーパーマップルデジタルで再生してみた♪」を見て(笑)
注;BGMの会話に他意はありません

ノアでGT-720Fの走行ログを取ってみた。2行目右「No」が「LOG」になった時、I2C EEPROMに書込中。

これを別プログラムで$GPGGAに復元して電子地図スーパーマップルデジタルVer6のGPSナビゲーションモードで再生させてみたもの。
※データが一部不連続で飛んでいる所あります。


GT-720F の走行ログをスーパーマップルデジタルで再生してみた♪

選挙の事前投票に行くついでにログ取ってみました。車両はノアです。

gps_epr03 通信速度は9800bps

log_test07.jpg

ビデオから変換した画像なので解像度悪いです。2行目右の「No」が「LOG」に表示された時がI2C EEPROMに保存中。後でビデオUPしますが瞬間しか表示されません。

最大アドレスで「END」を表示して書込は停止します。スイッチ等でのメニューオペレーションはこれから考えるので、今は電源投入後、アドレス最初から上書きする仕様です。

GLCD(グラフィック液晶)はメモリーオーバーでキャラクタ液晶に戻しました・・・

下は別プログラムで$GPGGAに復元し送信テストしたものです。緯度経度情報以外はデタラメな値です。通信速度は電子地図に合わせ4800bpsにしました。

epr_logdemo02

log_test05.jpg

これを電子地図スーパーマップルデジタルVer6 のGPSナビゲーションモードで走行ログ再生させてみました。

log_test06.jpg

カシミールでも取り込めるようにしてみたい・・・

後はメニューだな・・・

2009年8月26日 (水)

修行中ですが(笑)・・・GPSログを記録できたのでメモ2

もうひとつはまったのはこれ・・・

書籍に記載のプログラムは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で読み出したもの

log_test03.jpg

log_test02.jpg

約1秒で記録だから512キロビットで3449秒=57.48分記録出来る。

1Mbit(メガビット) のAT24C1024B で2倍の約115分、4個で約460分(7.6時間)か・・・

これを$GPGGAに戻して電子地図に送信する部分を作らねば・・・

修行中ですが(笑)・・・GPSログを記録できたのでメモ1

簡単に言ってますが、かなりはまりました。

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秒ごとに書込もやってみましたが、旨くタイミングが合えば正常に動作していますがズレると突然とんでもない動作します(笑)文字を配列などに取り込み中に時間のかかる割込などさせない方が良いでしょう(笑)

ああ修行が足りない

2009年8月20日 (木)

修行が足りんぞ!(笑)SG12864AのフォントをI2C EEPROMに格納した。

C18でI2C EEPROM AT24C1024B の書込読み出しプログラムでテストをして、後閑哲也氏のSG12864Aのフォントファイルを書き込んでみた。

gps_epr01.JPG

これは後閑哲也氏のフォントファイルで、Font[192][5]の2次元配列で構成されていて、8ビット5カラムで1フォントデータになっている。

並びはアスキコード順となっている。(0x20コードから開始)

epr_font03.jpg

このファイルデータをEEPROMに書込、USARTでパソコンの通信ソフトAcknowrichに読み出してみた。バイナリデータを16進で1行に5アドレス分表示している。

左の2ケタは拡張I2Cの上位と下位アドレスである。

epr_font02.jpg

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の左右のチップをまたぐ為、上記を基本とし若干複雑になっています。

memory04.jpg

これで多少メモリが復活しました。フォントデータの大きさも気にする必要はありません。

gps_epr04.JPG

2の補足衛星数と4の海抜高度(数値に変換して表示)を追加できました。

1.現在地緯度経度、3.進行方位角、5.速度(ノットを時速に換算)

6.目標地点緯度経度、7.目標地点方位角計算値、8.進行方位に対する目標方位角計算値、9.目標までの直線距離計算値

memory05.jpg

メモリは依然厳しい状態で・・・計算をもう少し見直すか、ATAN計算を小細工プログラムにするかしないとログ取りプロセスは追加できないかも?

gps_epr02.JPG

gps_epr03.JPG

修行が足りない(笑)

2009年8月17日 (月)

SG12864A PIC18F4550 GT-720F ビデオ・・・

メモリーいっぱいいっぱいですが・・・
ちゃんと動作しています。
GLCDは仮固定なので移動運用は出来ないのですが、固定測位でセンサーを動かして見ています。
速度が多少変化して方位角も変わるので円の指針が合わせて動きます。
指針の示している方角が進行方向に対する目標地点です。

しばらく修行するのでお休みするかも?・・・

2009年8月16日 (日)

USBコネクタなど、もろもろ確認中・・・

USBコネクタと電源コネクタ

usbc01.JPG

足の穴は広げないといけない・・・

usbc02.JPG

万能基板でチェック・・・

usbc03.JPG

こんな感じか(笑)

usbc04.JPG

6Pモジュラージャックは2.54ピッチじゃないので万能基板で確認出来ない・・・

プリント基板の余りに穴開けして取付確認・・・

mjj01.JPG

マトリックスキーは共立電子から購入した

mkey01.JPG

あ~だんだん、こんがらがって来た(笑)

 

SRAM と 変換基板・・・

使いこなせるかどうかわからんが(笑)

sram01.JPG

sram02.JPG

そもそも表面実装パーツのハンダ付けが、わしに出来るのかどうか?(笑)

I2CEEPROM AT24C1024B 危ねぇ~(笑)

前回、AT24C256B でテストしたが 1M のAT24C1024Bを入手・・・

あれ?デバイスアドレスピンA0,A1,A2がA1,A2しかない?・・・英文のデータシートでA0はP0になっている・・・

あー!、内部にメモリーページが2ページあってP0がアドレスなのかぁ~そういうことか!

アドレス000から111までなら8個のデバイスがパラレルに接続できるが、こいつは*00~*11で4個までってことになるよね!内部に2ページで8個と同じって事だ・・・

AT24C1024B.JPG

って事はこのプリント基板は書き直しだ(笑)

i2ceep_01.jpg

やっぱし、ブレッドボードで確認しよう(笑)

危ねぇ危ねぇ

2009年8月15日 (土)

SG12864A 18F4550 GT-720Fと合体するとメモリーいっぱいいっぱい(笑)

まじで・・・これ以上複雑な事できないじゃん(笑)

フォントもカタカナの部分減らしてだよ(笑)計算しすぎか?

memory04.jpg

目標方位と進行方位の差分方位角もビジュアルに表示できて面白いのだが・・・

glcd_gt01.JPG

フォントをプログラム内に持ってきてるのに無理あるんだろうなぁ・・・外部メモリに記憶させるとか・・・

GLCD(グラフィック液晶)はとりあえずペンディングだなぁ~

メモリーもいっぱいいっぱいだが・・・わしも、いっぱいいっぱい(笑)

SG12864A+PIC18F4550 デモビデオその2

オリジナルの1行に18文字を21文字表示できるように改造・・・
以前作成の、キャラクタLCDで作成した数値を文字に変換して表示する関数をグラフィックLCD用に改造してテスト表示したもの・・・空白がきちんと処理されているか確認の為、一旦表示エリアを0で敷き詰めてから描画させている。これにより正常に表示されていることが確認出来た。

この表現力は凄い・・・詳細は後日に・・・こればっかし(笑)

7行目、8行目の数値は、円の指針の先端座標(x、y)です。動きに合わせて変化しています。

2009年8月13日 (木)

SG12864A+PIC18F4550 デモビデオ

イメージデータは表示出来ていません(泣)
円を描いて指針が動く部分はGT-720Fの差分方位角をビジュアル化する為のタタキ台です !(笑)
三角関数で10°置きに直線を描いて円に補完しています。表示位置や大きさ、角度の分解能は変更可。



2009年8月11日 (火)

決して諦めるな!SG12864A+18F4550(笑)

なんとか電子工作室の後閑哲也氏 PIC24H C30用 SG12864A ライブラリをPIC18F4550 C18 用に書き換えて移植出来た。

こちらのフォントは192個?あって豊富、呼出も一般的なC言語の手法であるところの、文字を int型にキャストしてASCIIコードを得る方法で配列から選択している

char c1 = 'a';
int code1 = (int)c1;

glcd12.JPG

glcd13.JPG

glcd11.JPG

Electron Craft - 趣味の電子工作 さん の PIC16F CCS-C のSG12864用ライブラリも 18F4550 C18 に書き換えて移植出来た。

こちらのフォントは入力文字からSWITCH文でフォントデータを選択する手法になっている。フォントのカラム数が一定で無いので密度は高いが・・・

glcd09.JPG

文字ズレも生じる。数値は文字ズレ起こすと問題有るが、アルファベットは密度高い方が体裁が良いかも・・・

glcd10.JPG

ネットではその他、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] に減らすとビルド出来た!?

メモリ使用量もこんなもの・・・

memory01.jpg

変数の修飾子 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

参考にメモリ使用量です。

memory02.jpg

他にもC18用に色々書き換えなきゃコンパイラが通りません・・・

ちなみにディレイ関数は換算できるようにエクセルで表を作成しました。

delay01.JPG

まじで、日々是勉強なり(笑)

 

SG12864A + PIC18F4550 C18 日々是勉強なり・・・(笑)

しばらく、実家に行ってて帰って見れば状況が一変(笑)

いたしかたない・・・重荷にもなってたようだし・・・なんとか急場の穴埋めも出来たし・・・

「DTMがやりたい!」という息子の情報収集も兼ねて、実家からの帰り途中に神田の三省堂に寄って書籍を色々購入・・・

今の心境はまさしく帯に書かれたこれ!(笑)

IMG_3207.JPG

かなり以前に購入したが眠っていたグラフィック液晶 SG12864A ・・・

接続用プリント基板も作成済みでしたが後回しで一度も動作させてなかった・・・

18F4550 を稼働させたので、今回これもなんとか動かしてみようと思う。

glcd03.JPG

データ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と異なっている)

この液晶、動作が速いようでビジーチェックは必要ないみたい・・・

glcd04.JPG

データシートも英文しかない(笑)

glcd01.JPG

glcd02.JPG

他力本願を狙ってたのだが・・・ネットで調べてもC18で動作させた情報は無いようで(笑)

PICで有名な後閑哲也氏はPIC24F C30 で動作させていて 18F4550 C18 用に書き換えたつもりだったが、うまくコンパイラが通らない(笑) 

他にPIC16F CCS-C で作っている方がいて、これをC18に書き換えたつもりでもコンパイラが通らない(笑)

C言語自体が勉強不足なのと、それぞれのコンパイラの相違もあって・・・

このグラフィック液晶はキャラクタ液晶ほど初期化などのプロセスが複雑ではないので、とりあえずフォントファイルなどを組み込まずマニュアルの手順通りでアルファベットのAをデータで表示成功!

ここで気が付いたこと「CCS-C の時はPICのポートの初期化は意識せずに問題無かった(ほんとは問題有り?)、C18はセオリー通りに初期化しないと動作がおかしい」・・・当たり前か(笑)

glcd05.JPG

関数のプロトタイピングや変数の扱いがC18の方がCCS-CよりANSI-Cに近いんじゃないのかな?言い換えるとCCS-Cの方が賢いのかも知れない(笑)

一般的なC言語を少し勉強してヘッダーファイルを作成して関数のプロトタイピングや変数の指定、ディレイ関数を自分の環境に合わせて作成したりしてなんとかフォントファイルも組み込めた・・・

これはフォントファイル使用して描画したもの

glcd06.JPG

「A」だけじゃ面白くないから「GT720F」を描画してみた(笑)

解像度はイマイチだけど文字の大きさもキャラクタ液晶と違い自由に変えられるし、図形やグラフも描画できるハズだし・・・

やっぱバックライトはホワイトLEDの方がいいなぁ~出さないかな(笑)

glcd07.JPG

SC2004Cと比べてもこの大きさで情報表示量が格段に多いことになる。

glcd08.JPG

GT-720Fの情報や計算した結果や、方位を図形で表示させるには最適のハズ(笑)

本格的なプログラムはこれからだが・・・

2009年8月 4日 (火)

PIC18F4550 GT-720F C18 ちょっとジムニーで移動運用ビデオ

18F4550が16F4550になってたので修正 2009.08.11

ベランダでバーベキューすることになり、少し離れたスーパーまで食材買い出しにジムニーで3人乗り(笑)かみさんが、運転席助手席の赤レカロシートのせいで狭くなった後席で撮影した物・・・ 前回設定の目標地点から遠ざかる方向です・・・ ちょっと誤動作してる?kmのところにmが付いてる?ケタづれ防止してるのだが、電源投入時に誤動作することがあるようだ。また方位角の差分計算は見直す予定。 GPS車速は妥当な値かな?そのうち車速パルス計算と比較してみたいと思います。 BGMはイングヴェイ・マルムスティーンのCryingです。

2009年8月 3日 (月)

PIC18F4550 GT-720F C18 2地点間距離、方位角計算・・・ビデオ

同一計算条件で、877Aでは5°置きの値を参照するプログラムで130°でしたが、
4550ではC18でATANも問題なく計算出来ます。約128°です。

1行目は目標地点の緯度経度。
2行目はGT-720FのGPGGAから現在地緯度経度。
3行目はGPRMCから速度(ノット)を時速に換算。2地点間の距離を計算。
4行目右は2地点間の方位角を算出したもの。左はGPRMCから進行方位角です。中央は右から左を引いたもの 、+の場合は進行方向右に目標がある。-の場合は左に目標があることになります。
※固定測位なので進行方位角は安定しません。

※ATAN計算の分母が0になるときは条件式でATAN計算せずに0になるようにしました。

2009年8月 2日 (日)

C18で三角関数表示テスト・・・


0°から180°まで1°置きにsin、cos計算。
先に作成した関数で表示OKだと思う。実際の計算は角度をラジアンに変換しています。

2009年8月 1日 (土)

C18で符号付きの浮動小数点実数を液晶に表示する・・・

前回の考え方を発展させて関数化してみました。色々、数値入れてチェックしてみましたが、これで大丈夫でしょう(笑)

かなり長いプログラムになってしまったので掲載しません。

1.整数部の桁ズレ防止の為、桁値を指定するようにし、空きにはブランクを入れるようにした。(空きは0で表示も可能)

2.負の値は扱えないので、計算は絶対値とし、負の場合の-表示部分を追加した。

3.小数部も整数部同様、第何位まで表示するか指定するようにした。

※;単純に0.5678×10^4=5678 だけでは 0.0078×10^4のような場合78となって文字変換しても78で0078にはならないところを修正(笑)。

math02.JPG

使ったライブラリ

#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のデータを計算して表示してみたいと思います。

2009年7月30日 (木)

わしのC言語の理解度は幼稚園児レベル・・・(笑)

そもそも何が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はそんな便利な機能は無い!(笑)

数値を文字列に変換できるのは整数だけ(笑)

でも浮動小数点実数を整数部と小数部に分ける関数がある・・・これだ!

実行結果です。

math01.JPG

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
}

これを関数にしてプロトタイピングすれば計算後の液晶表示も容易になるかな・・・

2009年7月28日 (火)

18F4550+GT720F C18 ビデオその1

詳細は後日に・・・

PIC18F4550+GT720F C18 でやっとここまでできた・・・

夏バテかなぁ~疲れて詳細書く気力無し・・・

CCS-C と C18 かなり違う・・・

とりあえず文字列処理まで出来たが課題は山積み・・・

gt720c18_01.JPG

息子「今週末、こち亀に香里奈が出るから元気出せよ!」

オレってそういう奴?(笑)

2009年7月24日 (金)

18F4550 クロックダイアグラム・・・430ページの英文マニュアルを読め!(笑)

研究社の英和辞典、引っ張り出してきて・・・(笑)

16F877AのPDFは234ページだったけど、18F4550は430ページもある・・・しかも英文で(笑)

パソコン画面で見るのは老体にはつらい(笑)ので印刷しちゃいました・・・

clock_01.JPG

※以下、勝手に解釈して想像も含まれていますので間違っているかもしれません。あしからず・・・

少しづつ解ってきました・・・18F4550のクロックダイアグラムです。

clock_02.JPG

以前の外付け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)となります。

以下コンフィグヘルプファイルから抜粋です。

CPU System Clock Postscaler:

CPUDIV = OSC1_PLL2
[OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
CPUDIV = OSC2_PLL3
[OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]
CPUDIV = OSC3_PLL4
[OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]
CPUDIV = OSC4_PLL6
[OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]
 
 
clock_03.JPG
 
実は先の液晶表示プログラムはHSモードだったのでコンフィグPLLDIVを無指定だったのですが、/1となってPLLに4MHzでは無く20MHzが入力されていた様です。
PLLクロックを使用していないので関係ないようですが、マイコンは誤動作していたようです。
電源投入後はフリーズしてMCLRのリセットスイッチで動くって感じです。
 
コンフィグを訂正した仕様です。
 
config_07.jpg
 
これで正常に動作します。マイコンはクロック20MHzで動作していることになると思います。
 
実は10MHzのセラロックでも適当にデバイドすると動作しちゃったりします。あまり高周波でなければOKって事ですかね?
 
この辺も色々試して見ると面白いかも?
 
ディープだ(笑)
 
 

 

2009年7月23日 (木)

PIC 18F4550 を入手♪(笑)

秋月電子通商から通販で購入・・・

40ピンの18F4550と28ピンの18F2550も手配した。

4550_01.JPG

このデバイスはポートCのRC3ピンが無くてVUSBピンになっている。それ以外は16F877Aとピンコンパチなのでとりあえずテストボードに差し替えて見ることにしました。

将来的にはRC3の差し間違えを無くす為、18F4550の専用テストボードを作る予定・・・

で!なかなか877AがICソケットから外せなかったのですが、小さいマイナスドライバーでこじってなんとか外しました。

4550_02.JPG

4550_03.JPG

4550_04.JPG

そのまま4550を差そうとしましたが、足が広がっていて差さりません。

4550_05.JPG

いつもやっている足曲げ(笑)

4550_06.JPG

無事差さった。換装完了!!!

4550_07.JPG

コンフィグワードとかまだまだ勉強不足でイマイチ動作が不安定なのですが、液晶表示テストプログラムが動いてます。

4550_08.JPG

4550_10.JPG

本体のプログラムと別に液晶ライブラリソースをlcdlib18.cを追加してlcdlib18.hヘッダーファイルのプロトタイピングで受け渡すのですがこのファイルも前回同様パスを追加しないと認識しませんでした。

config_06.jpg

書籍のソースに対して私のテストボードは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の設定が良く解らない?・・・

config_01.jpg

452のコンフィグでビルドすると当然エラー(笑)

config_02.jpg

先の4550用コンフィグでとりあえずビルドできました。

config_03.jpg

設定してないコンフィグはデフォルトでどーなるの?MPLAB IDEで確認出来ます・・・

config_05.jpg

FOSC=HS だから PLLは分割しないになってる?うーん?

レゾネータ(セラロック)20MHzでも10MHzでも動くし・・・

まあ、慌てずにいろいろ試してみよう・・・

ちなみに書込はミニPICプログラマとW509で出来ます。

config_04.jpg

CCS-Cの方がDELAY関数がクロック周波数設定できたり・・・

出力も拡張で液晶に

  printf(lcd_data,"cos(pi*%lu/180)",data);

なんてこともできるから数値でも液晶表示できるけど・・・

C18はなんかアセンブラに近い感じ(笑)

877Aがフリーダムだったら、4550はストライクフリーダムくらいになった気分♪

凄くわかりやすいでしょ(笑)

 

2009年7月19日 (日)

C18でデバイス18F4550にしてATAN計算もビルドできるじゃん♪(笑)

18F4550・・・まだ持ってないんですが(笑)

C18でATANが計算できるのか?チェックプログラムでビルド出来ました。他は何もしないプログラムなので何の意味も無いですが(笑)

絶対値計算の関数はCCSCではABS()でしたがC18はFABS()なので修正しました。英文のライブラリーPDFを参照・・・

実はC18にはATAN2(x、y)関数もある。すげぇ~

atan_01.jpg

16F877Aと殆どピンコンパチの様なのでやっぱ18F4550が有力候補だな♪

ミニPICプログラマでも書き込みできるようだし・・・

2009年7月18日 (土)

877AでATAN使うとメモリーオーバー(笑)・・・方位角の計算

方位角の計算式は組めるのですが・・・

16F877AでATAN(アークタンジェント)を使うとメモリーオーバーする。

ほんと色々試してみましたが駄目・・・もう時間の無駄って感じ(笑)

下記は距離計算を外して、ATANを5°置きの計算値を参照する小細工プログラムで実行させたもの・・・

経度の変位分に緯度のCOS計算が含まれていますがメモリーオーバーしません。

IMG_3109.JPG

130°です。スーパーマップルで印刷して角度を分度器で測ると50°です。

第2象限なので真北を0°として180°-50°=130°となります。

IMG_3110.JPG

この方位計算に先の距離計算を組み込むとまたメモリーオーバーです。

outofrom01.jpg

COS計算を外して緯度30°のCOS30°計算値を使用した小細工プログラム(笑)です。メモリー85%です。

誤差ありますが関東近辺では使えそう(笑)

ちなみに速度ノットはkm/hに換算しました。

IMG_3113.JPG

とりあえずこれで誤魔化して使って(笑)

同じ計算を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にさせるとか(笑)

C18がやっとまともに動いた・・・(笑)

何でこんなに手間かかるの?(笑)

MPLAB IDE V.8.30 は起動しないから始まって・・・

「Windows XP でユーザー プロファイル名を変更する方法」でユーザー名を2バイト文字じゃない名前にして環境をコピー・・・

C18Compiler V3.32ではこんなエラーが出て

error [1027] unable to locate ******

ヘッダーとリンカーのパスを通す。

c18_tst01.jpg

c18_tst02.jpg

c18_tst03.jpg

error - could not find file 'c018i.o'.

ライブラリのパスを通す。

c18_tst04.jpg

でやっとテストソースでビルド出来た・・・

c18_tst05.jpg

CCS-Cの方が勝手にパス通してくれるから便利なんだが・・・

18FシリーズはC18がおすすめのようで・・・

それとも新16Fシリーズが出るの待つかな(笑)

 

2009年7月14日 (火)

方位角の計算・・・忘れないうちにメモ(笑)

後でOpenOfficeで清書するとして、忘れないうちにメモ書き

IMG_3106.JPG

緯度方向距離は緯度変化分ラジアンに地球半径を掛けて円弧を計算する。

経度方向距離は経度変化分ラジアンに地球半径が緯度の余弦に比例させた半径と掛けて円弧を計算する。

この「緯度の余弦」の緯度は基準点か目標点か2点の単純平均値をとるかは考え方が色々ある様ですが、ここでは平均値としました。どれを取っても近距離では変わらないかも?です。

あとは三平方の定理から距離を算出。

一方、方位角は真北を0度として東回りに角度が増えるとすると、ATAN(アークタンジェント)で計算出来ますが求まる値は0~90度なので、2地点の緯度・経度の大小条件で象限ごとに角度が決まることになると思います。

なぶり書きですんません・・・

何か電子工作か?プログラミングか?数学の計算してんだか?どんどん脱線していくジムニー親爺(笑)

 

うーん手強い(笑)2地点の緯度経度から距離算出・・・計算式変更・・・

前回、調べた球面三角法での2地点の距離計算ですが・・・

距離01.png

距離が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);
}

IMG_3103.JPG

140kmくらい離れたところだと計算出来ます。

IMG_3105.JPG

式の出所が明確でないので調べてから後日載せますが、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);
}

IMG_3102.JPG

自宅付近からワングーまでの距離です(笑)スーマーマップルの計算値とも合っていると思われます。

2地点間距離01.jpg

同様に140kmくらいはほぼ同じ計算結果となります。

IMG_3104.JPG

とりあえずこれでいいや(笑)

パソコンのEXCELだったらACOS計算も精度高いのだが・・・

うーん手強い・・・(笑)

方位角の計算もATAN2(x,y)を使ったりして(笑)どーすんの!

自転車・徒歩での近距離使用がメインと考えるから近似式で良いでしょう。別に測量するわけでもないし・・・

 

2009年7月13日 (月)

C言語でGPGGAに加えGPRMCから文字を抽出・・・

LCD表示のレイアウトはイマイチですが・・・

gprmc_01.JPG

2行目は前回と同様GPGGAから緯度の文字列をそのまま表示したもの

3行目は前回の緯度に加え経度の文字列を数値に変換して度数計算したもの

4行目はGPRMCから速度(ノット)と方位角を表示したものです。とりあえず文字列そのままです。

gprmc_02.JPG

面倒だからマスキングはやめました(笑)

GT-720Fを少し動かすと速度出ます!方位角は固定測位だと数値が安定しません。当然ですが・・・

これに電子コンパス組み合わせたら凄いよな・・・

gprmc_03.JPG

gprmc_04.JPG

次は球面三角法から目標点に対する直線距離と方位角を算出させて見たいと思います・・・

未完成ですがジムニーで移動運用・・・

10日の金曜日に用事があったので少々・・・

GT-720Fはビニールテープでダッシュボードに固定・・・

gps_ja12_01.JPG

歯医者の駐車場(笑)・・・虫歯が有るのではなく月一度の検査です。

gps_ja12_02.JPG

gps_ja12_03.JPG

帰りにスーパーの駐車場で(笑)

今日は息子とカレーを作るのだ!

gps_ja12_04.JPG

計算は合ってるって当たり前(笑)

 

2009年7月 9日 (木)

C言語でなんとかGT-720Fの文字列を処理出来た♪ビデオ

詳細は「C言語でなんとかGT-720Fの文字列を処理出来た♪」を見て(笑)

C言語でなんとかGT-720Fの文字列を処理出来た♪

C言語・・・勉強の日が浅いのでかなり手こずった(笑)

ここまで出来れば後は同様の処理なのでなんとか形になると思う。

アセンブラの時はGT-720Fの文字列をキャラクタ液晶にそのまま表示しただけでしたが・・・

※;液晶に数値を表示する時もテーブルを参照して数字文字に置き換えなければならない

画像はアセンブラの時のもの

gps13m.jpg

C言語では文字列を配列に格納する。クセがあって手こずりましたが、アセンブラと似たプロセスで1文字づつ処理して何とか出来ました。

メモ;配列はテーブルと同様にエンドポイントを0で識別している。設定配列数をオーバーすると変なアドレスにジャンプして動作がおかしくなるのはアセンブラと同じ。

もしかしたら、もっとスマートな手法があるかもしれませんが(笑)

また、C言語なら文字列を数値、それも浮動小数点実数に変換できる関数がありますから下記のようなことも出来ます♪

gps_c02.JPG

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;
}

gps_c01.JPG

これを見る限りでは測位状態だと3回に1回、GPGSVセンテンスが出力されている?

それともプログラムの影響かな(笑)

I2C EEPROM の書込、読み出しテストもできた♪

手持ちのI2C EEPROM AT24C256B があったのでブレッドボードで仮接続して書込、読み出しテストまで終了した。

i2c_01.JPG

1個しかないのでアドレスA0,A1,A2は000で・・・

i2c_02.JPG

16F877AテストボードにもI2C通信用にピンを立ててあったのでそこへ接続・・・

i2c_03.JPG

本当はSRAMを使った方が書込速度や容量、コンパクト性の面で有利なんですが、接続が多いし、表面実装部品のハンダ付けもしたことないし・・・これだけハンダ付けしてても、いまだに下手だし(笑)

今回、EEPROMは256kbitですが、1MbitのものもあるしI2Cならパラレルに接続できるし、これでログ取ってみるつもり・・・

緯度・経度のテキストのみで記録インターバルが5秒置きくらいならなんとかなるかなぁ?(笑)

追記;こんな本読んで勉強してます。

IMG_3055.JPG

 

2009年7月 7日 (火)

RS232通信用プリプロセッサのERRORSパラメータ追加で受信OKでした(ビデオ)

詳細は「RS232通信用プリプロセッサのERRORSパラメータ追加で受信OKでした」を見て(笑)

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”に保存。・・・しか書いてない(笑)

IMG_3056.JPG

日曜日に用事で成田に行ったのですが、待ち時間の間にCCS社Cコンパイラの代理店データダイナミックスの日本語マニュアルをパラパラ読んでまして

ERRORS 受信の際のエラーを”RS232_ERRORS”に返します。エラーが発生するとポートをリセットします。

あ!これだ(笑)

右が日本語マニュアル・・・直訳でおかしな日本語もありますが・・・

IMG_3054.JPG

MPLABでビルド時、RS232_ERRORSを使用してない主旨の警告が出ますがプログラムの実行上問題ないようです。

c_232_06.jpg

GT-720Fから受信ピンでNMEA文字列をキャラクタLCDに表示し、そのまま送信ピンからパソコンに送ってみました。※デュアルポートではありません。

c232_06.jpg

c232_05.JPG

c_232_05.JPG

これを見る限りでは「GPGGA」「GPGSA」「GPRMC」のみ出力してるようです。「GPVTG」は無い・・・

2009年7月 2日 (木)

CCS社Cコンパイラの標準入出力関数は難有り?・・・

ブログライトから投稿できないぞー(怒)

アセンブラでつまずいたのと同じ現象が起こる(笑)

パソコンからの受信では問題ない。しかしGPSセンサーモジュールGT-720Fからの受信では2文字受信してフリーズする。PIC内蔵のダブルバッファのお陰で2文字は受信するがゴミデータなどによってオーバランエラーやフレーミングエラーが発生してフリーズするものだと思われる。

アセンブラプログラムの時も同じ現象だったのでエラー回避プロセスを追加して対策した。

CCS社Cコンパイラの標準入出力関数 getc() はどーする?この組み込み関数内のプロセスでフリーズしてるんだよなぁ~

いろいろ手法はあるようですが・・・C言語は日も浅く勉強不足で(笑)

面倒なのでCCS社Cコンパイラの標準入出力関数を使わずにC言語で直接レジスタを操作してアセンブラと同じプロセスでエラー処理付きUSART(RS232C)にしてみた。

また、PICでは有名な後閑哲也氏のキャラクタ液晶ライブラリは、液晶がつながっていない場合のフリーズ回避のため、ビジーチェック無しで適当なウエイトを設けてある。

こちらも高速で動作させる為、ビジーチェック有りに改造してしまった(笑)

結果!とりあえずC言語でもGT-720Fから受信した文字データを連続表示するところまでは出来た!♪

c_232_01.JPG

c_232_02.JPG 

追記;ブログライトからXML-RPCによる投稿が出来なくなった原因は下記でした。アカウント設定変更で投稿出来ました。

2009年6月30日よりXML-RPC投稿時に利用するアカウントとパスワードが変更になりました。
XML-RPCによる投稿は、ココログ管理画面へのログイン時に利用している@nifty IDとパスワードにて投稿をお願いします。
なお、ココログフリーをご利用の方は従来通りのアカウントとパスワードでXML-RPCによる投稿をしていただくことが可能です。
また、同様にXML-RPCのエンドポイントも変更になっておりますので、同様に設定を変更してください。

エンドポイント;ベーシック・プラス・プロをお使いの場合

旧 http://app.cocolog-nifty.com/t/api

新 https://app.cocolog-nifty.com/t/api


09.07.07追記 文中、putc()とありましたがgetc()の誤りで訂正しました。

2009年6月29日 (月)

回転楕円体(GRS80)における2地点の最短距離と方位角の計算は・・・無理?(笑)

国土地理院のHP見ましたがかなり複雑な計算で(笑)

とりあえず地球を完全な球とみなした簡易的な球面三角法で・・・

2地点の緯度経度を X1,Y1 X2,Y2 として距離Lは

距離01.png

で求まるらしい・・・

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


2地点間距離02.jpg

スーパーマップルSMDで約18km・・・ほぼ一致する。でも距離が短くなると誤差が増えるらしい・・・

以前の神奈川の境川・引地川サイクリングでノアをデポした泉の森公園駐車場に戻るのに苦労したので・・・(笑)

千葉の検見川の浜の駐車場なんかもそーだが夕方4時30分でゲートが閉鎖されてしまうのでリターンに手こずるとヒヤヒヤもん。

PIC C言語で計算できるか?

三角関数計算が必要な理由がわかったでしょ(笑)

素直にポケットナビ買えって言われそーですが(笑)

2009年6月26日 (金)

Cに浮気・・・(笑)

・・・ってビックリした?(笑)

三角関数も標準算術関数にあって・・・恐るべしC言語・・・

詳細は後で・・・

2009年6月22日 (月)

スーパーマップルデジタルにPICからNMEAを送信してみた♪

「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(世界)と東京どちらでも使用できるようです。

wgs84_01.jpg

NMEAのうちRMC/GLL/GAAに対応ってあるけどGAAって何だよ?(笑)たぶんGGAの誤記だろうな・・・

GPSセンサーモジュールのGT-720Fを繋いでリアルタイムにナビってのはありきたりで面白くないわけだ・・・

wgs84_02.jpg

そこで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からデータが送られている。

wgs84_06.jpg

SMDで認識できた♪(笑)

GPRMCだけでも良いかも・・・

・・・ってことはGT-720Fも4800に変更しないと認識しないんだ・・・

wgs84_07.jpg

これでPICを疑似GPSセンサーとして認識してるわけだ!

これなら車での林道走行ログや、自転車のサイクリングログ、登山のコースログなどを保存して、帰宅後に電子地図上で何倍速かで再現するなんてことができそーですよね♪

2009年6月20日 (土)

GT-720F やっと移動運用(笑)ビデオ

ノアに装着・・・

GT-720F やっと移動運用(笑)

息子が、たい焼き食べたい!というので、ノアに仮装着、やっと移動運用できました。

gpsm01.JPG

gpsm02.JPG

緯度 35+36.2729/60 経度 140+24.6821/60

ワングーに居ます(笑)

gpsm04.jpg

1ノットは1時間に1海里進む速さ、1海里=1.852km

1ノット=1.852km/h

画像の速度は10.2ノット=1.852×10.2=18.9km/h

※ワングーの駐車場内だと思います。息子が撮影(笑)

gpsm03.JPG

自転車に搭載したほうが面白そう・・・

記録媒体はどーするかな?

そうそう電池駆動の為に消費電流も測定してみよう・・・

2009年6月19日 (金)

GT-720F は GPVTG センテンスを出力してない???ビデオ

詳細は「GT-720F は GPVTG センテンスを出力してない???」を見て(笑)
固定測位ですが、データは多少ばらつくようです。

BGMは陰陽座 梧桐(あおぎり)の丘です。


GT-720F は GPVTG センテンスを出力してない???

未確認ですが・・・パソコンの通信ソフトで取り込めばハッキリするのですが・・・

購入直後にパソコンに接続してその後、PIC接続専用に配線してしまったから確認が面倒で(笑)

画面キャプチャーしとけば良かった・・・

メーカーのデータシートには記載されてるから、デフォルトで無くてGPSViewerで設定変更できるのかも?それとも私のプログラムがおかしいのかな?

今回は、GPGGA と GPRMC から抽出してみました。

GPGGAから 緯度、経度、測位衛星数、海抜高度

GPRMCから 速度(単位ノット)、年月日

野蛮なプログラムなので、センテンスが読めないと無限ループに陥るのじゃ(笑)

今のところ上の2つは読めないってことはないんだが・・・

追記;2階家屋内でも最高10個衛星測位できたようです。

gps13.JPG

gps13m.jpg

GPVTG が読めれば速度km/hが表示できたのだが・・・

ノットじゃなぁ~船じゃないんだから(笑)

 

C1001UB VF3.5Vって誰が言った?・・・(笑)

「C1001UBとTC74HC4511AP」って書いたら

アンマッチって思った人いたでしょう???早く言ってよね(笑)

c1001_02.JPG

16F877Aはポートが沢山有るから液晶とGPSモジュールGT-720Fに加えて3桁7セグスタティックドライブユニットも接続した。

BCDコードを送って表示もOKだ!・・・しかし変・・・暗い(笑)

今まで電圧計で使用したC533SRとか7セグの使用経験あったので甘く見た・・・机上計算だけでブレッドボードでテスト点灯すらしとらん・・・

VFっていくつだったっけ?仕様書を見返す・・・手書きのなぶり書き計算が残ってた(笑)

VF3.5Vで計算してる。電流制限抵抗は150Ωにした(笑)・・・これDPだけ、7セグはVF7Vが正解、思い違いが激しいな・・・

c1001_03.JPG

BCDデコーダ/7セグドライバICのTC74HC4511APって5V仕様・・・

VF7Vに電源電圧5Vってアンマッチじゃん(笑)

ガッビーン!!!

駄目だこりゃって・・・チョットまてよ・・・TC4511BPってあるよね♪ピンコンパチで3~18V電源電圧で動作する奴、これに差し替えて9Vか12Vでドライブすればリカバリできるか!電流制限抵抗値が変わるとハンダ吸引して抵抗21個付け替えないといけないから、なるべく今のままの抵抗が使える電圧を選べばいいし・・・

とりあえずこれでもテストはできるからゆっくり落ち着いてIC(TC4511BP)を手配しよう・・・

実はこのテストユニット、16芯フラットケーブルが無かったので作りっ放しで動作チェックもしてなかった(笑)

先日、「ノアのスライドドア開かず」の件で本納のトヨタに行ったついでに茂原まで足を伸ばしアルシマ無線でケーブルを買ってきたので初めてテストした!

注;茂原にこりん星人はいませんでした(笑)

bp_01.JPG

ケーブル圧接型ソケットも初めて使用したので、ここでも誤りが(笑)

フラットケーブルに3桁のBCDコードを順序よく配列するようにBOXプラグをプリントしたつもりが逆転して配列滅茶苦茶・・・まあ、ケーブルの反対側相手コネクタ接続するときにクロスしてハンダ付けで問題なかったのですが、次回の為の覚え書きです。

BOXPLUG.jpg

参考画像です。

bp_02.JPG

bp_04.JPG

圧接したあとに試しに外して見ました・・・ロック部を小さいマイナスドライバーや端子抜き工具などで浮かすと外れます。

bp_03.JPG

8×2で16ピンの互い違い構造が良く判ると思います。

bp_05.JPG

ストレインリリーフも手配してありましたが今回は未使用です。

んで何がしたいかって?

長くなるので今回はここまで(笑)

2009年6月17日 (水)

GT-720Fで緯度、経度、海抜高度まで表示・・・しかしPCではまりまくり

とりあえずここまで出来た♪

gps12m.jpg

所在地バレバレなので適当に数値をマスキングしてあります。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ではまりまくりました(泣)

下記は緯度経度まで表示したもの、これに海抜高度を追加表示させようとプログラムを追加増大すると正常に動かない(泣)

どう見直してもフローは合っている。どうして??????

gps11m.jpg

今回のプログラムはテーブルを多用しています。下記の様な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以上になっています。これは正常に動作しません。

PC01.jpg

テーブルを先頭に移動したものです。

        ORG     0
        GOTO    START
<ここにテーブルを置く>

START

テーブルの最期のデータは0xFFを越えていません。言い換えると0xFFまではデータを追加できるということです。正常に動作します。

PC02.jpg

PC03.jpg

あ~はまりまくり(笑)でも勉強になった!

GPSモジュールは移動で使わないと面白くもなんともない・・・電源は車でのバッテリー使用と、自転車、徒歩の電池使用の2通り考える・・・

2009年6月12日 (金)

GT-720Fの連続文字列を液晶に表示・・・ビデオ

詳細は「GT-720Fの連続文字列を液晶に表示・・・」を見て(笑)

GT-720Fの連続文字列を液晶に表示・・・

最終的には液晶の指定アドレスに必要な情報だけ表示が目標ですが、何を何処に表示するか考え中(笑)

とりあえず受信が正常に行われているかのチェック用に連続文字列の液晶表示にしてみた。

下の画像は前回の受信した文字列をそのまま表示したもの。液晶の内部アドレスが飛んでいるため1行づつ順番には表示されません。

gps09.JPG

液晶表示内部アドレスです。

図はBSch3Vで描いてBMPで保存しJpegに変換トリミング後Pcrewで色つけしました(笑)

LCD表示アドレス.jpg

20文字×4行と他の16文字×2行などと互換を取っているため内部アドレスが飛んでいます。プログラム制御無しに文字を描いていくと1行目の次は3行目に表示されます。クリックして拡大出来る画像です。

LCD表示アドレス.jpg

そこでテーブルと条件分岐で1行づつ順番に描くプログラムにしてみました。解りやすいように意図的に19文字×4行表示にしています。定数を変えることにより他の16文字×2行などにも対応出来ます。最下段表示完了すると画面をクリアしてホーム00Hから描くようにしました。

さらに改行コードで次の行に飛ぶようにすればもっと見やすいかも?です。

gps10.jpg

GPSモジュールGT-720Fは電源を投入すると赤のLEDが点灯して直ちにNMEA-0183フォーマットを1秒更新(1Hz)で送出します。測位できててもできていなくてもです。2階建ての1階家屋内では測位出来ません。2階では家屋内でも測位できるようです。測位すると赤LEDがゆっくりと点滅します。

1Hzで受信し液晶表示するプロセスではPIC内蔵の受信ダブルバッファだけで正常表示出来ていると思われます。更新が1秒間に5回(5Hz)など高速のGPSモジュールもありますが、正常に表示するには外部受信バッファが必要になるかもしれません。

画像は測位できていない状態で$GPGGAの北緯Nが0000.0000になっています。

なんで測位できた画像じゃないのかって?

家で測位したら「ジムニーおや爺」の正体バレバレじゃん(笑)

そのうち移動でテストしてみます。バッテリー駆動も検討しないと・・・

2009年6月 9日 (火)

GPSモジュールGT-720Fとめいどのみやげ(笑)

先日の秋葉原行きは訳あって防犯設備の増設が目的だった・・・これでまず経費がかさむ(泣)

その上、今月はカード払いで、ギターと河村隆一コンサートチケット代がまとめて(泣)

IMG_2850.JPGIMG_2806.JPG

せっかく秋葉原まで来たんだから・・・

めいどのみやげ~萌~♪

IMG_2919.JPG

じゃなかった(笑)

うちの娘 「あまりカワイくないですねぇ?」

たしかにおまえのほうがかわいいよ♪(笑)

わし 「オレなんでチラシ貰ったんだろ?・・・」

娘 「そっち系の人だと思われたんじゃないですか?(笑)」

・・・ああ、わしゃあおたくだよ!(笑)

冗談はさておき、せっかく秋葉原まで来たんだから電子部品の購入をしたいのだが、今月と来月はカード払いが高額で(泣)

秋月電子で安価なGPSモジュールGT-720Fを手持ちの現金で購入・・・

gps01.JPG

一見、GPSアンテナ?ってくらい小型ですがRS232CレベルコンバーターIC内蔵のGPSモジュールです。

受信形式 54パラレルチャンネル L1c/Acode

通信プロトコル NMEA-0183 9600bps 8 N 1

測地系 WGS-84

電源 DC3.8V~8V 180mA(5V時)

秋月でもうひとつの選択肢GPS-52Dはデフォルト測地系が東京(TOKYOMeanSolution)だし少し高いのでパスした。

gps02.JPG

ネット検索ではストロベリーリナックスのTTL、RS232C両出力のものや指先に乗るくらい小型の物もあったのですが・・・

安価な上にコネクターとの接続加工が容易なこともGT-720Fを選択した理由です。

付属のハーネス付きコネクター。両端は同じ形状なので半分に切ってアダプターが2個作れます♪

gps03.JPG

gps04.JPG

6本ありますが、接続するのは4本・・・秋月のHPにありますがメーカーのPDFは本当に間違っています(笑)

解説書なども含めてこういったところが秋月電子のいいところ♪

ハーネスをハンダで接続し熱収縮チューブで保護・・・

gps05.JPG

反対側は電源、GND、通信線をジャンパーピンにハンダ付け

gps06.JPG

熱収縮チューブで保護

gps07.JPG

PIC16F877Aテストボードには5V電源、GND、RS232C通信線の接続ピンを設けてあったのでそこへ接続♪

gps08.JPG

NMEA-0183フォーマットのデータをたれ流し状態で液晶に表示できた♪

gps09.JPG

パソコンに繋げば通信ソフトにも同様に取り込めます♪

RS232C受信プログラムはエラー処理を追加しました。実はここで少しはまってしまった。今週忙しいので詳細は後日に・・・

2009年6月 4日 (木)

なんだかんだで文字列判断出来た♪ビデオ

詳細は「なんだかんだで文字列判断出来た♪」を見て(笑)

2009年6月 3日 (水)

なんだかんだで文字列判断出来た♪

GPSのNMEA-0183フォーマット・・・

こういう共通規格って良く出来てるよな♪ 

1.まず受信データを1文字ずつ読みセンテンスの開始を判断する。

2.があったら指定のアドレスフィールド(今回はGPGGA)が一致するか判断する。

テーブルに格納したアドレスフィールド文字列(今回はGPGGA)と1文字ずつ比較して全て一致したら次のプロセスへジャンプさせる。

一致しない場合は1.へ戻る(画像の①は「GPG」まで一致して表示し、そのあと不一致で最初に戻っています)

注;テストプログラムは動作チェックの為、1文字ずつ一致した場合、表示させてます。(画像の①)

3.デリミタ(,)を判断し数えて表示させたいデータフィールドへ来たら次のデリミタ(,)が現れるまで、1文字ずつ表示する。

今回は2番目のデリミタ(,)のデータを表示させています。動作チェックの為、次のデリミタ(,)が現れたら「」を表示させています。これによりNULL値のチェックができます。

(画像の②は2番目デリミタデータがNULL値なので「」を表示、③はtest02なので「test02D」と表示。)

nmea04.JPG

あとは複数の情報を抽出し、液晶の指定アドレスに表示できるように体裁整えればいい♪

GPSモジュールがTTL出力ならばPICとの接続はハーネスが短い場合、RS232Cレベルコンバーター無しでTTL直結でいいかも・・・

ハーネスが長ければGPS-ADM3202-RS232Cケーブル-ADM3202-PICかな・・・

誰か、わしにいらなくなったGPSモジュール頂戴(笑)

これは廃紙に手書きでプログラム考えたときのもの(笑)

nmea05.JPG

黄丸のオンボード書き込みピンのおかげでプログラムの書換作業効率が上がった♪

でも抜き差しが硬いので6芯モジューラージャック化を検討中・・・

877a_onb.JPG

アセンブラは下記です。バグあるかも知れない・・・

<中略>

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
<中略>

2009年6月 2日 (火)

とりあえずアセンブラで$を判断させてみた・・・ビデオ

詳細は「とりあえずアセンブラで$を判断させてみた・・・」を見て!(笑)
つまらん動画でスンマソン(笑)

とりあえずアセンブラで$を判断させてみた・・・

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を含むテスト表示を行い、パソコンへ文字を送信し受信待ちとなります。

パソコンから適当に$を含む文字を送信すると液晶には$だけ表示されます。当然$がなければなにも表示しません。

nwea03.JPG

ここまでは簡単だが・・・2と3が難しい(笑)

アセンブラで受信した多量の文字から文字列抽出はどーよ?

1文字づつしか処理出来ないし・・・アセンブラで書くと結構大変かも・・・

試しにアクノリッチ(AcKnowrich)で送信し16F877Aで受信

改行コード無しと改行コード有りで送信してみた。

clrf_01.jpg

ちなみにLCDもアクリルパネルをカット、曲げ穴加工で100円均一ケースに固定した。

これでだんだん作業効率が上昇する。

clrf_02.JPG

LCDに対応するアスキーコードが無いから赤丸みたいな不明の2文字表示になる(笑)

改行コードはCR(キャリッジリターン)とLF(ラインフィード)の2文字の組合せ・・・

このコードを受信したらLCDに文字表示せずLCDの指定アドレスに飛ぶなどの条件分岐ができそーだが・・・

大昔使ったラインエディタとか思い出す(笑)

clrf_03.JPG

文字列の一致判断、さてどーするか?アセンブラかC言語か?

GPSモジュールのNMEA-0183フォーマットから欲しい情報だけ抜き出してLCD表示とかやってみたいのだが・・・

2009年5月28日 (木)

やっと16F877AテストボードでUSART・・・

RS232Cのシリアル通信、ちょっと時代遅れ(笑)でも基本だから・・・

パソコンとの接続のためDサブ9ピンメスコネクタのハンダ付け

rs232c02.JPG

877Aテストボードにはハーネス接続部を実装済みなのでハンダ付け

rs232c03.JPG

100円均一のケースに入れ、ケースの縁にコネクタ取付の溝加工を施す。

rs232c04.JPG

なかなか上手に出来ました!(笑)

rs232c05.JPG

最初のテストではACM0802C-NLW-BBHを接続しましたが8文字2行じゃ情報量少ないので

877a_02.JPG

20文字4行のSC2004CSWBに変更、白色LEDバックライトに変更になってますが、発色はうーんかな・・・

SC2004CSWB_02.JPG

母艦PCのRS232Cポートはナンバーディスプレイアダプタに接続していて占有されている。古い切換BOXを引っ張り出してきて接続し「ハイパーターミナル」で試そうと思ったが・・・良く解らん(怒)

com01.JPG

今度はシリアルUSB変換ケーブル(IO-DATA USB-RSAQ2)を持ってきてつなぐ

com02.JPG

com04.JPG

コントロールパネルのシステムのプロパティでデバイスマネージャーを開くと仮想COMポートはCOM2になっている。

TX_test01.jpg

フリーのアクノリッチ(AcKnowrich)って読むんですか?複数のCOMポート(仮想を含む)を同時に監視出来るソフトを使ってみました。

TX_test02.jpg

送信プログラムでPIC16F877Aから文字送信・・・うわっオーバーフローで流しっぱなしだぁ(笑)

TX_test03.jpg

あれ何度か試してたら文字化け?通信設定が変わってる?

TX_test04.jpg

左クリックしてもダメ、どーやって戻すかしばらく悩みましたが右クリックでドロップダウンリストが現れて設定変更出来ます♪

Acknowrich01.jpg

元に戻った!今度は受信プログラムを追加してパソコンから送信・・・

「ヒゴロカラシュクダイダスゾー!」って打ち込んだ(笑)

RX_test01.jpg

受信したデータを液晶に表示できた♪

RX_test02.JPG

RX_test03.JPG

とりあえずここまでできればまた遊べそう♪(笑)

2009年5月27日 (水)

PIC16F87x と 87xA ・・・

PIC16F873 と 873A 、877 と 877A 持ってるんだが・・・

87xのリファレンスマニュアルは日本語版がある。87xAは英語版のみ・・・

ともに230ページはあってパソコン画面で見るのは年寄りには辛い(笑)

なので印刷しちゃいました(笑)比べてみると良く解る。

例えばINTCONレジスタなんかビミューに異なってます。ADCONも・・・って皆知ってますよね♪

87x_87xA.JPG

87xシリーズのプログラムを87xAシリーズ用に書き換える時注意せねば♪

 

2009年5月24日 (日)

24段階ダイナミック点灯レベルメーター詳細

まあ、誰でも考えそうなネタですが・・・(笑)

回路図です。絶対値回路は書籍に記されていた物そのままなので記載してません。それを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に変更しました。プログラムも同時に修正したので犯人はプログラムかもしれません(笑)

24段階レベルメーター.jpg

TR1は2SC1815、R2は3.3kΩです。LEDの電流制限抵抗R1はとりあえず330Ωとしてますがダイナミック点灯だと輝度が足りないかも知れないので抵抗値をもう少し下げた方がいいかも知れません。

基板剥きだしだと、そのうち壊しそうなので100円均一のケースに固定しました。

24level01.JPG

実験用に秋月で入手した安価なLED多数。

24level04.JPG

これでレベルメーター部を製作

24level02.JPG

パラレル接続部は黒色ハーネスで空中配線です。下手にプリント基板にするとスペース取ると思います。

24level03.JPG

先行き何かに組み込むかもしれないので一応、万能基板を黒塗装しました。

IMG_2789.JPG

実はこの時、事件発生!湯煎したスプレー缶を熱くて落としてしまった!

破裂するかと思いました(汗)底が変形して膨れ上がってます。気を付けねば・・・

IMG_2788.JPG

カソードドライブ回路は基板に組んでしまって

24level06.JPG

LED電流制限抵抗は調整のためブレッドボードで・・・

24level05.JPG

ダイナミック点灯なのでポート数越えて表示出来ます♪。また左右LRchを12段階レベルメーター出力×2とかプログラムで対応できると思います。

 

 

 

2009年5月22日 (金)

24段階レベルメーター ビデオ

別に用途は無いけど試したかっただけ(笑)
6段階×4chダイナミック点灯で24段階レベルメーター・・・
お手玉モードはキャリーオーバーです。


詳細は後で・・・

2009年5月18日 (月)

74HC4511AP と C-1001UB その3

あ~しんどい・・・両面基板作れないと空中配線が・・・

「それっ楽しいんですかぁ?」って聞かれちゃうしぃ・・・でもプログラム組むのに数学も使うんだぜ♪(笑)

c1001ub01.JPG

急遽、ダイナミック点灯にも対応出来るように赤のジャンパーピンを追加した。

c1001ub02.JPG

うーん、結構うまくまとまったでしょ♪

c1001ub03.JPG

今回、MIL規格のコネクタも実装した・・・多芯フラットケーブル手配しないと・・・

c1001ub04.JPG

数学教えるのでペースダウンでした(笑)

2009年5月17日 (日)

スムースジャズでどうぞ(笑)・・・ビデオ

こっちの方がいいんじゃない?
キャンディーダルファー 「11:58」・・・

12時2分前ってことだな(笑) やっぱスムースジャズがいい♪

お手玉みたいなレベルメーター・・・ビデオ

ビデオばかりですんません
最大レベルを1秒ホールド後、徐々にレベルダウンするように計算し、それに通常のレベルメーターを論理和演算して表示させています。お手玉みたいで面白いでしょ(笑)

タイマー20ms×50=1秒最大レベルをホールド
タイマー20ms×2=40msごとに最大レベルをダウンさせる

途中で急に曲を止めていますが、レベルダウン状態が良く判ると思います。

曲は 「Shy Guy」 -Diana King-

2009年5月14日 (木)

絶対値回路のレベルメータープログラム変更・・・ビデオ

スピーカー出力を絶対値回路を通してPIC16F873でA/D変換してレベル表示するプログラム・・・
リアルタイムにレベル表示する変数1に最大レベルを更新記憶する変数2を追加し、それをお互いに論理和計算してレベルメーターのポートに出力してみました。また最大レベル変数2はTMR0のタイマーで1秒置きに0クリアしています。

1秒は長いかな?色々試すと面白いかも?

※873のTMR0は初めて使った・・・

ビジュアル的にどーよ(笑)プログラムでどこまで工夫できるか?・・・

2009年5月13日 (水)

要因が絞り込めないから、ウィークポイントは対策・・・

動作が不安定の要因が絞り込めないと今後も不安だから、とりあえずウィークポイントと思われる箇所は確実に対策する・・・

プリント基板を作る時、空きスペースが勿体ないからこんなピン用基板をいくつかコピーしとくと良い

test877_15.JPG

で、これを使ってレゾネータ基板を作った。画像は10MHz用・・・

877a_05.JPG

裏・・・

877a_06.JPG

これで接触不良は無し♪ 20MHz用も作成しとけば用途によって使い分けられる・・・

877a_07.JPG

こいつも入手してあるので接続基板を作る予定・・・1個しか無いから(笑)

超高精度クリスタルモジュール KTXO-18S 12.8MHz±1ppm

IMG_2649.JPG

が・・・犯人はこれでは無かった・・・PICの未使用ピンの初期化の問題でも無い・・・

84AのCGRAMテストプログラム 表示成功した後に液晶の初期化プロセスを少々いじってそのままテストせず忘れていたのだ!

それをベースに877A用プログラムに書き換えたから当然動作不安定となる(笑)・・・突然思い出すんだよなぁ、歳かなぁ~

液晶の初期化プロセスを元に戻したらOK♪ まあ大体プログラムが犯人なんだけどね!

やりっぱなしにしないで、きちっと整理しとかなきゃダメだぁ(笑)

2009年5月12日 (火)

やっと16F877Aテストボ^ード完成!

ちゃんと動くか?心配~(笑)

緑丸のピンはミニPICプログラマでオンボード書き込み用

赤丸はMCLR切換スイッチ(秋月にて)、黄丸はプログラムピンの切り離しスイッチ2回路(共立にて)

青丸は急遽レベルコンバータICの切り離しをスイツチを追加しようとしたがスペースが無いのでジャンパーピンにした。

水色の丸は16F84Aテストボードでも採用したレゾネータ差込用・・・これがあとでアダになる(泣)

877a_01.JPG

1回路の基板用スイッチは秋月で手配したが2回路用は共立エレショップにあったのでサンプルとして手配・・・1個80円弱かな

877a_01_2.JPG

赤丸の10MHzのレゾネータ差してますが、どーも接触が悪いのか動作が安定しない・・・ピンと基板の破片とでハンダ付けしたもの差し込んだ方が確実かも・・・

877a_01_3.JPG

簡単なプログラムで動作確認とも考えたが・・・液晶くらい動かせないと仕方ないから・・・

84AのCGRAMテストプログラムを877A用に書き換えて・・・相変わらずアセンブラですが・・・

ポートB接続だったのでポートはそのままBに接続、一応未使用ピンは初期化したつもり、変数のアドレスは全て書き換えた・・・

スイッチ切換でオンボード書込も問題なし♪

※メモメモ・・・プログラム書込時、PICの電源を他のICやLEDなどから切り離すスイッチもあった方がいい・・・USBから余計な電流が流れる・・・

877a_04.JPG

ACM0802C-NLW-BBH・・・

レゾネータに触れると動作不安定・・・これが犯人じゃなくて未使用ピンの初期化プロセスがおかしいのかな?

877a_03.JPG

誰がヤクタタズじゃ~(笑)

昔、作った16F873のテストボード・・・

プリント基板作成する以前の空中配線で、テストボードといってもレベルメーター付き、ボリュームでFETを介してライトなどのPWMコントローラーに特化したものだった・・・

p87301.JPG

色々テストするには使いづらいので今回摘出(笑)

levei873_02.JPG

レベルメーター部は秋月で買った在庫限りのLEDユニットだった・・・2.54ピッチにはきっちり入らない(泣)

level873_01.JPG

プリント基板化しようか?どーしようか?873これ以上使うかなぁ~(笑)

 

2009年5月 9日 (土)

絶対値回路・・・もう少しメリハリのある曲で(笑)ビデオ

本文、特にありましぇん・・・
LIVIN' LA VIDA LOCA -RICKY MARTIN-

絶対値回路と16F873を接続 テストビデオ

前回作成の絶対値回路を16F873テストボードに接続・・・デバイスは873Aじゃなかった、古いので(汗)
電源電圧5V基準の8ビットA/D変換で分解能255、入力が1V超えるかどーかですがLED点灯レベルはプログラムで調整出来ますから自由自在・・・まーなんでもありありってとこです。

絶対値にしとけばマイコンに接続できますから~後は煮るなり焼くなりお好きにどーぞ・・・
要は数字のお遊びで(笑)

※携帯音楽プレーヤー→アンプスピーカー→絶対値回路→PIC16F873→LEDレベルメーター


2009年5月 8日 (金)

片っ端からテストボード化(笑)

こういう時、安価で便利なのが秋月電子通商ピンヘッダオスメスセット・・・でもいくらあっても足りない(笑)

製作途中の877Aテストボード・・・

877_p01.JPG

これも途中ですが、C-1001UBもヘッダでこのくらい浮かせれば下に74HC4511APが収まる・・・

c_1001ub_p02.JPG

前屈みで作業してたら腰が痛い・・・(笑)

2009年5月 7日 (木)

絶対値回路のテストビデオ

オペアンプ072の絶対値回路を介してスピーカー出力を電圧計で測定

んでどーすんの?マイコンのA/Dコンバーターで色々処理してみるか(笑)

※なんで宇多田なの?(笑)

絶対値回路・・・危うく失敗するところだった(笑)

いまさらなんで絶対値回路なの?

(笑)

以前書いたセイコーさんから入手したDC-DCコンバータ TDK CRZ0512WC

ABS05.JPG

この正負両電源をオペアンプ072に繋ぐ・・・

ABS06.JPG

ブレッドボードでうまくいったので、ブレッドボードを他のテストで使いたいから、慌ててプリント基板化してしまった・・・

ICソケットをハンダ付けしたところで・・・あれ??????

ABS07.JPG

透かしてみたりして(笑)・・・・やっぱ変??????

CRZ0512WC の +12Vと-12Vがオペアンプの入力ピンに逆転して接続してるじゃん(笑)

この基板、1度しか作らないからPCBEで部品ライブラリ作らず汎用IC図使って書いたから錯覚起こしたみたい・・・

やっぱ部品ライブラリはちゃんと作らんとダメだ!

ABS08.JPG

とりあえず修正できるかチェックだがPCBEの確認印刷で、反転して2倍で出力するのはいいとして、デフォルトは部品が黄色なので紙の上では確認しずらい

画面上では黄色の方が見やすい

ABS09.jpg

確認印刷時一時的にレイヤーでシルク(部品)の色を黒系に変えてやる・・・

プリント基板作る前にこれやっとけば良かったんだ、以前の電子コンパスなど成功しまくりで調子に乗ってしまった(笑)

ABS10.jpg

で印刷すればチェックできる・・・

ABS11.JPG

修正できそう♪ 同時に2枚作っちゃったしぃ~(泣)

ABS12.JPG

ハーネスでクロスさせるためヤスリやカッターで線を削る

ABS13.JPG

リューターで穴追加してハーネスでクロスしてとりあえず修正出来た(笑)

ABS14.JPG

完成♪・・・・一時はどーなるかと思った(笑)

絶対値回路のみで増幅はしていません。2チャンネルあります。

大きめの電解コンデンサーは、高価なオーディオ専用ではありませんが無極性バイポーラ型って言うんですか?、初めて使いました。この辺の部品も共立エレショップで・・・

ABS16.JPG

後で動作ビデオ載せますが、そのテストに使ったものです。

スピーカー分岐線とパソコン用アンプスピーカー、シーグランドの安物携帯音楽プレーヤー(笑)

ABS03.JPG

ABS04.JPG

ABS17.JPG

ABS18.JPG

 

 

 

 

プリント基板・・・今後の課題3

穴開け用リューターにフットスイッチを追加した。

前に書いた共立エレショップで購入したEFS-Aです

footsw_01.JPG

接続方法は2系統・・・

footsw_02.JPG

電源コードの被服剥いて・・・

footsw_04.JPG

片方をカット・・・

footsw_05.JPG

踏んだ時OFFとなる様に白黒線を接続・・・

※緑線にも電源コネクタを付ければ踏んでONかOFF2通りに使える

footsw_06.JPG

位置決めの時、フットスイッチを踏んでドリル刃の先端を基板に当てられるので作業効率が格段にアップした♪

footsw_07.JPG

後は老化のせいか?先端が暗くてよく見えないので白色LEDでリングライトを作ろうかと考えている(笑)

2009年5月 6日 (水)

プリント基板・・・今後の課題2

これは課題というかメモ(笑)

しばらくプリントプリント基板作ってないと、エッチングの状態忘れてしまうから(笑)

縦型噴流式小型エッチング漕もキッチンボックスを流用して目線の高さで使いやすくし、収納もしやすくしてある。

ptb05_06.JPG

投げ込み式ヒーターは40℃~45℃でセットしても・・・電源入れ放しだとすぐ50℃以上になりそーなので適当に温度計見ながら電源オフにする。

温度センサー付けるほどの作業でもないし・・・

紙フェノール基板の場合ですが・・・これはまだまだ

ptb05_02.JPG

赤矢印の黄色っぽい部分(裏面のと同じ色かな?)は銅が溶けてエッチング出来てる部分、青矢印はまだなところ(笑)

ptb05_04.JPG

プリント基板・・・今後の課題1

あまし、お金を掛けないで・・・(笑)

露光・・・感光・・・ですか・・・説明書には蛍光灯使用だと30分なんだけど、画像の様な状態では50分~60分感光させた方が現像時間が短時間で済むようだ

ptb05_01.JPG

30分でも50分でも同じように出来るんだが・・・30分だと現像に時間がかかってなかなか溶けないし、微妙に感光不良がでたりする・・・

ptb05_08.JPG

一番上の安物クランパーで赤丸の部分が浮くことがあって線がぼやける・・・

下の画像の赤丸は丸が大きくなってくっついてしまった(笑)のでヤスリで削って修正・・・

p_rp_01.JPG

2カ所修正済み

p_rp_02.JPG

バキュームクランパーや紫外線露光器は高価だからなぁ・・・何か安価に対策しよう(笑)

74HC4511AP と C-1001UB その2

そーいえば以前、空中配線で作った7セグLED用テストボード・・・こんな感じで浮かしてたんだ・・・

c_1001ub_00.JPG

C-1001UB はデカイ!共立エレショップで購入・・・

c_1001ub_01.JPG

c_1001ub_02.JPG

74HC4511APが7セグLEDの下に収まりそう・・・

c_1001ub_03.JPG

両面基板が作れれば基板の裏でもいいんだが・・・

c_1001ub_04.JPG

おもいっきし配線が交差するから、空中配線とミックス仕様にした(笑)

PCBEで知恵の輪状態、もーぐちゃぐちゃでわけわからんが・・・これでうまくいくんだろうか(笑)

c-1001ub_pcbe.jpg

で!作っちゃいました・・・穴開けはこれから・・・

c_1001ub_p01.JPG

両面基板は難しいだろうなぁ~図面は描けても感光時の位置決めとか・・・スルーホールのインサーターとか・・・ずれたら最期(笑)

2009年5月 4日 (月)

74HC4511AP と C-1001UB

PIC 16F88 簡易電圧計のところで使った C-533SR のようなダイナミック点灯ではなく、スタティックって言うんですかね?それで表示してみるつもり・・・

74HC4511AP を3個使って4×3=12ポートで3ケタのデータ送る

でも両面基板が作れるわけもなく・・・あまりコンパクトにならないなぁ・・・こういう時は空中配線の方がコンパクトになる(笑)

とりあえずテストボードで試してから作り直すか・・・

さてどーするか?74HC4511AP+C-1001UB 

74hc5411_01.jpg

注;作成途中です。図中の青ジャンパー線は抵抗の足長タイプの部品作ってなかったので表現上の代用です。プリント基板なので最終的に線と穴があればいいんだから(笑)

2009年4月30日 (木)

ACM0802C-NLW-BBH 表示テスト

ACM0802C-NLW-BBH.JPG

なにい~どこがヤクタタズじゃぁ~(笑)

秋月電子通商より 白色抜き文字表示タイプ 8文字×2行キャラクタ表示液晶モジュール

ACM0802C-NLW-BBH です。

CGRAMテストプログラムで表示してみました。初期化プロセスでSC2004Cなどと待ち時間が異なる様ですが、もともと必要以上に待ち時間取ってあったので同じプログラムで表示できました。この液晶はバックライトを点灯しないと文字が見えません・・・

プリント基板感光用に蛍光灯30分カウントダウンタイマーを作る予定・・・(あくまでも予定、笑)

 

 

2009年4月29日 (水)

湯沸かしポット電源外れアラーム・・・動作チェックビデオ

タイトルの通りです(笑)

湯沸かしポット電源外れアラーム・・・半完成

とりあえず完成、もう少し手直しするかも・・・

melo07.JPG

melo08.JPG

バイトに動作説明したら・・・

娘「やっと役に立つもの作りましたね!」

何!、俺今まで役に立たない物作ってたんだ、トホホ(笑)

娘「前に作ったあれとか・・・」

私「あー電子コンパスね・・・あれ娘が持ってったきり戻ってこないし・・・」

娘「誰が持ってったの?」

私「いや・・・○○さんが・・・わたしのも作ってって言うから・・・」

娘「今頃捨てられてるか、その辺に埋もれてますね・・・」

うわぁ~ひどいぞB型(笑)

早朝バイトも・・・

「それ何か意味あるんすか?」

・・・(笑)

湯沸かしポット電源外れアラーム・・・回路図編

他にも、もろもろ進めてますが、これ先に作ってしまわないとブレッドボードが空かない(笑)

こんな簡単な回路、回路図書かなくても作れそーですが(笑)

いつも整理が悪くて後で見返すとなんだか解らず、再び調べる手間がかかっているから・・・

部品のデータシートは無くなる前に適当なフォルダに保存整理してある。

リレーやIC、トランジスタの足配置なんかも書き込んどけば後々便利・・・

メロディIC.jpg

ゴールデンウイークですが、わたしはぜんぜんゴールデンじゃない(泣)

2009年4月28日 (火)

湯沸かしポット電源外れアラーム・・・ケース編

前回、「ポットのAC100V分岐」と「メロディICのテスト」は完了した。今回は組込ケースです。

ケースは何にしようか迷いましたが、たばこの景品の携帯音楽プレーヤー用スピーカーBOXを使うことにしました。

一応ステレオでインピーダンス8Ω、0.25Wのスピーカーが2個入っています。スピーカーは1個しか使わないので片方外そうとしましたが接着剤で固定されてて外れません・・・

sc_01.JPG

短気なので(笑)ぶった切ってしまいました

sc_02.JPG

無理矢理引っぱがせ~

sc_04.JPG

外れた(笑)

sc_06.JPG

内部の余計なバリ取ってスピーカー1個仕様に・・・

外したスピーカーは別の何かに使おう(笑)

sc_07.JPG

開いたスペースに基板を入れる。単純な回路なので万能基板をカット、定規とカッターで切れ目入れて

sc_10.JPG

いつも机の角で割る・・・

sc_11.JPG

干渉部をカットしてヤスリで整える・・・

sc_12.JPG

ケースのへこみを利用して基板固定の穴開けてネジで固定・・・1カ所でOK

sc_15.JPG

sc_16.JPG

次はスイッチ、秋月電子で購入した基板用・・・

小型スライドスイッチSS12D01G4(4個入り)で100円、安い!

sc_18.JPG

基板用だがこーすれば・・・

sc_21.JPG

sc_20.JPG

ケースに3つ穴開けるだけで・・・スイッチ完成♪

sc_23.JPG

sc_24.JPG

CR2032電池ホルダー、メロディIC、増幅用トランジスタ、抵抗、電解コンデンサを基板に実装するからリレーはスピーカーの下に貼り付ける予定・・・

磁力の影響を受けるかな?秋月電子でY14H-1C-5DS、1個80円は安い!

sc_25.JPG

ACアダプターからの電源コード用穴にグロメット付けたし・・・

sc_26.JPG

とりあえず今回はここまで!(笑)

 

 

2009年4月26日 (日)

リューターにフットスイッチ・・・

プリント基板穴開け用リューターボール盤をさらに使いやすくするためフットスイッチを共立エレショップで購入・・・

IMG_1573.JPG

EFS-A

footsw_01.JPG

電源プラグを接続加工しなければなりません(笑)

footsw_02.JPG

footsw_03.JPG

2009年4月22日 (水)

サブバッテリー用ポータブル電源の鉛蓄電池の交換

確かビックホーンに乗ってた頃に購入してデリカに移植搭載して現在はジムニーに搭載のポータブル電源・・・

かれこれ20年以上使い回している(笑)ここんとこフル充電できないのとすぐ上がる為、経済的寿命が来たと思われ、鉛蓄電池を交換しました。

前に1度交換したのが2002.3.14で・・・今2009.4.21・・・だから7年も使ってる(笑)

前回は画像記録は電池しか無かったので今回は記録しました。2002年時の画像

SUB008.JPG

こっちは今回手配した密閉型(シールドタイプ)鉛蓄電池、12V7.2Ah×2個、秋月電子通商より通販で購入。同じGS YUASAですがデザインが変わってますな!

pb_13.JPG

分解は簡単そうですがコツもある、肩掛けベルトの金具はペンチでこじって変形させて外しますが、使わないので前回外したきりです。

本体ネジ4本の他にライト部のカバーのネジを外し、はめこんであるユニットをこじって外しますがコツ要ります。

pb_07.JPG

pb_06.JPG

危ないからフューズ外すの忘れずに

pb_10.JPG

本体を開いたところ、配線が突っ張って全開しません

pb_08.JPG

ハーネスを端子から引き抜きますが・・・差込位置をデジカメで記録、こういう時便利ですな♪

pb_09.JPG

やっと全開(笑)

pb_12.JPG

あとはファストン端子部を抜き差しして新品電池と交換するだけ・・・

pb_14.JPG

ストライクフリーダム起動(笑)

pb_18.JPG

次は何年持つかな?(笑)

 

 

 

2009年4月20日 (月)

ノア中距離走行・・・(笑)

実家に行く用事があったので片道100kmくらい走行テストできた!

普通のノアのコックピットじゃないなぁ~これ(笑)

p_azr65Ghw05.JPG

自作のトリップは111.2km

p_azr65Ghw03.JPG

純正のトリップは109.5km

p_azr65Ghw04.JPG

車速パルスカウント251で100mの設定結果だ!

メモメモ・・・251×111.2/109.5=255・・・に調整してみるか・・・かろうじて1バイト(笑)

トリップは本来の目的じゃないんだが・・・

2009年4月17日 (金)

UM66T-68Lと一緒にUM3561も購入・・・

スモールワールドUM66T-68Lと一緒にUM3561も購入、昔なつかし4種類の音が出る(笑)・・
とりあえず1種類鳴らしてみた。4種鳴りますがビデオに撮れず・・・
たばこの景品のスピーカー8Ω0.25Wにつないでみた。
これは使う予定無し(笑)部品が揃わず「湯沸かしポット電源外れアラーム」がなかなか完成しない・・・

ノアの車速読み取りビデオ、パラメータ変更・・・

タイヤ1回転で5パルス相当のパラメーターに変更して走行テスト・・・
純正スピードメーターとほぼ同じ速度となった。
車速コンパレーターは時速15km以下で作動するようにした。
これをフロントカメラシステムに接続予定・・・
車速表示は単純なプログラムの都合上タイムラグがあるが、車速コンパレーターでカメラスイッチ切換にどう影響するか?

BGMの「ハバネラ」は気にしないで(笑)



濃霧の夜に・・・(笑)

まとまった時間が取れず、どこにもいけないないのでビデオ撮影(笑)
せっかく作ったジムニーのLEDリヤフォグも防犯ライト化している。
PIC16F84AにPA.EXEでプログラムした初期の作品・・・
PWMもどきで点滅し、疑似割込で点滅モードを変える・・・
テールやハイマウントブレーキと同一の高輝度LEDを使用してリヤフォグとしても十分なのでは?・・・


2009年4月13日 (月)

スモールワールド UM66T68L ビデオ

「湯沸かしポット電源コード外れアラーム」に使用予定のメロディIC UM66T68L スモールワールド・・・
あり合わせの8Ωスピーカーつないでテストしてみました。


2009年4月11日 (土)

TDK CRZ0512WC 不思議?(笑)

先日、セイコーさんから入手した 非絶縁型DC-DCコンバータIC TDK CRZ0512WC ブレッドボードでテストしてみました。

テストした回路図です。DC13.8Vくらいから3端子レギュレータで一旦DC5Vにして+-12Vを作るわけわからん(笑)回路

末尾WCは末尾Wに対しコンデンサ内蔵タイプなので外付けコンデンサ不要かもしれない・・・データシート推奨値に対して47マイクロFの電解コンデンサしか手持ちが無かったのでそれを使用した。負電圧側の電解コンデンサの極性に注意。

昇圧DC-DCコンバータ12V.jpg

ブレッドボード配線です。

dcdc03.JPG

電圧測定です。DC5Vから確かに+12Vと負電圧の-12Vが出来ています。

dcdc04.JPG

両電源のオペアンプの基準電圧に使用する予定・・・

このICの仕組みとか、負電圧とか良く解らないけど

不思議(笑)

2009年4月10日 (金)

ノアの整備マニュアル・・・

思えば整備マニュアルの「トランスアクスル回転軸1回転/4パルスに相当」の回転軸ってどこの事だ?

たぶんFFのドライブシャフト(=タイヤ)の事では無いのだろう・・・

もう1度良く読んでみよう(笑)

FRの場合、駆動軸といったらプロペラシャフトでトランスミッション(FRベース4WDの場合はトランスファー)のアウトプットだからここで1回転4パルスだったらデフのファイナルギアレシオが関係してアクスルシャフト(=タイヤ)回転になるよな・・・

ノアのモービルPC復活なるか?・・・(笑)

ジムニーの車速信号読み取りユニットは簡単に取り外せるので、プログラムの書換は家の中でできる(笑)

ノアはアッパーボックスの蓋に取り付けたので一々取り外しは面倒だ・・・

ミニPICプログラマもオンボード書き込みアダプタ追加したし、ノアの基板にもオンボード書き込みピンを実装した。

なのでブログ始める以前にやってたモービルPCを復活させようかな?

以下は昔の画像・・・

息子に踏み潰されて液晶が液漏れしたメビウス君・・・(怒)

notepc01.JPG

液晶を分解分離したメビウス君・・・

注;本体の隠しネジなど全て分解しないと液晶は分離出来ません

notepc07.JPG

液晶無しで小型外部液晶で動作チェックのメビウス君・・・

notepc09.JPG

ノアに搭載したメビウス君・・・あっ!メビウス君が写ってない(笑)

ナビは壊れた憎きAVIC-ZH9MDだ!(笑)

notepc16.JPG

メビウス君本体のセットアップは小型液晶じゃ不便なのでエレコムの切替器を使用し母艦と接続・・・

notepc17.JPG

notepc18.JPG

モービルPC復活させると走行中(=戦闘中)にプログラム書き換えたりして・・・(笑)

ラクスクライン「キラ・・・危ないから走行中(=戦闘中)にガンダムのプログラム書き換えるのはやめて!・・・」

(笑)

部品調達開始(笑)

息子が音楽に凝りだして・・・(おいおい野球はどーした?笑)

電子コンパスは娘の所へ行ったきり戻ってこないし(笑)

湯沸かしポットの電源コード抜けアラームは娘がディズニーがいいって言うし(笑)

次は音楽に関係するものでも作ろうかと思っている。

利用している電子部品の通販サイトは、秋月電子通商、マルツパーツ、共立エレショップなどですが、今回欲しい物は一部取扱がありません。

今回はセイコーさんで TDK CRZ0512WC を購入。昇圧型DC-DCコンバータICです。

DC5V入力で+12Vと負電圧の-12Vを発生することが出来るらしい。

dcdc01.JPG

dcdc02.JPG

湯沸かしポットの電源コード抜けアラーム用メロディIC(スモールワールソ)他もイーエレさんに発注したし(笑)

ブレッドボードでテストしてみて上手くいくかわからないけどまあ

お遊びですから~(笑)

追伸;こんな本買いました・・・

opamp01.JPG

2009年4月 9日 (木)

ノアの車速 JIS D5601 だな♪(笑)

・・・トヨタはタイヤ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タイマ割込のサンプリングパラメーターを微調整出来るようにプログラムしてみるかも・・・液晶表示なんかしないで車速でなにかしたいだけならアバウトで良かったんだが・・・

今、原因不明の腹痛です(泣)しっしんも出るし・・・

まあ、お遊びなんで、あまり考えすぎると病気になっちゃいますから~(笑)

2009年4月 8日 (水)

ノアの車速で悩む・・・その1(笑)

純正スピードメーターではなくナビの接続情報で車速を比較確認しようとしたんですが・・・

AVIC-HRZ099 は車速パルスカウントはあるが、車速表示が無い・・・

やくたたず(笑)

p_azr65G11.JPG

この辺、ソニーの古いNVX-M7000の方がマニアック・・・

まあ引くルートもマニアックなんですが(笑)

以下はストロボ使用で撮影です。実際はフードの中は暗いです。

p_azr65G12.JPG

p_azr65G13.JPG

リードスイッチのジムニーの様にゆっくり前進してタイヤ1回転で何パルスかの確認は、ノアの場合、スキッドコントロールコンピューターが微速前進で信号を出さないので

無理(笑)

わたし「・・・あのさ、ジムニーとノア2台で同じスピードで走行してさぁ・・・、無線で速度表示を確認するってのはどう???」

かみさん「・・・・・・・・・・・・・・・・・・・・」

へえへえ(汗)わかりましたトホホ(笑)

本当は1回転で5パルス相当なんじゃないの?・・・ちがうか(笑)・・・

2009年4月 7日 (火)

ノアにもやっと車速専用プリント基板搭載・・・

とりあえず低速での動作はOK・・・厳密なチェックは時間が取れてから・・・

プログラムはとりあえずSD1602 16文字2行用プログラムをノアの車速パラメーターに変更してSC2004C 20文字4行に表示しています。ヒステリシス無しコンパレータ付きです。

p_azr65G08.JPG

車速コンパレータ用LEDインジケーターを液晶の脇に設置、ちと明るすぎかも・・・

p_azr65G07.JPG

明日は息子の入学式でかみさんがノアを使用するし、普段かみさん使用がメインなので、何かこれを接続することによる不具合があった時のことを考えて、車速信号を物理的に切り離す青矢印のスイッチと赤矢印のメイン電源スイッチを追加しました。かみさんが乗る時はOFFにしておきます。

※車速信号インターフェース74HC14の直前に分圧器がありますが、多少でも電流を消費していると思います。オペアンプのボルテージフォロアなど高インピーダンスで電流を流さず電圧を読み取るのが良いのかもしれない・・・勉強不足で良く解りましぇん(笑)

p_azr65G10.JPG

ジムニーはわたししか使わないから何でもありあり(笑)

2009年4月 6日 (月)

車速比較・・・

ジムニーの純正スピードメーターとの比較じゃ良く解らない・・・

そうだナビNVX-M7000の接続情報の車速と比較できるじゃん

p_ja12w07.JPG

日中サングラスかけるとスモークアクリル板が偏光して液晶がよく見えない、その上、歳のせいで小さい字が読めない(笑)

おまけに運転しながら同時に2カ所見るのは

無理(笑)

息子が「ケンタッキーフライドチキン」が食べたいと言うので買いに行くついでに比較してもらった!

p_ja12w06.JPG

純正175/80R16のところ185/85R16大径タイヤ履かせてるので純正メーターとは誤差がある。

PICの車速計算はタイヤ動荷重半径ではなくカタログ外径値を用いている・・・

わたし「どのくらい誤差ある?」

息子「???????」

わたし「・・・・上読んで、すぐ下読んで(笑)」

息子「57km・・55km・・」

息子「45km・・43km・・」

息子「○○km・・・・スピードオーバーだよ(怒)」

そーじゃなくて(笑)・・・50km/h付近で2km/hのズレがあるみたいだがタイムラグもあるしナビの車速精度も不明だしまあこんなもんかな(笑)・・・

息子にビデオ撮ってもらったが私がひとりで撮ったのよりブレまくり・・・

やくたたず(笑)

スモークアクリル板カバーをライトブルーで作り直してみた・・・夜間は明るすぎるかも・・・

p_ja12w08.JPG

湯沸かしポットの底・・・その2

AC100Vの分岐まで完了

穴開け

pot12.JPG

グロメット装着

pot13.JPG

穴は2つ開けた

pot14.JPG

挿入(笑)

pot15.JPG

丸端子を電工ペンチで装着しハンダで補強

pot16.JPG

pot17.JPG

ターミナルに共締め

pot18.JPG

底蓋を戻し今回はとりあえずここまで・・・

pot19.JPG

電源コードが外れた時の警報は電子ブザーにしようと思っていたが・・・

ミ○キーヌが「ディズニーがいいです♪」(笑)

わしゃ良い娘のお願いに弱い(笑)

1個70円くらいのメロディIC UM66T-68L 曲目「スモールワールド」 が入手できそーなので手配するかな・・・(笑)

 

2009年4月 3日 (金)

ジムニー車速信号プリント基板で読み取り(ビデオ)

今までで一番良く撮れてる(笑)
ビデオ撮りながらマニュアルシフトアップは辛い・・・

車速信号用基板、ジムニーには装着完了、ノア用はハンダ付け完了・・・

ノア用の配線を終了してオンボードでCGRAMテストプログラムを書き込み動作させたところです。

p_azr65G02.JPG

p_azr65G03.JPG

p_azr65G04.JPG

ジムニー用専用基板は実車搭載しました。

p_ja12w06.JPG

走行テストでヒステリシスコンパレータプログラムにバグ判明(泣)・・・

ヒステリシス無しコンパレータは動作OKです。

湯沸かしポットの底をはがしたっていいじゃないか(笑)

↑↑↑わかんねぇだろうな・・・

「マグネット式電源コードコネクタ」、コードを足などで引っかけた時にポットが転倒して熱湯がこぼれてやけどなどの事故になるのを防止する機能だと思われますが、お店で使用してると、知らぬ間にコードが抜けててカップめんにお湯入れる時に水になってて慌てる時があります。

とりあえずテーブルが押されてもコードが挟み込まれないように画像の赤丸のストッパーを設けました。

pot11.JPG

それでも外れる場合を想定して、コードが外れたらブザーがなるなどの装置が作れないか考えてみました。

色んな方法が考えられますが・・・まずAC100Vがポット側から分岐できないか分解することにしました。

底の黒キャップを外します。

pot01.JPG

イジリ止めトルクスねじになっています。

pot02.JPG

外す工具T20いじり止めトルクスビットです。

pot10.JPG

底蓋を外してみました(笑)

pot07.JPG

細工出来そーです♪

pot06.JPG

電源が切れるとブザーを鳴らすにはPICを電池で駆動させるとして・・・

AC100VはACアダプタでDC5Vに変換して入力検知するってのはどうかな?

pot03.JPG

つづく(笑)

 

2009年3月27日 (金)

PCBE プリント基板作り始めて思うこと・・・その1

以前はこんなものみんな空中配線で作ってました(笑)

デリカに搭載してジムニーに移植したPWMディマーコントローラの74HC00デューティー比パルス発生回路部・・・

pwm009.jpg

pwm010.jpg

pwm011.jpg

87xシリーズ16F873A使用のPWMコントローラー・・・

これなんかもプリント基板でテストボード化してみようと思う・・・

p87303.JPG

p87304.JPGp87305.JPG

p87306.JPGp87307.JPG

p87301.JPG

2度と空中配線したくない(笑)、16F88使用の簡易電圧計ジムニー用・・・

v88_03.JPG

今まで同じ物2度と作りたくなかったが、プリント基板化しとけば複製も作る気が起きる(笑)

あたりまえか(笑)