PSoC5 CY8C5888LTI-LP097 音を奏でる

プロジェクトファイルはこちら

数日、PSoCでなにをしたら良いのか、何に向いているのか色々と試行錯誤
していまして、私なりに思った事

・I2Cにはなんか向いてないなぁ
 理由はI2Cって或る一定のコモンセンスが在りますよね
 START / STOP / RESTART / ACK / NACK
 そういう共通した言葉が使われていない
・LCD、限定的だなぁ
 I2CタイプのLCDも使えるには使えるがどっちか言うと
 PSoCに合わせたLCDを使う方が全然楽みたいな縛りを感じる
・USBUARTってやってみたいがネット記事が余りにも少なすぎる
 やっとみつけてやってみたが動いて呉れない
・かといって今更RS232Cやりたくないなぁ
・或る意味決定的かな、つまり、基板を起こしたときPSoCを実装
 する訳だけど量産ならいいよ、だけど試作段階でDIPがPSoC1
 しか無いのは決定的に良くない、取り敢えずDIPでバラック組んで
 デバッグしてから量産でしょ?最初から手半田が困難って問題
 ですよね。

それと、ネット情報という資産を考えたときの指標は矢張りグーグル検索
でのヒット数だ、ちょっと調べてみた

検索文字、PSoC=約 1,940,000 件 (0.41 秒)
検索文字、PIC Microchip=約 10,800,000 件 (0.48 秒)
検索文字、arduino=約 126,000,000 件 (0.34 秒)
検索文字、raspberry pi=約 235,000,000 件 (0.36 秒)
この乖離が在る、だから出て来ないんだなって

PSoCの一番便利だなと思う部分
・レゴブロックみたいに組み立てられる
・アナログ回路モジュールが複数在る PSoC5

不便だと思う部分
・ネット検索してもなかなか問題解決策が見つからない
・秋月電子の販売数の少なさ
・ラズパイ、アーデュイーノとの親和性の無さ
・PICマイコンとの親和性の無さ
・唯我独尊なの?

まぁ、そのくらいにして私がこれだけは使えそうだと思って居る
モジュール WaveDAC  正弦波、ノコギリ波、描画波形、等が
簡単に得られるのは実に魅力的だと感じて居ます、ってんで

グーグル様に頼ってひたすらネットを彷徨いました、当然乍ら
最初は日本語サイト、然し乍らこれが殆ど壊滅状態、何だか
空しくなってきて「俺、何やってんだろ」とやがて哀しくなって

きました、なので次は英語圏、ところがこれも出てくるのは何所
やらのフォーラムサイトばっかりで問題が在って動かないソース
が提示されそれに対してアドバイスがあるものの解決したソース

は提示されていない、や、尻切れトンボの儘、何も得られない
で、中国語サイトもダメ、やっと見つかったのがスペイン語サイト
ここで他力本願発揮100%です、一発で動きました。

回路図は下記の通りですが、率直に感じたことは
何故 WaveDAC8 だけで周波数を変えられないのか
ってことですWaveDAC8専用パラメーターが在るんだからそれを
設定していけば出来るハズ、マニュアルにはこんな文言が在る

void WaveDAC8_Wave1Setup(uint8 *WavePtr, uint16 SampleSize)
Description:
Selects a new waveform array for the waveform 1 output. The WaveDAC8_Stop function should be called prior to calling this function and WaveDAC8_Start should be called to restart waveform.
Parameters:
uint8 *WavePtr: Pointer to array containing waveform data
uint16 SampleSize: Size of waveform array pointed to by WavePtr. (Maximum sample size is 4000, minimum is 4)
Return Value:
None
Side Effects:
Does not affect WaveDAC8 type or power settings

これらを駆使すれば自由にプログラミングできるはず、最初にそう考えた
からネット中探しまくったのにそれらしき記事が全く出て来ないのは何故?
って思って居たところ冒頭のスペイン語サイトを見つけたって経緯です

回路は外部クロックを選択することでWaveDAC8の周波数を変化させて居ます
ってことは音源と成る周波数毎にクロックを造らなければならないこれって
良いの? 無駄なリソース浪費ではないの? まぁ良いけどね

bandicam 2019-02-22 19-55-35-646

クロックの周波数
bandicam 2019-02-22 19-55-58-362

WaveDACのパラメーター
bandicam 2019-02-22 19-56-16-620
Muxのパラメーター
bandicam 2019-02-22 19-56-23-813

Controlのパラメーター
bandicam 2019-02-22 19-56-34-344

Pin配列
bandicam 2019-02-22 19-57-09-184
スペイン語サイトの鍵盤です
これメッチャ勉強に成ります、有り難う御座いました
notasyfrecsbg

動画です、何所の国のなんて言う曲か全く判りません
なんか哀愁が漂う曲です

ソースファイル

/* ========================================
*
* Copyright YOUR COMPANY, THE YEAR
* All Rights Reserved
* UNPUBLISHED, LICENSED SOFTWARE.
*
* CONFIDENTIAL AND PROPRIETARY INFORMATION
* WHICH IS THE PROPERTY OF your company.
*
* ========================================
*/
#include "project.h"
int main()
{
CyGlobalIntEnable;
Wave_Start();
float negra;
negra=700;
Wave_Enable();
Control_Write(0);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(1);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(2);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(3);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(5);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(6);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(7);
CyDelay(negra);
Wave_Stop();
CyDelay(1000);
for(;;)
{
Wave_Enable();
Control_Write(7);
CyDelay(negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(1.75*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(0);
CyDelay(.25*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(0);
CyDelay(.25*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(1);
CyDelay(.25*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(2);
CyDelay(.25*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(3);
CyDelay(.25*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(2.5*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(.5*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(5);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(6);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(7);
CyDelay((2+1/3)*negra);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(7);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(7);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(6);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(5);
CyDelay(negra/3);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(6);
CyDelay(negra*.75);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(5);
CyDelay(negra*.25);
Wave_Stop();
CyDelay(10);
Wave_Enable();
Control_Write(4);
CyDelay(negra*2);
Wave_Stop();
CyDelay(1000);
}
}
/* [] END OF FILE */

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です