作業日誌

目次

過去の日記

つくったもの

ご意見


11月12日 クロックたくさん

↓書きました
PSoC入門:クロックたくさん

7月11日 脈拍

秋月パルスをぱくtt参考に、脈拍を測ってみた。
フォトリフレクタにはPRP-220、アンプの増幅率は8倍。

myaku.jpg
逆算するに、脈波形は50mVp-pぐらい?

指の当てる場所、当てる強さがすごい難しくて、なれないときれいな脈波形が出てこない。
オシロ見ながらじゃなきゃ無理・・

マイコンぺには難しいかなぁ・・

7月1日

PSoC低消費電力化

アナログブロックを使っていない時、
global resoureceの、analog powerを、All Offにすると、
スイッチドキャパシタをやリファレンス電圧源の電源を落とす(?)のでその分消費電流が減るらしい。
要実測

http://dr.matrix.jp/psoc3.html

パスコン

マイコンの横にはパスコンが必要!ってことで盲目的に0.1uFをつないでいたけど、
その詳細な理由は、

なぜ0.1uFなの?

6月25日 驚愕の事実の事実@SPI

SPIMのクロックの上限より大きな周波数で通信しようとした、のは間違い(ぁ
データシートを確かめたら、SPIMモジュールのクロックの半分の周波数が通信の周波数になるよう。
つまり8MHzをクロックに入れていたけど、実際の通信速度は4MHzで上限に収まっていた。
ということで、勘違いしていたけど、結果として上限に収まる値になっていた。

・・・当時なぜ気づかなかった〜〜

6月21日 驚愕の事実@SPI

PSoCのSPIMのクロックの上限は4MHz。なのに、今作っている(使っている)プログラムは、8MHzで通信させようとしていた。(オーバクロック!)
・・・当時俺はなぜ気付かなかったんだろう?
・・・そして、なぜ動いてたんだろう?
・・・卒研発表これでやったよ
たまに素直に動かなくなったのもこれが原因なのだろうか・・?

とりあえずしっかり確認しながら設計をやっていきますorz

#通信速度を落としたときに、処理時間がデッドラインを超えないかが怖い・・

6月25日の日記へ続きます。

6月17日 

ECOの周波数

アプリケーションノートのAN32200によると、ECO(32.768kHz)は732倍されて、23.986MHzとしてIMO(=Sys Clock)の周波数になるようだ。
つまり純粋な24MHzではない。
そのことを考慮すると、6月3日の日記は考え方が違ってて、動作自体は正しかったことになる。

23.986M/12/200=9994.167Hz

で、もう一度計算してみると、23.986MHz / 11 / 218 = 10.0026kHz
実測は10.0024kHzだった。前回より10kHzに近い値になった。

分周計算スクリプト

クロック周波数から、ほしいタイマの周波数を計算するのは大変なので、スクリプトを作ってみました。
すごいやっつけなので、使えないかもですが一応公開

6月10日

PSoCのコンパイル結果

PSoCでc言語で開発して、コンパイルした結果のアセンブラファイルについて。
コンパイルすると色々なファイルが出てくるけどそのなかに、"main.lis"っていうのと、"(プロジェクト名).lst"っていうファイルが2個ある。
両方とも中身はアセンブラっぽいんだけど、それぞれどういう意味なんだろう・・?

フラグの処理

割り込みでフラグを処理したいっていう場面はよくある。

//それぞれ、flgの値が0なら1に、1なら0にする処理
flg = ++flg % 0x02;
flg = ++flg & 0x01;

それぞれアセンブラで見てみると、

flg = ++flg&0x01;
--------
add [_flg],1
and [_flg],1
flg = ++flg%0x02;
--------
mov A,[_flg]
add A,1
mov [__r0],A
mov [_flg],A
mov A,2
push A
mov A,[__r0]
push A
xcall __divmodu_8X8_8
add SP,-1
pop A
mov [_flg],A

と、全然変わってきていた。
タイマ割り込み数をカウントするときとかも(2のべき乗の時だけだけど)後者が使えそう。

6月8日

_BV()

AVRマイコンのC言語の方言(?)に、_BV(bit)っていうマクロがある。
これは、

#define _BV(bit) (1 << (bit))

という風に定義されている。
これ、実はすっごい便利。PSoCではデフォルトで定義されてないので、俺は自分で定義して使ってる。

PRT1DR |= 0x82;

って書いてあるとなんのこっちゃ?って混乱してしまう。だけど、

PRT1DR |= _BV(7)|_BV(1);

って書くと、あぁ、1ビット目と7ビット目を1にしたいんだな。ってぱっと見てわかる。
ほかにも、

#define LED_blue 3
...
PRT1DR |= _BV(LED_blue);
PRT1DR &= ~_BV(LED_blue);

とか書くと、あぁ、青色LEDを付けたい/消したいんだなってすぐわかる。
PSoCは2進数が使えるけど、他のマイコンでは使えなかったり、2進数でも8ケタになると読みにくいから、あまり使ってない・・
他にも、AVRにはビット操作をするのに楽なマクロがいろいろある。
http://avrwiki.jpn.ph/wiki.cgi?page=Getting+Started+Notes+-+Ports#p9

Timerの周期

dataseetによると、

OutputPeriod = sourceClockPeriod x (periodRegisterValue + 1)

となっている。
今たとえば、Sysclockを24MHz、sourceClockPeriod(VC1の値)を12のとき、
10kHzがほしい時は、periodRegisterValueを199にしなければならない。
今まで200を入れていたけど、厳密には間違いだったようだ・・orz
実測してみると、

periodfrequancy[kHz]
2009.94438
1999.99410

約50Hzずれている。(10kHz/200= 50Hz)

6月3日 PSoCで水晶を使う

PSoC内蔵のクロックだけ(ILO)だと、最大+/-2.5%ずれる精度(accuracy)
ここで、外付けの水晶を使うと、さらに高精度(accuracy)になる、はず。
やり方はTechnical Reference Manual(http://www.cypress.com/?rID=3208 )に書いてあるけど、
Application NoteのAN2027(http://jp.cypress.com/?id=1029&rtID=5&rID=26009 )の方が詳しい。

#というか最初TRMだけ見てたらハマった・・

手順

P1[0]とP1[1]の間に水晶を置き、それぞれの端子からコンデンサを付けてVddに繋ぐ。
Designerで、それぞれのピンの設定を以下のようにする。

SelectDrive
P1[0]XtalOutHight Z
P1[1]XtalInHight Z

グローバルリソースを変更

32k_SelectExternal
PLL_ModeExt_Lock

結論から言うと、P1[1]側に12pF、P1[2]側に100pFをつなげる(20 Pin SSOPの場合)。
PLLを使わない時は、TRMに書いてあるようにC1とC2(≒20pF)でいいんだけど、
実際使うときはPLLモードで使う(らしい)。

#ここは読んでてもなんとなくしか理解できなかった・・

注意点

P1[0]とP1[1]は、プログラムを書き込むピンでもある。水晶をつなげたままでもプラグラムは書き込める。
ただし!実行させるときはMiniProgは外さないといけない。MiniProg容量負荷が大きすぎる?のか水晶がしっかり発振できない。
miniprog.jpg

結果

10kHzごとにパルスを出してみた。オシロスコープの周波数カウンタの表示。

ILO(内蔵)10.07kHz
ECO(水晶)9.94434kHz

追記→6月17日の日記へ
考え方が違ってて、動作自体は正しいです。

参考

ここのサイトがすごくまとまってました。http://bluefish.orz.hm/sdoc/psoc3.html

6月1日

オシロスコープ(TDS2024B)のUSBへのデータの保存

先生のページ(http://akita11.jp/plan/osc/ → Know-hows / Tips)に書いてあった。
手持ちの、Trancend 2GBではちゃんと波形を保存できました!

PSoC timer8の割り込み周期

グローバルリソース
SysClk 24MHz
CPU_Clock CycClk/1
//割り込み関数
#pragma interrupt_handler Timer8_ISR
void Timer8_ISR(){
 //LEDモジュール
 LED_On();
 LED_Off();
}

上の条件の時、タイマ割り込みの周期の上限は約46kHzだった。
これ以上の周期で割り込みをかけようと思っても、46kHzで頭打ち。留意しましょう。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS