[[作業日誌]]


目次
#contents();

過去の日記 
-[[./自主課題]]
-[[./マイコンペ]]
-[[./2009年度]]

[[つくったもの>./つくったもの]]

*ご意見 [#y42b8a4b]
- main.lisはデマングル化されたシンボルを出してると思われまする。 -- [[nishino]] &new{2010-06-11 (金) 00:40:32};
- PSoCについてるのCコンパイラだから、デマングルなんかあるわけないじゃんorz
というわけで見たところ、main.lisはmain.oのアセンブリでした。(プロジェクト名).lstは実行可能ファイルのアセンブリでした。 -- [[nishino]] &new{2010-06-14 (月) 01:32:05};
- なるほど。てことはmain.cで書いた部分がどうアセンブリになってるのかな〜って思ったらmain.lisをみればいいのね。 -- [[komatsubara]] &new{2010-06-17 (木) 21:03:45};
- フラグの反転(6/10)って、flg=1-flg じゃだめでしょうか?私はいつもこうやってます。 -- [[akita]] &new{2010-06-29 (火) 23:04:26};
- ↑その発想はなかったです フラグ処理ならその方がスマートで理解しやすいですね。 -- [[komatsubara]] &new{2010-07-02 (金) 00:27:43};
- 俺、昇天なう。反応が悪いならCdsとトランジスタで作るという手も。 -- [[nishino]] &new{2010-07-11 (日) 20:09:16};
- やや古い話ですが、AMUXで切り替えての多点ADCの話は、情報処理学会誌の秋田のPSoC記事に載ってますよ。 -- [[akita]] &new{2011-11-26 (土) 01:12:43};

#comment();
*11/25 秋月のオシロスコープキット [#w3384439]
これ→http://akizukidenshi.com/catalog/g/gK-04279/
若干高いけど、白抜きの方がかっこいいからね!

こちら→http://ynk.jp/electronics/kit/oscilloscope/index.html
と、そこからのリンクを参考にはんだ付け。
だいぶハードウェアのバージョンが上がっている?ので、説明書・参考HPを随時読み変えながらはんだ付け。

あっという間に完成。テスト信号の500Hzの方形派もきれいに取れてる。
しかし、トリガがどこで起こっているのかが分からない。トリガの電圧は決めれるんだけど、それが横軸上のどの場所なのか表示されないので、なんか落ち着かない。
あと、隠しコマンド?として、
-PCへ波形送信
--HOLD中にLEBELボタンで、UARTを使ってPCに波形を送信できる。
--パソコンはXMODEM(CRC)で受信します、画像形式はBMPです。
--通信仕様は、38400bps、データ8bit、スタート・ストップビット1bit、パリティ無し、フロー制御無し

-FFT機能
--NORMAL中に、MODE長押し

周波数カウンタとかもついていて、5000円弱で、PCに波形も保存できて、結構お得!

&ref(OCR.jpg);

*7/14 Analog MUX [#x4ec6d93]
PSoCのAD変換は、多くてもTRIADCの3点しかできない。
しかし、MUXで配線を切り替えてやれば、それ以上の点数を変換できる。もちろんMUXを切り替えるので、同時には測定できない。AMUX4で4点のMUXになる。
以下のようにすればいい。


 main(){
 unsigned char ADC_ALU_No[]={AMUX4_PORT0_7,AMUX4_PORT0_5,AMUX4_PORT0_3,AMUX4_PORT0_1};
  AMUX4_Start();
  while(1){
   AMUX4_InputSelect(ADC_ALU_No[(++i)&3]);
   ADCINC_GetSamples(1);
   while(!ADCINC_fIsDataAvailable());
   ADC_result[i]=ADCINC_iClearFlagGetData();
  }
 }
MUXが変化した直後にAD変換したら、値がふらつくかな?と思ったけどそんなことは無かった。

http://shokai.org/blog/archives/5272
*7/14 itoa [#h5642dff]
PSocで遊んでいると、変数の中身を見たい時がよくある。
AD変換の結果とか、for文がちゃんと動いているか、とか。
しかしUART_1_PutChar(d);
だと1文字しか表示できないし、そもそも数字でしか表せられない。文字で表示させようにも、文字コードに変換とかしなきゃ行けない。

そんな時、itoa関数と使うと便利。BYTE型の数字をそれに対する文字列にして送信してくれる。
255という数字を、2と5と5という文字3つの文字列にしてくれる。

 #include <stdlib.h>
 char line[3];
 main(){
  TX8_PutString(itoa(line,data,10));
 }
とすると、文字コードに変換してくれた結果が送信されるので、そのまま見ることができる。
#一般的なitoa命令の第1引数と第2引数が、psocでは逆らしい

 例えばこんなプログラムを書くと、
 for(i=0;i<4;i++){
  TX8_PutString(itoa(line,i,10));
  TX8_CPutString(":");
  TX8_PutString(itoa(line,data[i],10));
  if(i==3){
   TX8_PutCRLF();
  }else{
   TX8_CPutString(" ");
  }
 }

 こんな出力が出てくるので、デバッグが楽
 0:255 1:0 2:255 3:0


*05/10 c328カメラ [#i1badecd]
参考になりそうなサイト
http://blog.goo.ne.jp/mimipsoc/e/e7ce7d266cba4fbca015202c01370866
http://arms22.blog91.fc2.com/?tag=C328
http://arms22.blog91.fc2.com/blog-entry-261.html
*1月05日 HS15P 湿度センサー [#pc023695]
測定回路例を見た時は唖然としたけど、これを使えば簡単になる・・かな
http://homepage3.nifty.com/sudamiyako/zk/hs15/hs15.htm


*11月12日 クロックたくさん [#a6a036ff]
↓書きました
[[PSoC入門:クロックたくさん]]

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

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

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

マイコンぺには難しいかなぁ・・
*7月1日 [#t8b2b6d9]
** PSoC低消費電力化 [#n845bc70]
アナログブロックを使っていない時、
global resoureceの、analog powerを、All Offにすると、
スイッチドキャパシタをやリファレンス電圧源の電源を落とす(?)のでその分消費電流が減るらしい。
要実測

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

**パスコン [#p40d6a8c]
マイコンの横にはパスコンが必要!ってことで盲目的に0.1uFをつないでいたけど、
その詳細な理由は、
-電源電圧の瞬発的な変化を吸収する
--ICに瞬時的に電流が流れた時、電源ラインからの供給では間に合わないので、パスコンから供給する
--電源ラインに電圧変動があった場合、変動�雜鯲�成分をコンデンサでGNDに落とす
-http://www.geocities.co.jp/HeartLand-Tachibana/9059/otasuke/pascon.htm

なぜ0.1uFなの?
-単に安くて容量があり周波数特性に優れているのは積層セラミックの0.1u らしい
-みんな使っているからデファクトスタンダードになった?
--もちろんもっと高い/低い周波数のために、いろいろなコンデンサを並列に繋ぐことにこしたことはない
--電源に10uFの電界コンデンサを置くのも王道
-http://oshiete.goo.ne.jp/qa/1108642.html?order=asc


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

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

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

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

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

[[6月25日>#h5be481b]]の日記へ続きます。

*6月17日 [#ned44e01]
**ECOの周波数 [#w8bcddad]
アプリケーションノートのAN32200によると、ECO(32.768kHz)は732倍されて、23.986MHzとしてIMO(=Sys Clock)の周波数になるようだ。
つまり純粋な24MHzではない。
そのことを考慮すると、[[6月3日の日記>#jc39eab7]]は考え方が違ってて、動作自体は正しかったことになる。
 23.986M/12/200=9994.167Hz
で、もう一度計算してみると、23.986MHz / 11 / 218 = 10.0026kHz
実測は10.0024kHzだった。前回より10kHzに近い値になった。


**分周計算スクリプト [#w65405fa]
クロック周波数から、ほしいタイマの周波数を計算するのは大変なので、スクリプトを作ってみました。
すごいやっつけなので、使えないかもですが[[一応公開>http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php?plugin=attach&pcmd=open&file=clock.html&refer=komatsubara]]
*6月10日 [#t0c0c94c]
** PSoCのコンパイル結果 [#p11e1e04]
PSoCでc言語で開発して、コンパイルした結果のアセンブラファイルについて。
コンパイルすると色々なファイルが出てくるけどそのなかに、"main.lis"っていうのと、"(プロジェクト名).lst"っていうファイルが2個ある。
両方とも中身はアセンブラっぽいんだけど、それぞれどういう意味なんだろう・・?

**フラグの処理 [#r5fff154]
割り込みでフラグを処理したいっていう場面はよくある。
 //それぞれ、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日 [#q2a741c3]
** _BV() [#n6770bba]
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の周期 [#yc76b746]
dataseetによると、
 OutputPeriod = sourceClockPeriod x (periodRegisterValue + 1)
となっている。
今たとえば、Sysclockを24MHz、sourceClockPeriod(VC1の値)を12のとき、
10kHzがほしい時は、periodRegisterValueを199にしなければならない。
今まで200を入れていたけど、厳密には間違いだったようだ・・orz
実測してみると、
|period|frequancy[kHz]|
|200|9.94438|
|199|9.99410|
約50Hzずれている。(10kHz/200= 50Hz)

*6月3日 PSoCで水晶を使う [#jc39eab7]

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だけ見てたらハマった・・

**手順 [#y2c6589f]
P1[0]とP1[1]の間に水晶を置き、それぞれの端子からコンデンサを付けてVddに繋ぐ。
Designerで、それぞれのピンの設定を以下のようにする。
| |Select|Drive|
|P1[0]|XtalOut|Hight Z|
|P1[1]|XtalIn|Hight Z|

グローバルリソースを変更
|32k_Select|External|
|PLL_Mode|Ext_Lock|


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

**注意点 [#o8370c9a]
P1[0]とP1[1]は、プログラムを書き込むピンでもある。水晶をつなげたままでもプラグラムは書き込める。
ただし!実行させるときはMiniProgは外さないといけない。MiniProg容量負荷が大きすぎる?のか水晶がしっかり発振できない。
&ref(miniprog.jpg,,50%);
**結果 [#r6ebc1b1]
10kHzごとにパルスを出してみた。オシロスコープの周波数カウンタの表示。
|ILO(内蔵)|10.07kHz|
|ECO(水晶)|9.94434kHz|

-Accuracyは大体同じ値になった。
--#水晶〜端子間の基板レイアウトをうまくすればもっといい値が出た?
-Precisionは違いが出てきた。
--ILOが10.070kHz〜10.074kHzの値をうろうろしていたのに対し、ECOは9.94434kHzでずっと一定だった。

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

**参考 [#w4bda9c7]
ここのサイトがすごくまとまってました。http://bluefish.orz.hm/sdoc/psoc3.html


*6月1日 [#u830c0a1]
**オシロスコープ(TDS2024B)のUSBへのデータの保存 [#tfd4027e]
先生のページ(http://akita11.jp/plan/osc/ → Know-hows / Tips)に書いてあった。
手持ちの、Trancend 2GBではちゃんと波形を保存できました!
**PSoC timer8の割り込み周期 [#md49642f]
 グローバルリソース
 SysClk 24MHz
 CPU_Clock CycClk/1

 //割り込み関数
 #pragma interrupt_handler Timer8_ISR
 void Timer8_ISR(){
  //LEDモジュール
  LED_On();
  LED_Off();
 }

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

IP:133.28.96.26 TIME:"2011-11-26 (土) 01:12:43" REFERER:"http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php?komatsubara" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS