2007年1月アーカイブ

PSoCでSDカードの読み書きができるようになったため(ユーザモジュールを使用)
SDカードにデータを書き込めるデータロガーを作成しました。

前回作成したデータロガーとの大きな違いはSDカードにデータを書き込むようにしたことですが、
他にはロータリーエンコーダを使い操作性を高めていることもあげられます。
現在、ソフトウェア部分は基本となる部分は完成しました。

次にハードウェア側です。せっかくつくったのでケースへ入れることにしました。

前回に作成したデータロガーケース加工をしましたが、

友人からLCDは製品ではフレーム部分(?)が見えないのが多いよね

とかなんとか指摘されたので今回はそこも改良しておきました。
LCD部分はフレームが見えないように最低限の窓だけ開けてあります。

結果、以前よりかなりシンプルな感じになりました
(ボタンやLEDがが減ったというのもありますが)


動作ですが、以前のデータロガーと同様のデータが取れます。
ただし、今回は128MBのSDカードを採用しているため、1分に一度のデータ計測でも1年以上は連続してデータをとれそうです。

さらに、SDカードをPCに差し替えればすぐにデータを取り出せるという利便性もあり、かなり使いやすくなりました。


SD_Logger_Case_a.jpg SD_Logger_Case_b.jpg
↑LCD周辺部分は前回よりきれいに加工できました。  ↑ケースの中は結構ごちゃごちゃです。


初代データロガーのケースを改良中です。

今回はLCD付近の窓がゆがんでいたのを削り直しました。
そのままでは窓が大きすぎるため、ほこりが入ってしまいそうです。
そこで透明なアクリル板を窓の部分につけてみました。

アクリル板を小さく切り、穴を開けてネジでアルミケースへとめました。
アクリル板はアクリルカッターを使い、すじをいれてから割りました。

また、穴あけは電動ドリルを使いました。
最初に1.5mmのドリルで下穴をあけ、その後2.5mmのドリルでさらに穴を広げました。
最後にネジをねじ込み、ねじ穴をあけました。

今回の改良で少し使いやすくなったかと思います。今後も改良していく予定です。


psoc_case3.jpg
↑穴を開けたアクリル板

最近、PSoCでSDカードモジュールを使いSDカードの読み書きの実験を行ってきました。
せっかくSDカードが扱えるので、SDカード上のWAVEファイルをPSoCで再生できたらおもしろそうだと思いました。

やり方はSDカードからデータを読み出して一定間隔でDA変換していくだけ・・・のようです。
調べてみた結果、以下のサイトが見つかりました。

H8で音声データを扱ってみよう

このサイトではLM386を使ったアンプを使っています。
部品も少なくてすみそうです。そこで私も作って見ました。

◆リンク
以下が参考にさせていただいたサイトです。というか、回路図はこれらのサイトのをほぼそのまま作ってみました(笑)

LM386 パワーアンプIC

NJM386(LM386)ステレオアンプを作りました

LM380とLM386

まどかの 自 己 満 足 日記


◆写真
実際に完成したのは以下の写真の通りです。
半田付けする部品も少なく、短時間で作れました。
現在、ゲインは20倍になっているため、期待したより音は大きくできませんでした。
1番と8番ピンにコンデンサ(10μF)をいれるとゲインは200倍になるそうなので、後日試してみたいと思います。

miniamp_a.jpg
↑全体図です。一部半田付けしていないのはテスト用にミノムシクリップではさんで使ったため。

PSoCのDA変換モジュールDAC8を使ってみました。
使い方は簡単で、以下のサンプルソースのようにすれば大丈夫です。

このサンプルではP0[3]の出力電圧が変化します。
ディレイもいれてあるのでテスターを当てて調べてみると、
電圧がだんだん高くなっていき、また下がる様子がわかります。
(0[V]→5[V]の繰り返し)

今回はPSoC、CY8C29466で実験しました。
このデバイスはアナログ出力が
P0[2]~P0[5]
のポートでしかできないので注意が必要です。
(私はLCDモジュールをPort0で使っているのでちょっと困りました。)


◆ソースコード



◆DAC8で変換する際の注意点
DAC8を動かす際、周波数の設定に注意する必要があります。
分周しないでVC1 = 24MHzのままやってしまったりすると動作しません(常に2.4V前後になってしまったりする)
VC1 = SysClk / 16では大丈夫でした。

