前回から随分と間が空いてしまいました...www
先日、PSoCのPRS(汎用疑似乱数発生器)を使ったブログを拝見しました。
以前からPRSを使ってみたかったのですが、いまいち使い方がわからず放置していました
それでブログを見て、おぉ!これはありがたい!!ちょっとやってみようと気になりました。
PRS8_WritePolynomial()で多項式の値(ここでは0xB8)、PRS8_WriteSeed()でシード値を入れるとランダムな値を返すらしい。
シード値とありますが、この値を変えるとDuty比が変化します。
という事で、試しにVRでシード値を変化させるプロジェクトを作成しました。
ソースはこんだけです。
PRS8のCompareOutから出力される信号をオシロでキャプチャしてみました。

Duty 3%

Duty 50%

Duty 100%
それぞれ平均電圧(Vavg)も予定通りです。
これで期待するのは乱数の取得ではなくてDCモーターを低速で回転させる事です。
単純にPWMで低Duty比だとDCモーターは回りません。でもPRSなら回るんじゃないかと...無理か?w
そのうちモーターを使った実験をしようと思います
プロジェクトファイルです。
デザイナ: 5.1 SP2
デバイス: PSoC CY8C29466 5V
コンパイラ:ImageCraft
PSoC_PRS8_29466.zip
先日、PSoCのPRS(汎用疑似乱数発生器)を使ったブログを拝見しました。
以前からPRSを使ってみたかったのですが、いまいち使い方がわからず放置していました

それでブログを見て、おぉ!これはありがたい!!ちょっとやってみようと気になりました。
PRS8_WritePolynomial()で多項式の値(ここでは0xB8)、PRS8_WriteSeed()でシード値を入れるとランダムな値を返すらしい。
シード値とありますが、この値を変えるとDuty比が変化します。
という事で、試しにVRでシード値を変化させるプロジェクトを作成しました。
ソースはこんだけです。
#define bPOLY_255 0xB8 // Modular Polynomial = [8,6,5,4] 10111000 #define bSEED_255 0xFF // Seed value [Duty%] void main(void) { INT iData; M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts PGA_1_Start( PGA_1_HIGHPOWER ); ADCINCVR_1_Start( ADCINCVR_1_HIGHPOWER ); ADCINCVR_1_GetSamples(0); PRS8_1_WritePolynomial( bPOLY_255 ); // load the PRS polynomial PRS8_1_WriteSeed( bSEED_255 ); // load the PRS seed PRS8_1_Start(); // start the PRS8 while(1){ while( ADCINCVR_1_fIsDataAvailable() != 0 ){ iData = ADCINCVR_1_iGetDataClearFlag(); PRS8_1_WriteSeed( (BYTE)iData ); } } }
PRS8のCompareOutから出力される信号をオシロでキャプチャしてみました。

Duty 3%

Duty 50%

Duty 100%
それぞれ平均電圧(Vavg)も予定通りです。
これで期待するのは乱数の取得ではなくてDCモーターを低速で回転させる事です。
単純にPWMで低Duty比だとDCモーターは回りません。でもPRSなら回るんじゃないかと...無理か?w
そのうちモーターを使った実験をしようと思います

プロジェクトファイルです。
デザイナ: 5.1 SP2
デバイス: PSoC CY8C29466 5V
コンパイラ:ImageCraft
