Interface誌2010年6月号の付録のSH-2Aボードを試してみました。
とりあえず、本に書いてある通りの手順でLEDピカピカまで動かしました。
初期状態では、デバッグ実行時に、止めてないのにAbortとなって止まってしまう現象がありましたが、モニタプログラム(SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM)を2010年5月17日版にアップデートしたところ直ったようです。
まだ、コネクタなど何もつけておらず、素のままです。
このSH-2Aはクロック:144MHzでRAM:1MBとのことで、過去の付録基盤でも最高レベルのスペックです。画像認識でも余裕でこなせそうです。OpenCVのようなライブラリがあると楽ですが。
SH-2AはフラッシュROMを内蔵しておらず、このボードではSPI接続の64KBのフラッシュROMを搭載しています。半分はモニタプログラムが入っているので、このモニタを使用する場合は使えるのは32KBまでとなります。足りなくなったら大容量のフラッシュROMに差し替えることもできるようです。
開発ツールは、とりあえずメーカー純正の開発ツールのHEWを使用する方向で考えています。使用期限は60日で、期限が切れるとコンパイル後のオブジェクトのサイズが256KBまでとなる制限があるようですが、当面はそこまでのサイズのプログラムは作らないと思うので問題はなさそうです。HEWの他にGCCが使用できるようですが、256KBの制限以外のメリット・デメリットが理解できていません。
モニタプログラムを使用すると少し面倒な設定がですが、JTAGなしでトレース実行できるのでかなり便利です。
次はROMに書き込んでPCなしで実行することを試してみたいと思います。
将来的には昨日のカメラロボのCPUをこのボードに換装することを考えています。ボードの作り替えは最小限ですませたいのですが、まだどうなるか分かりません。
あと、LEDピカピカはHelloWorldに相当するものだと思いますが、本文のサンプルは割り込みタイマーを使用した少し高度なものでしたので、割り込みを使わない簡単なバージョンを作ってみました。main()周辺に以下を記入します。
#include "iodefine.h"
#include "machine.h"
void main(void)
{
volatile int i; // 最適化しない
// PCDR0設定 PC8のLEDを消灯
PORT.PCDR0.BYTE.H |= 0x01u;
// PCIOR0設定 PC8のLEDを出力に設定
PORT.PCIOR0.WORD |= 0x0100u;
// PCCR2設定 PC8の制御設定
PORT.PCCR2.WORD &= 0xFFF0;
while(1) {
// PCDR0設定 PC8のLEDを点灯
PORT.PCDR0.BYTE.H &= 0xFEu;
// 時間待ち
for (i=0; i<2000000; i++);
// PCDR0設定 PC8のLEDを消灯
PORT.PCDR0.BYTE.H |= 0x01u;
// 時間待ち
for (i=0; i<2000000; i++);
}
}
シリアル接続HEWモニタを使用する場合は本文のサンプルと同じく、↓の設定が必要です。詳しくは本文を参照してください。
- resetprg.c のSR_Init を 0x000000F0から0x000000E0に変更
- スタックポインタの設定
- セクションの設定
- デバッグの設定
1年半程前に作っていたロボットを掘り起こしてみました。
PCと無線で通信してPCからロボットをコントロールできます。また、ロボットに搭載したカメラの画像をPC側で見ることができます。
ロボットのスペックは以下のとおりです。
CPU:Interface 2007年5月号の付録のV850
カメラ:定番のTREVA (昔のPHS用外付けカメラ)
PCとの通信:XBee (38,400bps)
センサー:PSD距離センサー×3
モータードライバ:MP4212
モーター:ダイセンモータ(60:1)
タイヤ:タミヤ スポーツタイヤ
PC側のコントロールソフトはC#で作成。
写っているのはロボカップジュニアサッカーのボールです。カメラで画像認識して、ボールを追いかけ…..ません。そんな機能はなく、今のところ深い意味はありません。
ちなみにロボットのサイズは直径22cm弱ですが、これも深い意味はありません。(オヤジリーグ参加?)
カメラの画像を見ながら、ロボットをコントロールしたり、自動運転でカメラの画像を眺めるということを想定していましたが、Trevaの解像度(わずか96×72)でも38,400bpsのスピードでは5秒ぐらいかかって使い物になりません。※計算してみれば分かることでしたが、XBeeのスピードがどのぐらい行くかも分かっていなかったので。
また、距離が4~5メートル以上離れると、通信が不安定になってしまいます。
というわけで1.5年間、放置状態でした。
フロー制御を入れることで、通信スピードと距離の問題が改善されるのではないかと思い、引っ張り出してきました。
うまく行くかはまた後日。
ArduinoDuemilanove328 (ATmega328)ではピン数やメモリーが足りなくなった場合、ArduinoMega(ATmega1280)という選択肢があります。
ArduinoMegaは以下のようにDuemilanove328に比べて大幅に拡張されています。
|
Duemilanove328 |
Mega |
デジタル入出力ピン |
14本 |
53本 |
アナログ入力ピン |
6本 |
16本 |
flash memory |
32KB |
128KB |
RAM |
2KB |
8KB |
しかし、値段が、Duemilanove328が約¥3,200なのに対し、Megaは約¥7,000と値段もメガです。
また、MegaのATmega1280は今のところ入手が簡単でないのと、表面実装パッケージ(TQFP64)なので、自作のハードルは高いです。
SanguinoはATmega644Pを使用したArduino互換機(拡張機)で、以下のスペックとなります。Duemilanove328とMegaの中間といったところでしょうか。
|
Duemilanove328 |
Sanguino |
Mega |
デジタル入出力ピン |
14本 |
24本 |
53本 |
アナログ入力ピン |
6本 |
8本 |
16本 |
flash memory |
32KB |
64KB |
128KB |
RAM |
2KB |
4KB |
8KB |
また、ATmega644PはDIPパッケージなので、ブレッドボードで簡単に使えます。
日本ではSanguino互換のマイクロファン製REDUINO-GHOST644Uが入手しやすいと思います。ただし、完成品ではなくキットです。約¥3,780で販売されています。
Sanguinoについて、詳しくは↓を参照してください。
http://www.microfan.jp/sanguino
ということで、Sanguinoを作ってみました。
ATmega644Pは秋月で¥500で購入しました。
■以下は導入メモ。
回路は↓を参考に。
http://sanguino.cc/hardware
自作arduinoの時は内蔵オシレータを使用して8MHzで動作させましたが、Sanguinoは8MHzのブートローダが用意されていないので(自分でコンパイルすれば可能なようですが)、クリスタルを使用して16MHzで動くようにしました。セラロックの方が回路は簡単になりますが、ATmega644Pではセラロックは安定しないというような情報がありましたので、とりあえず今回はクリスタルを使用しました。
arduino-0018がインストール済みとします。
http://code.google.com/p/sanguino/downloads/list からSanguino-0018r2_1_4.zipをダウンロードし、
Sanguino-0018r2_1_4.txtに従い、解凍後のSanguinoをarduino-0018\hardware\の下にコピーします。(arduino-0018\hardware\Sanguinoになる)
ブートローダは以下を使用します。
D:\Sanguino-0018r2_1_4\Sanguino\bootloaders\atmega644p\ATmegaBOOT_644P.hex
ブートローダーの書き込みとFuseBitの書き込みは↓を参考に。
http://www1.parkcity.ne.jp/kama/Arduino.htm
http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html
Arduino IDEから”Tools”-“Board”で”Sanguino”を選択
後はArduinoと同じように使えます。
※8/13 文章全体を見直しました。
シンガポールはとても綺麗な街で驚きました。
シンガポールでは電車で切符を弾いたらダメという規則があるのですが、ふと気がつくと弾いている自分がいました。(笑)
会場の照明は明るすぎず調度良かったと思います。
しかし、うちのチームは相変わらず、調整がうまくいっていませんでした。
ロボットの構造に問題があるのでしょうね。
しかし、会場はとにかく寒かった。というか、この国は室内がどこも寒かった。外は暑いので、気温の差に体調を崩しそうでした。
会場では他のリーグも近くで実施されており、見学ができてよかったです。
しかし、選手達は試合と調整で忙しく、とても見学に行く暇はなかったと思われます。
あまりに忙しく、朝食・昼食も会場内でとっていました。
その間、付き添いの我々は美味しい物をいっぱい食べました。
また、監視が厳しく(笑)、選手達とは話すこともできなかったので、応援もせずに観光やショッピングに繰り出していました。
バージョンBのロボットはとにかくすごかった。
ジャパンオープンでスペインチームのロボットはすごいと思いましたが、あのクラスがごろごろいてびっくりしました。
TN-STARSはギリギリでしたが決勝リーグまで進めたのでよかったです。(バージョンAでよかった~)
最終日はゆったりと観光しましたが、歩きすぎて帰国後1週間は足が筋肉痛でした。
今回、子供達は英語の重要さを痛感したようで、帰ってからは英語の勉強を頑張っています。
来年、活用できたら良いのですが。(笑)
大会バージョンのロボット
以上、6/27の記事ですが、7/13に書きました。だいぶ追いついたぞ!
TN-STARSは7位でしたが、プライマリの年齢区分では3位でした。
世界大会へ行けるのは2チームまででしたが、上位のチームで世界大会を辞退されたとのことで、TN-STARSが参加できることになりました。
本日打診があったのですが、本日中に返事をする必要があったので、本人達に聞く暇もなく、参加の返事をしてしまいました。(笑)
ジャパンオープンバージョンのロボット
以上、5/11の記事ですが、7/12に書きました。ふぅ。