ke-kの日記

2006-05-25

[] GPS(3)

シリアル通信ができるようになったので、GBAGPSモジュールをつないで通信してみました。すると・・・おおっ、GPSからのデータが受信されている!!ちゃんと時刻や緯度経度も取得できています。取得した座標をGoogle Earthに入れてみると、あってそうです。座標の表し方にいくつかパターンがあって、最初は戸惑いました。

  • ○○○度○○分○○秒
  • ○○○度○○.○○分
  • ○○○.○○○○度

分、秒の場合は60進法なんですね。分と小数点が組み合わされてたりして、わかりにくいことこの上ないです(>_<)。まあ、歴史的経緯などがあるんだと思いますが。

ところで、シリアル通信で取得したデータですが、ところどころ文字化けしてます。それも、ごくまれにというわけではなく、結構な頻度で。うーん、タイマー割り込み使って信号を監視するだけじゃうまくいかないんですね。。。チェックサムがあるので、失敗したデータを捨てるという手もあるんですが、ログに残したときに時刻が飛び飛びになってるのもどうかと思うので、もう少しまともにシリアル通信できる方法を考えてみます。信号が1→0になったときにも割り込みをかけられるようなので、それを使うのがよいのかな?GPSを実装したプログラムの中には、4800bpsなどの低速通信をサポートしてるものもあるので、それを参考にしたいとこですが、残念ながらソースが公開されてません(>_<)。

http://www.msh-tools.com/GBA/gbagps.html

アセンブルするか!?でもそれは大変そう・・・

suikansuikan 2006/05/25 08:10 推測ですが、スタートビットの検出をなさっていないのではないでしょうか。スタートビットの開始エッジを検出して、そこから1/9600secごとに割り込みを起こせば安定して受信できると思います。偶数番目のサンプルは捨てます。ストップビットは受信せずに単にタイマーの停止処理を行います。

ke-kke-k 2006/06/01 03:56 毎度コメントありがとうございますm(__)m
タイマ割り込みごとにはスタートビットをチェックしてたんですが、それだとタイミングがずれてしまうみたいです。ご指摘のとおり、スタートビットのH→Lをトリガにして割り込みをかけ、そこからタイマをスタートしたらちゃんと受信できました。数十秒程度確認しただけですが受信エラーはなさそうです。

2006-05-20

[] 低速シリアル通信(2)

タイマーを使ってシリアル通信実装してみました。RS-232Cの仕様では、負論理になっていたり、いろいろややこしいですが、ここではソフト面から見た話をします。詳しくは、http://www.nahitech.com/nahitafu/mame/mame5/rs232c.html にあります。で、ソフト側からは、

  • スタートビット0
  • 下位から順番に8ビット
  • ストップビット1

を受ければよいようです。細かく言うと、ビット数が7だったり、パリティがあったり、などなどいろいろあるようですが、今回扱う対象はこんな感じみたいです。で、RS-232Cは非同期なので、ビットレートに合わせたタイミング(今回は4800bpsなので、1/4800secごと)でデータを受け取ってやればよいようです。

GBAのタイマーは、オーバーフローしたときに割り込みを発生させられるようなので、1/4800secでオーバーフローするように初期値を与えてやればできるはず、ということで作りました。今回は以下の点ではまりました。

  • タイマーの値を読み出したときは今の値が得られるが、書き込んだときには、現在の値は変わらず、オーバーフローしたあと、もしくはタイマーを動かし始めたときの初期値を設定する。
  • タイマーがオーバーフローしたあとは、0ではなく、初期値として与えた値から始まる。

タイマーがオーバーフローしたとき、0になると思っていて、毎回4800bpsになるように値を足してたんですね。で、おかしな結果になってたわけです。資料をよくみたら書いてあったんですが。

とにかく、試行錯誤の結果、パソコンと、4800bpsなどハードウェアで実装されていない速度で通信できるようになりました。

2006-05-17 低速シリアル通信

[] 低速シリアル通信

ようやくGPSを入手しましたが、GBAシリアル通信を行おうと思ったら通信速度は4800bps・・・。GBAにUARTモードとしてハードウェアで実装されているのは、9600,38400,57600,115200bpsだけです。

General-Porposeモードとタイマーを使ってポートを直接叩いてシリアル通信を行うしかなさそうです。

suikansuikan 2006/05/19 01:00 はてなグループはいかがですか?ダイアリーと違ってキーワードに縛りがありません。また、はてなグループのキーワードにダイアリーから自動リンクを張ることも出来ます。

ke-kke-k 2006/05/19 20:27 なるほど。はてなグループはそういう風にも使えるんですね。ちょっと調べてみます。

2006-05-02 シリアル通信

[] シリアル通信

やるといってからだいぶ時間が経ってしまいましたが、GBAでのシリアル通信を実装してみました。実装には以下を参考にしました。

GBAにはシリアル通信用にレジスタなどが用意されており、ほとんどプログラムを組む必要はありませんが、信号レベルがRS-232Cと異なるため、レベル変換用のICを使ってレベル変換を行う必要があります。部品点数を少なくして小さくしたかったので、ちょっと高いですが、外付けコンデンサが不要のSP233ACPを使いました。秋月で\500でした。GBAにつなぐコネクタは、中古で10円で売っていたゲームボーイポケットとゲームボーイをつなぐ通信ケーブルのものを使いました。

で、シリアル通信を行うプログラムを組み、シリアル通信を行えるターミナルソフト(TeraTermPro)を使ってデータの送受信を行ったところ、うまくいったようです。

RR 2006/05/06 01:13 自分もGBA本体とか入手してシリアル通信やってみたくなってきた。。

ke-kke-k 2006/05/18 01:27 コメントありがとうございます。シリアル通信は、思いのほか簡単にできてびっくりしました。プログラムよりもRS-232Cの信号変換ケーブルを作る方が大変でしたf(^^;一昔前だと、WonderSwanを使ったWonderWitchという公式開発環境のがありましたが、今ではGBAのほうが敷居が低いかもしれませんね。

2006-04-05 GPS(2)

[] GPS(2)

先日の日記で書いたGPSモジュールですが、製造しているポジションという会社を調べてみると、秋葉原の何度も通ったことのある場所にあるようです。今日たまたまそのあたりを通る用事があったので、ダメもとで行ってみました。

訪ねてみると、やはり個人で買いに来るなんて人はいないらしく、会社の人も困惑してましたf(^^;。どうやら、販売店を通さないといけなかったり、普通は1個、2個って買い方ではないらしいみたいで、欲しいから「はいどうぞ」ってわけにはいかないみたいでした。でも、販売店の方に話を通して下さって、サンプルってかたちで後日売ってもらえることになりました(^^)。

待っている間の雑談で、なんで欲しいの?みたいなこと聞かれ、学生で趣味で使いたいという話をしたら、モジュールの説明や、回路を組むときの注意点みたいなことを解説してくださって、突然飛び込みで訪ねたどこの馬の骨ともわからん学生相手にとても親切に対応していただいて、いい方たちでした。

とにかく、これでGPSモジュールが手に入りそうです。あとは、GBAと通信する回路を作れるかどうかか!?