GCCでLPC1343用のバイナリをビルドする
結構前に買ってずっと放置されていたlpcxpresso nxp 1343をそろそろ使ってみる。OSを何度も変更する自分にとってはlpcxpressoIDEのプロダクトコードの入力とかめんどくさいので、GCCでlpc1343のバイナリを作成します。
Lチカサンプルコードと必要なファイルの入手
http://ics.nxp.com/support/lpcxpresso/からLPC1300 Seriesの下のリンクからExample Projectsをダウンロード
適当なフォルダ(ここではblink)を作って、examples.lpc13xx.zipからLチカに必要な以下のファイルをコピー
- CMSISv1p30_LPC13xx/src/core_cm3.c
- CMSISv1p30_LPC13xx/src/system_LPC13xx.c
- CMSISv1p30_LPC13xx/inc/core_cm3.h
- CMSISv1p30_LPC13xx/inc/system_LPC13xx.h
- CMSISv1p30_LPC13xx/inc/LPC13xx.h
- blinkly/src/blinkly_main.c
- blinkly/src/clkconfig.c
- blinkly/src/clkconfig.h
- blinkly/src/config.h
- blinkly/src/gpio.c
- blinkly/src/gpio.h
- blinkly/src/timer32.c
- blinkly/src/timer32.h
あといくつかのファイルを以下のリンクから持ってきてblinkにコピー
- https://github.com/microbuilder/LPC1343CodeBase/blob/master/lpc1xxx/linkscript.ld
- https://github.com/microbuilder/LPC1343CodeBase/blob/master/lpc1xxx/LPC1xxx_startup.c
- https://github.com/microbuilder/LPC1343CodeBase/blob/master/lpc1xxx/LPC13xx_handlers.c
firmware.binをUSB経由で書き込み、動作させるためにlpcrcを用意しblinkに配置
GCCでビルドしたfirmware.binはそのままでは問題があるようでlpcrcでfirmware.binを書き換えないといけない。書き換えるとうまく動作した。よく調べてないので理由はよくわからないけど動いているから問題はないはず。
Makefileはhttps://github.com/vsergeev/mbed-cmsis/blob/master/Makefileを修正した
以下のMakefileをblinkに保存
Makefile
# LPC1343 make Sample PROJECT=lpc13xx_blink OBJECTS=LPC1xxx_startup.o LPC13xx_handlers.o core_cm3.o system_LPC13xx.o blinky_main.o clkconfig.o gpio.o timer32.o LSCRIPT=linkscript.ld OPTIMIZATION= 0 DEBUG= -g # Compiler Options GCFLAGS = -Wall -fno-common -mcpu=cortex-m3 -mthumb -O$(OPTIMIZATION) $(DEBUG) GCFLAGS += -D__RAM_MODE__=0 #GCFLAGS += -Wcast-align -Wcast-qual -Wimplicit -Wpointer-arith -Wswitch #GCFLAGS += -Wredundant-decls -Wreturn-type -Wshadow -Wunused LDFLAGS = -mcpu=cortex-m3 -mthumb -O$(OPTIMIZATION) -Wl,-Map=$(PROJECT).map -T$(LSCRIPT) ASFLAGS = $(LISTING) -mcpu=cortex-m3 --defsym RAM_MODE=0 # Compiler/Assembler/Linker Paths GCC = arm-none-eabi-gcc AS = arm-none-eabi-as LD = arm-none-eabi-ld OBJCOPY = arm-none-eabi-objcopy REMOVE = rm -f SIZE = arm-none-eabi-size ######################################################################### all: $(PROJECT).bin $(PROJECT).bin: $(PROJECT).elf $(OBJCOPY) -O binary -j .text -j .data $(PROJECT).elf $(PROJECT).bin mv $(PROJECT).bin firmware.bin ./lpcrc-linux firmware.bin #$(PROJECT).hex: $(PROJECT).elf # $(OBJCOPY) -R .stack -O ihex $(PROJECT).elf $(PROJECT).hex $(PROJECT).elf: $(OBJECTS) $(GCC) $(OBJECTS) $(LDFLAGS) -o $(PROJECT).elf stats: $(PROJECT).elf $(SIZE) $(PROJECT).elf clean: $(REMOVE) $(OBJECTS) $(REMOVE) $(PROJECT).hex $(REMOVE) $(PROJECT).elf $(REMOVE) $(PROJECT).map $(REMOVE) $(PROJECT).bin $(REMOVE) $(OBJECTS) $(REMOVE) firmware.bin ######################################################################### # Default rules to compile .c and .cpp file to .o # and assemble .s files to .o .c.o : $(GCC) $(GCFLAGS) -c $< .cpp.o : $(GCC) $(GCFLAGS) -c $< .S.o : $(AS) $(ASFLAGS) -o $@ $< #########################################################################
ファイルの修正
いろんなところからファイルを集めてきたのでファイルを少し修正します
スタートアップコードの修正
LPC1xx_startup.cはmain()を呼ぶ前にSystemInit()を呼び出すように変更
38と39行目の間にextern void SystemInit (void);を追加
extern void SystemInit (void);
60と61行目の間にSystemInit();を追加
SystemInit();
リンカスクリプトの修正
linkscript.ldの30行目あたりにMEMORYの記述を追加
MEMORY { flash(rx): ORIGIN = 0x00000000, LENGTH = 32k sram(rwx): ORIGIN = 0x10000000, LENGTH = 8K }
あとはmakeコマンドでバイナリが作成されます。
書き込み
firmware.binの書き込みはhttp://hp.vector.co.jp/authors/VA000177/html/LPCXpresso.htmlに書いてあるのでそれを参考に、USBコネクタ取り付けて、firmware.binを書き込む
やっと動きましたー。やったね!
ここまで書いてあれだけど、こんな面倒なことをしなくてもhttps://github.com/microbuilder/LPC1343CodeBaseに別のサンプルソースコードがあるのでそれ使ってもいいと思います。
エアコンをネットから操作するデバイスを作ってみた
冷房が効いた部屋に入るときの涼しさのために、エアコンをネットから操作するデバイスを作ってみた。まあもう気付いたら秋になってしまったのですが。とりあえず完成したので、公開してみます。
動画はこちら
参考サイトやプログラム
- AVR-Ethernet - スイッチサイエンス
- tuxgraphics.org: Introduction to the tuxgraphics TCP/IP stack, 3rd generation
- RemoteIR
- ELM - 赤外線リモコンの通信フォーマット概要
- PSP IR wave viewer
AVR-Ethernetのページにのっている回路を参考に赤外線LEDを追加したものです
コードはtuxgraphics.orgのeth_tcp_client_server-4.3をベースにRemoteIRを追加したような感じになっています。
webから操作
iPhoneなどから操作出来るようになっています。これで外出先からでもエアコンのon/offが可能。
ダイキンのエアコンに対応させる
自室で使っているエアコンはダイキン製で当然RemoteIRは対応していません
テレビのリモコンのフォーマットはすでにいろんなサイトで情報が載っていますが、エアコンのリモコンはテレビとは違うもフォーマットなので、いくら調べても情報が出てきません。
そこでまずリモコンから出ている信号の解析から始めました。ロジックアナライザがあれば簡単に解析できそうですがロジックアナライザは持ってないので、他に解析する方法はないか調べたらPSP-1000で動作するPSP IR wave viewerを発見。これを使ってリモコンの信号の解析をしました。
これをPCに取り込んで信号を解析してみると、テレビのリモコンのフォーマットに似ていた。フォーマットは似ていたのでRemoteIRをちょっと改造してリモコンがら出ているデータと同じ信号がでるようにしてやるとうまくエアコンが動いてくれました。これで赤外線系は完成。メーカーによってフォーマットが全然違うから他のエアコンに対応させるのはちょっと大変だ。
ソースコードはGithubにUPしてみました。
https://github.com/strobo/eth_air_controller
ちなみに開発環境はFedora15 avr-gccのバージョンは4.5.3
あとMake: Tokyo Meeting 07行きたい
sparkfunのBluetoothモジュールBluetooth Mateのメモ
大阪の日本橋に行ってきたときに衝動買いしたBluetooth MateをUbuntu11.04と接続してみる。忘れないようにメモしておく。
参考サイト
- sparkfunのBluetooth Mateのページ下のDocuments
- Ubuntu/Bluetoothシリアルポート - DebugIto's
- SparkFunのBluetoothモジュールのコマンドモードへの接続手順です。 | dietposter's blog
BluetoothMateはデフォルトでSPPスレーブとして動作します。
ubuntu11.04で接続した時のメモ
rfcomm bind 1
このコマンドでBluetoothMateと接続
- /dev/rfcomm1を使って通信できます
- 電源投入後60秒間コマンドモード移行待ち状態でその間にペアリングして"$$$"と送信してやるとコマンドモードに入り設定の変更ができます。コマンドはRN-41 AT Command Set(PDF)を参照。
- 60秒過ぎると"$$$"でコマンドモードには入れなくなる。
- コマンドモードから抜けるには"---
" - ビットレートはデフォルトで115200
- UART経由でも"$$$"でコマンドモードに入れる。こっちはいつでも"$$$"でコマンドモードに入れるみたい。ただしbluetoothでどことも接続していない時のみ。
screen /dev/rfcomm1 115200
この方法では接続できなかった。参考サイトの「Ubuntu/Bluetoothシリアルポート」のように、minicomを使えばうまく接続することができた
LEDライトなどを考えてた
わりとどうでもいい話です。chanさんのサイトでタッチセンサの実験というページを見つけて何か面白いもの作れないかなと思い、気づいたらGoogleSketchUpでこんなLEDライトをモデリングしてた。
操作方法(上から見たときの図)
USBから電源を取ってリチウムイオンバッテリーに充電し、3つのLEDを点灯させる。
タッチセンサとフィルムまでの間に薄い板があってもちゃんと反応するのかはテストしてみないとわからないなあ
このライトをAmazon.co.jp: JOBY ゴリラポッド GP1: 家電・カメラに取り付ければ意外といい作業用LEDライトになったりして
リニア・鉄道館に行ってきた
3/14に開館したリニア・鉄道館に行ってきました。やはり春休みの土曜日とあって人は多かったです。12:00時点で駐車場に入る車の列が出来ていましたが入場待ちはなくすんなり入ることが出来ました。
リニア・鉄道館
N700系シミュレータや在来線シミュレータは抽選で選ばれるようになってました。私は残念ながら外れてしまいました。N700系シミュレータは本格的。180°スクリーンで結構な迫力がある。抽選に外れても後ろから見るだけなら誰でもOK。それと在来線シミュレータは完全に某ゲーム「電車でG○」
あと鉄道ジオラマは入場待ち30分だったので見送り。
正面から撮った写真はググればいくらでも出てくるから。あまり誰も撮らなさそうなところを撮ってきました、下の方ばっかり撮ってたからちょっと睨まれてたのは内緒だ
100系の下面 ちょっとこれは撮影に失敗気味
もっと撮りたかったんですが、途中でカメラのバッテリーが切れてしまった。
その他の写真はFlickrにアップしています。全30枚
Flickr - リニア・鉄道館
mbedエディタの対応する括弧を強調する機能を追加
始まりはこのツイート
うむ、やってみるか。なんとか出来そうな気がしたので作ってみた。だいたい2日ぐらいで完成
そんなわけで、できました! mbedEditorFontChanger ver0.4
mbedエディタに対応する括弧を強調表示する機能を追加しました。
Chromeの機能で自動アップデートされるはずですが、うまくアップデートされない場合は再インストールしてください。
ダウンロード : mbedEditor++
コメントの内の括弧を選択したときにコメントの色が黒になってしまうバグがありますが、スクロールでもとの色に戻るので大きな影響はないと思います。
強調する色を何色にしていいかわからなかったので私の独断で#9eff9dになっています。リクエストがあれば変更します
括弧を強調表示する機能を追加したら一気にコードが大きく、そして汚くなってしまった。バグはコード公開するから誰か直して(オイ
5/17
コメントの色が黒になるバグを修正。
名前を変更 mbedEditorFontChanger -> mbedEditor++