日々の記録

ほどよく書いてきます。

Arduinoのアセンブリコード

2012年11月30日 01時55分27秒 | その他雑記
Arduinoでビルドすると
C:\Documents and Settings\m\Local Settings\Temp\build774246243351763603.tmp
といった場所に一時ファイルがずらーっと出ます。
私はユーザー名が「m」でログインしているので、上記アドレスです。

Arduinoの吐き出すコードを最適化したいと思ってアセンブリコードをみたいなと思った次第。
elfファイルを見たらいいと思ったがうまく文字が表示されない。

調べたところ
avr-objdump -S Blink.cpp.elf > list.txt

こんなコマンドを入力すれば良いらしいとココに書いてあった。

elfファイルは一つしかないし、汎用性を持たせたかったので、

make_assembly_list.cmd

なるバッチファイルを作って
avr-objdump -S *.elf > list.txt

と書き込み、ポチッとな。

ほかのフォルダにこのバッチファイルを持っていてポチッとしても同じようにlist.txtに内容を吐き出してくれます。

が、アセンブリコード見ても理解できない。delayとかのコードが気になったんだけど結構短いぜ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduino IDEでATTiny45などに対応したhexファイルを作成する

2012年11月27日 00時24分33秒 | その他雑記

対応デバイスはATtiny45, ATtiny85, ATtiny44, ATtiny84
内蔵1MHzクロック、内蔵8MHzクロック、外部20MHzクロックに対応している。

http://hlt.media.mit.edu/?p=1695

に記載があるが、転記。


必要なもの
Arduino 1.0.1
ATtiny zip

ATtiny zipを解凍するとattinyフォルダがある。これをarduinoのあるフォルダ、hardwareのフォルダに移動させる。
これで終わり。

あとはarduino IDEを起動するとツール、マイコンボード、とたどり、attiny45などがあれば準備OK。

ちなみに、arduinoはATmega328などをベースにしているので、attiny45など8pinのマイコンにするときにはピンの番号に注意。

arduino-1.0.1\hardware\attiny\variants\tiny8
にpins_arduino.hというファイルがあり、こいつを見ればピンの番号などが分かります。

attiny44とか売ってるところ見たことないので、私はこの部分を削除しました。

arduino-1.0.1\hardware\attiny\boards.txt
のうち、後半attiny44などが書いてある部分を削除してしまえばOK。

なお、改行コードがおそらくLFだけなので、メモ帳で開くと改行できずに困る。ファイルを右クリックしてプログラムから開く、ワードパッドを指定するとちゃんと改行されます。


肝心のhexファイルはarduino ISP経由で書き込むか、私はデジットのAVRWRTを使って書き込むかしましょう。
hexファイルそのものは、tempファイルにあります。
arduinoのファイル - 環境設定 - より詳細な情報を表示する にチェックを要れ、「検証ボタン」を押すとどのフォルダに保存したのか分かります。

私はarduino UNOのボードを持っていて、ATmega168に書き込みたいなと思っていろいろ探してこんな所にたどり着きました。ATmega168のヒューズビットの変更はできないけど、LilypadのATmega168が8MHzで動作するので、hexファイルはこいつを経由して作り、AVRWRTでヒューズ書き換えなどして使えるようにしました。

boards.txtをいじって、F_CPUの数字を変えちゃうってテもありますが。


AVRマイコン、なぜか8ピンのATtiny45よりもATmega168など28ピンのもののほうが安い。不思議だね。よほど小さくしようと思わない限りATmega使った方が便利かもわかりません。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

digit AVRWRT2 が壊れた

2012年11月25日 19時10分50秒 | その他雑記

最近Arduinoばっかりいじっていたが、Arduino IDEが吐き出すHEXファイルをそのままAVRマイコンに書き込んでみようと思い立った。
AVRへの書き込みはdigitのAVRWRTを使っているのだが、書き込めない。5Vの供給もちゃんとしているのに書き込めない。

以前も同じような現象に見舞われたのでAVRWRTは2台持っていたので何が壊れているのか検証することにした。
箱に入っているものはflashの内容が読み込めるが、書き込めない。
箱に入っていないものは正常。

オレンジのシールが貼ってある部品(ATTiny2313)が壊れているのかなと思って差し替えたらうまく言ったのでtiny2313の故障と判明。

しかし、読み込めるのに書き込めないってなんなんだろか。


オシロスコープで書き込みの時の波形を見てみると、書き込めないやつはSCKの波形が途中で止まっちゃう。書き込みのクロック供給できないんじゃそりゃ止まっちゃうわな。

さて、aruduinoで生成されたhexファイルを無事にAVRマイコンに書き込むことが出来たのだが、ちゃんと動くだろうか。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

マイコン

2012年11月22日 00時41分08秒 | 電子工作
マイコンに手を出して1年ほどになる。
始めにマイコンを買ってから6年ほどになる。5年ほど寝かせました。

初めはCコンパイラがなくて、意味も分からずアセンブラだったのだが、ATMELのAVR Studio6.0からVisual Studioベースの開発環境になり、WinAVRを後から入れなくてもCコンパイラが付いてくるようになった。

そのC言語もよく分からない&レジスタ設定がよく分からないで放置していたが、Arduinoというマイコンボードが簡単そうだったのでこれから手を付けてみた。
Arduinoは環境設定などが簡単に済んですぐにプログラムが作れるようになっていて便利。PWMの設定を・・・なんて考えずにAnalogWriteを使えばおしまい。

というわけでマイコンに少しずつ慣れ親しんできたら、おもしろくなってきてマイコンを買い足した。

32ビットマイコン:STM32ディスカバリ(なんと1000円以下!)、STBee mini、NXP LPC1114(トラ技のオマケ)
8ビットマイコン:Arduino UNO R3, ATTiny2313, ATMega168などATMELの製品。

32ビットマイコンは動作周波数が48MHzとか高速だし、演算も速そうなのだが、使いこなせないだろうと思う。ROMの容量はたくさんあるので結構複雑なプログラムが作れるだろう。

8ビットマイコンのほうは、ピンのIOレジスタがわかりやすいので便利。ArduinoはATMega328を搭載しているので基本はAVRマイコン。AVRのレジスタ設定のコードがそのまま使えたりと便利。


マイコンの動作はすべてプログラムで書かれるが、こいつがなかなか難しい。計算とかなら別に問題ないんだけど、スイッチの長押しとかダブルクリックとか、シングルクリックをどうやって検出するかといったところから考えるから結構難しい。

ボタンが押されたら割り込みをかけ、タイマを設定し再度割り込ませる。タイマで割り込みがあったときにボタンがまだ押されて要る状態なら長押し、、、とか?ダブルクリックのようにボタンから手を離すモーションを検出できない。
チャタリングの問題もあるので、タイミング考えずに適当に作ると意図しない動作になる。

とまあ、そんなのを考えつつプログラム作るのはなかなか楽しいですね。


PICは昔友達にもらったけど全然手をつけてないや。
コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする