2012年11月21日水曜日

MaryとOV7670FIFOを繋ぐ(5) GPIO割り込みが。。

VSの割り込みで処理したいが、
割り込みを有効にすると、
Array_comがうまく動かない。。。。なんで?
コンパイラ?
>取り敢えず、IDEの再起動とかでしのぐ。

あと、NVICほにゃららで割り込みの優先度と有効化が必要。
これで割り込みできました(^O^)/

2012年11月20日火曜日

MaryとOV7670を繋ぐ(4) SCCB格闘

いざ動かして見ると、
最初カメラレジスタ読み取りから失敗しています(T_T)

http://mibc.blog.fc2.com/?no=26
を見ると、プルアップの記述が。

早速、GPIOの設定を変更と思ったが、つかっているDIO0_4,5は
オープンドレイン。

OV7670FIFOの回路図をみるとSDAは内部でプルアップ(20k)されている。
SCLもプルアップしないとだめかな?

続く



2012/11/21
プルアップで設定ができました(^O^)/

2012年11月18日日曜日

MaryとOV7670FIFOを繋ぐ(3) デバッグ

結線も終わりトラ技のサンプルコードも移植しました。
デバッグのためにあらかじめ買っておいたlpcexpressoのlpc-linkをMaryに接続。

いざLpcexpresso IDEでデバッグするとデバッガ自体が上手く動きません

eclipseでは何度かおきたことがあるパスにら日本語が入っていたのが問題でした。

workspaceを移動して無事デバッグができました。

2012年11月14日水曜日

Maryにμsecカウンタ追加

マイクロ秒ウエイトを作る
timer32を走らせてそのカウントでウエイトのループを回す

<初期化>

    // config timer32_0
    // LPC_SYSCON->SYSAHBCLKCTRL |= 1<<9;
 // 上記はMaryでは不要
    LPC_TMR32B0->TCR = 0x02;        /* reset timer */
    LPC_TMR32B0->PR  = SystemCoreClock / 1000 / 1000;
    LPC_TMR32B0->IR  = 0xff;        /* reset all interrrupts */
    LPC_TMR32B0->TCR = 0x01;        /* start timer */

<μsecカウント>
uint32_t Get_MicroSec(void)
{
    return LPC_TMR32B0->TC;
}
<μsecウエイト>
void Wait_N_MicroSec(uint32_t wait)
{
    uint32_t u32Time = Get_MicroSec() + wait;
    while(Get_MicroSec() < u32Time);
}




systick.cに追加しました。


2012年11月10日土曜日

MaryとOV7670FIFOを繋ぐ(1) メモ

<とりあえずのメモ>

ioconレジスタでピンアサイン
gpio割り込み
systick.cでキースキャンしているので無効にする必要がある。
timer16はtimer16_0専用。

gpio0,3,timer16-1の割り込みはarray comで使っている。

ピンアサイン
OV7670 role Mary
赤 1 [p] Vdd3.3V CN1-5
黒 2 [p] GND CN1-1
白 3 [out]SCL PIO0_4 CN3-5 H

黄 4 [in/out]SDA PIO0_5 CN3-7 H
青 5 [in] VS PIO1_8 CN3-1
  6
緑 7 [out] /WE PIO0_11 CN4-4
  8
紫 9 [out] /RRST PIO0_6 CN4-3
白 10 [out] OE PIO0_2 CN3-3 H
黄 11 [out] RCLK PIO0_8 CN4-5 H
  12 <GND>
青 13 [in] D0 PIO1_0 CN4-6
緑 14 [in] D1 PIO1_1 CN1-8
紫 15 [in] D2 PIO1_2 CN1-7
白 16 [in] D3 PIO1_4 CN2-1
黄 17 [in] D4 PIO0_9 CN4-7
青 18 [in] D5 PIO1_9 CN4-1
緑 19 [in] D6 PIO1_10 CN4-2
紫 20 [in] D7 PIO1_11 CN2-2

カメラのコネクタは、L字はスペースがつらいので、
ストレートに付け替える。
また、正面方向に出す。

IO設定
カメラレジスタ設定

VS割込み待ち
VS割り込み
WEセット
VS割り込み
WE解除
VS割込み待ち解除
読み込み可能フラグセット

読み込みリセット
読み出し許可セット
読み出しループ
読み込みクロック
読み出し
送信

最初に戻る



2012年11月9日金曜日

MaryのLED

5Vがないと点灯しない設計になっている。

でも、3.3Vだけで使いたい。
パターンを眺めるとカットしてジャンパで3.3Vには繋げそう。

