上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
前回使った秋月電子の2次元加速度センサについてちょっと面白いので記事にします。
DSCF5144.jpg
サイズは5x5mmで結構小さいです。上の写真の丸のところで使っています。面実装品を無理に使っているのでごちゃごちゃしていますが、場所は食っていません。

これの何か面白いかと言うと、最近の加速度センサは結構I2CやSPI等のデジタルI/Fですが、これはアナログ的に、出力パルス幅でXY加速度を出してくるところです。
オシロ波形を取ってみました。

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


DSCF5142.jpg
これが水平に置いたところ。
DSCF5140.jpg
そして傾けたところです。幅が短くなっているのが分かりますね。

こういうものなので、ソフトが実に簡単になります。その部分の関数をコピペしてみます。
//**********************************
//*** Gx Get ***************
//**********************************
int GetGx(void) {
int t,i =0;
int tsum =0;

for (i=0;i<10;i++) {
t =0;
while ((t<0x7000)&&(PORTBbits.RB9 == 0)) {t++;} // Wait for Pulse start
t = 0;
while ((t<0x7000)&&(PORTBbits.RB9 != 0)) {t++;} // count pulse width
tsum += t;
}
return (tsum/10);
}


たったこれだけです。パルスが立ち上がるのを待って、次に立ち下がるまでをカウントしています。
これは10回サンプルして平均を出しています。周期約180usですので10回で1.8msです。
今回のような用途には十分短い時間で計測できています。
最初に値をLED位置に反映させるようにして動きを見たところ、平均を取る前は結構安定しませんでしたが、10回平均で安定するようになりましたのでこうしています。安定していなかったのは、センサのせいではなく手にもって試していましたので、実際に微妙には動いていたためだと思います。
 
電源範囲も3~6Vと広くて、値段も300円と加速度センサの中では一番お安くなっています。
 
欠点として精度は30%とあまり高くないです。計測範囲が±1.25Gなので、今回動かしてみたらちょっと振るとすぐ飽和します。早い方の動きには使えないですね。
 
しかし、ちょっとした動き検出や傾き検出にはお手軽に使えます。今回LED制御タイミング作りに使いましたが、これはこれで色々使いでがありそうなチップですので、何かまた応用を考えたいと思います。


にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村
スポンサーサイト
2014.10.13 Mon l 未分類 l コメント (0) l top
とりあえず動きましたので、また動画にしてアップしました。



この動画よりはもう少しはっきり見えるのですが、どうもうまく撮影できませんでした。
プログラムソースはこちらです。
led_main4.c


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


加速度センサの読み取りはわりと簡単にできたのですが、振っている時の表示開始判断と、表示中の切り替えタイミングで苦労しました。左右に振っている時の速度変化に追従してLED表示データを切り替えるのですが、計算ではなかなか合わず、結局テーブルにして表示を見ながら少しずつ調整しました。
 
動画見るといまいちですね。しかも左右逆になってる所もあるし。。。。
 
とりあえず、CPU内蔵LEDと加速度センサ制御のコードができたので、また何か応用を考えます。


2014.10.12 Sun l 未分類 l コメント (0) l top
久しぶりに連休フルに休めるので工作の続きをやっています。
CPU内蔵LEDの制御ができたので、応用編です。
DSCF5104.jpg
物はこれです。100円ショップのLEDスティック。これは固定パターンなので、ケースだけ使います。
DSCF5109.jpg
想定部材。基板はカットして使います。

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



DSCF5114.jpg
まずはこれ。秋月電子の昇圧コンバータです。スティックケースには単四1本しか入らないので、これを使って1.5Vから5Vを作ります。
DSCF5119.jpg
次にこれ。 二次元加速度センサです。これを使ってスウイングを検出してLED表示を同期させる計画です。
LEDS2.png
回路図はこれです。
DSCF5117.jpg
回路図の内容が一応スティックに入ったところ。
 
今のところ順調です。この後ソフト作成に入ります。

2014.10.12 Sun l 未分類 l コメント (0) l top
ようやくまともに動くようになりました。
DSCF5099.jpg

回路図は以下の通りです。RA4の1本だけで制御しています。
LEDS.png
「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





ソースコードは以下の通りです。
led_main2.c
前の記事で入力に近い方のLEDがおかしかったのは単純にソフトのバグでバッファを壊していたのが原因でした。
お恥ずかしい限りです。

とりあえずR,G,Bがなんとなく往復するテスト動作を動かしています。

 
次は応用編としてメッセージ表示をやろうか思います。
 
それではまたです。

2014.10.11 Sat l 未分類 l コメント (6) l top
続きです。とりあえずビット制御はできそうなので、ソフトを書き始めました。
しかし、ちょっと計算したらCPUが16MIPSとあるので1命令62.5ns、LED制御周期が1.25usですので、1.25us/62.5ns=20。つまりパルス幅制御1周期に20命令しか使えません。
これはC言語では無理ではなかろうか?とおもいつつ、オシロでタイミングをみながらNOP命令で調整して書いてみたコードが以下の通りです。

for (i=0;i if (BitScreen[i] ==0) {
PORTA = 0xffff;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
PORTA = 0x0000;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
}else{
PORTA = 0xffff;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
PORTA = 0x0000;
}
}


