2012年7月21日土曜日

picoscopeがいい感じでアップデート

手軽なオシロスコープ、picoscopeのソフトウェアがアップデートされていました。
http://www.picotech.com/

いつのまにか日本語対応もちゃんとしているようで、すばらしい。

驚いたのが、シリアルデコードがRS-232Cに対応している点です。
かなり欲しかった機能なので期待大です。

やってみました。


すばらしい使い勝手の良さです。
この例では信号レベルは3.3Vですね。
abcdeとシリアルターミナルで打ち込んで.みました。
トリガーを適当にかけておくと波形が取り込まれ、シリアルとして解釈してくれます。
スレッショルドはトリガーのスレッショルドと連動してくれるので楽。
ボーレートを選べばいきなりデコードしてくれました。
その他の細かい設定も出来るようです。

すごいねこれ。
2chあればtx/rx取れる。
ロジックアナライザいらないじゃん。

2012年5月2日水曜日

flucard でinfernoを動かす

flucard
http://www.flu-card.com/jp/
というSDカードがあります。
これ自身が無線APとなり、デジタルカメラに入れっぱなしでもネットワーク経由で
画像を取り出せるという便利グッヅです。

なお、中身はlinuxであり、telnetでアクセスできたりと
いろいろできるようで、ちょっと前に話題になっていました。
ものすごい熱を発するのでカメラに入れるのはちょっと躊躇してしまいますが、
最小のLinuxマシンとして興味が湧いたので購入しました。

Telnetでログインできることを確認できたので、本題です。
arm-linuxあるところにinfernoあり、ということで、
infernoのポーティングです。
文鎮化が怖いので、 native infernoのポーティングは出来ませんが、
hosted infernoなら行けそう。

目標は、flucardでinfernoを動かし、styxでマウントして
画像を取り出すことです。

・ビルド環境構築

Qemu上のarm-linuxでセルフビルド(あるいみクロスビルド?)を行いました。
Qemuの環境構築については
http://inferno-hell.blogspot.jp/2011/10/qemuarm.html
http://inferno-hell.blogspot.jp/2012/04/lenny-no.html
 あたりを参照。
特に変更は無いはず。

infernoビルドに必要なソフトウェアをapt-getでインストールし、
infernoのソースツリーを持ってきます。
詳細は
http://inferno-hell.blogspot.jp/2011/10/wm.html
このへん。

ーーーこっから嘘情報ーーー
ただし、ソースツリーはtrunkではなく2009年あたりのIPv6対応前のものとします。
hg clone https://inferno-os.googlecode.com/hg/
hg update a682517fc1ec
IPv6対応にすると、host osがv6に対応していないためか、ネットワークアクセス時にエラーとなるようです。
このリビジョンの根拠は、infernoのipv6対応に関するissueが193にあり、日付から、
これより前のリビジョンで当たりをつけました。

最新のツリーとは若干ビルド方法が異なり、
mkconfig編集
パス通す
Linux/arm/bin,lib ディレクトリをそれぞれ作成(無いとエラーになる)
./makemk.sh実行
mk CONF=emu-g install (mk mkdirsはしない)
といった感じでした。
ーーーここまでーーー

ーーー追加ーーー
mkの前に、ipv6のOFFのための作業がいります。
emu/Linux/emu-gを編集し、
ipif6-posixをipif-posixに変更します。
で、./makemk.sh; mk mkdirs; mk CONF=emu-g install
としてビルド。
ーーーここまでーーー

Linux/arm/bin/emu-gが出来上がります。
ldd emu-gでこのプログラムが必要としているライブラリを確認し、
/lib以下の該当ファイルをとっておきます。

・flucardにinferno環境構築

flucardをパソコンに取り付け、infernoのファイルを配置します。

/sd/
  emu-g    ... inferno本体
  lib/         ... ライブラリをおいておく
  inferno/  ... infernoのルート。qemuからもってくのが面倒だったのでOSXから持っていった
  mkln.sh   ... ライブラリのリンクを貼るスクリプトを作成

こんな感じで配置をします。
mkln.shの中身は

#!/bin/sh
ln -s /mnt/sd/lib/ld-linux.so.3 /lib/
ln -s /mnt/sd/lib/libgcc_s.so.1 /lib/
ln -s /mnt/sd/lib/libpthread.so.0 /lib/
ln -s /mnt/sd/lib/libc.so.6 /lib/
ln -s /mnt/sd/lib/libm.so.6 /lib/

といったところ。sd/lib以下のファイルのリンクを/libに張ります。

・flucard上でinferno 起動

