作業日誌
マイコン初心者によるマイコン挑戦記

目次

mic004.png

domaeへのコメント

  • domaeがすごいものを作りそうな予感☆ -- kondo 2008-06-30 (月) 19:00:06
  • ↑プレッシャー? -- akita 2008-07-01 (火) 09:10:39
  • ↑↑頑張ります(汗) -- domae 2008-07-01 (火) 18:05:33
  • SDのinitは、かなり時間がかかりますね。仕様ということで。 -- akita 2009-07-08 (水) 15:01:55
  • NZeCyl http://www.vX0UUwfbV0BvG3upQKBWlc97t5wQCiD84Bdaq9Om.com -- marmont 2011-12-02 (金) 13:05:06
  • smicx' -- smicx' 2021-12-28 (火) 09:34:19

記事についてのコメントは記事ごとに置いてあるコメント欄を使ってくださいまし。

09/07/05(日)

microSDでHello World

久々の更新です。えへ。

PSoCでmicroSDに何か書き込んでみるテスト

PSoC29466の中にあるSDCardモジュールを使ってmicroSDに「Hello World」を書き込んでみる。

(参考にさせていただいたページ)

最初はmicroSDのソケットを使っていたのですが、うまくmicroSDが認識されなかった(たぶんうまくピン接続されてない)ので、
後者の方のようにmicroSDカード→SDカードの変換アダプタを使用しました。

あと、PSoCに与える電圧を3.3Vにしたので抵抗も少なくて済みました。

microsd_001.PNG

ちなみにmicroSDとPSoCの接続方法やPSoCのピンの設定方法はSDCardモジュールのデータシートに載ってます。
プログラムもほとんどデータシートのサンプルプログラムの丸写しでOKです。
(今回の場合、SD_CDを使わないのでSDCard_Present()を使う部分は不用ですね)

↓結果はこちら

microsd_002.PNG
microsd_003.PNG

これだけ書き込むのに約3秒かかりました。

LED光らせて動作確認してみたところ、サンプルプログラムの
cardInfo = SDCard_InitCard();
のところで時間がかかるみたいです。
(これって毎回必要なのかな?→明日試してみる)

08/10/27(月)

YMZ294への挑戦 03

中途半端なところで止まってたので今更だけど更新(汗)

PSoC CY8C29466との出会い

PSoCの29466を使ってYMZ294さんを操ってみる。

29466とYZM294を↓のようにつなぐ。

29466YMZ294備考
P0[0]4/6PWM8で4MHzのクロック生成
P1[0]/WR
P1[1]/CS
P1[2]A0
P1[3]/IC
P2[0]D0
P2[1]D1
P2[7]D7

P1[0]〜P1[3]のそれぞれについて'0'か'1'を出力する関数を先に用意しておく。
※データシートによると/WRと/CSは同時に設定してもいいようなので一緒に出力する。

void wr_low()
{
	PRT1DR &= ~0x03;
}
void wr_high()
{
	PRT1DR |= 0x03;
}
void a0_adr()
{
	PRT1DR &= ~0x04;
}
void a0_dat()
{
	PRT1DR |= 0x04;
}
void ic_rst()
{
	PRT1DR &= ~0x08;
}
void ic_set()
{
	PRT1DR |= 0x08;
}

(参考にしたサイト)
PSoC/汎用ポートを使用しよう

次にアドレスとデータを指定してデータを送る関数を作る。

void ad_set(BYTE adr, BYTE dat)
{
	// [1]address input
	PRT2DR = adr;
	
	// [2]address write enabled(/WR=0, /CS=0, A0=0)
	a0_adr();
	wr_low();
	
	// [3]address write disabled(/WR=1, /CS=1, A0=0)
	wr_high();
		
	// [4]data input
	PRT2DR = dat;
	
	// [5]data write enabled(/WR=0, /CS=0, A0=1)
	a0_dat();
	wr_low();
	
	// [6]data write disabled(/WR=1, /CS=1, A0=1)
	wr_high();
}

あとはこの関数を使ってレジスタのアドレスを指定してデータを送ってあげればYMZ294を自由に操ることができる。
例)
ad_set(0x07, 0x38)→楽音の#A〜#Cを出力。
ad_set(0x08, 0x0F)→#Aの音量を設定。

