FC2ブログ

最近の記事 - RSS

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

H8/3664FのSCIを利用してコンソールにA/D変換した値を表示する。

秋月で販売されているAKI-H8/3052F(3048F)用のマザーボードには各種外部機器(スイッチやらLCD)が簡単に接続できるようになっているが、AKI-H8/3664F用(Tiny)用のI/OボードにはLED2個とスイッチ一つしか搭載されていない。
LEDだけでは大したデバッグは出来ない。

一応、H8/3052FのマザーボードについていたLCDを駆動させることは出来るのだが、ポートを最低でも6個は占有してしまう。
ただでさえポートの少ない3664Fにこれはちょっと厳しいものがある。

ということで、今まで(3052F)は楽という理由でLCDばっかりをデバッグに用いて来たが、いよいよSCIを利用した方法も使っていきたいと思う。

ちなみに基本的にはモニター(RAM上で実行)で作っているので使用ソフトは「Hterm」とする。

今回はお手軽にヴォリューム抵抗の値を読んでみたいと思う。
ボリュームの両端に+5VとGND。
真ん中にPB0(AN0)を接続。

今回使用したソースはコチラ。

テストなので、タイマーも何も使わずとにかく送信できればいいや、というソース。
とりあえず、なんとかコンソールに表示されるようになった。
ad2sci_test_001.gif
最初、どんな方法でAD.ADDRAをSCIで送信しても文字化けしたようなものしか送られてこなかった。
試しにA/D以外の普通の文字や数値などを送信してみると…文字化けしている。

これは、H8/3664F側の設定(今回はbr38400)とPC側のビットレートの設定が違っていたためだ。
ちゃんと両方同じにしないとだめ。
Htermでは一度「通信→切断」して「ファイル→プロパティ」からビットレートを設定と同じにしよう。

これで rs_putc('A');等をしてみてコンソールに「A」と正しく出ていれば設定は問題ない。

さて、本題へ。
AD.ADDRAをそのまま送ると当たり前だが数値が送信される。
しかし、Htermはそれを文字コードとして認識してしまうので変な表示になる。
コンソールに正しく表示させるには文字コードでないといけない。

そこで、こういう風に工夫する。(詳しくはソース参照)

buf[0] = ((swapAD / 1000) % 10) + 0x30; // 1000の位を文字コードに変換
buf[1] = ((swapAD / 100) % 10) + 0x30; // 100の位を文字コードに変換
buf[2] = ((swapAD / 10) % 10) + 0x30; // 10の位を文字コードに変換
buf[3] = (swapAD % 10) + 0x30; // 1の位を文字コードに変換

一見意味不明だが、超単純。
最後についている+0x30が肝。
0x30は数字の「0」の文字コードで、1~9は0x31~0x39なのである。
だから単純に、各位の数値を1~9にしてそれを「0」に足しているだけ。

あとはこの文字配列bufを順次送信してやればいいだけ。
もちろん、bufを一気にまとめてデータとして送信すると前回同様変な文字コードとして扱ってしまうので、ちゃんと配列の内容ごとに送信しなければならない。

今回は、GDL付属のsci.c内部の関数を拝借した。
includeすればそのまま使えるんだけど、でかくてRAMに入りきらないので一部だけ。

ちなみに、SCI初期化関数「SCI3_INIT」もGDL付属のスタートアップルーチンに組み込まれている関数。

ひとまずこれでデバッグは出来るようになった。
もっと簡単にやるにはsprintf等があるんだけど、モニターに組み込んでないので使えない。
っていうか、組み込むとROMの容量が残り8KBになる…。
どのみち組み込むとマウス本体のソースすら入らなくなりそうなので、最終的に組み込まない方向で行く。
スポンサーサイト
管理者にだけ表示を許可する

トラックバックURL

http://nukopan.blog58.fc2.com/tb.php/27-c5a1413e

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。