nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

間欠カオス計算の部分

間欠カオス計算と言うのがエレキジャックのLEDイルミネーションの連載にあったのを参考に、ほかのブログなども参考にしてでっち上げました。先駆者ブログの作者様に感謝します。


説明:
xはfloatです。
led_pwm(i)と言う関数を呼び、256階調(0は消灯、255が全点灯)の表現してます。TMR0(16MHzでシステムクロックをプリスケなし4MHz×80)で20μs単位で割り込みを1単位で256回回るので、5.12msが基本点灯単位となります。minと言うのは最小明るさ設定で、それ以上暗くはしない(消灯しない)ということにしてます。

xのスタート値やa計算時のオフセット値、係数値や明るさ初期値i
なんかをi2cキーで指定してEEPROMに入れる。i2cがつながってないときはEEPROM設定で立ち上がるという計画でしたが、i2c関連関数を入れる前にメモリーが95%を超えてしまいました。

PIC16F1827でとりあえずやるかと思ってます。そうなるとi2cキーでなくてもよいが、あとあと8ピンPICに持っていくならi2cだし、どうするかと逡巡中。

現在はPIC12F1822においてEEPROM定義値で動いています。

while(1)
	{
		if(x<0.5){x=x+2*x*x;}	// caos calculating
		else {x=x-2*(1-x)*(1-x);}
		a=40+(int)(150*x);	// a is quarter dimmer cycle

		for(k=0;k<a;k++)		// go up
		{
			if(i<256){ i++;}
			led_pwm(i);
		}

		for(k=0;k<2*a;k++)		// go down
		{
			if(i>0){i--;}
			if(i<min){i=min;}	// MIN level
			led_pwm(i);
		} 
		for(k=0;k<a;k++)		// go up
		{
			if(i<256){ i++;}
			led_pwm(i);
		}


	}

それでですね。このプログラムで点灯した時のLED電圧をDSO QUADの周波数応答(内部発生の信号をFFTするのを、無理無理に内部信号無視して外部信号を与えた結果)で観測しました。黄緑が電圧のスペクトラムです。黄色は位相ですが、今回の観測では意味ありません。

文献ではパワースペクトラムでオクターブ-20dBです。100Hz以下直流成分が低いのも気にかかります。

過去書き込みWEB