ノートオン/ノートオフ

楽音の周波数を設定して出力する関数
void tone(BYTE ch, BYTE pit, BYTE oct, BYTE vel)
を作る。
chで楽音のチャンネルを、
pitとoctで音程を(例えばC4とかD#5とか)、
velでベロシティをそれぞれ設定できる。
例)
tone(1,tnC,4,0x0F)→#AでC4を音量最大で出力。
※pitは#defineでそれぞれ数値に割り当ててある。

(音程の設定で参考にしたサイト)
PSGへの道

ついでにノートオフ(鳴ってた音を止める)の関数
void noff(BYTE ch)
も作る。中身はそのチャンネルの音量を0にしているだけ。

タイマを使って演奏する

Tick(分解能)を48に設定して、タイマ割り込みで変数ticの値を増やすことで曲を演奏する。
BPMはタイマ割り込みの周期Periodの値を変えることで設定できる(が、細かくは設定できない…)

あとはticごとに↑で作ったtoneとnoffを置いていけばMMLのように譜面を作って演奏することができる。

ピコピコ音楽

早速某ヒゲの人の音楽を打ち込んで演奏してみました♪

おおお!これだ!これが聞きたかったんだ!!(T▽T)

演奏の仕方など人それぞれのやり方があるみたいですが、
僕はこんな感じで自分の聞きたかった音楽を自分で作って聞くことができました。

