マイコン工作実験日記

Microcontroller を用いての工作、実験記録

ビジネスモデル

2012-01-31 22:14:50 | Weblog
先週末に近所の家電量販店に立ち寄って、Canonプリンタのむちゃくちゃな値段にビックリ。無線LAN対応を売りにしているようですが、お手頃機種だと6千円台です。本体を安くしてインクカートリッジで儲けるビジネスモデルなのでしょうが、まさかこんな値段になっているとは。。

こんなに安いとプリンタ機能なんかもうどうでもよくなって、「無線LAN部分だけなんとかして使えないだろうか?」とか、「ひょっとしてモジュールになっていないだろうか?」とか想像しちゃいます。ついつい、「試しに買って、中を調べたいもんだ。」と言葉にしてしましましたが、即座にカミさんに却下されました。

どちらにしようか

2012-01-28 16:29:44 | CMOSカメラ
春節のお休みのために、中国のお店はこの2週間ほどお休みが続いていましたが、そろそろその休みも終わろうかという頃合いになってきました。きょうは、春節休みに入る前に購入したものの、そのままになっていたものを開封。




こちら、OV7670です。バーコードリーダで使ったものと同じセンサですが、FPCタイプのものなので小型です。以前買ったものは、実物を見るとレンズがとってもチャチだったので、いっその事こちらの方がいいのではないかと思った次第。コネクタと変換基板の3点セットで8ドルでした。コネクタはハンダづけされていなかったので、写真は自分で基板にコネクタとピンヘッダを半田付けした状態です。問題はこのFPCコネクタのピンアサインがわからないこと。そこで同じショップで売っていたOV7670にも対応しているという変換基板も一緒に購入。




このボード、Omnivision の名前が入っており、まるで同社の評価ボードで使われているものであるかのような印象を受けますが、そのように偽装しているだけかもしれません。基板上のコネクタには端子名があるので、テスタで調べればFPCコネクタのピン配置もわかるだろうと考えて購入しておきました。基板表側には電源表示のためのLEDが実装されていましたが、裏側にもCRがまばらに実装されています。



こいつもまた回路図が付属していなかったのですが、どうやら最低限のパスコンとプルダウン用抵抗が実装されている模様。SCCBのプルアップは未実装。自分が使うにはどちらの基板がいいか迷うところです。

ソースまでcleanされる

2012-01-24 22:13:18 | Weblog
Keil試用版(MDK-ARM Lite)を使っていたら、こんな動作に遭遇。

まず、新規プロジェクトを作ります。「スタートアップコードであるstartup_SAM3S.sを用意するか?」と聞かれるので、もちろんYesで答える。



すると、次のように用意されたスタートアップファイルをプロジェクトディレクトリにコピーしてくれる。



これで、自分で書いたファイルを追加してやればビルドできます。ここまではごくフツーなのですが、中間ファイルを消去しておこうと思ってcleanをかけてみると、どういうわけか startup_SAM3S.s までファイルを消去してしまいます。



上のイメージはcleanした後。startup_SAM3S.sファイルのアイコンが白紙になっており、ファイルの実態が見当たらないことを示しています。もちろん、ビルドするとエラーになります。一瞬、プロジェクト内のファイルが壊れたのか、あるいは誤って消去してしまったのか?と、かなり焦りましたが 消されるのはスタートアップファイルだけのようです。

とっても不思議。MDK ARMって、なにか意図があってこんな動きをするんでしょうか?あるいは、これも評価版の制限のひとつなんですかぁ??

ttyデバイス名

2012-01-21 09:07:11 | WT32/BM20
MacOS Xを使っていて気づいたことのメモ。

MacOS Xでは、USBのCDC対応デバイスをつなぐと、ttyデバイスが作られます。秋月USBシリアル変換モジュールをつないだ状態だとこんな感じ。
sirius506 ~$ ls /dev/tty.*
/dev/tty.Bluetooth-Modem        /dev/tty.usbserial-A800e3cf
/dev/tty.Bluetooth-PDA-Sync
sirius506 ~$ 

このデバイス名の番号ですが、USBデバイス側のDevice Descriptorからたどるシリアル番号情報を使っているようです。まぁ、ありがちな発想ですね。

さて、BluetoothのSPP対応デバイスとペアリングすると、同様にttyデバイスが作られます。WT32の場合は、初期設定でSPPがイネーブルされていますので、ペアリングすると次のようにデバイスが作られます。

sirius506 ~$ ls /dev/tty.*
/dev/tty.Bluetooth-Modem /dev/tty.WT32-A-BluetoothSerialP
/dev/tty.Bluetooth-PDA-Sync /dev/tty.usbserial-A800e3cf
sirius506 ~$

明らかに見覚えのある文字列が含まれているので、デバイス名を変更してみましょう。WT32で、つぎのコマンドを入力。

set bt name WCA-009
set profile spp SN117
reset

Bluetoothデバイスの登録操作をやり直してみると。。

sirius506 ~$ ls /dev/tty.*
/dev/tty.Bluetooth-Modem /dev/tty.WCA-009-SN117
/dev/tty.Bluetooth-PDA-Sync /dev/tty.usbserial-A800e3cf
sirius506 ~$

予想したとおりの名前がつきました。

あのチップ

2012-01-17 23:04:32 | Weblog
寒い日が続いていますが、雑誌の企画は春へ向けての準備が進んでいるようです。今年もインタフェース付録の予告が出ていますが、こんどは、アッと驚く「あのチップ」だそうです。今月末に出る3月号を見れば、より詳しいことがわかるかもしれませんが、それまでは勝手に想像してみるのも楽しいものです。
  • 「あのチップ」と言うからには、いま話題のチップということでしょうか?そうすると、Cortex-M4とかですかねぇ?
  • STM32やNXPだと、自社やパートナーから安価な評価ボードが提供されるので、付録になったところでありがたみに欠けるでしょう。よって、他のベンダーのチップが採用されるに違いない。
  • そうすると、TIのLM4FあるいはFeescaleのKinetisあたりの可能性が考えられるのでは?

と、まぁ、自分の勝手な都合と願望に基づいて、予想しています。あとはマイコン以外にどういうチップが載るかにも興味があるところ。そろそろ、付録基板にもCODECとか充電コントローラなんかを載せてもいいんじゃないでしょうか。

久しぶりのKeil

2012-01-14 22:49:24 | Weblog
OV7670を使ったバーコード・リーダーのコードを公開するべく作業中です。普段はCrossWorks for ARMを使っているのですが、評価版は30日間の期限付きなので普通の人が使うには、ちょっと不便です。そこで、期限の制約のないIDE評価版を調べてみると、当然のことながらKeilやIARが浮上してきました。DWMにADuC7026が付録としてついた時にKeilを使ったことがあり、少しは慣れ親しんでいるのでKeilを使うことに。当時はKeilは16KBのコードサイズ制限があり、IARは32KBだったと記憶しているのですが、今はKeilも32KBになっているのですね。




当然のことながら、KeilでもATMEL SAM3Sがターゲットデバイスとして含まれているので、プロジェクトを作成する際にデバイス指定を行えば、ディフォルトのスタートアップを用意してくれますし、サンプルプロジェクトもいくつかあるので、そのコードをベースに作業を開始できます。と、まぁ出足は良さそうに思われたのですが、それもしばらくしてくじかれることになりました。

その原因はやはり、ヘッダーファイルです。Keil MDK-Liteは V4.23を使っているのですが、これに含まれるSAM3Sのヘッダーがちょっと古いのです。パラレルキャプチャのDMA関連レジスタの定義が入っていないし、各種レジスタのフィールド定義がちゃんとなされていなかったり。ヘッダーファイルはATMEL由来のものなので、Keilが悪いわけではないのですが、残念ながら2009年の版でありチト古い。ATMELが最初からちゃんとしたファイルを出していればこんな問題は発生しないわけですが、Keilがファイルを更新できていないところがSAM3Sの人気の無さを暗示しているようで、すこし寂しいですね。

