ブログ - 最新エントリー

 

TOPPERSについて

TOPPERSはRTOSの1つでITRON仕様のオープンソースソフトウェアとして公開されているOSです。TOPPERSの詳細は http://www.toppers.jp/project.html を参照してください。

マイコン上でプログラムを作成する場合でも、OSがタスク制御とかをやってくれるのでマルチタスクのプログラムが作成し易い?はずです。数回に分けてTOPPERSをAT91SAM7Sに搭載させてマルチタスクOSによるプログラミングに挑戦してみます。

今回は公開されている情報をトレースし、今現在でも同様の手順で再現できるかを試してみたいと思います。動作を保証するものでもサポートされるものでもありませんが。

用意するもの


環境の構築

1.Cygwinのインストール
CygwinのWEBサイトからsetup.exeをダウンロードし実行します。

インストール中に要求されるダウンロードサイトを適宜選択し、パッケージの選択でDevelカテゴリのmakeをインストールする様にする以外はデフォルトのまま進んで構わないでしょう。

しばらくしてインストールが完了したら、ちょっとだけ修正作業をしておきます。windowsのコマンドプロンプトを起動し、以下の通り打ち込みます。
cd c:\cygwin\bin
ash rebaseall -v
この措置を講じておかないと、後々perlの処理に支障をきたします。


2.ARM用gccの準備
こちらのWEBサイトから yagarto-bu-2.20_gcc-4.4.2-c-c++_nl-1.18.0_gdb-7.0.1_20091223.exe をダウンロードおよびインストールします。
デフォルトの設定でインストールを進めて構いません。

3.TOPPERS/ASPカーネルの準備
TOPPERS/ASPカーネルTOPPERS/ASPカーネル簡易パッケージから 「BTC090(ベストテクノロジ)簡易パッケージ」を使用します。
ダウンロードしたファイルをc:\cygwin\home\ユーザー名\ (ユーザー名はWindowsにログインしているユーザ名)に解凍します。
解凍した後のフォルダイメージはこのような感じになっていれば良いはずです。


4.カーネル用コンフィギュレータの準備
TOPPERSカーネルコンフィギュレータよりコンフィギュレータ Release 1.5.0(Windows用バイナリ)をダウンロードし、c:\cyginw\home\ユーザー名\asp\cfg\cfg (ユーザー名はWindowsにログインしているユーザ名)へ解凍します。
同名のファイルがあれば上書きして構いません。

5.書き込みツールとシリアルターミナルの準備
マイコンへのプログラム書き込み用ソフトウェアとしてGCC Developer Liteに付属するFlash WriterとopenOCDを使用します。
その他、プログラムの動作確認をするために汎用のシリアルターミナルプログラムを用意しておきます。GCC Developer Liteに付属のSIMPLE TERMでひとまず事足りるでしょう。

ひとまず必要なファイルの類の準備が終わりました。

TOPPERS/ASPをコンパイルしてみる

1.ユーザーズマニュアル
~/asp/doc/user.txt  がユーザーズマニュアルになっています。必要な情報の大半が記述されているのですが、windowsのメモ帳で開くと文字化けして読めないので、ms wordやもうちょっとインテリジェンスなテキストエディタで参照しましょう。
ここまでの作業は、「3.クイックスタートガイド」の3.1~3.2に記載された内容と同等です。

2.サンプルプログラムのコンパイル
user.txt の「3.3 サンプルプログラムの構築と実行」に記載された手順を追えばコンパイルできる様ですので、順に作業してみます。
Cygwinのコンソールを起動し、以下のコマンドを順に実行します。
cd ~/asp
mkdir OBJ
cd OBJ
perl ../configure -T btc090_gcc
実際の画面はこのような結果になるはずです。

この操作によりコンフィギュレーションが行われます。

特に問題がなければ、最終段階のサンプルプログラムのコンパイルを行います。引き続きCygwinのコンソール上で以下のコマンドを順に実行します。
make depend
make
しかしながら、使用したコンパイラのせいなのか、提供されているファイルがイマイチよろしくないのか、make depend を実行した時点でerrorが発生したと言ってくると思います。


とりあえず動けばOKという事で、~/asp/arch/arm_gcc/at91sam7s/at91sam7s.ldファイルをこちらのもので置き換えて、再度 make depend を実行します。文句は言ってこなくなったので、処理が完了した様です。


