目次 過去の日記 ご意見†
11/25 秋月のオシロスコープキット†これ→http://akizukidenshi.com/catalog/g/gK-04279/ こちら→http://ynk.jp/electronics/kit/oscilloscope/index.html あっという間に完成。テスト信号の500Hzの方形派もきれいに取れてる。
周波数カウンタとかもついていて、5000円弱で、PCに波形も保存できて、結構お得! 7/14 Analog MUX†PSoCのAD変換は、多くてもTRIADCの3点しかできない。 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†PSocで遊んでいると、変数の中身を見たい時がよくある。 そんな時、itoa関数と使うと便利。BYTE型の数字をそれに対する文字列にして送信してくれる。 #include <stdlib.h> char line[3]; main(){ TX8_PutString(itoa(line,data,10)); } とすると、文字コードに変換してくれた結果が送信されるので、そのまま見ることができる。 例えばこんなプログラムを書くと、 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カメラ†参考になりそうなサイト 1月05日 HS15P 湿度センサー†測定回路例を見た時は唖然としたけど、これを使えば簡単になる・・かな 11月12日 クロックたくさん†↓書きました 7月11日 脈拍†秋月パルスを 指の当てる場所、当てる強さがすごい難しくて、なれないときれいな脈波形が出てこない。 マイコンぺには難しいかなぁ・・ 7月1日†PSoC低消費電力化†アナログブロックを使っていない時、 http://dr.matrix.jp/psoc3.html パスコン†マイコンの横にはパスコンが必要!ってことで盲目的に0.1uFをつないでいたけど、
なぜ0.1uFなの?
6月25日 驚愕の事実の事実@SPI†SPIMのクロックの上限より大きな周波数で通信しようとした、のは間違い(ぁ ・・・当時なぜ気づかなかった〜〜 6月21日 驚愕の事実@SPI†PSoCのSPIMのクロックの上限は4MHz。なのに、今作っている(使っている)プログラムは、8MHzで通信させようとしていた。(オーバクロック!) とりあえずしっかり確認しながら設計をやっていきますorz #通信速度を落としたときに、処理時間がデッドラインを超えないかが怖い・・ 6月25日の日記へ続きます。 6月17日 †ECOの周波数†アプリケーションノートのAN32200によると、ECO(32.768kHz)は732倍されて、23.986MHzとしてIMO(=Sys Clock)の周波数になるようだ。 23.986M/12/200=9994.167Hz で、もう一度計算してみると、23.986MHz / 11 / 218 = 10.0026kHz 分周計算スクリプト†クロック周波数から、ほしいタイマの周波数を計算するのは大変なので、スクリプトを作ってみました。 6月10日†PSoCのコンパイル結果†PSoCでc言語で開発して、コンパイルした結果のアセンブラファイルについて。 フラグの処理†割り込みでフラグを処理したいっていう場面はよくある。 //それぞれ、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 と、全然変わってきていた。 6月8日†_BV()†AVRマイコンのC言語の方言(?)に、_BV(bit)っていうマクロがある。 #define _BV(bit) (1 << (bit)) という風に定義されている。 PRT1DR |= 0x82; って書いてあるとなんのこっちゃ?って混乱してしまう。だけど、 PRT1DR |= _BV(7)|_BV(1); って書くと、あぁ、1ビット目と7ビット目を1にしたいんだな。ってぱっと見てわかる。 #define LED_blue 3 ... PRT1DR |= _BV(LED_blue); PRT1DR &= ~_BV(LED_blue); とか書くと、あぁ、青色LEDを付けたい/消したいんだなってすぐわかる。 Timerの周期†dataseetによると、 OutputPeriod = sourceClockPeriod x (periodRegisterValue + 1) となっている。
約50Hzずれている。(10kHz/200= 50Hz) 6月3日 PSoCで水晶を使う†PSoC内蔵のクロックだけ(ILO)だと、最大+/-2.5%ずれる精度(accuracy) #というか最初TRMだけ見てたらハマった・・ 手順†P1[0]とP1[1]の間に水晶を置き、それぞれの端子からコンデンサを付けてVddに繋ぐ。 グローバルリソースを変更
結論から言うと、P1[1]側に12pF、P1[2]側に100pFをつなげる(20 Pin SSOPの場合)。 #ここは読んでてもなんとなくしか理解できなかった・・ 注意点†P1[0]とP1[1]は、プログラムを書き込むピンでもある。水晶をつなげたままでもプラグラムは書き込める。 結果†10kHzごとにパルスを出してみた。オシロスコープの周波数カウンタの表示。
追記→6月17日の日記へ 参考†ここのサイトがすごくまとまってました。http://bluefish.orz.hm/sdoc/psoc3.html 6月1日†オシロスコープ(TDS2024B)のUSBへのデータの保存†先生のページ(http://akita11.jp/plan/osc/ → Know-hows / Tips)に書いてあった。 PSoC timer8の割り込み周期†グローバルリソース SysClk 24MHz CPU_Clock CycClk/1 //割り込み関数 #pragma interrupt_handler Timer8_ISR void Timer8_ISR(){ //LEDモジュール LED_On(); LED_Off(); } 上の条件の時、タイマ割り込みの周期の上限は約46kHzだった。 |