サンプルに含まれていたsystem_SAM3S.cを使えば、スタートアップ時のクロック関連の設定を上図に示したようにConfiguration Wizardを使って行えるので、とっても楽チンです。が、しかし、PCK0の設定をおこなってみるとコンパイル時にエラーとなります。調べてみると、参照しているレジスタ名がヘッダーファイルでの定義と一致していません。想像するに、どこかの段階でヘッダファイルを更新した際に名前が変わったんじゃないでしょうか?そうとは知らずに、sysem_SAM3S.cは更新されないままということなのでしょう。これもまた、ヘッダーファイルに起因する問題なわけです。

そんなこんなでレジスタ名を変更したりして問題を解決しているのですが、USBのコードを変更する作業が必要なことに気づいて作業を中断。これまでは、CrossWorksが提供するCTLというライブラリを使うことで、マルチタスクでソフト書いていたのですが、Keil評価版にはそんな結構なものは含まれていません。これまではUSBのCDCのスタックをひとつのタスクとして実装していたので、タスクが使えないとなるとコードのロジックを変更せざるをえません。タスクを使うことに慣れている身としては、こういう処理をスーパーループで記述するなんて、ものスゴーく面倒に思えてなりません。

ちなみにUSB CDCは、読み取ったバーコードの値を仮想COMポート経由でPCに伝える機能を持たせるのに使います。

赤外線写真

2012-01-10 13:52:54 | CMOSカメラ
年末年始、家事も頼まれた仕事も溜まってしまい、なかなか新しい記事のネタも見いだせないでいる日々が続いています。今年はまだ秋葉詣でもできていませんが、近場の家電量販店に行く機会があったので、こんなもん買ってみました。



富士フィルムのIRフィルタです。赤外線は透過するが、可視光は遮断するというフィルタです。このフィルタを使うことで、近赤外線波長の世界が見えるというわけです。OV9670にこのフィルタを付けることで、赤外線写真を試してみようという魂胆です。



しかしながら、使用した上に示したのカメラではレンズ筒内に赤外線を遮断するフィルタが入っているために、購入したIRフィルタをつけただけでは、全ての波長の光が遮断されてしまって、暗黒世界しかみることができません。そこで、レンズ筒を無理矢理開けてみて、中に入っていたアクリル板のように見える赤外線遮断フィルタを除去、代わりに赤外線透過フィルタを付けてみました。すると、自宅の窓から見える世界はこんなふうになりました。




うーん、もともと160x120しかない画像をLCDに表示したものをデジカメで取っているので、かなりわかりにくい画像ですが、青い空は暗く写り、樹木が白く写し出されます。

普通にデジカメで撮れば、下のようになります。やはり、VGA程度の解像度で写さないとダメですね。データをSDカードに保存できるようにしないと、LCD画面を撮るというのもつらいものがあります。以前にもSAM9でやったことのある内容ですが、SAM3Sでもちょっとだけ趣向を変えて取り組んでみようかと思います。




うちの近所はまだまだ空き地が残っているうえに、裏手にはゴルフ場が広がっていることもあり、周囲には緑が残されています。となりの空き地では良くキジが啼いており、時折赤い頭を見かけることもあります。このキジが、地震の揺れにずいぶんと敏感なヤツでして、昨年は余震があるたびに素早く反応してしょっちゅう啼いていました。今年は姿を見ることはあっても、鳴き声は時たまとなる一年であって欲しいものです。

そういえば、昨夜はスーパーでの買い物からの帰り道で歩道の植え込みに隠れ込んだタヌキを2匹見かけました。暗くなって行動を起こしたのでしょうが、あいつらも交通事故には気をつけて欲しいものです。

