2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2012年6月 | トップページ | 2012年8月 »

2012年7月

2012年7月16日 (月)

夏休みの工作・ロボクライマーをインドアで遊んでみる

花岡ちゃんのウィークエンド:ロボクライマーその後

去年の夏休みの工作向けに作った「ロボクライマー」。面白いのですが、アウトドアでないと遊べないのがちょっとねと思っていました。

なんとか室内でも遊べないものかと考えた結果、雑誌や古新聞や本を使ってはどうかと思い至りました。どこの家庭でも結構な数があるし、重ねて高低をつけるのも簡単です。こんな感じです。

Dscn2244

雑誌などで坂道を作りロボクライマーを走らせてみました。

本を上手に重ねていくといい感じの坂道が出来ます。こんな風にカーブしていてもうまい具合に進行方向を変えて、上へ上へと登っていく様は、見ていて楽しいものです。さらにボール箱やクッションなど身の回りのものを使えばもっと大規模な坂道も出来るでしょう。

あまり暑くなければ、やっぱりアウトドアで遊ぶのが面白いんですけどね。

さて、この夏もなにか簡単にできて面白いロボット工作をと思っているのですが、何かと忙しく着手できない状況です。ちょっと残念です。

2012年7月14日 (土)

TrueSTUDIOからEclipseへ乗り換える(拾遺)

今回は拾遺というとで、いくつかのトピックを取り上げます。

■浮動小数点演算について
普通にfloatやdoubleを使って演算する分には、FPUを使わないデフォルトの設定で問題ないようです。ただ、引数がfloatの関数にdoubleを渡したりすると、エラーが出ます。シェーキーのプロジェクトでは、fmod()にdoubleの変数を渡したときに起こりました。
「乗り換えガイド」に書いたように、FPUを使う設定にするとエラーはなくなります。理由はよくわかりません。

また、doubleの定義時に0以外の初期値を設定するとシリアルポートのボーレートがおかしくなると書きましたが、僕の環境でもそうならない場合もありました。どうも不思議ですが、やらないほうが無難でしょう。

■sprintfとsscanfのサンプル
サンプルプロジェクトを参考までに公開します。PA2がパソコンへの送信、PA3がパソコンからの受信でレベルコンバータを通してパソコンのCOMポートと接続します。ボーレートは9600bpsです。

プログラムは実数(10とか0.123とか)をターミナルから入力してリターンキーを押すと、"10 *2= 20"のように入力値の2倍をタイプアウトします。

ファイルサイズの関係で、srcフォルダのみ公開します。

「src.zip」をダウンロード


■使い勝手
商品であるTrueSTUDIOに比べると気配りが足りません。たとえば、修正したソースを保存し忘れてビルドしてしまい、デバッグしようとして初めて「保存してないファイルがあるがどうするか?」なんて聞かれてしまいます。わかってんならビルドのとき聞けよといいたくなります。まあ、ロハだからしょうがないかとは思いますが、このへんカスタマイズできるならなんとかしたいところですね。

■コードサイズ
ツールチェインが無償版のせいか、結構大きくなります。シェーキーのソフトはTrueSTUDIOでは約60KBでしたが、こちらでは1.5倍くらいのサイズになりました。
[Project]-[Properties]-[C/C++ Build]-[Settings]でToolchainタブをクリック、Arm Sourcery Windows GCC CompilerのOptimizationをクリックして、Optimize level を Optimize(-O1)に設定してビルドすると、少し小さくなって1.2倍くらいに収まりました。これ以外のレベルを選んでもあまり変わらないようです。

2012年7月13日 (金)

TrueSTUDIOからEclipseへ乗り換える(その3)

今回はsprintfとsscanfを使えるようにしました。これが使えると変数の値を文字列にしたり、また文字列を数値にしたりできるので、TeraTernなどで情報を表示したり、数値を入力したりするインターフェイスが簡単に作れます。