flucardをカードリーダーにさして電源を投入するとAPになります。
パソコンでそのAPに接続し、
192.168.1.1にtelnetログインします。
/mnt/sdにSDカードの内容が見えます。
cd /mnt/sd
./mkln.sh
./emu-g -r inferno
でinfernoが立ち上がります。

infernoのシェルで、
bind -c '#U*' /n/local
listen -A tcp!*!1024 {export /&}
と実行します。1024はとりあえずのポート番号で値はなんでもいいです。
これでflucardのSDの中身がstyxで公開されました。

・パソコン側のinfernoの操作

flucardのAPにつながっているパソコンでinfernoを立ち上げます。
絵を扱うのでwm/wmを起動しておきます。

シェルにて
mount -A tcp!192.168.1.1!1024 /mnt
とすると/mntにflucardがマウントされます。
/mnt/n/local/mnt/sd/
にSDカードが見えます。
この中の画像ファイルを探し、

wm/view ファイル名(小文字に直す)

としてやると、画像が表示できます。lsするとファイル名は大文字ですが、そのままだとviewが画像と思ってくれないので、小文字で指定します。





styxで無線経由で画像を取り出せるとは、胸が熱くなります。



ところで、flucardにはウェブインターフェースがあるから、
ウェブ経由で画像を取り出せばいいじゃん、という意見もあるかと思いますが、
まったくそのとおりなのです。
flucardにinfernoいらないじゃん。


charonで192.168.1.1に接続。
残念ながらcharonでは直接画像は表示できませんでしたが、
画像のダウンロードは可能でした。


ところで、画像の縮小表示ってどうやるんだろうね。

AVRでCFタイプのLANカードを制御しようと思ったが

AVR関連で面白いネタを見つけました。

AVRで動かすWebサーバ

というページなのですが、AVRにPCカードタイプのLANカードをさして
サーバーを立てるという試みです。
感銘を受けたため、 自分も真似することにしました。
手元に各種CF/PCMCIAのカードがあったので、機材には困りません。
調べてみると、どれもNE2000互換のカードばかりで、参照元ページとは制御が異なりそうです。

まずはPCカードの基本について書籍で学び、
AVRのピン割り当てを考えました。
Arduinoベースなのでピンアサインはいろいろ悩みました。

で、ピン配置も決まり、そろそろ配線するか、という段になり、
リード線をカードにさしこもうとしたところ、、、





ぬう、リード線がささらない、、、

完。


2012年4月30日月曜日

Lennyのサポート切れ対策

Debian Lennyがサポート切れになり、移行しなければならなくなりましたが、
組み込み系ではいまだにLennyが使われていると思われます。
しばらくはだましだまし使っていこうと思います。

apt-get が使えないのを何とかすれば何とかなりそうです。
/etc/apt/sources.listを書き換えて、apt-get updateしてやればよさそうです。
 (apt-get install debian-archive-keyring もいるの?)

・intel

deb http://archive.debian.org/debian lenny main contrib non-free


・arm(armel)

deb http://archive.debian.org/debian lenny main

こんな感じでいけました。

# お、ブログの編集画面が使いづらくなっていますな。


2012年3月16日金曜日

音楽プレーヤーをさくっと作成

AVRでSDカードの読み書きが出来るようになりました。

ポイントは

  • 5Vで動作させると面倒なので、2.7-3.6Vで駆動(信号線のレベルをSDに合わせる必要があるため)
  • 配線はサンプルスケッチの説明どおり
  • ATmega168Pでは容量不足か?ATmega328Pだと動いた


調子に乗って音声データをSDカードに入れて、それをPWMで
音にしてみました。
しょぼしょぼですが音楽プレーヤーの完成です。



動作の様子はこちら。

http://www.youtube.com/watch?v=UsRMV_p-O_8

思っていたより音が綺麗で笑えます。

PWMの出力はほぼそのままスピーカーに入れています。
一応手元の抵抗とコンデンサをつないでRCフィルター的な接続をしてみましたが、
意味はあるかわかりません。

電源は3VのACアダプタです。電圧が微妙なのは3.3Vが売り切れていたからだったりします。
スケッチを書き込むときは3V駆動ではだめなようで、
5V(USBから給電が簡単)にします。
動かすときはまた3Vに切り替えます。
まちがえて5Vを入れてしまったこともありますが、SDカードは壊れなかったようです。

