2012年11月1日木曜日
M41T62 RTC w/ Arduino example
めずらしくどこにもなかったので作ったが,まだ DS1307 のライブラリに少うし手を入れただけ.
2012年9月20日木曜日
Eclipse/Mac OS X で ARM Cortex-M4 のコードをコンパイル
コンパイラ,リンカ,デバッガ等は
http://cu.rious.org/make/compiling-the-arm-cortex-m4-toolchain-yourself/
のオプションそのままでより新しい binutils-2.22, gcc-4.7.1, newlib-1.20.0, gdb-7.5 でビルド.
ボード組み込みの ST-Link/V2 を使うためのコマンド st-link/flash by jnosky を
http://cu.rious.org/make/stm32f4-discovery-board-examples-on-linux-and-mac-os-x/
make コマンドでのコンパイル,バイナリイメージの作成はできるようになったが,Eclipse の GNU Cross ツールでのマネージドビルドがなかなかうまくいかず苦労する.
理由は
1)ライブラリのディレクトリ構造が単純でなく,USB のコードなどは HOST か Device かでソースコードを選ぶ(同じ構造体でもメンバが入れ替わる)必要があったり,ユーザーコードのヘッダをライブラリのヘッダファイル側からインクルードしたりするので,Makefile を参考にちまちま選ばねばならず,IDE で便利になっていない気が.
2)スタートアップ(ブートストラップ?)用のアセンブラコード stm32f4xx_start.s がアセンブルされず正しいイメージファイルができない.理由は,拡張子が大文字 .S でないと GNU assembler のコードとして認識されないからだった.手動で *.S を登録しようとしても拒否される.しかたないのでファイル名の .s を .S か .asm に変更すると,アセンブルされ動作した.ファイル名の大文字小文字を区別しない OS の関係なのか,バグのようだ.
Makefile を使うのであれば,Eclipse はプログラミング用テキストエディタでしかない...なにも考えずデバッガまで動く IAR の試用版でしばらくやったほうがいい気が...
デバッガを使わないレベルが対象とはいえ Arduino/Arduino IDE の優れている点がよく理解できる.
一方 LPCxpresso ボードと IDE 無償版は,Linux, Mac OS X 対応.
デバッガもそのまま動き,作れるコードサイズもそこそこ大きくいいのだが,C++ はサポートしないしプラグイン等使えないので Eclipse ベースである魅力が半減.
がんばって C++ を使えるようにしたり Arduino 互換を目差したライブラリが作られていたりするようだが,これも Eclipse の設定で結構疲れそう.すでに少なくない自家製 Arduino ライブラリコードを使い回すのがむつかしそう.LPCxpresso は秋月で購入できリーズナブルで Ethernet もトランスコネクタだけでつけられて(LPCxpresso 1769)よかったのだが..
Cortex-M3 だが STBee/STBee-mini は DFU 書き込み(dfu-util).その他 DIP 版 LPC1114 (Cortex-M0)等でおすすめされる USART 書き込みなどは,普通にターミナルの shell 上で make するのとかわらないので,使う必要があるときに使うことにする.
LeafLab Maple はライブラリ,IDE のアップデートが Arduino 0023 相当でとまっている.自家製ライブラリは Arduino 1.0 系で書きなおしているので,今後のアップデートを期待する.
2012年9月9日日曜日
ST-Link w/ Mac OS X
に解説がある.ただし pkgconfig, automake, autoconf も port でインストールする必要あり.
sglib というのを使わないよう,長くなっているが make にオプションをつけるのを忘れない.
LIBRARY_PATH=/opt/local/lib C_INCLUDE_PATH=/opt/local/include make CONFIG_USE_LIBSG=0
2012年9月5日水曜日
FXMA108はプルアップ/ダウン不可で I2C には使えない
Pull-up/Pull-down Resistors
Do not use pull-up or pull-down resistors.
2012年9月3日月曜日
dfu-util で STBee mini (STM32 CM3) に .hex を書き込む
2012年8月30日木曜日
ミニ液晶ディスプレイ
コントラストの値は少し小さめ(22 等)がよいようだ.
2 mm の基盤に足を広げてさして回路をつけたが,折れたりとれたりしないか不安になる.1x0円ぐらいでブレイクアウトボードがあればいいのに.ついでに I2C 3.3V/5V 変換チップの場所もついていればもっといいのに.
2012年8月26日日曜日
ATmega644/1284 Arduino variation "Quaranta"
それで Arduino Mega にうつそうかと思ったらボードが大きすぎるしSPIとI2Cのピン位置が違うのでISPコネクタでSPIを使うタイプのシールドしか使えない.当然「互換ボード」の類はバスのライブラリがないとかプログラミングをウェブのフォームでさせられるとか,Windows でやらんといかんとか,イーサネットの専用シールドがいるとかで,もっと無理.
フラッシュRAMとかI/Oの規模は 644 でいいのだが Sanguino はピン配置の互換性を無視しているし新 IDE の対応など更新もとまっているのでやっぱり使えない.それでむかし 644p を mega 用ユニバーサルシールドにくっつけた自家製ピン互換ボードを使用することにする.しかたがないので自家製 hardware variation ファイルを作った.
github.com/una1veritas/Arduino/tree/master/hardware
Ethernet もSD Card も WIZ812 モジュール,Adafruit モジュールで外付けすることにする.Arduino 標準ライブラリはいろんな人の作ったライブラリをまとめていて古い部分もあるので,CS でデバイス選択をするしくみなどで手直しが必要になる. RTC も SRAM もつないで,まったく SPI バス祭り.
2012年8月24日金曜日
Old Arduino Ethernet Shield あるいは W5100 のワナ
よく Ethernet Shield が SPI を使うので他の SPI デバイスは使えなくなります,という説明を見たが,そんなはずはないわけで.単なるチップのバグではないか.
Ethernet Shield も V5 などからはアプリケーションノート W5100_AN_SPI.pdf のおすすめに従い,/SCS から SEN に not ゲートをかましている.
ひどい.どおりでいろいろ動かないわけだ.
2012年7月29日日曜日
Mifare Classic と FeliCa FCF 同時対応
サービスコードの違うバージョン?やバイトオーダーが仕様書と違う記載があったりしたが,結局 PN532 のスルー通信コマンド InCommunicateThru で FeliCa カードの仕様書通りのコマンド送信とレスポンスを実装して,
(1) Polling をシステムコード ANY 0xFFFF ではなくEdy/FCF の 0x00FE でかける.Suica 系は ANY でも読めてしまう...Edy つき FCF カードは Edy が読めれば FCF も読めるということだろうか.
(2) そうすると Service Request で FCF のサービスコード 0x1a8b が確認できる.最初に見たページのいくつかでは Edy は 0x1317 ? だったが,手持ちのカードではサービスがなかった.別のページのソースコードにあった 0x170F でやっとサービスを確認できた...
(3) そして Read Without Encryption で 0 番から数ブロックを読めばいいのだった.FeliCa カードのコマンド仕様どおり2バイトのブロック番号指定で最初のバイトの msb はビットをたてるから 0x80, 0x00, 0x80, 0x01, ... となる.
これで,やっといまだに半角カナ文字が使われている世界にたどりついた.
しかし仕様を公開しない,SDKでお金をとる,というのでセキュリティがはたしてまもれるものなのか...世界中でつかわれ,かつ脆弱という主張がある Mifare Classic でも,いまだ電子チケットシステムがやられたという話はきかないけれども.
次期チップは NXP と SONY で共同開発するという話もあるようなので期待したいですね.
2012年7月3日火曜日
Mifare と Felica 同時対応
Mifare の UID とデータセクタの読み書きは,これまでサンプルコードもライブラリも拾ってこれるし,StrongLink 社ほかの安価なリーダでできていた.Felica もスイッチサイエンスなどがリーダモジュールなど販売していて SONY のサンプルコードなどがあるようだった.しかし,欧米では Felica はほぼ使われておらず,日本では Mifare がマイナーであるため,両対応のNFCの情報はとぼしかったのだ.
今回はPN532のユーザーマニュアル?とアプリケーションノート AN10609_3, PN532 C106 をもとにして,というかよく見たら Felica reader としてのコマンドサンプルが載っていたので,Adafruit の I2C PN532 ライブラリを参考にしながら自家製ライブラリを作った.GitHub の Arduino-sketches の libraries の RFID_PN532_I2C がそれだ.
これで両方に切り替えながらカードを検知すれば,両方式対応のカードリーダーができるであろう,きっと.
2012年6月17日日曜日
現実に帰納法の証明をつけパラドックスと喜ぶ人々
「ご冗談でしょう,ファインマンさん」には,「彼らはさんざん考え議論して証明できると『うんうん明らかだ』とうなずきあっている.彼らが一生をかけたとしてもできることといえば,明らかなことだけなのである」とある.これは clear という言葉の意味を使ったイヤミだが,実際そういう傾向がある.
数学を愛する方々がお好みの「たのしいお話」の一群に,帰納法を使った「パラドックス」がある. 「人間みなハゲである」,「ごはんは何杯でも食べられる」というのを帰納法によって証明できる,というものである.Wikipedia によればギリシャ時代からあって欧米では Sorites Paradox と呼ばれるそうである.
「頭に髪の毛をいっぱいはやしている男はハゲではない.さて,毛を一本抜いたところでハゲではない男がハゲになることはない.だがしかしながらこの作業を続けるとハゲになるのは明らかではないか.」
「砂粒が山とある砂の山から,砂粒を一つ二つ取り去っても,砂の山であるのにかわりない.しかしこの作業を続け砂粒一つになれば,砂の山ではないではないか.」
これらのいにしえの問答のネタを数学的帰納法の証明に使って,「何本抜いてもハゲにならない」とか,「ごはん(米)はどれだけ食べてもおなかがいっぱいにならない」という話にすると,おもしろいのだそうである. そんなことよりギリシャやローマ時代から男性にとってハゲというのが悲哀の源であるのに変わりがないということのほうが興味深いと思うが,それはいいとしても.
sorites paradox は,ハゲとか砂の山といった言葉の曖昧さからおきる逆説だということになっているようだが,そんな数学は不完全な理論体系である,的な小難しいしかしわかりきっている議論をする必要すらないと思われる. というか,数学屋は,不思議でも何でもないことを,パラドクスと呼んで不思議がってよろこんでいるだけだ.
1.「ごはんはどれだけ食べてもおなかいっぱいにならない」
主張:
「今,おなかいっぱいではないとする.このとき,ご飯(米)を一粒を食べてもおなかいっぱいにならない.
すると数学的帰納法により,ご飯をどれだけ食べても,いつまでもおなかいっぱいにならないではないか!」
あたりまえだ!
ご飯を一粒ずつ食べていたら,いつまでも,おなかいっぱいにはならない.やってみたらわかるだろう.ご飯(米)以外のものを隠れて食べたら当然おなかいっぱいになるから,まあ2〜3日ご飯ばかり食べてみればいい.ご主張どおり,ご飯を一粒ずつ食べてもらう.ネットで調べると,茶碗一杯で3200〜3800粒ほどであるらしい.訓練すれば,くっついてかたまりになっていても1秒に一粒ぐらい確実に食べられるだろう.ご飯茶碗一杯ではカロリーもたりぬだろうから,一食ごとに2〜3杯食べていただく.一食につき2〜3時間かかることになるだろうか.ほかの生活は,夜寝るとか仕事とか,普段通りにしていたら,食事の時間が足りずにどんどんひもじくなっていくだろう.
一粒ずつ食べるなんて,と自分でした主張に自分でけちをつけるなら,「ご飯を一杯食べてもおなかいっぱいにならない」と修正してみたらいい.非常に多くの人が主張には時によって同意できないと言うだろう.
生物は,代謝する(定義).生きていればエネルギーを消費するし,エネルギーを得るために食べて消化する.食べるのにも,消化するのにも,時間がかかるのである.ファーブル昆虫記に,ヒジリオオフンコロガシ(スカラベ)の食事の観察が出てきたと思う.食べているそばから排泄するらしい.多くの野生動物は,いつも食べ物を探している.
数学は,時間の概念がないので,現実の話ができないのである.
2.「抜き打ちテストはできない」
主張:
「論理学の集中講義について,こんな掲示がされた:『来週月曜から金曜までのいずれかの日に,テストを抜き打ちで行う.その日をテストが行われる前にあらかじめ知ることはできないから,授業の期間中毎日しっかり勉強しておくように』.
これをみてある論理学が得意な学生が言った.『この抜き打ちテストは実施できない.木曜までにテストがなければ,金曜に行うことがあらかじめわかってしまうから,金曜にはできない.水曜までにテストがなければ,金曜にはテストができないから,木曜にするしかないことがあらかじめわかってしまい,木曜にもできない.同様に,水曜,火曜,そして月曜もできない.したがって,このような抜き打ちテストは不可能である.』
そうして安心していたところ,木曜に突然抜き打ちテストが行われた.」
あたりまえだ.まず抜き打ちテストが行われる日をあらかじめ知ることはできない,というのは,テストの日をテストが行われる前に論理的に導くことはできませんよ,ということであって,だから学生の結論「抜き打ちテストは実施不可能」という結論は,どの日にもテストが予想できない,という追認の結論を曲解しただけ.
論理的でなければ,あらかじめテスト日を予想をして,必ずあてることが可能である.これは,のむらしんぼ著「とどろけ一番」のプロテス3兄弟の奥義「トリプル答案固め」を応用すればいい.
集中講義も履修者は5名ぐらいはいるだろう.履修者を5名つのり,それぞれ月,火,水と一日ずつ予想することにする.すると,5人のうち一人は必ず「予想した日にテストが行われるので,前日にだけ勉強をすればいい」のだ.(それにしても,いくら誰も満点を取ったことがないほど難しいからといって,試験中に会話をしないでほしいプロテス三兄弟..)
そもそも,この学生の論理で,金曜に抜き打ちのテストができないのは,木曜までにテストをしなかった場合だけ.木曜にテストをした場合,金曜はテストをしなくていいし,逆に抜き打ちでもう一回してもいいのである.テストが行われないまま金曜になった場合には金曜にテストをすると抜き打ちにならないというのは事実だが,それを金曜になる前に,水曜,火曜に,勝手に常に成り立つ事実として使うのはおかしい.
数学は,時間の概念がないので,現実の話ができないのである.
2012年5月20日日曜日
Arduino のプログラミングを自宅で(ステップ2)
Win AVR クロスコンパイラキットの導入
Arduino IDE にもコンパイラなどが含まれていますが,コマンドとして認識させるためのパスの設定に手間がかかるので,パソコンに詳しい人以外は, 別に WinAVR という Atmel 社のマイコン用の GNU C コンパイラや必要なツールが一つにまとめられたソフトウェアパッケージをインストールすると便利です.インストーラ形式になっているので,現時点の最新版をダウンロードしてインストールします.
インストールすると,Windows のコマンドプロンプトで avr-gcc コンパイラなどが使えるようになります.特製 Makefile のコピー
これで UNIX で行うのと似たような手順でプログラミング,コンパイル,Arduino へのアップロードができますが, コンパイルの時に動作クロックや対象チップ名が,リンクの時にアップロード可能な形式のバイナリファイルへの変換が, またアップロード時に使用するCOMポートの指定などが必要で,いちいち間違えないようタイプ入力するのが大変です. そこで,次の Makefile を作業するフォルダ(ディレクトリ)にコピーします. この Makefile を使ったプログラミングとアップロードの作業は,次のようになります.-
1. 作業するフォルダ(ディレクトリ)を作り,メモ帳などのテキストエディタでプログラムのファイル main.c を書き
そのフォルダに保存する.ファイル Makefile もそこにコピーしておく.
※WinAVR をインストールすると,テキストエディタ Programmers NotePad もインストールされる. メニューは英語だがそちらのほうが便利. - 2. コマンドプロンプト(スタートメニュー > すべてのプログラム > アクセサリー > コマンドプロンプト)をひらき, cd コマンドで作業フォルダへ移動する. マイドキュメント の中のディレクトリなら,cd ¥Users¥ユーザー名¥Documents¥ディレクトリ名 になる.
-
3. make とタイプしリターンキーを押す.make コマンドが Makefile を読んで,main.c をコンパイルする.
成功すると,main.elf, main.hex などの機械語ファイル,アップロード用プログラムファイルができるのでファイルリストをとって確認する.
- 4. プログラムする Arduino を USB ケーブルで接続する.接続した Arduino のCOMポート番号は,あらかじめしらべて控えておく. Arduino UNO の場合は make upload.uno.COM番号 とタイプしリターンキーを押す. Arduino Duemillanove の場合は make upload.due.COM番号 とする. プログラムが Arduino にアップロードされる.Arduino ボードのシリアル通信LEDが点滅し,コマンドプロンプトにはアップロード作業の進行状況を報告する表示が出る.エラーなく終了したら,成功しているはず.
ftp.gnu emacs ダウンロードサイト
2012年5月18日金曜日
Arduino の C やアセンブラプログラミングを自宅で(ステップ1)
Windows PC の場合
大学の演習端末などは Linux など Unix 系であることが多く,学生用に販売されている PC も二つ以上 OS がインストールされ Linux が選択できることがあります. しかし,普段使わない人が Linux を使うのは面倒が多くメリットも少ないので,Linux なれしたこだわりがある人以外は,Windows でやった方がいいのです.どうしても emacs や X window を使う必要がある場合も Windows で動かすことはできます. メーカーが配付しているソフトウェアも,Windows 用が基本です.Arduino IDE をダウンロードしてインストールする.
Arduino を使うときに最初に使用する,Arduino IDE は,簡単なスケッチで動作を確認したり,シリアルポートの番号をしらべたり, シリアルターミナルで Arduino の print 出力を見たりと便利に使えますし,コンパイラ gcc/g++ やプログラムのアップローダ avrdude を Arduino 専用にもっていますので,とりあえずインストールしましょう. 最新版はバージョン 1.0 です.大学で使っているもののバージョンと違っても,最新版にしておいたほうがよいでしょう.ダウンロード http://arduino.cc/en/Main/Software
圧縮ファイルを展開して,フォルダごと Program Files (Windows 7 の場合 Program Files (x86) が適切な場合があります)にコピーして入れてください.フォルダの中の Arduino.exe を開いて起動してみてください. ためしに,短いスケッチをコンパイルしたり,アップロードしててみてください.File > Examples > 1.Basic > Blink
Arduino を初めて USB ケーブルでつなぐと,ドライバのインストールを求められます. コピーしたフォルダに driver というフォルダがあってドライバはそこに入っていますから,マニュアルインストールが必要な場合は,そこから選んでインストールしてください. Arduino IDE でアップロードができたら,自分でコンパイルしたプログラムもアップロードできるようになったということになります.2012年4月16日月曜日
マイコン・エレクトロニクス入門パック用パーツのメモ
330Ω x8, 1kΩ x4, 4.7kΩ x4, 10kΩ x4, 1MΩ x1
可変抵抗 10kΩ
knob つき半固定 または パネルマウント linear 0.2" pin-point legs
キャパシタ 25~50V セラミック
0.1μF x4
小信号ダイオード
1N4148 x1
整流ダイオード
1N4007 x1
小信号 NPN (EBC) トランジスタ
PN2222/2N3904 x1
3mm LED x 3,
5mm RGB LED x1
5mm CdS or other photo sensor x1
TMP36 or other Analog Temp sensor x1
Davinci, Arduino Leonard ソフトウェア互換ボード
次に,PCとの通信がチップ内蔵のUSBインターフェースなので,UARTのハードウェアシリアルポートは別に使えるということ.スケッチのアップロードや Monitor への出力とは別に,高速なシリアルポートを使える.
個人的には,ほんの少しボードが大きくなってでも,ピン配置が使いやすくなったほうがいいように思うが.
2012年1月1日日曜日
Arduino IDE 1.0, Strawberry Linux DaVinci (Leonardo ソフト互換)
SoftwareSerial が NewSoftSerial に置き換えられたのはよかったが、Print や Stream クラスなどもふくめ変更されている。WPrograms.h もなくなっている。自作のライブラリ群は、バージョン 1.0 以前と以降両方でコンパイルできるよう、書き換えねばならない。
Strawberry Linux の Leonardo 互換ボード、DaVinci をためしてみたが、Windows では必要になる USB ドライバが Windows 7 でインストールできない。もしかして 32bit 版 Windows しか対応していないドライバなのだろうか。8/16U4 をUSB/Serialインターフェースに使っている Arduino UNO ではそんなことなかった。。。
基本的に Teensy と同じだけれども、安価で国内で手に入るので、教材用として期待して試しているのだが。
Macintosh OS X では問題なしだが、今のブートローダや回路では、アップロード時には手動でリセットしなければならないようだ。なんとかならないか。。