わがロボットの譜

千葉工業大学、総合工学研究会所属の者です。とりあえず、二足歩行ロボット作成日誌です。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

# SDカードを使ってみる。

ちょっとだけ時間ができたので、大分前に少しやって放置していた、
SDカードを使ってみました。

とりあえず、コレまた大分前に作ったRX62Nの基板で動かしてます。

回路図、プログラムその他いろいろはInterfaceの2011年6月号を参考にしながらやりました。
でも、回路図とか、ググったら出てきm(

プログラムは、そもそもChanさんのFatfsをつかっているので、Chanさんのサイトからサンプルプロジェクトが手に入ったり。
fatfsでググッたら一番先頭に出てきます。わからなくなったらこのサイトをみる。


で、こっからは使用する上での注意事項まとめ。

使うファイルは、
ff.c, ff.h, diskio.h, integer.h, mmc_rspi.cあたり。

今回はサンプルのあるマイコンだったので必要アリませんでしたが、
環境に応じてmmc_rspiのプロプリセッサ部と(プラットフォーム依存)となっている関数は、
プログラムする必要がありそうです。

その他に自前でget_fattime(マイコンの時間を返す、ムリなら適当な値返してもok)と、
1msごとの割り込み関数で、disk_timerprocを呼び出す必要があります。

で、こっからは使用上の簡単な流れ。
とりあえず初期化。サンプルにあったのを参考にこんな感じ?でやってます。
disk_initializeして、f_mountを呼び出せばおk。

ちょくちょく必要になるドライブの番号は何も考えずに全部0にしておけばいい。
複数使いたい人とかはなんかすればいいんじゃないですか。
ただ、ドライブは1つという設定がどこかに書いてあったような。


実際にまだ、プログラムの呼び出ししかやっていませんが、
f_openでフォルダを開いて、f_readで中身を読み出せば完了です。
超簡単!!


パスはルートからのものを書けばいい。
hogeフォルダにあるa.txtを読み込む場合のパスの名前は、
HOGE/A.TXTみたいな感じでできてます。


とりあえず、こんな感じ。
投げやりな感じだけれども、一度記事が消えてしまったせいです。
もともとテキトーにしか書いてないとかそんなこt(ry




スポンサーサイト

PageTop

Makefile上でのインクルードの扱い方…

ROBO-ONEが近い!近い!引退までの最後のROBO-ONEうぉー。

しかし,ココ最近は,研究室のプログラム環境を構築するのにも手こずっていた次第です。

詳しい経緯は面白く無いので省くとして,
以下,Makefileについてのメモ

導入としてはMakefileの解説,コマンドなどに関してはMakefileの書き方がわかりやすかったです。

で,任意の場所のインクルードを参照するのに苦労しました。
まぁなんというか実例がなかったからわかりづらかった。

# インクルードパス
INC = -I/cygdrive/c/boost/boost_1_47
hogehoge.o : hogehoge.cpp
g++ $(INC) -c $@ hogehoge.cpp

みたいな感じでよかった。

環境はCygwinGCCで,C直下にあるBoostライブラリを参照してます。
Windowsとはパスの書き方が違ったり,下位層まで渡してしまうと,内部で他のヘッダを参照するときにひっかかったり…

Makefileの書き方がいいかどうかなんてもおのは超初心者なんでわかりません。

ようやっとスタート地点,
これからプログラム書かなくては…









PageTop

アドレス使ってプログラム


USBCNC?すいませんまだ使ってないです…


なんでも木曜日に、研究室の進捗を話すらしく、まぁ大したことは言わなくていいんですが、
流石に、ここ最近ニートだったんで、仕方なくプログラムを。

で、なんだか今学期の発表は、C++使ってマイコンにモジュール化したプログラムするぜみたいなことを言ってしまったので、、


以下はそんな感じのプログラムの話です。

で、モジュール化する時にまず考えたのが、引数として、対応するレジスタのアドレスを渡さなければいけないと。
あ、使用マイコンはSH7125です。

とりあえずテキトーにモータ関数でも作るかと、MTU20.TGRAにアドレスからアクセスして書き換えようとしてみる。


MTU20のアドレスは0xFFFFC308なんでとりあえず

*(unsigned char *)0xFFFFC308 = MOTOR_CYCLE/2;

と書いて、まぁ上位だか下位のバイトが書き変わってるだろうと、

MTU20.TGRAの値を読みだしてみると0…

で、どういうこと?となる。


ここで"iodefine.h"を見てみる。

unsigned short TGRA;

となっている。
確かに少し違うケド…?
と思いながらとりあえず試してみる。

*(unsigned short *)0xFFFFC308 = MOTOR_CYCLE/2;



きれいにデューティー比50%で出力。
値もきちんと格納されている。



ということで、値を渡すときは対応するレジスタの型を見ろってことですかね。

まぁ、こっちの方が俄然、やりやすいのでよかったんですけれども。。


あとbitでは渡せないので…


フルカラーLEDを制御するのにも、IO三本だから

FullColorLED(unsigned char * red_byte, unsigned char red_bit, unsigned char * blue_byte, unsigned char blue_bit, unsigned char * green_byte, unsigned char green_bit) と長々と。


unsigned charはtypedefで短くできるけれども、変数名は自分としてはこのぐらい分かりやすくしておきたい。


まぁ、ただ恩恵はそれなりにあるはず。

ただ、こんなのが、発表のネタになるのか…?


…うーん。

PageTop

Peripheral Driver Generator 2


昨日、いや一昨日?書いたように感想を書きます。


結局のところ結論はすごく便利です。

なんていうか自分が今までやってきたことをかなり否定されている気分にはなりますが、
プログラムにかかる時間をかなり短縮することができます。

今後はサークルのスタンダードになっていくかも・・・?



おかげでシリアル通信もサクっとできたので、printf関数と格闘してます。
GDLの関数を参考にしているのですが、gotoは自分の中では禁止事項なので少し書き直してます。

%fも実装しようと思います。


ROBO-ONEもあるのでほどほどにやっていきます。

PageTop

限りある資源を大切に


とりあえず、いい加減ひきこもりなだけではダメなのでプログラムをいじる。
現状の加速できない問題を何とかするには世間一般には歩幅を増やしていくというのが一般的なような気がしてみる。

が、現状では、逆運動学を解いた値をプログラムにテーブルとして突っ込んでいるのでそういうことができない。


さて、どうするか。プログラム中で逆運動学を解くようにすると、角度の指令が1度単位になります。

とりあえず、プログラム中の変数を削ってみる。雀の涙。

で、逆運動学をプログラム中で解くように書いたのだけれど、横方向の軌道とか脚の上げ下げとか課題が山積みだったので、結局モータを制御する周期を2.5msから5.0msにすることに。

これで、大体解決。というか応急処置?

早く新しいシステムを作りたいのだけれど、ROBO-ONEがグダグダになってしまうから我慢。

で、新しいシステムについていろいろ考えたことをどうせ忘れるだろうからメモ。

・サーボの番号はenumで
・浮動小数点で角度がでるだろうからキャストするときに四捨五入する
・プログラムは全て初めからcppファイルにしておくように
・classを使ってサーボの角度は制御

とまぁこんな感じで割とフツーに生きてます。
この感じだと結局何もないオチだと。
しかし、後輩たちは割としっかりフォローしてくれてます。なんだかんだで頼りになる。


よし、明日は部室にマシンを取りに行こう。

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。