アーカイブ
ATmega168でUSART受信割り込み、シリアルエコー
mega168でUART受信割り込みできた。
回路はmega8の時と同じ。
さっきできなかった理由は割り込みベクタ名が間違ってた為だった。
コンパイル結果をよく見ると SIGNAL(SIG_UART_RECV)の所でwarningが出ていたので、avr-gccのフォルダの中のコードをよく読んだらSIG_USART_RECVになっていた。
コンパイラのバージョンというわけではなく、ATmega8のコードではSIG_UART_RECVで通るのでATmega168以降はSIG_USART_RECVに変わったみたいだ。
あとavr/signal.hは廃止されてavr/interrupt.hに統合される模様。
■関連記事
s.h.log: AVR – MEGA8のUART送受信
s.h.log: AVR – ATMega8でUSARTエコー
ATmega168でシリアルエコー
8MHz駆動になったmega168で、UARTエコー。
シリアルコンソールで送信した値がそのまま帰ってくる。
ATMega8の時とは違って、受信割り込みに反応して返すのではなくmain()の中のループで受け取って返している。というか受信割り込みから復帰できないので。
今晩中に解決できるといいな…
AVR – ATMega8でUSARTエコー
UART(USART)の回路がちゃんとできているかチェックする時に使ってるプログラム。
UARTでマイコンが文字列を受け取る。そして受け取った文字をそのままUARTで送り返す。
Arduino+ATMega8で作ったら15行で書けるけど、avr-gcc+ATMega8だと58行必要になる。
同じ動作をするプログラムなのに。
そういえばWinAVR060421が出ているのにまだ移行していなかった。あとでやる。
Arduino – UART、LED、AD変換を試した
昨日届いたArduino(右)
受け取って1時間で速攻で動作チェックした。

左はWiring。
Wiringは結構使った事がある。proce55ingの様に手軽に電子工作を「スケッチ」できる、難しいC言語とかを書かなくても簡単に赤外線やサーボの制御ができたりするツール。最近、avr-libcなどのよりローレベルなライブラリを読み込む事ができるようになって面白い。
ただし、16bitタイマ2つと8bitタイマ1つがWiringに占有されているので、タイマ処理(スレッドの様なもの)が使えない。また、外部入力やUSART受信など全ての割り込みが使えないので、1つのloop()メソッドの中で全てを処理しなければならなくなる。例えば、delay()で停止中にセンサからの入力があっても受け取ることができないのが弱点。ただ、そういう時はCPUを増やす(Wiring/Arudinoを2つ使う)という技でどうにかなる。
→ s.h.log: Wiringでできること、Wiringタグ
Arduinoは、Wiringをベースに、マイコンや部品を人間の手で実装できる物に変えたもので、これも同じくスケッチツール。(部品が大きくてはんだづけしやすく、安い物を使っている)
性能も、できる事も全く同じで、ただしArduinoの方がピンが少ない(つまり制御できるLEDとかが少ない、まあマルチプレクサとかで工夫すればどうにでもなるが)
今学期SAをやってるインタラクションデザインの教材でもあるので、とりあえずよく使う機能を試してみた。
3軸加速度センサ ACA302を使って傾斜を測定
加速度センサーで、重力加速度つまり地球が引っ張るアレをセンシングできます。これで傾斜とか、向きがわかります。
これで俺もMacSaberできる!(やりません)
論文2つsubmitして6時間寝たら明け方目が覚めて、朝9時から授業のグルワでその後研究室で昼寝。
その後ふらふらになりながら、なんとなく1年以上前に買った加速度センサーに挑戦してみた。
マイコンさわるの1ヶ月半ぶりだけど1時間ぐらいであっさり動いた。慣れたもんだ…
→ SourceCode(avr-gcc)&Video
使ったのは、秋葉原のツクモロボット館などで売ってるスター精密のACA302。価格は2000円ぐらい。
普通加速度センサーは1万円とかのが色々あるんだけど、手が届かないのでコレで。アンプ内蔵型なのでコレ単体でAVR atmega8のADコンバータにぶち込めば動くお手軽感がいい。実にPhysical Computing向け。
とりあえず、傾斜を検出する分には問題ない。


最近のコメント