ヘッダファイルの変更

2012-01-06 22:48:50 | Weblog
ふだんARMのソフトを書くときには、好みのせいもあってATMELが提供しているライブラリとかは全く使わないのですが、各種アドレスや周辺デバイスの構造を定義するヘッダファイルだけはATMELのものを使わせてもらっています。

SAM3Sでも同じで、ライブラリだか評価ボードのデモコードだかに含まれていたヘッダを使っています。このヘッダファイル(AT91SAM3S4.h)、最後の更新日付が 7/29/2009と記されていてちょっと前のもの。実際にSAM3Sが買えるようになったのが、2011年になってからですから、ずいぶんと前と言ってもいいのかもしれません。そのせいもあってか、ちょっと気になっていたこともあったのです。一部のレジスタのネーミングがマニュアルと違うとか、そもそも定義されていないとか。。

こんなものをいつまでも使い続けるのも良くないと思い立ち、最近のライブラリをダウンロードしてヘッダ(SAM3S.h)を確認してみました。2010-9-6の日付が記載されています。わたしが使っていたものから、2年の月日を経る間にレジスタの定義抜けやネーミングの修正もちゃんとおこなわれているようです。しかし、変わったのはそれだけではありませんでした。周辺デバイスのレジスタ群を定義する構造体名や、typedefによるそのエイリアスまで変わっているじゃありませんか。これじゃ、新しいヘッダを使うためにはソースを書き換えないといけません。これまでのレジスタ構造体名はSAM7/SAM9の頃からの定義を踏襲した慣れ親しんだものだったのですが、新しいものは短くてわかりやすい名前を心がけたようです。

今後のことを考えれば、今のうちに新しいヘッダに移行すべきでしょう。面倒だけどCMOSカメラとBlueSAMのコードを全て新ヘッダ対応に変更しておこうかと思います。

年末の駆け込み発表

2012-01-02 11:16:17 | OLIMEX
何日か前のことですが、クリスマスも過ぎてからOLIMEXが新製品をいくつか発表していました。その中でわたしが気になったのはSTM32-P207です。



STM32F207ZET6搭載で機能山盛り、メモリも500KB SRAM追加と豪勢。そしてCMOSカメラ搭載です。このボードサイズで、この位置にカメラあっても使いにくそうですけど。STM32では、いくつかのデバイスでCMOSカメラインタフェース(DCMI)が用意されているようで、このボードでもDCMIを使ってカメラがつながっています。STM32F107のようなDCMIを持たないデバイスでもカメラを持ったボードもあるようですが、その場合にはGPIOのDMA機能を使うのでしょうか。

STM32のマニュアルを読んでみると、DCMIの機能は、SAM3Sのパラレル・キャプチャよりもずいぶんと機能豊富なようです。JPEG出力カメラをつながられたりITU565のフォーマットに対応できたりします。カメラが出力するフレーム画像からアプリが欲しい範囲だけを切り出せる機能(Crop)も備わっています。簡単に入手できるJPEGカメラがあれば、試してみたいものです。その反面、OV7670程度のカメラであれば、SAM3Sのパラレルキャプチャ程度の機能で充分用が足りるという感じもします。Crop機能は、カメラの画像サイズとLCDの画像サイズが違う場合なんかに便利に使える機能なのですが、カメラ側でもデータ出力領域のウィンドウを切ることで同じ結果を得ることができます。

そんなわけで、STM32F207の評価ボードとしてカメラまでついているという点では、使いでありそうです。自分で好きなカメラをつないで遊ぶのが目的であれば、同じようにDCMIを持っているSTM32F4 Discoveryが安いので手軽に使えそうな題材でしょうか。このボード、CODECやセンサ等が載っているので、これらのデバイスとDCMIで使用するポートとが重なっていないか注意する必要があるかもしれません。