でも光る?

もとは5Vで5mA(定格の30%hの光量)の設計。

LEDのデータシートを眺めると青と緑は
電源を3.3Vとすると、IF1mAでVF2.8V。
(3.3-2.8)×1000/330=0.9
光って見えるかな?

赤はIF1mAで1.7V
(3.3-1.7)×1000/560=1

どちらも辛そう。

抵抗を1/3くらいに付け替えれればいいけど。

2012/11/10追記
試しにLEDを3.3Vに接続してみたところ十分明かるく点灯しました(^∇^)



2012年11月8日木曜日

Maryを試す(Mac OS X環境構築)

cp210x_vcpドライバー、ipcexpresso IDE、flash magicのインストール問題なく進み、ビルドもできました。

しかしいざROMに焼きこもうとすると、エラーが出ました。

autobaudなんたら言ってきます。
これも四苦八苦しましたが、
windowsではうまくいくので差を調べました。

DTR,RTSの設定でした。
windowsはデフォルトでいいのですがMacは変更が必要でした。

でもこれでMacオンリーでMaryの開発環境が整いました(^O^)/




Maryを試す(CP2101x_VCPがinstallできない)

カメラの画像をXBeeを経由してiPhoneに送ろうと思っています。

カメラはトラ技のチョコっとカメラBをポチっとしてしまいました。

カメラとXBeeの間に何か入れないとということで、開発環境が扱いやすそうなのと基板サイズがちいさので、トラ技増刊を購入。

いざ環境を整えようとすると、cp210xドライバーのインストールではまり。
日本語Windows7ではダメとのたまいます。

四苦八苦した結果、dpinst.xmlを修正すれば良いことが判明。


の数字を日本語にあたる0411に変更。

これで動くようになりました。



XBeeでリモコン化(3)

XBeeにUDPでパケットを送ると、ATコマンドとして制御ができます。

iPhoneからの通信はGCDAsyncsocketのお世話になりました。

以下は試した時のサンプル。

severはXBeeからの応答受信用です。
clientでXBeeにATコマンドを送っています。



=== server ===
#! c:\/Perl/bin/perl.exe

use Socket;

$port = 0x0BEE;

print "xbee IP service receiver\n";
print "wait upd packet port $port\n";

socket(SOCKET, PF_INET, SOCK_DGRAM, 0)
or die "can't create socket\n";

bind(SOCKET, pack_sockaddr_in($port, INADDR_ANY));

$recv_count = 0;

while(1)
{
recv(SOCKET, $buf, 10000, 0);
$recv_count++;
print "$recv_count:$buf\n";
}

=== client ===
#! c:\/Perl/bin/perl.exe

use Socket;

$port = 0x0BEE;
$host = "192.168.0.1";

$iaddr = inet_aton($host)
or die "$host not exist\n";

$sock_addr = pack_sockaddr_in($port, $iaddr);

socket(SOCKET, PF_INET, SOCK_DGRAM, 0)
or die "can't create socket\n";

@data = ();

push(@data, 0x02); # command id : 0x02 : AT command
push(@data, 0); # command option : 0
push(@data, 1); # frame id
push(@data, 2); # confiuration option : 0 queued, 2 apply
push(@data, 0x44); # AT command : D 0x44
push(@data, 0x30); # AT command : 0 0x30
$value = shift @ARGV;
push(@data, $value); # AT command parameter : 4 DOUT low

send(SOCKET, pack('C*',@data), 0, $sock_addr)
or die "send fail\n";

print "sended to $host:$port\n@data\n";

XBeeでリモコン化(2)

XBeeはまずはアドホックでiPhoneと接続。

XBeeはcreator。
ATCH 1 でwifiのチャネルを指定するのがミソかな。
iPhoneには、vSSHを入れて指定のポートにつなげた。
XBeeのシリアルポートとiPhoneTCPか、繋がった。

XBeeでリモコン化(1)

単三2個をDCDC
で3.3Vにした。
モータードライバ(TB6612FNG)とXBee wigiをつないで制御。
モーターの速度はXBeeのpwmでコントロール。

参考:
http://arduino.sugakoubou.com/xbee_wi-fi
http://d.hatena.ne.jp/hrdakinori/touch/20110410/1302413109

たまロボ到着(2012.8.2)

製作は小4の娘。
問題なく完成しました。
いざ動かして見ると
受光素子にかなりちゃんとひかりを当てないと反応しません。
動き出すと上を向くので光がずれてすぐ止まるのでなかなか思うように動かせませんが、娘は楽しんでいます(^_^;)