それでは最後に make を実行してコンパイルを行います。ずらずらと処理中の状況が表示された後に complete の文字が表示され、~asp/OBJ/asp.exe が作成されていればコンパイルは成功です。


続きCygwinのコンソール上で以下のコマンドを順に実行します。
cd ~/asp/OBJ
arm-elf-objcopy -O binary -S asp.exe asp.bin
これにより ~/asp/OBJ/asp.bin ファイルが作成され、マイコンボードに書き込むためのファイルができあがりました。

マイコンボードで動かす

マイコンボードへの書き込み手段は複数ありますが、ここではJTAGを介して書き込んでみます。
また、サンプルプログラムはDBGUポートを使用してシリアル通信でメッセージを送受信するように作られていますので、SIMPLE TERMを使用して動作を確認してみます。

1.openOCDの起動
GCC Developer LiteはSAM7Sのターゲットを前提としてインストールしてあるものとします。
  • TINY JTAG-ICE2をPCのUSBポートに装着(デバイスドライバのインストール要)
  • BTE077のI/OボードのCN3とTINY JTAG-ICE2のJTAGコネクタをフラットケーブルで接続
  • AT91SAM7S256マイコンボードのCN3とTINY-ICE2のRS232Cコネクタをシリアルケーブルで接続
  • AT91SAM7S256マイコンボードのSW1をSAM-BAとは反対側に切り替え
  • BTE077のI/Oボードに外部電源を接続し、I/OボードのSW1をONにして電源を供給

GCC Developer Liteを起動し、ツールバーから openOCD(SAM7S) をクリックしてopenOCDを起動します(最小化されたコマンドプロンプトがタスクバーに収まっているはず)。もし起動しないようであれば、ケーブルの接続や電源、ドライバのインストール等をチェックしましょう。また、外部からマイコンボードのFLASH書き換えやJTAG接続を使用不能にする設定になっている場合もありますので、その場合はこちらを参照して対処してください。

2.Flash Writerで書き込み
Flash Writerは先ほど出来上がったasp.bin ファイルを openOCD を介してマイコンボードへ書き込みを行うツールです。
GCC Developer LiteのツールバーからFlash Writerを起動します。

起動したFlash Writerのタイトルバー左端にあるアイコンをクリックし、表示されるメニューから「FlashWriter Property」をクリックすると、Flash Writerのウィンドウが拡大します。

ウィンドウが拡大したら、以下の様に設定します。
  • CPU TYPE: openOCD
  • PORT: openOCD
  • Write Script File: at91sam7_bin_flash.script

ちなみにopenOCDが起動していないとPORTのドロップダウンリストにはopenOCDが列挙されません。起動しているにもかかわらず列挙されない場合は「Rescan」とある部分をクリックしてみてください。
また、Write Script Fileのドロップダウンリストには似たような名称のものがいくつも列挙されますが、間違いなく「at91sam7_bin_flash.script」を選択しましょう。
最後にファイルを開くアイコンをクリックして先ほど作成した asp.bin を一番上のテキストボックスに設定します。

これでおそらく書き込む準備が完了したはずなので、「Execute」をクリックして書き込み処理を開始させます。書き込み中はそれにかかる処理の状況を逐一ログウィンドウで表示し、滞りなく成功すればFlash Writerのステータスバーに青色で Successful と表示されます。


3.SIMPLE TERMで動作確認
書き込み処理が成功してさえいれば、書き込み処理終了と同時にマイコン上でプログラムがスタートしているはずですが、マイコンボードの外観からは何らその様子をうかがい知る事ができないのが残念なところです。
~asp/OBJ/sample1.c を眺めると syslog 関数でテキストを吐いているだけで、LEDやブザーの類までを扱っている様には見受けられません。入力は serial_rea_dat でDBGUからシリアルデータを取得してswitch文でなにやら分岐しています。ということで、シリアルターミナルの出番です。
GCC Developer LiteのツールバーからSIMPLE TERMを起動し、SIMPLE TERMのファイルメニューのプロパティをクリックし、表示されるダイアログボックスを以下の様に設定します。
  • Connect to: COM??? (???はTINY JTAG-ICE2のRS232Cで増設されるCOMポート番号)
  • Baudrate: 38400 bps
  • Databits: 8 bit
  • Stopbits: 1 bit
  • Parity: Non
  • Flow Control: Non


ではSIMPLE TERMのツールバーから「指定ポートを開く」ボタン(電話のアイコン)をクリックしてみましょう。「task1 is running (????).」の表示が延々と表示され続けていれば間違いなく書き込まれたプログラムが動いている証拠です。

