0

Dontronics uLCD128のカラーコード変換

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){
charsb[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;
returnsb;
}
mainからはこう呼ぶ
charcolor[3]={0xFF,0xFF,0xFF};//RGB
char*sb;
sb=colorToSb(color);//msb,lsb取得
//msb=sb[0],lsb=sb[1]
RGBで分けて書けて良い感じ。(明日実機で試す)

0

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

■コード

SourceCode, hex, Makefile(avr-gcc 3.4.6)

Read more

0

ATmega168でシリアルエコー

8MHz駆動になったmega168で、UARTエコー。

シリアルコンソールで送信した値がそのまま帰ってくる。

ATMega8の時とは違って、受信割り込みに反応して返すのではなくmain()の中のループで受け取って返している。というか受信割り込みから復帰できないので。

今晩中に解決できるといいな…

SourceCode, hex, Makefile(avr-gcc 3.4.6)

Read more

0

AVR – ATMega8でUSARTエコー

UART(USART)の回路がちゃんとできているかチェックする時に使ってるプログラム。

UARTでマイコンが文字列を受け取る。そして受け取った文字をそのままUARTで送り返す。

Arduino+ATMega8で作った15行で書けるけど、avr-gcc+ATMega8だと58行必要になる。

同じ動作をするプログラムなのに。

そういえばWinAVR060421が出ているのにまだ移行していなかった。あとでやる。



SourceCode, MakeFile, Hex (AVR-GCC3.4.5)

Read more

0

Arduino – UART、LED、AD変換を試した

昨日届いたArduino(右)

受け取って1時間で速攻で動作チェックした。

Wiring & Arduino

左は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をやってるインタラクションデザインの教材でもあるので、とりあえずよく使う機能を試してみた。

Read more