まずはスペック。
音声データはモノラル8bit PCMで、サンプリングレート8000Hzとしました。
曲はビートルズのLove me do。ちなみに、オリジナルアルバムではなく、アンソロジーのテイクだったりします。
MP3データをaudacityでフォーマット変換しwavにしておきます。
ファイル名は決めうちで、wavファイルをSDカードのルートにおきます。
SDカードを取り付けた状態で電源を投入すると曲が再生されます。
終わったら停止します。つまり、1曲しか再生できずリピートもしません。
PWMはDigital9(pin15)を利用しています。
変な信号で機材を壊しては困るので、壊れても惜しくないスピーカーをつなぎます。
アクティブスピーカーじゃないと音が小さすぎるかも。

PWM周波数がデフォルトで500Hz弱と音声再生には使えない値なので、周波数は変更の必要があります。
方法はhttp://www.arduino.cc/playground/Main/TimerPWMCheatsheetを参考にしました。

これらを踏まえて、スケッチを作成しました。
ベースにしたのはサンプルのSD->DumpFileです。
読みとったデータをシリアル出力するところを書き換えて、PWMに出すようにしました。
サンプリング周波数はタイマーを使わず、delayで作っています。


  1. SDから1byte読む
  2. PWMでデータを出力
  3. delay(!!ダサい)


といった感じですね。なのでサンプリング周波数はてきとーです。
delay値は耳で聞いて決めました。めちゃくちゃですね。

そのうちちゃんとするとして、ひとまず音が出て楽しかったので勇み足で
ブログを書いたのでした。

スケッチは以下のようになりました。
簡単に出来てしまいました。


/*
SD card file dump

This example shows how to read a file from the SD card using the
SD library and send it over the serial port.

The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created 22 December 2010

This example code is in the public domain.

*/

#include

// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;
int sndPin = 9;

void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");

// pwm frequency is set to 31khz
TCCR1B = TCCR1B & 0b11111000 | 0x01;


// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
//File dataFile = SD.open("datalog.txt");
File dataFile = SD.open("test.wav");

//File outFile = SD.open("out.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {
//Serial.write(dataFile.read());
//outFile.write(dataFile.read());
analogWrite(sndPin, dataFile.read());
//delay(1);
delayMicroseconds(80);
}
dataFile.close();
//outFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
}

void loop()
{
}

2012年3月12日月曜日

Japaninoのブートローダー、fuseの復旧

引き続きAVRをいじっています。
本業が忙しいのでほそぼそですが。

現在SDカードをSPIモードでアクセスを試みています。
ディレクトリを読めたのでまずはOK。この件についてはそのうち。

ブレッドボード上にArduinoもどきを作っていますが、
リファレンス機として、大人の科学付録のJapaninoもたまに使っています。
が、てきとーにfuseビットを書き換えてしまい、
sketchを書き込めなくなってしまいました。
復旧方法を調べたのですが、まとまっていなかったので、
記録しておきます。

1. 機材

JTAGICE MKIIを使ってISP書き込みを行いました。
普通にISPライターを使えば良いのですが、たまたま手元にあったので、
オーバースペックですがISPライターがわりに使いました。

接続は、
jtagiceの凸となっているコネクタを、

1 3 5 7 9
2 4 6 8 10


というピン配列とすると、
AVR側(DIPの168のピン番号)とは


1: SCK(pin19 = D13)
2: GND
3: MISO(pin18 = D12)
4: Vcc
6: RESET(pin1)
9: MOSI(pin17 = D11)
※ほかのピンは放置


と接続します。
Japaninoの場合は、黒いピンソケットのD11-13, RESET, +5V, GNDを使いました。
別にICSPソケットは付けなくてもよさそうです。
リード線で結べばOK。



jtagiceをパソコンと接続し、japaninoをパソコンのUSBポートに接続したら
準備OK。
パソコン側ではAVR studioで書き込みを行います。


2. 情報のありか


さて、問題はどのブートローダーを書き込むのか、fuseビット等はどうするのか、
という情報ですが、
ウェブを探してもどうにも見つかりませんでした。

結局、大人の科学のサポートページからダウンロードできる、
開発環境にヒントがありました。

arduino-0018/hardware/arduino/boards.txt

というファイルがありました。中には、


japanino.name=Gakken Japanino(学研 大人の科学 ジャパニーノ)

japanino.upload.protocol=stk500
japanino.upload.maximum_size=14336
japanino.upload.speed=19200

japanino.bootloader.low_fuses=0xe2
japanino.bootloader.high_fuses=0xdd
japanino.bootloader.extended_fuses=0x00
japanino.bootloader.path=lilypad
japanino.bootloader.file=LilyPadBOOT_168.hex
japanino.bootloader.unlock_bits=0x3F
japanino.bootloader.lock_bits=0x0F

japanino.build.mcu=atmega168
japanino.build.f_cpu=8000000L
japanino.build.core=arduino


