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

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

わかっている欠点:

  • 700円(2割)高い→安くなりました
  • ボードだけ買いたくとも、開発セット(CD-R)が必ずついてきて割高な気分→ボード単品で買えるようになりました
  • クロックが速いせいで、クロック依存な処理(シリアル、パルス出力など)を書き換えないといけない
わかっている利点:
  • プログラムが3048と共通。
  • ピン配置も書き込みまわり以外共通。
  • クロックが25MHzで約1.5倍、ROMが512Kbyteで4倍、RAMが8Kbyteで2倍(3048比)
    サイズが同じなので、12倍(やまもと氏式表記)
  • 書き込み回路がいらない(スイッチだけで済む)
    →5V単電源で動かすための小細工にわざわざ12V系のごちゃごちゃをつけなくていい。2003もいらない。こまごました受動素子も要らない。
  • ついてくるH8WriteTurboは、開発環境を激変させます。MOTファイルをダブルクリックするだけで書き込みできます。
    cf. まえの秋月のツールのあの書き込み手順のめんどくささは... Tinyの書き込みソフトはDOS窓で できたので、ましでした。
    でも、CD一枚あればいいんですけど。
∴ 買うしかないでしょう。
このページはそんな私の覚え書きです。

覚え書きなので、バックグランド解説抜きで、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用に再構築を試みた方がいらっしゃるようで、基本方針としてかなり助かりました。

用意するもの:

  • 日立モニタソース:
  • ルネサス→セミナー→サンプルプログラム
    → 同意 → H8/300H(Tiny) → MS-DOS版 H8/300H用モニタプログラム
  • 同 Hterm :
    無くてもいいですが、あるとモニタが動くようになったあと便利です。
  • AKI-H8/3052 付属CD から A38H.exe, L38H, C38H.exe
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を採用したに違いないと結果オーライ)。
モニタを書き込むと、TeraTerm でつないだりして、いじれるようになりますが、htermをつかうと使い勝手がよくなると思います。とはいえ、レジスタ遊びしかしてませんが。

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

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

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

追伸:

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