参考記事:PSoCフォーラムの記事


以前から、自分で電子工作で作ったものをケースにいれてみたいと思っていました。
しかし、ネックになるのはケースの加工です。特に金属ケースの加工は道具もいろいろ必要になるので今までは敬遠してきました。今回、思い切って道具をそろえ、挑戦してみました。

以前作成したPSoC実験ボードをアルミケースにいれてみました。


◆ケース加工の際、参考になるサイト

電子工作用道具の使い方ノウハウ
穴あけノウハウなどが大変参考になります。電子工作に使う道具を解説している貴重なサイトです。)

上記のサイトを参考に、
・電動ドリル
・ドリル刃
・リーマ
・ヤスリ
・糸鋸
・TAKACHIの小型アルミケース [YM-130]
・スペーサ・ネジ・ナット
・ケース用のLED・スイッチ・DCジャック部品
などを購入しました。

ドリルは
BLACK&DECKER 14.4Vコードレスドリルドライバー Z-SX4000
が比較的安価(8800円程度)で高性能のようだったのでこちらにしました。


また、余談ですが、
電子マスカットのページのデジタルアラームクロック6ページ目などもケース加工の際、参考になるかもしれません。解説が丁寧で写真が多いので楽しいページです)


PSoCのLCDのユーザモジュールは標準ではカーソルが表示されません。

今回は、LCDを扱う際、カーソルのON/OFFをしたい場合どうしたらよいか、メモしておきます。
どうするかというと、LCD_1.asmに少し追加するだけでOKです。

追加すると、APIが増えたような感じで、手軽にカーソルのONとOFFができます。

lcd_cur.png
↑LCDへのカーソルの表示


◆概要

ロータリーエンコーダとは、下の写真のように「回す」ものです。

encoder.jpg

マイコンにつけて使うと、使いやすいインターフェイスを実現できます。
実際に、身の回りのものでは電子レンジなどに使われています。

私はいままではあまり気にしていませんでしたが、秋月のあるキットに使われており、
けっこう使いやすい(回して操作するのが面白い)ことがわかったので使ってみたくなりました。

そこでネットで検索したところ、わかりやすいサイトがでてきたので、ロータリーエンコーダを買って
PSoCにつなげてみました。



◆リンク

参考になるサイトは以下のとおりです。


ロータリーエンコーダを使う
↑ロータリーエンコーダの仕組みや配線方法がわかります。

ロータリーエンコーダの使い方
↑ロータリーエンコーダを使う際、どのように実装したらよいのかがわかりやすいです。


基本的にはこれらのサイトさえ見てしまえば、大丈夫だと思います(笑)
特にChaNさんのインクリメンタル型ロータリーエンコーダの回転方向を演算により判定する方法
は役に立ちました。A相と B相をバイナリコードとして見るということと、その処理の方法がポイントでした。

前回、SDカードのユーザモジュールのデータシートに載っているサンプル(SDカードへのテキストデータの書き出し)を動かしてみました。
今回は書き込みではなく、SDカードのテキストデータを読み出すプログラムを作ってみました。

データシートを見ながら作ってみたのが次のコードです。前回のコードを改変して使用しました。
また、読み取ったテキストデータを見るために、シリアル通信を使っています。

PSoCのSDカードのユーザモジュールを使ってSDカードを読み書きしてみました。
ユーザモジュールを使えば簡単にSDカードの読み書きができます。
しかもFATに対応しているので、書き込んだデータをパソコンで見ることもでき非常に便利です。


sd_module.png
↑PSoCのSDカードのユーザモジュール

 PSoCで外部EEPROMを使う場合、どのようにしたらよいのかメモしておきます。
今回はI2C接続のものを使いました。

 さて、今回は使うデバイスはシリアルI2C EEPROM 24C256(マイクロチップ)です。
サイズは小さいですが、1個 160円だったのでこれにしました。
(最初はアトメル製 256kビットEEPROM 24C256にしようかと思ったのですが、
秋月の店員さんが間違えて、こちらになってしまいました(苦笑))


 I2Cで読み出しや書き込みをしたいので、
PSoCのユーザモジュール"I2Cm"を使いました。
psoc_i2cm.png
↑PSoCのユーザモジュール"I2Cm"



 また、接続は次の図の通りにしました。