てなことが書かれていました。
つまり、ブートローダーはLilypad用のを使い、
fuseビットはL:e2, H:dd, Ex:00で、ロックビットは0fにしろ、ってことですね。

ブートローダーはサブディレクトリの

bootloaders/lilypad/LilyPadBOOT_168.hex

がそれっぽいですね。
ブートローダー書き込み、fuseビット書き込み、ロックビット書き込み、
という順番で作業を行いました。
できたっぽいです。
なお、fuseビットのextendedは読み込み直すとf8になり、
ロックビットはcfに見えますが、未使用のビットが1に見えるらしいので
正常に書き込めています。

で、動作確認はsketchのサンプルから適当に選び、
シリアルで書き込みます。
jtagiceは外さないとダメっぽいです。
サンプルはfadeあたりがわかりやすいですかね。



GNDとD9をLEDと抵抗(2-300Ωくらい?)で直列に結べば、ぼあーっとLEDが点滅する。
ワニ口クリップが意外と便利。


3. 外部クロックに対応


デフォルトのfuseビットには問題があり、
内蔵クロックで動作するらしいです。
せっかくjapaninoには水晶が乗っているので
これを使用することにします。

単にfuseビットのloをe2からe6にするだけみたいです。
一応動作はしましたが、
外部発振器が使われているかどうかは見た目ではわかりませんね。

2012年1月4日水曜日

投稿にゴミが付く

なんかbloggerの投稿にゴミが付く。
http://www.blogger.com/img/blank.gif
とかいう文字列が勝手に書き込まれて困る。

既知の問題かも。

Blogger Problem: http://www.blogger.com/img/blank.gif Appearing

確かに、リンクを貼ったときに出現する。なにこれ。

AVRをいじる

ニコニコ動画をみていて、

ブレッドボードでArduinoを作ってみた

というのを見つけました。
まさかこんなに簡単にAVRが動かせるとは思わなかったので、
さっそく部品を購入し、動画の通りに試してみました。

材料:
秋月電子の通販ですべてそろった。3000円くらいですかね。

組み立て方法は動画のとおりなので割愛。
ピンの数え間違えさえしなければ問題ないと思われます。
動画ではライターを使わないでROMの書き込みを行なっていたが、
たまたまライターが手に入ったので、そこはライターを使って楽をしました。
周辺回路はそれほど複雑ではないが、それでも結構手間取りました。
乱暴な言い方をすると、AVRは電源さえ繋げば動くように見えます。知らなかった。
まあ電源周りが難しいのですが。

その他参考動画:

【マイコン編 1回】 零からの電子工作 第36回:前編 回路の準備
ライターの接続と、開発環境の入手の参考に。

【マイコン編 2回】 零からの電子工作 第37回:初めての書き込み
Hello worldともいえるLED点滅プログラムの書き込みを。

やったこと:
・LED点滅のプログラムをCで書いて書きこむ
・Arduinoのブートローダーを書きこんで、スケッチを動かしてみる

動画の説明通りなので特にコメントはありませんが、
ちょっとハマった点があります。
winavrというツールチェーンは名前が変更になり、avr toolchainに
なったようです。
avr studioの新しいバージョンではwinavrの方は認識してくれないようなので、
avr toolchainが必須となります。

米粒程のAVRマイコン・・・ 使ってみたい
こちらのサイトで直リンクが紹介されていたので、それを使用。

あと、配線ミスしてシリアル(FTDIのシリアルUSB変換経由)が使えないということもありました。
ピンはちゃんと数えましょう、ということで。

さらに、protothreadsも試してみました。
マルチスレッド風にプログラミングできます。
それほどコードサイズは増加しないように見えるので、
導入の検討の価値はありかと思います。
プログラムサイズは使わなかったときに比べて206 -> 394 bytesといった感じ。
OSを動かすのはちょっと厳しいかも、という感触です(根拠は無い)。

2012年1月3日火曜日

ARToolkitを試す

今更ながら、ARが気になったので、ARToolkitを試してみました。
参考にしたサイトは、
工学ナビ - 「攻殻機動隊」「電脳コイル」の世界を実現! - ARToolKitを使った拡張現実感プログラミング

です。
そのまま真似しました。
カメラの性能がいまいちで、ピントがなかなか合わないのですが、
それでもうまくいきました。

ただ、使ったコンパイラのバージョンが異なるので、それによる違いだけメモしておきます。
windows 7 (64bit)上のVC2008 expressを利用しました。
program files(x86)/Microsoft Visual Studio 9.0/VC
がインストールディレクトリにあたるようです。

ただビルドするだけではDebugになっているので、説明とあわないようです。
構成をreleaseにしてやると、説明通りの実行ファイルができました。