メモリがもったいないですが、BitScreenは1WORD1ビットにしています。つまり1LEDあたりRGB24ビットをすべて1WORDの配列にしています。これはビットシフトしている暇はないだろうと考えてのことです。
  

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


オシロで見ている限りではこれで何とか、一応LEDのタイミング仕様0,1を満たしている。。。と思います。
とりあえずのソースはこちらです(led_main.c)
※これだけでは動きません。前の記事の写真にあるコンフィグ設定が別途必要です。

このソフトで7LEDを制御してみたところが下の写真です。
DSCF5088.jpg
だいたいできています。。。しかし、元の方のLED2個が思い通りになっていません。なんか制御間違ってますね。

送信に近い方がおかしいので、自分から先のLEDデータを間違ってとりこんでいるか、全部転送した後に間違って再度データ採っているかに見えます。前者だと間違って採り込んだらその先には送らないはずなので、後者説の方が有りそうかなあ?

  
とりあえず平日なので今日はここまでとします。
2014.10.08 Wed l 未分類 l コメント (0) l top
今日は早く帰れたので、少しソフト見直しました。
まず、CPUの速度がでていないらしい件。PIC24F04AKA200のデータシートによると最大速度は32MHzです。CLKOにクロックを出して観測してみたところ4MHzでした。ここには1/2周期が出ているはずなので16MHzでていないといけないはずです。
そう思ってクロック系統を見直すと、内部8MHzFRCを4倍するPLLが存在することがわかりました。これを通っていないはずです。
そう思ってコンフィグレーションを見ると。いました。

32MHZ.png
一番上のFNOSCをFRCDIV+PLLとします。これでCLKOを見たら16MHzになりました。
DSCF5084.jpg


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



しかしここで測ったら単純LEDパタパタで1usほど。これからパルス幅制御を入れると思うとまだちょっと遅いです。
そこで、次に今までやったことのない、コンパイラオプティマイズ設定を変えてみました。
opti.pngこの図の左はじS設定にしてみます。


DSCF5083.jpg
これは効果が有り、周期が一気に半分になりました。

どうやらいけそうに見えてきたので、この後とりあえずテストプログラムを動かしてみました。
長くなってきたので記事を分けます。

2014.10.08 Wed l 未分類 l コメント (0) l top
ようやく普通の工作記事再開です。
 
秋月電子のマイコン内蔵RGBというのが気になっていたのですが、8LEDスティックタイプが出ていたので買ってきました。
DSCF5071.jpg

CPUはPIC24F04KA200を一緒に買ってきました。
DSCF5070.jpg
この石は、中身がPIC24Fなのに14ピンと小型なのと、今まで使っていたPIC24Fで必要だった内部レギュレータ用の10uF外付けコンデンサが不要なのでかなり使いやすくなっています。価格も安いですし。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


まずはブレッドボードで接続してみました。
DSCF5075.jpg
もちろんまだ動きません。とりあえず単純にPORTAをバタバタさせるソフトを組んでPICKIT3で書ける所までできたところです。
 
しかしオシロで単純PORTAバタバタを見たところ、周期が2.5uSほどになっていることが分かりました。
CPU内蔵LEDはパルスヂューティで1,0を指定制御する仕様になっており、ビットレートは800KHz、つまり1.25usです。
これでは遅すぎて設定できません。 
 
C言語でやっているのはありますが、それにしても遅いです。
まだCPUのクロック関係のレジスタ書き込みをしていないので、おそらく遅い設定になっているのだと思います。
   
次はそこを見て、まずは800KHzを実現したいと思います。



2014.10.05 Sun l 未分類 l コメント (0) l top
ようやくデータ込みで引っ越しができたと思います。
最適かどうか分かりませんが、苦労したので手順を書いておきます。

①サイトバックアップツールを使って、BLOGZINE内の
 ブログコピーをHDD内に作成する。


こちらのWEBOXを使用させて頂きました。
http://www.forest.impress.co.jp/library/software/webox/
これでとりあえずデータは保護できました。

②BLOGZINEでエクスポートしたテキストデータを
 FC2のログインポートで読み込む。
 (ここで一時間くらい)


 ※この時点で画像はコピーされていますが、
 ※画像以外のデータはコピーされません。


②FTPソフトを使って①でコピーした画像以外の
 データをFC2に転送する。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


やり方はこちらにあります。
http://help.fc2.com/blog/manual/Home/charge/ftp.html

FTPソフトはFFFTPを使いました。
http://www.forest.impress.co.jp/library/software/ffftp/

④FC2のデータをエクスポートしてテキストファイルを作る。

⑤テキストエディタによってテキストファイルの中の
 旧ブログURLを新URLに置換する。

 (FTPしたアドレスに置き換えます。)

私の場合は以下のようにしました。
置換前  ="http://crystal-radio.blogzine.jp/
置換後  ="http://file.blog.fc2.com/diyelec/


⑥FC2のブログ記事を一度全て削除する。
 ※これが結構重要。これをしないと次で記事が全部
 ※2つずつできてしまいます。

⑦FC2のログインポートで置換したテキストを
 読み込む。

 
これでどうやら画像とソースコード等データがFC2のURLで見えるようになりました。

やれやれです。
ではまた時間ができたら何か作って記事にしていきます。
2014.10.04 Sat l 未分類 l コメント (0) l top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。