PSoC君ともだいぶ仲良くなれた、と思います(^^;

興味のある方は是非挑戦してみては?

08/07/23(水)

PSoC First Touch 03

タイマ割り込み

タイマーを使うときの流れ
Timerを設置
Clockの設定(使いやすい周波数にしておく)
Periodの設定(割り込みが発生する間隔を決める)
ぅ廛蹈哀薀爐鮟颪(Timerの割り込み許可とスタート、割り込み処理ルーチンの記述)

定期的にLEDの明るさを変えることに成功。

またTimer_PeriodWrite()を用いれば途中で割り込みの間隔を変更できるみたいです。

YMZ294への挑戦 02

レジスタ機能

全機能は内臓されるレジスタによって制御されます。
よって各々のレジスタの値を変えることによって音を発生させることができます。

データシートがボロボロになってきたので、、、以下、自分用のメモ。

1. 楽音周波数の設定($00〜$05)

ymz004.jpg

 3チャンネル(#A、#B、#C)の楽音発生器で作られる矩形波の周波数ftを決める。
 ft=fst÷16TP (fst=2MHz)
 TP=TP11×2^12+TP10×2^11+TP9×2^10+…+TP2×2^2+TP1×2^1+TP0

2. ノイズ音周波数の設定($06)

ymz005.jpg

 ノイズ発生器で作られるノイズ音の周波数fnを決める。
 fn=fst÷16NP
 NP=NP4×2^4+NP3×2^3+NP2×2^2+NP1×2^1+NP0

3. ミキサーの設定($07)

ymz006.jpg

 各チャンネル(#A、#B、#C)毎に楽音およびノイズ音を出力するかを設定する。
 レジスタに0を書き込むと音を出力する。
 楽音とノイズ音がともに0の時はミキシングされて出力する。

4. 音量コントロールとDAC($08〜$0A)

ymz007.jpg

 各チャンネル(#A、#B、#C)の音量を設定する。
 M=0の時:L3〜L0によって16通りのレベルから音量を設定。
 M=1の時:エンベロープ発生器で作られるデータ(5bit)によって音量を制御。

 (まだエンベロープを使用したことがないのでとりあえずここまで。のちのち追加します)

08/07/23(水)の記事へのコメント

  • この表はなにで描いているんでしょう?まさかペイント? -- akita 2008-07-24 (木) 11:04:09
  • エクセルで書いた表があったのでそれをキャプチャして使いました(^^; -- domae 2008-07-25 (金) 15:13:05
  • smicx' -- smicx' 2021-12-28 (火) 09:34:41

 

08/06/27(金)

PSoC First Touch 02

前回からかなりたってしまったけどいつも心はPSoC君とともに。

CapSenseで遊ぶ

チュートリアル通りやってみたところ問題なくできました。
今後スライダは入力の1つとして使えそうですね。面白いです。

とりあえず応用編としてスライダの左側(CSB7)にいくほど青、右側(CSB1)にいくほど赤になるようにしてみました。

しかし、スライダから指を離すと青色に戻ってしまったので次のように少し改良。

psoc003.png

するとこの通り指を離しても好きな色で光らせることができました。

psoc004.jpg

MEMO:
今回使用したCSDの関数たち

  • CSD_ScanAllSensors()
  • CSD_UpdateAllBaselines()
    while()文中の初めに呼び出すことで、毎回センサをスキャンし、ベースラインの更新を行う。
  • CSD_bIsSensorActive(BYTE bSensor)
  • CSD_bIsAnySensorActive()
    タッチセンサがアクティブ(触ってる)かを調べる。
    上のは何番目のセンサがアクティブかどうかを調べる。
    下のはいくつかあるセンサの中でどれか1つのセンサがアクティブなら1を返す。
  • CSD_wGetCentroidPos(BYTE bSnsGroup)
    触ってる位置(重心)を調べる。スライダのときのみ使用可。

YMZ294への挑戦 01

マイYMZ294とご対面

ymz001.jpg

(上からオシレータ(4MHz)、YMZ294、ソケット)

秋月にてYMZ294を購入してみました。
やはりマイYMZ294が手元にあると俄然やる気が出ます!!

YMZ294について

  • YAMAHAのPSG(Programmable Sound Generator)音源。
  • YM2149相当の音源LSI。
  • 3系列の矩形波発生器と1系列のノイズ発生器、エンベロープ発生器を内臓。
  • CS、WR制御信号と8bitデータバスによる汎用CPUインターフェース。
  • 8オクターブの発音域。
  • マスタークロックは4MHzまたは6MHzから選択できる。
  • 5V単一電源。

端子配置と端子機能

↓外見(18pin) 太く描きすぎました(^^;

ymz002.jpg

↓各ピンの説明

ymz003.jpg
  1. φM
    マスタークロック入力。入力周波数は4Mhzか6Mhzのどちらかを選択できます。
    今はとりあえず4MHzとします(一緒についてきたオシレータも4MHzなので)
  2. 4/6
    マスタークロックの周波数を選択します。
    4MHzとするため"H"にします。
  3. D0〜D7
    8bitのデータバス。
  4. /CS、/WR、A0
    8bitのデータバスからのアドレスとデータの書き込みをコントロールします。
    (/CS、/WR、A0)
    (0,0,0)→SSGLPにアドレスを書き込む。
    (0,0,1)→SSGLPにデータを書き込む。
  5. /IC
    "L"の時システムリセットになり、レジスタアレーの内容が全て'0'になります。
  6. SO
    音声信号のアナログ出力。
  7. /TEST
    テスト用端子。無接続でOK。
  8. VDD、GND
    VDDは+5Vの電源端子、GNDは接地端子。

 

さて、困ったことにデータバスや制御信号用のために最低12本以上のピンが必要です。

PSoC First Touchでは…。ちょっと厳しそうです。。。

そこでこのYMZ294さんのパートナーを探してます。

今のところ目をつけているのはこのCY8C29466です。
CY8C29466(Products - Cypress Semiconductor)

28PinでディジタルI/Oとして使用できるピンが8bit×3グループ分(P0、P1、P2)あります。アナログ入力として使えるピンもあるみたいです。
1グループ分を8bitのデータバス用として、他のピンを制御信号用としても十分余りができそうです。

また、PSoCのモジュールも有効利用できないか検討中。

  • PWMを使って4MHz出せんじゃね?オシレータ必要ないんじゃね?
    →マスタークロックは楽音やノイズの音程を決めるのに使われるのでそれなりの精度が必要。
    聞くところによるとPWMから出せる周波数には多少誤差があるとか?
    ちなみにおまけとして付いてきたオシレータには4.0000MHz(テスターで測ってみないと…)と書いてある。うーん。
  • AMP使えるんじゃね?
    →調査中…。

とりあえずここまで。レジスタ機能の説明については次回に。

08/06/27(金)の記事へのコメント

  • 29466は、去年の自主課題でも使っていましたし、機能ブロックもピン数も多くて、よいのではないでしょうか。半田部屋に在庫があったはずなので、使ってみてください。ちょっと書き込みに時間がかかるのが難点かな・・・ -- akita 2008-06-29 (日) 12:42:20
  • PSoCの内蔵発振回路は、なかなか精度がよいので、基準クロックとして使っても大丈夫だと思いますよ。PWMで4MHzは、全く問題ないですね。(24MHz/6)あと、「テスターで4MHzは測れません」よ。 -- akita 2008-07-01 (火) 09:12:30
  • ではPWMのクロックを使ってみることにします。 -- domae 2008-07-01 (火) 18:03:26
  • smicx' -- smicx' 2021-12-28 (火) 09:35:04

 

08/05/29(木)

PSoC First Touch 01

PSoC入門:PSoC First Touch編 をやりつつ、PSoC君との距離を少しずつ埋める・・・(未来日記)

LEDと光センサ

今のところ例題1まで。ここまで特に問題なし。

1つのPWM8で赤と青のLEDを点灯してみました。

psoc002.jpg

明→赤、暗→青。部屋の中では赤:青=3:7くらいでしょうか。適度な明るさ、かな。

次はCapSenseで遊ぶつもり。→のちのち使えそうなのでしっかり遊ぶ。

書き込み器からの独立

今流行っている(?)PSoC君の書き込み器からの独立を試みる。

psoc001.jpg
  • 片面ユニバーサル基板(×基盤)←訂正
  • 2.1mm標準DCジャック
  • ピンソケット(メス)20P(2×10)L字タイプ←akita先生感謝します!
  • パスコン(0.1uF)

写真の通りうまく独立できました。

欲をいうならsenda君みたいに電源のスイッチつければよかったorz

MEMO:
パスコンって何?(電子のおたすけMEMO)

今後のこと(チャレンジしたいこと)

僕はゲームミュージックが大好きだ!

とはいうものの、

ゲームミュージックの基礎の基礎といえるファミコン音源についてはあまり知りません。
(ガキの頃はほとんどスーファミかプレステでした)

そこで、実際にその"音"を聞いてみたい!(特にノイズ音)

さらには実際に演奏してみたい!!

というのがささやかな願いだったりします。(100%趣味ですが)

とりあえず今はマイコンのお勉強と以前akita先生に教えてもらったYMZ294について調べてます。

MEMO:
実際に遊んでいる方もいるみたいで・・・

08/05/29(木)の記事へのコメント

  • 「基盤」ではなく「基板」ですね。よくある誤字ですので気をつけましょう。 -- akita 2008-07-08 (火) 20:12:35
  • 気をつけます(汗) -- domae 2008-07-23 (水) 12:45:28
  • smicx' -- smicx' 2021-12-28 (火) 09:35:25


添付ファイル: filemic002.png 635件 [詳細] filepsoc004.jpg 1122件 [詳細] fileymz003.jpg 1214件 [詳細] fileymz007.jpg 1079件 [詳細] fileflipflap.jpg 625件 [詳細] filepsoc001.jpg 1143件 [詳細] filemic003.png 618件 [詳細] fileymz002.jpg 1057件 [詳細] fileymz006.jpg 277件 [詳細] filesg.JPG 527件 [詳細] filemicrosd_002.PNG 1040件 [詳細] filemicrosd_003.PNG 1017件 [詳細] filesm.JPG 540件 [詳細] fileym.JPG 554件 [詳細] fileymz004.jpg 1144件 [詳細] filemic004.PNG 496件 [詳細] filemic001.png 659件 [詳細] filesp.JPG 549件 [詳細] filetm.JPG 529件 [詳細] filemicrosd_001.PNG 1104件 [詳細] filepsoc002.jpg 1229件 [詳細] filemic004.png 1068件 [詳細] fileymz001.jpg 1152件 [詳細] fileymz005.jpg 1144件 [詳細] filepsoc003.png 1092件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-02 (日) 11:12:58