マイコンボードのリセットボタンを押してプログラムを再起動してみると、実行を開始したことを意味するメッセージの後に、再度「task1 is running (????).」が表示され続けます。sample1.c のソースを眺めながらswitch文で列挙されているキャラクタをSIMPLE TERMのターミナルウィンドウ上で入力してみて、何かしら表示が変化すればなおOKってところでしょうか。


ここでは sample1.c がどういった挙動をするものかまでは説明しませんので、よく眺めた上で遊んでみてくださいね。

それと、今回使用したマイコンボードはAT91SAM7S256という事で、デフォルトで想定しているAT91SAM7S128とは異なっています。両者の違いは内蔵されるメモリのサイズ程度と思えば、メモリの小さいAT91SAM7S128として構築したものをメモリの大きいAT91SAM7S256に書き込んだ所で何ら支障はありません。

at91sam7s/xの起動処理

カテゴリ : 
雑記
2009-12-3 0:35
ずーっと使いながら時々気になっていたことって良くあるものです。別のせいにしてお茶を濁してることもしばしば。at91sam7s/xでも似たようなことがって、あまり手を入れていなかった所に地雷が仕掛けられていました。それがPLLの初期化。
とりあえず現状でも動くのですが、起動させる条件(たとえばデバッガを使っていたりRAMでブートさせるといったと時)によって時折動かない事が起こり得えます。これはCPUの動作クロックを設定する部分に起因していて、フラグが意図通り変化しない場合に陥ります。openocdがガンガンバージョンアップしていく過程で明らかになった部分で、アセンブラであったこともあり気付くのに時間を要してしまいました。
GCC Developer Lite本体のWindows Vista/7対応レベルの向上、sam7s/xのx64環境でのUSBシリアルエミュレーションドライバ対応、sam7s/xのRAMデバッグ環境の見直し、FDIIIライブラリのバグフィクスと合わせて近々更新する予定です。

at91sam7s/xのボーレート

カテゴリ : 
雑記
2009-10-29 5:42
現在AT91SAM7S/Xシリーズ向けのシリアル通信ライブラリにおいて、USARTのボーレートは粗めの分解能でしか設定出来ません。特段理屈は無かったのですが、確かに高いボーレートになると合わせにくい所でもあります。
次のGCC Developer Liteのアップデート時にUSARTのSampling Divider関連は全て16から8に変更されますので、従来よりも倍の精度でボーレートが設定できるようになります。
なお、FDIII-HCにおいてもボーレートが全域においてDynamixelと一致しますので、666k,500kbpsといった最大速度に対して若干遅めのボーレートにも対応できるようになります。

それと、ボーレートついでに。
しばしば問い合わせのあるPCとDynamixel間の無線化は、特に特殊な事をせずともFDIII-HCを使用する事で実現できます。USB接続のみのDnamixelコンフィギュレータをFDIII-HCに置き換えるだけで、Bluetoothによる無線化が簡単に行えます。その場合FDIII-HC用に専用のプログラムを作る必要はありませんし、USBケーブルで有線、Bluetoothで無線といった具合に必要に応じて自由に使い分ける事もできます。もちろんPC上のソフトウェアの資産はそのままで、接続先に応じたCOMポート番号を変えれば良いだけ。
ちなみに、FDIII-HCではBluetoothのDTE速度を460.8kbpsとしていますので、無線化したとしてもリアルタイム性は別としてそこそこのスループットは得られるかと思います。

回路の準備ができたので、いよいよプログラム。まずはGCC Developer Liteをインストール。コンパイルオプションは「DYNAMIXEL Library for ATmega128 USB I/O」を選択(このGDLのバージョンは2.2.0.44)。GDLのバージョンによっては違う名前のこともあるが、「DYNAMIXEL」と「ATmega128」の2つの単語が入っている設定を使えばOK。
 

この設定にすることで、予め用意されているAX/DX(RXも)ライブラリをそのまま利用することができる。0から自分で用意する選択肢もあるが、今回は面倒なのでパス。また、別マイコンでAX/DXモータを使う場合も、ライブラリの中身を参考にするのが楽かも。

 


基本になるプログラムはこんな感じ。ただし、これだけだと何もしないので焦って「動かない!」と思わないよ~に。
 


トルクイネーブルまでを加えたのがこのプログラム。正しく動作すれば、AX-12+モータが現在位置で保持されるのでわかるはず。ここまでできれば、後は位置制御やら無限回転やら思いのままだ!