SDAはPSoC側のP1[5]、SCLはP1[7]に接続しました。
(PSoCはCY8C27443-28PXIを使用)

eeprom_c.png
↑EEPROMの接続(周辺部分のみ)



 PSoCデータロガー(?)の続報です。

 以下が、以前の記事で書いたとおに、PSoCデザイナでのAD変換の設定を直した後計測された温度データです。
前回は変な値が記録されて、がたがたのグラフになっていましたが今回は大丈夫です。

 測定場所は屋内の、あまり日の当たらない部屋です。(午前中のみ日が入る)
この部屋は測定中に暖房をつけなかったのでずっと寒いままです。
もう少し温度の変動があると思いましたが、あまり変わりませんでした。
午後に多少温度が上がる程度で、午前4時ごろに少し冷え込みますが、あまり面白くないデータでした。


sensor_temp_0114_0115.png
↑測定された温度データ。1つになるのは1月5日の16時ごろに少し温度が上昇していること。いったい何が・・・?
最初のほうの温度データが高いのは、暖かい部屋から温度センサを移動してから時間があまりたっていないため、センサがまだ周囲の温度になじんでいないためです。

今日、Windowsを使用中にフルスクリーンのプログラム(ゲーム)から
デスクトップ画面に切り替えたらアイコンが壊れました。
フォルダアイコンもファイルアイコン(不明なファイルのもの)で表示されてしまいます。
再起動しても直りません;;
いろいろ探したところ、以下のサイトを見ながら
http://www.yoshibaworks.com/ayacy/inasoft/webhelp/sdfr4/HLP000037.html

C:\Documents and Settings\(ユーザー名)\Local Settings\Application Data
にあるIconCache.dbを削除して、再起動したら直りました。
(私の使っているOSはWindows XPです)

☆トラブルの際にはインターネットが便利ですね。本当に助かります。記事を書いてくれる人に感謝☆

以前の記事でとりあげたように、PSoC実験ボードを使い明るさを記録するものをつくりました。

■測定方法
明るさの測定はCdSを使います。明るさ測定の回路は以下の通りです。
CdS_Setsuzoku.png

抵抗で電圧を分圧し、電圧をAD変換することで数値(明るさ)を得るだけの簡単なものです。
今回の接続の場合、明るければ明るいほど数値は小さく、暗ければ暗いほど数値は大きくなります。
今回、AD変換には6bitのものを使っているので数値は0~2^6-1、つまり0~63がでてきます。

■測定間隔
1分おきにデータを外部EEPROMに記録することにしました。

■読み出し
PCへのデータの読み出しはシリアル通信を使いました。
PC側のソフトウェアはTeraTermを使いました。それをCSV形式のファイルで保存し、Excelでグラフを作成しました。

SensorLogyomidasi.png
↑CSV形式でデータが送られてくる

 最近は温度センサの出力を使って遊んでいます。

 さて、ある日温度センサの出力をPSoCでAD変換してみました。
ほぼ正しい値がでるものの、どうも値がふらふらしてしまい安定しません。
まれに異常な値が出ることもあります。

 これでは困るのでネットで検索してみたところ、
PSoCフォーラムの記事に気になることが書いてあったので参考にして
AnalogColumn_Clock_0 を TMR Clock、CNT Clock と同じ VC2 に直したところ、
安定して動くようになりました。

(データシートにも書いてあるらしいです。データシートに

CAUTION It is imperative that the same clock be used for all three blocks or this user module will not function correctly.

という記述がありますが、これでしょうか。よくわかりませんが、直ってよかったです。)


PSoC_ADCINC12.png
↑ユーザモジュールのパラメータしか見ていないため、気づいていませんでした。
最初はVC1になっていました。PSoCって難しい・・・。

CPU温度上昇

| トラックバック(0)

本日、普通にパソコンを使っていたところ警告が出ました。
CPUの温度が高すぎるとのことです。

cpu_temp70.png

夏ならわかりますが、冬なのに温度上昇です。
特にいつもと違うところはないはずなのに、どうしたのでしょう。
違うところといえば、いつもよりファンの回転数が少ないような・・・。
とりあえず、今度パソコンの掃除をしてみようと思います。

2007年

| トラックバック(0)

あけましておめでとうございます。
2007年になりました。
今年もよい一年になりますように。