アーカイブ

‘AVR’ タグのついている投稿

avr-gccのレジスタ操作で16進数とか使わない方法

2007 年 3 月 2 日 moblog コメントはありません
カテゴリー: 未分類 タグ: , , ,

最近出たこの本、すごくいい。

マイコンもATmega168で最新だし、gccでのコードが載っているのでよくわかる。

AVRマイコン活用ブック―オリジナル電子ゲーム&ロボット製作
松原 拓也
電波新聞社 (1982/01)
売り上げランキング: 23347

でもIOの操作で16進数とか使うのがあんまり好きじゃない。別にどう書いても動けばいいんだけど…

PORTB = 0×21;

とか。0×21、つまり10進数の33を代入しているので、PB5とPB0のピンを出力に設定しているという事だ。

でもこう書いたほうが好きだな。

PORTB = _BV(PB5)|_BV(PB0);

それかアセンブラ風にこういうのも好き。

sbi(PORTB,PB5);
sbi(PORTB,PB0);

こういう書き方の方が16進数慣れてない人には見やすい。ピン配置とプログラムをある程度柔軟に変えやすいのが近代的。(PB0からPB3に変えるのも、エディタの置換で一発だ)

どうなってるのかというと……

続きを読む…

トランジスタでUARTを分岐させる

2007 年 1 月 9 日 moblog コメントはありません
カテゴリー: 未分類 タグ: , , ,

普段使う20ピンや28ピンのAVRには、UARTピンが1組しかない。64ピンとかになれば2組とか付いているけど。

んで昨日からDontronicsのUARTかUSBで制御できる小型LCDをいじっているんだけど、いつもシリアル通信でデバッグしているのに、UARTがLCDに占有されているせいでデバッグができない。

仕方ないので、信号用のトランジスタ2SC1815と10kΩの抵抗を使って、UARTセレクタ(分岐させる回路)を作った。

usart selectorusart selector

続きを読む…

Dontronics uLCD128のカラーコード変換

2007 年 1 月 8 日 moblog コメントはありません
カテゴリー: 未分類 タグ: , , ,

Micro-LCD 届いたので使ってみた。 (hatayanlog)
Dontronics :: 4d-Micro-LCD Old
畑山さんにもらったDontronicsの小型LCDを動かしてみた。シリアル通信で液晶画面を制御できる。
uLCDの仕様では、色をrrrrrggggggbbbbbの計16bit(2byte)で赤緑青を表すようになっているので、2byteをmsb,lsbというそれぞれ1byteのデータに分け、シリアル通信で別々に送らなければならない。
緑が丁度真ん中で割られてしまう。しかもなぜか緑だけ6byte。
んでカラーコードの扱いが面倒臭かったので変換するコードを書いた(まだ試してない)
試した。やっぱりちょっと間違っていた。
変換用関数(avr-gcc)

char *colorToSb(char *color){
  char sb[2];
  // msb
  sb[0] = (color[0]&0b11111)<<3 // RED
    + (color[1]&0b111000)>>3; // GREEN-A
  // lsb
  sb[1] = (color[1]&0b111)<<3 // GREEN-B
    + (color[2]&0b11111); // BLUE;
  return sb;
}
mainからはこう呼ぶ
char color[3] = {0xFF, 0xFF, 0xFF}; // RGB
char *sb;
sb = colorToSb(color); // msb,lsb取得
// msb = sb[0], lsb = sb[1]
RGBで分けて書けて良い感じ。(明日実機で試す)

3軸加速度センサ KXM52を使って傾斜を測定

2006 年 12 月 29 日 moblog コメントはありません
カテゴリー: 未分類 タグ: , , , , ,

半年前にACA302という加速度センサを試したが、秋月電子で手に入らなくなった(取り扱い品がACA302からACB302になった)ので、樹に薦められたKXM52-1050モジュールを試してみた。

ACA302は3.3Vを作らなければならなかったが、KXM52の動作電圧は2.7~5.5Vそのままで動くし、ノイズも全然無いのにACB302より200円安く、感度も6倍でいい感じ。Pileus2号機に採用する予定。

そういえば最近ACB302は2000円から1000円に値下げになったけどね

■とりあえず動かしてみた

SourceCode, hex, Makefile(avr-gcc 3.4.6)

ATmega168のADC0,1,2でX,Y,Z軸の出力値をAD変換し、文字列に変換してUARTでPCに送っている。



x,y軸の値は通常520ぐらいで、傾けると730~300ぐらいの間で変わる。これは重力加速度を検出しているということ

続きを読む…

ATmega168でUSART受信割り込み、シリアルエコー

2006 年 12 月 23 日 moblog コメントはありません
カテゴリー: 未分類 タグ: , ,

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エコー

■コード

SourceCode, hex, Makefile(avr-gcc 3.4.6)

続きを読む…

track feed