例によってこちらのブログを参考に、ダウンロードしたnewlibのsyscalls.cを改造しました。
主な改造内容は、一文字出力と思われるputch()と一文字入力と思われるgetch()を追加しただけです。これらは(たぶん)printfやscanfで標準入出力とやり取りする部分だと思います。今回はこれらは使いませんので、putch()はなにもせずにリターンするだけ、getch()はリターンコード(0x0d)を返すだけになっています。
今回はヘッダファイルなしで使えるようにしました。実装は改造したsyscalls.cをプロジェクトのsrcフォルダにコピーするだけでOKでした。(改造したsyscalls.cはこの投稿の最後の「乗り換えガイドV2」にあります)

ここまでは難なく進みましたが、シェーキーのプロジェクトは相変わらずおかしな動きをしています。そもそもボーレートが明らかにおかしい。設定を変えても思ったようにかわりません。やむを得ず、プロジェクトを「再構築」しながら問題を探りました。その結果ようやく原因がつかめました。(ほんとに苦労しました)

double abc = 10.0; のようにdoubleの変数を定義する際に0以外の初期値を定義すると、なぜかボーレートの設定がでたらめになったり、Hard_Faultに落ち込んだりするようです。intやfloatなどでは問題ありません。なぜかdoubleだけがこうなります。全ての環境でこうなるかどうかはわかりませんが、僕の環境では必ず起ります。

これを修正したところ、シェーキープロジェクトはすんなり動作しました。だいぶ紆余曲折はありましたが、とりあえずTrueSTUDIOからEclipseへの乗り換えは出来たようです。
乗り換えを検討中の方の参考になればと、「乗り換えガイドV2」を作成しました。

「truestudioeclipse_v2.pdf」をダウンロード

文章ばかりでは寂しいのでこの写真を。R2ユニットがご先祖Shakeyと記念撮影といった感じでしょうか?(この大きなR2-D2は昔のニッコーの製品でDVDプロジェクターになっています)

Dscn2235

2012年7月 7日 (土)

TrueSTUDIOからEclipseへ乗り換える(その2)

前回いきなりシェーキーのプログラムを試してひどい目にあいましたので、もっと簡単なプログラムから始めることにしました。

まずはラジコンサーボのパルス発生です。シンクロで確認したところ、これは問題なし。

次にUSARTを使ったシリアル通信をテストしました。ここで問題発生、ボーレートが狂っています。いろいろ調べていくうちにHSE_VALUEが間違っていることに気づきました。これは外付け水晶の周波数を定義するので、8000000(8百万ヘルツ)でなければなりませんが、80000000(8千万ヘルツ)になっていました。コピペした元がそうなっていたようです。おそらくUSARTとかを使わないと気づかないのでしょう。
コレを直して試しましたが、シンクロで見るとまだおかしい。3倍くらいのボーレートになっています。そういえばこのソースコードでは3倍のボーレートをセットしています。その顛末はこの投稿を見てください。コレがいけないようです。当たり前ですがボーレートをそのままセットしたところ、無事に通信できるようになりました。


ソフトの中身とは関係ないのですが、EclipseのデバッガだとSTM32F4 Discoveryのリセットがかかりにくい感じがします。デバッガにはボードをリセットするボタンはありません。しかし、最初の実行時にはリセットがかかり、main関数の入り口でブレークするはずなのですが、ときどきHard_Faultトラップに落ちたりすることがあります。最初のうちはリセットの問題とは気づかずに、プログラムを疑って時間を無駄にしてしまいました。
どうも手動でリセットしたほうが無難なようです。トラップされた状態からリセットするには、ボードのリセットボタンを押したままデバッガの実行ボタンをクリックし、その後リセットボタンを離せばOKです。

今回はここまで。次回はsprintfとsscanfを使えるようにします。
もうちょっとまとめたら「乗り換えガイド」の加筆訂正をしようと思います。

2012年7月 3日 (火)

残念なお知らせ

Eclipseで開発環境が構築できたので、やれうれしやというわけで早速シェーキーのコードを移行してみたところ、残念ながらエラー発生です。

まず、浮動小数点演算関係のエラーがでました。
floatの関数にdoubleの変数を与えたりしているところで出ているようです。先輩のブログでせっかく書いてくれているのに端折った僕のせいですね。自業自得です。書いてあるとおりに設定したところ、そのエラーはなくなりました。

