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

寝ても覚めてもPSoC

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

PSoCでKnightRider

2012年01月07日 | PSoC

年末、嫁が何を思ったかナイトライダーを観たいと言い出した。
どうせ正月もロクな番組をやらないのでレンタル屋で借りて観ました。
シーズン1の古いやつですww
日本のTV放送でカットされた部分は吹き替えが無いので残念。

で、観終わり、ナイトに影響されてPSoCで作ってしまいました
もはや定番のLEDピカピカですね!

サクッと作ったので何の工夫もありません。
同一のLEDを8個も持ってなかったのでLEDバーにしちゃいました。
しかも赤色が無かったので緑色というwwww
まぁ10秒も見てれば飽きがくる代物ですね。

構成はトランジスタアレイと抵抗アレイ、LEDバーにPSoCです。
PSoCはLEDの明るさ用にPWMを8個使いました。とてもシンプル!





携帯で撮った動画ですが、なかなか綺麗にアップできたなぁ...
これが一番の収穫かも。

PSoC Designer 5.2

2012年01月03日 | PSoC
あけましておめでとうございます
去年は後半何もしていませんでした。
時間が取れないのもありますが、ネタが無いってのも大きいですね。
まぁ無理せずやっていこうかなと。

さて、PSoC Designer 5.2が出てましたのでインストールしました。
何が変わったのかわからんぐらいです。(リリースノート見てませんw)

PSoCと言えば、巷では既に話題はPSoC 3/5になっているようです。
早く秋月に並ばないかなあ...というかDIP製品ってあるのかな


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

PSoC Designer 5.1 SP2

2011年07月26日 | PSoC

Designer 5.1 SP2が出ていたのでインストールしてみました。
なんと日本語データシートが消えていた(選択できなくなっていた)wwwwww
日本語化が面倒になってサポートやめたな。ちょっと寂しいっすね....

と思ったら、モジュールを選択して右クリックメニューで、Datasheet→Get Latest From Webで日本語データシートが読めるらしい。
期待を込めてやってみると、確かに日本語データシートがあるが、PDFのダウンロード形式になっとるwww ぉぃぉぃ面倒くせぇーぞなもし?
しかも全部のモジュールが対応されてねーwww

Programのモーダルといい、改悪ばかりでどうしようもないなCypressはwwww
ここまでくると、モジュールもバージョンアップしてるけど性能劣化してるんじゃないかと疑ってしまう。

まぁ、とりあえず問題なければ今後は5.1SP2でいきます。

PSoCとColdFireを使って温度をTwitterに自動送信[LM60]

2011年07月22日 | PSoC
前回はInterface誌付録のColdFire基板でTwitterに自動送信しました。
しかし、今後いろいろやろうとした時に、このColdFire基板のモジュールを使い方を覚えるのは面倒です。LM60の温度ぐらいならできますが、ちょっと込み入った事をやろうとすると大変です。いや、簡単かもしれませんが、僕は覚える気になりません (一度覚えたらPSoCよりも良いんだろうけど...)
そこで使い慣れたPSoCを主として扱い、ColdFire基板はTwitterに投稿する等のインターネット関係だけに専念させる事にしました。
PSoCとColdFireとのやりとり(通信)はUARTで行います。

今回は簡単にするため、温度計測と投稿メッセージ作成をPSoCで行い、ColdFireはそのメッセージをTwitterに投稿するだけです。
ColdFire側はメモリ確保をチョコチョコやっていますので、あまり繰り返すとメモリ確保に失敗するかもしれません。初回に確保するだけにした方がよいでしょうね。


という訳でできました!
これで、センサーをPSoCで処理してHTTP POSTしたり、何かWeb APIを取得してPSoCで内容を表示したりする事ができるようになりました

回路図です。


プロジェクトです。
[PSoC側]
デザイナ: 5.0 SP6
デバイス: PSoC CY8C27143 3.3V
コンパイラ:ImageCraft
テキスト: UTF-8
PSoC_LM60_ColdFire.zip

[ColdFire側]
Device: ColdFire MFC52233 CQ
IDE : CodeWarrior for ColdFire V7.0
Text : UTF-8
Font : Japanese FONT
ColdFire_twtpsoc.zip
※MakeColdfireBin.batのIPアドレスを自分の環境に書き換えてください。

PSoCでWavファイルを再生 [LPF2]

2011年07月01日 | PSoC
PSoCでWavファイルを再生させてみよう。音は光の次に面白いよね!
手軽にするため、データは32KBのROMに収まるように8KHz 8bit mono で作成します。
それでも3秒程度しか入りませんので、吟味した結果、題材はケネディ大統領のアポロ計画で有名な演説の1フレーズ、『We choose to go to the moon.』を選択しました。
このファイルをツールを使ってC言語ソースに変換して取り込み、PWM等で定期的にDACに出力すればとりあえず再生はできます

が、そのままでは音質が悪いのです。音が硬いというか。
とりあえず波形を見るとガタガタです。DACの特性で仕方が無いようです。
それをなんとかできるのがLPFモジュールということらしいので、これはやってみる価値はありそうだ。いや、やるしかない!
しかし当方、アナログは全くわからないwwので、どう設定したらよいかわからない。
ググっても情報は少ないし、あっても書いてある内容が理解できない。さてどうしたものか...

考えてもわからないので、やってみることにした。
DAC8の隣にLPF2を配置。LPF2のINPUTをDACからとし、フィルターデザインは意味不明なのでテキトーに設定。
コードを書いて配線し、実行するとスピーカーからはギゴガゴゴという何やら凄い音が聞こえたwww うはっww
いろいろフィルター設定を変えても、相変わらずギゴガギギだ。LPF2をSTARTさせてなくても音が鳴るし。何がダメなんだろう??はてさて弱った...

この状態から脱出するには実に10日以上を要した。恥ずかしい。
思い切って接続方法を換えてみたのです。DAC->LPFではなくて、DAC->Port->PGA->LPFとしたらギゴギャゴゴはなくなりました!何故DACからLPFへ直に接続するのがダメなのかわかりませんが、やっと前進できました。
また、その間にチョコチョコと調べたりして、フィルターデザインの基本ポイントがわかった。(ような気がする)
1.コーナー周波数はサンプリング周波数の1/2にする。(8KHzだったら4KHz)
2.LPFへ与えるクロックは 24MHz/Divide by nの値
これでやると、
『We choose to go to the moon.』
おおぉ、ちゃんと音がやわらかくなってる!波形もまぁまぁって感じ。ウホッ!

■DAC出力の波形


■LPF2出力の波形


(ちなみにコーナー周波数を2KHz、1KHzと小さくすると波形は丸くなりますが、だんだん音がこもっていきました)

しかし、まだ素直には喜べない状態であった。
聞き取りやすくはなったものの、シャーというノイズが目立つのです。
スイッチトキャパシタのため、ある程度はノイズが出るらしいけど、ここまででるものなのかなぁ...やはりまだ設定に間違いがあるのだろうか。それともオペアンプ(386BD)のせい?
遊びで使う分には十分で無視する事はできるかもしれないが、気になるのは気になる。
現時点でこの問題はクリアできていません。
とりあえず他ごとがやりたくなったのでw、一旦棚上げとして公開します。

回路図です。


プロジェクトファイルです。(WAVファイルからC言語変換ツールも同梱)
デザイナ: 5.0 SP6
デバイス: PSoC CY8C29466 5V
コンパイラ:ImageCraft
PSoC_WavSound.zip