SMACのサンプル動いた!無線通信成功
前回から無線通信まわりでおおはまりしてたのですが昨晩やっと通信できるようになりました。1週間くらいかかりました。長かった・・・
SilnetSystem提供のサンプルSerialProjectを改造して、どうにかSkyBoot無しで動くようにしたのですが、クロックの設定が上手くいかず8Mhz動作になっていました。
無線はおいといて、シリアルだけを考えても57600bpsで通信するには20Mhzに設定されないと行けないのですが、オシロでみると23000bpsしかでてなくて計算上8Mhzで動いているようです。シリアルだけだったら、分周値かえて普通っぽいボーレートに出来るのでしょうけど、無線が絡むと弄っていいのやら。
で、いったんSilentなんとか系はあきらめて、SMAC4.2付属のサンプル動かそうとしたけどエラーがでてコンパイル通らない。(もともとCodeWarrior3.1用のサンプルなので)
じゃ、やっぱりSkyBoot解析して・・・といったり来たりしてました。
● SMAC4.2のサンプルがコンパイルできるようになりました
マイコン工作の実験室のフォーラムでnoritanさんが「SMACをCodeWarrior V6.2でコンパイルしたい」というスレッドをたてていろいろ検証してくれました。ありがたや〜
詳しくはスレッドを見ていただくとして次の手順でCW6.1でコンパイルできるようになりました。
● SMAC4.2 + CW6.1でWireless Uart.mcpプロジェクトをコンパイルする方法
1.Wireless Uart.mcpプロジェクトを開く
2.プロジェクトの設定(ALT+F7で開くダイアログ)でAccessPathsのSystemPathsの{Compiler}をlib\hc8cに設定
3.Targetを13213-NCBにする
これでコンパイル通りました!
SS-1では、LEDやスイッチのポートが違うので以下のようにヘッダ(13213-NCB.h)を書き換えます。
#define LED1 PTAD_PTAD0 #define LED1DIR PTADD_PTADD0 #define LED2 PTAD_PTAD1 #define LED2DIR PTADD_PTADD1 #define LED3 PTAD_PTAD2 #define LED3DIR PTADD_PTADD2 #define LED4 PTAD_PTAD3 #define LED4DIR PTADD_PTADD3 #define LED5 PTCD_PTCD4 #define LED5DIR PTCDD_PTCDD4 /* SW1 on schematic */ #define PB0 PTBD_PTBD4 #define PB0PU PTBPE_PTBPE4 #define PB0DIR PTBDD_PTBDD4 /* SW2 on schematic */ #define PB1 PTBD_PTBD5 #define PB1PU PTBPE_PTBPE5 #define PB1DIR PTBDD_PTBDD5 /* SW3 on schematic */ #define PB2 PTBD_PTBD6 #define PB2PU PTBPE_PTBPE6 #define PB2DIR PTBDD_PTBDD6 /* SW4 on schematic */ #define PB3 PTBD_PTBD7 #define PB3PU PTBPE_PTBPE7 #define PB3DIR PTBDD_PTBDD7
● 「自分のプロジェクトでSMACを使う方法」
フォーラムのほうにも書きましたがこっちにも書いておきます。
以下はサンプルプロジェクトのWirelessUartの同等品を作る手順です。
0.用意するもの
・CodeWarrior 6.x (6.1で試しました)
・SMAC4.2
1.プロジェクトを作成
Deviceは、MC13213
Connectionは、P&E Muitilink/Cycle Pro (DEMO9のBDMを使う場合)
2.プロジェクトの設定を変更
Alt+F7で設定ダイアログを開く。
Compiler for HC08のCommand Line Argumentsを以下のように設定
-Cs08 -DMC13213_NCB -Ms -WmsgSd1420 -WmsgSd1801 -WmsgSd2705
3.不要なソースを削除
StartUp08.cをプロジェクトから削除
4.必要なファイルをコピー
SMACのディレクトリから以下のファイルをかき集めてくる
【ソース/ヘッダ】
13213-NCB.c 13213-NCB.h derivative.h device_header.h drivers.h freescale_radio_hardware.h LCD.c LCD.h MC13192_hw_config.h MC13192_regs.h mcu_hw_config.h port_config_MC1321x.h pub_def.h SCI.c SCI.h simple_mac.h simple_phy.h smac_MC9S08GB60.h vectortable.c wait.c wireless_uart.c wireless_uart.h
【ライブラリ】
SMAC4.2_1321x.lib 13213_target.lib
5.ソース、ライブラリをプロジェクトに追加
4.で集めてきたファイルを自分のプロジェクト下のsourceやlibsにコピー
プロジェクトに追加する(プロジェクトのツリーにドロップする)
以上。
これで、ビルドするための準備が整いました。
この時点で必要なファイルは全て自作プロジェクトのほうにコピーされていますので、SMACがインストールされていない環境でもビルド、実行出来ます。
シリアルケーブルが1本しかなかったので、ボタンを押すと文字を1文字送信するように改造して動かしてみました。
ボタン押したらシリアルでつないだ方からPCに文字が表示されました。ちゃんと無線で通信できたよー。ここまで長かった・・・
このサンプルでは、送信側は相手指定なく送信して、受信側はなんでも受信するようになってるようです。
同じ周波数設定のデバイスが複数あったら混信するなー。
ま、その辺はもうちょっと上位層でなんとかすればいいのでしょうね。
これでやっとスタートラインに立てたわけですが、早速次の課題が・・・
(1) 通信距離が短すぎる
80cmくらい離すと通信できなくなってしまいます。えー?!
いくらなんでも短すぎるので調査しなくては・・・アンテナはちゃんと取り付けてます。ちょっとグラグラするのが不安ですが・・・
(2) クロックをもっとあげたい
このサンプルでは、CPUのクロックを8Mhzで動かしています。
本来は40Mhzまででるはずなのでもっと高クロックで動かしたい(特に液晶表示する側のユニットでは)
いやしかし1週間ぶりに成果がでました。よかった〜
一人では上手くいかなかったと思います。フォーラムでは大変お世話になりました。ありがとうございます。