次にsprintf関係のエラーです。こちらも先輩の言うことを聞かなかった僕のせい。まったく恥じ入るばかりです。とにかく何とかするということで、必要なファイルをインクルードしてエラーが出ないようにでっち上げ、なんとかビルドを通しました。

恐る恐るシェーキーに転送、プログラムを走らせると・・・ なんとサーボがあらぬ方向に回ってしまい、あわててスイッチを切りました。うーん、そう簡単にはいかないようです。

テストで作ったシリアル通信やらADやらのプログラムを順次移行して、一つずつ動作を確認しながらやっていく必要がありそうです。じっくり取り組みましょう。

これは、アタマが後ろを向き、カメラが真下を向いてしまったシェーキーさんの残念な姿です。あわててスイッチを切ったからコレですんだものの、下手をすれば壊れていたかもしれません。トホホ

Zannen


STM32F4の開発環境をTrueSTUDIOからEclipseへ乗り換える

以前の投稿にあるように、TrueSTUDIO Liteは32KBのコードサイズ制限がついてしまい、アマチュアレベルでも使い続けるのは難しくなりました。

僕はコード制限なしの古いバージョンをインストールしたままなので、シェーキーのプログラムのように32KBを大きく上回るものも開発できますが、古いバージョンを新たにインストールすることはできないので、クラッシュしたらおしまいです。製品版を購入するにしてもサンデープログラマ向きのお値段でないことも、以前の投稿にあるとおりです。

そこで、先日の週末を丸々使ってEclipseによる開発環境を構築しました。奥さんが土日実家に帰ることになり、丸々二日間、ひとり(と猫一匹)の時間が取れるということで、思い切って挑戦しました。

以前、花岡ちゃんファンさんからMacでの開発環境の紹介をしてもらいましたが、デバッグ環境を構築するのが難しそうなので、オーソドックスにWindowsでの構築となりました。基本的にTrueSTUDIOで生成したプロジェクトファイルのライブラリやTrueSTUDIOのデバッグサーバなどを借用し、IDEとコンパイラ、デバッガを無償ソフトで構築するという、ちょっと怪しい構成になります。まあ、製品開発に使用するわけではないので大目に見てもらいましょう。

参考にさせていただいたのはこのページです。かなり具体的に構築手順を説明してくれているので助かりましたが、それでも満足に動くようになるまで2日間、のべ10時間以上もの時間と、おそらく10本以上のバドワイザーを消費しました。いやあ、ホントに大変でした。
仕事以外でこんなにパソコンに向かったのは、HyperCardの英語版とHyperTalkの英文の入門書をイケショップで買って以来ではないかと思います。かれこれ20年以上前の話ですが。そのコンセプトの斬新さに衝撃を受け、丸2日間、夢中になっていろいろなスタックを作ってました。あの時は楽しかったなあ。

とまれ、現在ではこんな感じで動作しています。

Eclipse

構築時のメモを多少編集したものを、これから挑戦される方のために掲載します。読みにくいですが、ご自身の環境に構築するときの参考になればと思います。構築手順にそって書き出してあるので、上から順に読んでいってください。ただし、環境によってはそのとおりにならなかったり、抜けがあるかもしれません。

【後日訂正】
メモにインクルードファイルの画像が入っていませんでした。また、多少わかりにくいところもありましたので、下のメモの代わりにこちらのPDFを見てください。

「truestudioeclipse.pdf」をダウンロード

メモはこちらから(右クリックで)ダウンロードしてください。

「truestudioeclipse.txt」をダウンロード

【またまた後日訂正】
このインストールだけでは浮動小数点演算やsprintfなどを使ったプログラムが正常に動作しません。おれもやってみようという方は、今後の投稿もチェックすることをお勧めします。そこらへんは今後の課題として逐次投稿していこうと思います。

【またまたまた後日訂正】もろもろを加筆修正した「乗り換えガイド」を作成しました。この投稿この投稿をご覧ください。

« 2012年6月 | トップページ | 2012年8月 »