H8/3052に乗り換えよう!

[| ]  最終更新: 2011/02/10 20:17:19

まえふり

いまから、秋月電子のAKI-H8/3048 を導入しようかと考えている人、悪いこと言わないから AKI-H8/3052にしなさい。

と強硬に主張したくなるような雰囲気が私にただよっています。
(もちろん、真に受けて いきなり 3052 を導入して ハマっても責任取りません)

わかっている欠点:

わかっている利点: ∴ 買うしかないでしょう。
このページはそんな私の覚え書きです。

覚え書きなので、バックグランド解説抜きで、AKI-H8/3052をもっていること前提で書きます(笑)。


書き込み回路をつくる

当然、H8/3048用の書き込み機は使えないので、新しくつくる必要があります。といっても、必要なコネクタと2回路スイッチがあれば、線で繋ぐだけです。

装置を動かすわけでもないので、例によって電源はUSBにしました。AKI-H8/3052の説明書に書き込み回路の図がありますが、DC7〜12Vを供給せずに、直接5VをUSBのケーブルから供給するようにして、CN4-8,9に2回路のOn-Offスイッチを挟みました。

参考:

Dsub(F,RS232)-5 = CN4-2 = USB-GND = SW1-1
Dsub(F,RS232)-3 = CN4-4
Dsub(F,RS232)-2 = CN4-6
Dsub(F,RS232)-7 = Dsub(F,RS232)-8
USB-5+ = CN4-3 = SW2-1
CN4-9 = SW1-2
CN4-8 = SW2-2

CN4:6本  USB:2本  Dsub:3本+2
※:SW1, SW2 は連動 (6pinのやつ)  On で書き込み(ブートモード)、Off で通常
思い当たる注意点
H8/3052のブートモードは非常に危険です。マニュアルPDFの18章、ROMの項目の18.6.1のブートモードの記述(手元の版だとpage18-21)によると、書き込みのためのブートモードで起動すると「自動的にROMを消去」するそうです。
と、書いてあるんですけど、消えないっぽいです。不思議なことに。用心するにはこしたことはないとおもいますが。
実行機と開発環境を共用する場合(ロボットにH8を搭載して、書き込みスイッチもつける−合理的ですが−場合など)は、スイッチは操作しにくいものにするか、スイッチと直列にジャンパをつけておくなど、「試合/本実験/御前デモ 直前に誤ってスイッチを入れて起動(号泣)」しないようにする機構が不可欠でしょう。
あとは、ブートモードで起動して、適当なMOTファイルを 「H8WriterTurbo」に投げ込むだけです。そのまえに、一度単品で起動して、書き込み速度(115200でOK)、条件(圧縮あり、開始、終了ダイアログOffでいいでしょう)を設定しておきます。さらにMOTを関連付しておくと、MOTファイルをダブルクリックするだけでOKと、かなり幸せになれます。

とりあえず、既存のH8/3048用でもなんでもいいので、適当にMOTを書き込めるか確認してみましょう。

※で、動かして文字化けして、速度の違いに気づくわけだ:-)


モニタをなんとかする

導  入

日立提供のH8用モニタは便利です。これを書き込んで、適当な通信ソフト(teratermなど)で通信すると、各種機能がいじり放題になるので、いちいちプログラムをつくってコンパイルして転送、とかしなくとも、A/D D/Aとか ITUとかの I/O機能の試験ができます。
本来は、外付RAMにプログラムをロードして実行したりできるのですが、完全にI/Oいじり用だけにつかってます(笑)。

そんなわけで、時々愛用していたのですが、3052用はありません。 親切にもAKI-H8用として、3048用が公開されているのですが、クロック周波数が違う、という問題がここでも起きます。 本来、日立のセミナーを受けたりすると、正式なカスタマイズセットがついてきたりするようなのですが、サンプルとして公開されているものに文句をいうわけにもいかず、何らかの方法でいじる必要があります。

で、なんとかしました。
その MOT を配ってしまうのが楽なのですが、再配布するものではないので、手順を書いておきます。

モニタを再構築する

いろいろ あさったところ、ソースが公開されているので、まっさらから再構築が出来るようです。さらに、H8/3048用に再構築を試みた方がいらっしゃるようで、基本方針としてかなり助かりました。

