コードも載せときます。
プロジェクト全部は
こちらから。
//---------------------------------------------------
// C main line
//---------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include <stdlib.h>
#define ADC 4096.0
#define PGAGAIN 4.0
#define VREF 2.6
#define SUM 50
void main()
{
// Insert your main routine code here.
int data , i, j;
float temp ;
char *ostr ;
LCD_1_Init() ;
LCD_1_Position(0,0) ;
LCD_1_PrCString("PSoC Thermometer") ;
M8C_EnableGInt ; // global interrupt enabling macro
PGA_1_SetGain(PGA_1_G4_00) ;
PGA_1_Start(PGA_1_HIGHPOWER) ;
ADCINC_1_Start(ADCINC_1_HIGHPOWER) ;
ADCINC_1_GetSamples(0) ; // read AD convert continuously
for(;;) {
temp = 0 ;
for( i=0; i<SUM; i++) {
while(ADCINC_1_fIsDataAvailable() == 0 ) ;
ADCINC_1_iClearFlagGetData() ;
data = ADCINC_1_iGetData() ;
temp += (data * VREF * 100 ) / ( ADC * PGAGAIN) ; //calculate AD --> temp
}
temp /= SUM ;
ostr = ftoa(temp,&j) ;
ostr[5] = '\0' ;
LCD_1_Position(1,2) ;
LCD_1_PrHexInt(data) ;
LCD_1_Position(1,7) ;
LCD_1_PrString(ostr) ;
}
}
2007年11月30日金曜日
PSoC温度計を作ってみた(その4)
PSoC温度計を作ってみた(その3)
コーディングと動作確認、そして完成へ
プロジェクトファイルをおいておくのでそちらを参照してください。moduleのイニシャライズをしたら、ADコンバータのデータを読み込み計算結果を合計して、平均値を出して表示します。これを繰り返すだけですね。
ADCINC_1_Start() と PGA_1_Start()でパワー指定をするときに、 HIGH以外を選ぶとAD変換や増幅時の直線性に問題が出て、データがおかしくなることがあるので注意。特に LOWPOWERはわかっていない限り選ばないほうがいいです。
書き込んだら通電してみてください。液晶の濃さは半固定抵抗でかえられるので、見やすいように調整してください。僕が最初につくったモジュールは動かない!とおもったらとても薄くなっていただけでした。
あとは、電池駆動するなり、5VのACアダプタを刺せるようにすればそのまま使えます。リファレンスをバンドギャップ電源からとっているので、電源電圧が安定していなくてもかなり正確な温度が出るはずです。
必要パーツがコネクタ類をのぞけば、 液晶表示機と半固定抵抗、温度センサ、PSOCだけというのは面白いとおもいませんか?
まあ、実際にはこの基板は共著のYUO氏からデカップリングコンデンサが足りないという厳しい突っ込みをうけてしまったわけですが、いちおうこのまま作ってもよほどのことがないかぎり動くとは思います。
PSoC温度計を作ってみた(その2)
モジュールと論理配線
今回必要なのは ADコンバータのADCINCと 増幅用のPGA そして LCD液晶のモジュールです。ADCINCは2nd stageを選びました。それぞれ ADC / Amplifier / Misc. Digital のセクションにあります。
これらの配置は以下のとおりです。
- ADCINC DBB00 / ASC10 / ASD20
- PGA ACB00
- LCD Port2
アナログ入力の接続は、P0[7] を PGAの入力にするためにAnalogColumn_Inputmux01 を port0_7に設定し、PGAの入力をAnalogColumn_Inputmux01に設定します。PGAの倍率は4倍としました。
さらに ADCINCのPOSINPUT を ACB00にすることで、 PGAからの出力をAD変換することができます。単電源なのでNEGINPUTは使いませんが、今回はこちらも ACB00とつないであります。NeginputGAINのところで disconnected を選択しておけば大丈夫です。ADコンバータの設定は
formatが unsigned, Resolutionが12bit でクロックを VC2に設定しています。
デジタル側はADCのためのPWMだけなので アナログ側の配線だけ拡大したものを図にしておきます。
グローバルリソースは図のように設定しておいてください。VC2が1MHzなのは時間計算が楽になるからという理由ですが、今回はさほど意味がありません。
2007年11月29日木曜日
PSoC温度計を作ってみた(その1)
PSoCの開発は 物理配線 PSoC内部の論理配線と設定、コーディングとデバッグ という順番で進む。
物理配線
回路図のように P0[7] (1pin) に温度センサのLM35を接続します。もちろん VCC/GNDもひきまわします。
P2[0-6] を PSoCのモジュールの解説画面にしたがってLCDとつなぎます。LCDとのインターフェースは 4bitモードになります。これらのほかに VCC/GNDとコントラストをつなぐ必要があります。これはPSoCでLCDを使うときのデフォルトの設定になりますから1度準備しとくと便利です。
PSoC自体にもVcc/Gndを与えるのをわすれないようにしましょう。PSoCのチップはなぜか同じポートのピンが左右に散らばってるのですこし面倒かもしれません。ピン間を積極的に使うと上手に配線できるらしいですが、あまり深く考えずにラップ線かなにかでひきまわすのがよいでしょう。
余裕があればISSP用のヘッダピンをつくり、なければあとで書き込む方法を妄想しつつ実装します。僕のボードは図のようになっています。これはもともと赤外線通信のデバッグ用ボードなので、赤外線LEDと受光部、秋月で買ったフルカラーLEDなどがマウントされています。
続く
PSoC温度計
手持ちの赤外線解析用の冶具にLM35DZを足して温度計に加工した。たんに家があまりにも寒いのに室温を計る寒暖計が夏の猛暑で壊れてしまったからだ。
PICなどのマイコンで作ると、LM35の 1Vで100度という出力はあまりにも小さくオペアンプを足すのが普通だが、PSoCの場合には内蔵のPGAでそのまま増幅できるので実質温度センサとPSoCだけで完成する。あとはモジュールのLCDドライバで出力すればおしまい。50samplingして平均しているが、室温を見るには十分だ。非常に簡単かつ実用的で、練習再開にはもってこいともいえるかもしれない。
(追記)
どうせなら、作ったものだけじゃなく作り方も書けと怒られたので書いてみた。PSoCは設定項目が多いのでおもったより長くなったので3分割のわりにたいしたことをやっていない。実質の作業は、僕の場合温度センサを足してコードを書いただけなので、1時間もかかっていない。blogかくほうがよっぽど時間がかかっている。
キムワイプ
2007年11月28日水曜日
書き込み機の先ふたたび
2007年11月26日月曜日
2007年11月21日水曜日
PSoC書き込み器(の先)
PSoC にminiprogで書き込みをするときには、resetをいれて5本のラインをつなぎこむ。
基板にそのためのヘッダを立てるのをいつもやってきたのだが、
すこしでも基板を簡単にするために、ヘッダをサボって書き込む方法を考えた。
そこで思いついたのがICクリップを使って挟んでやる方法だ。28pinのクリップは高かったので、14pinのクリップに。実際は10pinでよかったらしい。
電源は別途テスト用クリップを伸ばすことで対応した。2520の端子を圧着してソケットに差したものをクリップのピンに差し込んで準備完了。分解できるので失敗しても無駄にならない。
反対側には、ピンヘッダを半田付けし、プログラマにさせるようにしておいた。
想像以上に簡単に作れたわりに、基板の配線が楽になって、いくつも基板同じような基板を作るときには重宝する。もっとも、DIP品でないPSoCの場合には別途やりかたを考える必要がある。
積算電力計
自分で作ってみたハードウェアの消費電力を計測したいときは結構ある。たとえば、「これバッテリー駆動でうごかしちゃおうかなー。どのくらいうごくかなー」と考えたときは、仕様値ではなく実測値がほしい。
- 累積電力(Wh), 累積消費電流量(Ah), 瞬間電力(W), 瞬間電流(A), 電圧(V)
- 精度0.01A, 0.01V、MAX 60V/60A
- 自分の電源は計測源からもとれるし、外付け電源もつく
新しい半田ごて
会社でずっと私物をつかっているのもなんだから、という理由で新しい半田ごてを買ってみた。右の画像が今までつかっていた HAKKOの半田ステーション926 。買ったのはもう10年以上前で、ずいぶんお世話になっていた。たとえば、古い話では486SXのノートをAMDの486DX互換のチップに付け替えるために、208ピンのQFPのリプレースを行った、みたいな思い出もある(X11は浮動小数点演算を多用するので、SX->DXになると別物になったようなさくさく感を味わえる。)
(2007/11/22追記)
そもそもこて先の構造からして違う、っていうのが一番驚いたところ。
あとは、こて台にスイッチが付いていてこてを置くとすぐにスリープにはいってくれるので、散らかった机の上でもちょっと安心できる。そのまましばらく放置しておくとオートパワーオフしてくれるのがとてもうれしい。時代に取り残されいた感じがするのは残念だけど、純粋にいい道具はうれしいな。
2007年11月20日火曜日
部品調達先(国内編)
秋葉原のすぐ近くに住んでいるとかオフィスが徒歩圏内にある、っていう場合でも、いまどきやっぱり困ってしまうことがあるのが「部品の調達先」。秋葉原でも部品屋さんは明らかに減っているし、結局店頭までいかないと在庫の確認や扱いの有無を確認できないことがほとんどだ。
で、このインターネット時代に役に立つのがWebでの通販サイト。
そんなときに役に立つサイトを列挙しておこう。
- RSオンライン
- 東京エレクトロンデバイスのTed e-line
- チップワンストップ
- e部品
- ELISshop
- 三共社通販
上のサイトをぐるっと回ると、だいたい入手性がわかるので、部品選択の役にもたつしね。
のせたいサイトはまだあるので次回にでも追加します。