goo blog サービス終了のお知らせ 

寝ても覚めてもPSoC

電子工作とマイコンをやりはじめました。
ど素人ですので配信する情報の取り扱いには十分注意してください。

PSoCのPRS8を試す

2011年12月27日 | PSoC
前回から随分と間が空いてしまいました...www

先日、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
PSoC_PRS8_29466.zip