用意するもの:

akih8mon.bat および monitor.aki は AKI-H8プログラミング環境by Namikata氏 の そのものをダウンロードし、いまのモニタのバージョンになるようにいじり回して なんとかしました。有用なものを公開しておいて下さり感謝します。

手順:

  1. モニタソースを展開する。
  2. そこに A38H.exe, L38H, C38H.exe を投入。
  3. akih8mon.bat, monitor.aki を投入。
  4. 下記指示に従って カスタマイズ
  5. コマンドプロンプト(Win2000でやりました)で akih8mon.bat を実行。
  6. 問題なければワーニングがでますが、monitor.mot ができます。
カスタマイズ:
akih8mon.bat 冒頭:
SET PATH=D:\300hmoni;%PATH%
         ^^^^^^^^^^^^
モニタのディレクトリを指定。A38H.exe, L38H, C38H.exe のためのパス設定なので、別ディレクトリに入れてあるなら、それを指定。
monitor.aki: 後半

DEFINE  $BRR(0d)
             ^^
SCIのBRRに設定する値:16進。25MHz動作で 38400bps:13  57600bps:0d
ちなみに 16MHz のときは 19 で38400bps。詳しくはマニュアルPDFの
SCIの速度設定の項を参照。

DEFINE  $STACK(0FFF00)
               ^^^^^^
メモリマップのRAMの一番上を設定してみました。

START   VECTOR(0),ROM(100),RAM(0FE000),USER(0FDF10),SCI(0FFFB8)
               ^      ^^^      ^^^^^^       ^^^^^^      ^^^^^^
VECTOR: 0 固定  (割込ベクタテーブル)
ROM: 100 (ROMの開始アドレス in メモリマップ)
RAM: モニタのワークエリア:RAM領域に適当に設定してみました。
USER: ユーザプログラムのエリア:今回はRAMを増設していないので
      使うことはなさそう。メモリを増設した場合は、そのアドレスに
      するとよいでしょう。
SCI: SCIのレジスタ群のあるアドレス。標準で、ライタと同じ SCI1 を使用。
     もしかしなくとも、FFFB0 にすると、SCI0 になるかも。
ワーニングと傾向:
なにやら、108 RELOCATION SIZE OVERFLOW というエラーが多発して悩んだのですが、無視していいらしいと結論を出しました。
検索かけて日立のページをみたところ、リンク時にアドレスが溢れると出るワーニングらしいです。具体的には 16bitアドレスをオペランドで指定しているところに、24bitアドレスの数値を入れようとした場合など。エラーが出た個所を確認したところ、SCIのレジスタをいじっているところで、すべて8bit絶対アドレス指定でした(H8は8bit絶対の場合 80-FFはメモリマップ最上位をアクセス)。つまり、B8と指定されるべきところにFFFB8を入れようとしてワーニングがでたのではないかと推測しました。で、SCIならダメだったらそもそもメッセージもなにも出ないだろう、とタカをくくって書き込んだところ、動いたので多分大丈夫です :-) (きっと下位8bitを採用したに違いないと結果オーライ)。

htermをつかってみる

モニタを書き込むと、TeraTerm でつないだりして、いじれるようになりますが、htermをつかうと使い勝手がよくなると思います。とはいえ、レジスタ遊びしかしてませんが。

起動すると9600とかでつながっているので、一旦「通信→切断」して、「ファイル→プロパティ」で通信条件を設定します(これを記憶させられるといいんですけど)。 その後、「通信→接続」すると、コンソール経由で通信が、「表示→Periferal→ITU」などを選択すると専用のウインドウがでて、値を表示するとともに、クリックすると値の更新ウインドウがでてきます。

いちいちコマンドをうつよりは 便利ではないかとおもいます。


その先?

この続きは未定。 ナイスなネタが出たときにでも。

追伸:

くまがいは、とりあえず書き込み線つくって、モニタを動くようにして浮かれてこのページをつくったので、まだ、「なににも」使っていません。そういう危険なページなのでご注意を。
(02/10/11, 科研費調書明けのリフレッシュ中に記す)



熊谷正朗 [→連絡]
東北学院大学 工学部 機械知能工学科 RDE
[| ]