ということで今回はここまで。

74HC241を使えば、1つのICでAX-12+用の回路を作れる、というのが前回までのあらすじ。ちなみにDIPパッケージだと約110円。占有スペースが減るのもメリット多し。ただ、パッケージの半分以下しか使っていないのがもったいないといえばもったいない(貧乏性?)。

DIPパッケージでの接続は赤線の通り。


これだと中身がわからないので、内部ロジックから見た図がこれ

 
もちろん、元の回路にあったプルアップと直列抵抗も忘れずに。


 


モータの電源は7~12Vなので、マイコン電源と共通にしないように注意。次はいよいよライブラリを使って動かそうかな。

AX-12+は(AX-S1も)電源を含めた3本の線で動作させる・・・、というのはコネクタを見ればわかることですが、問題はマイコンとの接続ですね。

この図はAX-12+のマニュアルに載っている回路に追記したものです。2つのICを使って、マイコンの送信、受信端子を切り替えています。ちなみに、74HC125,126どちらもDIPパッケージなら100円しない位の価格らしいです。

切り替えに使うI/Oはどこでも良いといえばいいのですが、上の例ではPD5に接続しています。理由はベステクのATmega128用AXライブラリの接続がこの端子だったから。つまりこの接続なら用意されているAXライブラリ(実際にはDX/RXも共通)がそのまま使えるというわけです。楽チン楽チン。

前述の回路はこれで問題なく動作するのですが、ICを2種類使うのが玉にキズ。というわけで、1つのICで何とかならないかなと探したところ74HC241を使えば良さそうだ、というところで今回はここまで。

ホームページが変わってから情報が無くなってしまったので、ここら辺で少し追加します。

ATmega32及びATmega128マイコンボードに搭載されるマイコンには、出荷時に予めブートローダというプログラムが書き込まれています。現在ブートローダには複数の種類が存在しており、stk500(Atmel社のevb)で採用されている通信プロトコルと互換性のある特殊なバージョン(旧ブートローダ)と、一般的なダウンロードプロトコルであるXMODEM搭載版(新ブートローダ)が存在します。

マイコンボードに黄色ないしV1.2といったラベルが添付されていれば後者のブートローダが搭載され、最新のGCC Developer Liteでも標準でサポートします。
ですが、前者のサポートは標準ではなされていないため、コンパイル時に手動でHEXファイルを吐く様に設定するといった作業を強いられます。

場合によっては新旧のブートローダを搭載したマイコンボードを混在して使用するといったケースも見受けられるようになってきましたので、再度GCC Developer Liteで旧バージョンのブートローダを搭載したマイコンボードをサポートするファイルを公開します。

ATmega32からATmega32Aに

カテゴリ : 
新商品
2009-8-6 21:32
そろそろ次のロットからATmega32Aに切り替え始める予定です。
Aが付いて特に大きく何かが変わる訳ではありませんのでご安心を。

android

カテゴリ : 
雑記
2009-7-25 2:40
とは言っても人造人間の方じゃありません。Googleの携帯向けOSです。
Linuxじゃんといえばそれまでですが、カーネル以外はどこがLinuxかワカラン程度で別個のプラットホームと考えた方が良い感じです。

なぜに今になってそんなネタを?
何となく黎明期のPocketPCの様に無い機能は自分で作る以外に無いといった雰囲気がおもしろいなぁと思いまして。コーディングするという点においてはiPhoneと違って縛りも無いし。
beagleboardやPC、その他のARMが載ったボードでも実際に動いていますし、もちろん携帯電話としてもdocomoからも端末が出てきた事もあり、そこら辺の環境を利用しつつ何かに応用出来ないかなと画策中。

UAC

カテゴリ : 
雑記
2009-7-6 23:30
最近Windows Vistaを使っている方が増えているためか、GCC Developer Liteのメッセージダイアログボックスに何にも表示されないという問い合わせがちらほらと。
ネタはGCC Developer Liteの従来からの互換性の都合から、Vistaでは標準でONになっているUAC(ユーザーアカウント制御)による制限を受ける事に起因し、とりあえず何か文句を言われたら「キャンセル」ではなく「許可」をクリックしましょう。「キャンセル」を押した後で難なく動く理屈は全くありませんので。
メッセージがあまりにもウザい時はここここの情報を参考に設定を変える以外に、今のところは手はありません