[[作業日誌]]
&size(20){マイコン初心者によるマイコン挑戦記};
目次
#contents
#ref(mic004.png,,100%)
//*domae [#te6acb16]
//個人ページの下にページを作ることもできます。
//-[[./てすとぺーじ]]
*domaeへのコメント [#v7c73926]
- domaeがすごいものを作りそうな予感☆ -- [[kondo]] &new{2008-06-30 (月) 19:00:06};
- ↑プレッシャー? -- [[akita]] &new{2008-07-01 (火) 09:10:39};
- ↑↑頑張ります(汗) -- [[domae]] &new{2008-07-01 (火) 18:05:33};
- SDのinitは、かなり時間がかかりますね。仕様ということで。 -- [[akita]] &new{2009-07-08 (水) 15:01:55};
- NZeCyl http://www.vX0UUwfbV0BvG3upQKBWlc97t5wQCiD84Bdaq9Om.com -- [[marmont]] &new{2011-12-02 (金) 13:05:06};
- smicx' -- [[smicx']] &new{2021-12-28 (火) 09:34:19};
#comment
記事についてのコメントは記事ごとに置いてあるコメント欄を使ってくださいまし。
//*過去の日記 [#kd76d139]
//-[[./2008年5月]]
*09/07/05(日) [#gd9cf781]
**microSDでHello World [#tf60ee81]
久々の更新です。えへ。~
***PSoCでmicroSDに何か書き込んでみるテスト [#s8e57854]
PSoC29466の中にあるSDCardモジュールを使ってmicroSDに「Hello World」を書き込んでみる。~
(参考にさせていただいたページ)
-[[Bird-Soft Weblog(PSoCでSDカードを読み書きする):http://www.bird-soft.net/mt/2007/01/psocsd.html]]
-[[dinop.com(PSoCでSDカードに書き込む):http://www.dinop.com/elec/psoc_sdcard_write.html]]
最初はmicroSDのソケットを使っていたのですが、うまくmicroSDが認識されなかった(たぶんうまくピン接続されてない)ので、
後者の方のようにmicroSDカード→SDカードの変換アダプタを使用しました。~
あと、PSoCに与える電圧を3.3Vにしたので抵抗も少なくて済みました。~
#ref(microsd_001.PNG,,60%)
ちなみにmicroSDとPSoCの接続方法やPSoCのピンの設定方法はSDCardモジュールのデータシートに載ってます。
プログラムもほとんどデータシートのサンプルプログラムの丸写しでOKです。
(今回の場合、SD_CDを使わないのでSDCard_Present()を使う部分は不用ですね)
↓結果はこちら~
#ref(microsd_002.PNG,,100%)
#ref(microsd_003.PNG,,100%)
これだけ書き込むのに約3秒かかりました。~
LED光らせて動作確認してみたところ、サンプルプログラムの
cardInfo = SDCard_InitCard();
のところで時間がかかるみたいです。
(これって毎回必要なのかな?→明日試してみる)
*08/10/27(月) [#gd9cf781]
**YMZ294への挑戦 03 [#tf60ee81]
中途半端なところで止まってたので今更だけど更新(汗)
***PSoC CY8C29466との出会い [#af77c452]
PSoCの29466を使ってYMZ294さんを操ってみる。
29466とYZM294を↓のようにつなぐ。
|29466|YMZ294|備考|
|P0[0]|4/6|PWM8で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/汎用ポートを使用しよう:http://1c3.world.coocan.jp/wiki/index.php?PSoC%2F%C8%C6%CD%D1%A5%DD%A1%BC%A5%C8%A4%F2%BB%C8%CD%D1%A4%B7%A4%E8%A4%A6]]
次にアドレスとデータを指定してデータを送る関数を作る。
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の音量を設定。
***ノートオン/ノートオフ [#wbf92ece]
楽音の周波数を設定して出力する関数
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への道:http://homepage2.nifty.com/sampodo/craft/psg.html]]
ついでにノートオフ(鳴ってた音を止める)の関数
void noff(BYTE ch)
も作る。中身はそのチャンネルの音量を0にしているだけ。
**タイマを使って演奏する [#iad04a6e]
Tick(分解能)を48に設定して、タイマ割り込みで変数ticの値を増やすことで曲を演奏する。
BPMはタイマ割り込みの周期Periodの値を変えることで設定できる(が、細かくは設定できない…)
あとはticごとに↑で作ったtoneとnoffを置いていけばMMLのように譜面を作って演奏することができる。
**ピコピコ音楽 [#k2480f08]
早速某ヒゲの人の音楽を打ち込んで演奏してみました♪
おおお!これだ!これが聞きたかったんだ!!(T▽T)
演奏の仕方など人それぞれのやり方があるみたいですが、
僕はこんな感じで自分の聞きたかった音楽を自分で作って聞くことができました。
PSoC君ともだいぶ仲良くなれた、と思います(^^;
興味のある方は是非挑戦してみては?
*08/07/23(水) [#veedb1e0]
**PSoC First Touch 03 [#c483918e]
***タイマ割り込み [#e32dbcd8]
タイマーを使うときの流れ
��Timerを設置
��Clockの設定(使いやすい周波数にしておく)
��Periodの設定(割り込みが発生する間隔を決める)
�ぅ廛蹈哀薀爐鮟颪�(Timerの割り込み許可とスタート、割り込み処理ルーチンの記述)
定期的にLEDの明るさを変えることに成功。
またTimer_PeriodWrite()を用いれば途中で割り込みの間隔を変更できるみたいです。
**YMZ294への挑戦 02 [#t400d1ff]
***レジスタ機能 [#g648250d]
全機能は内臓されるレジスタによって制御されます。
よって各々のレジスタの値を変えることによって音を発生させることができます。
データシートがボロボロになってきたので、、、以下、自分用のメモ。
1. 楽音周波数の設定($00〜$05)
#ref(ymz004.jpg,,100%)
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)
#ref(ymz005.jpg,,100%)
ノイズ発生器で作られるノイズ音の周波数fnを決める。
fn=fst÷16NP
NP=NP4×2^4+NP3×2^3+NP2×2^2+NP1×2^1+NP0
3. ミキサーの設定($07)
#ref(ymz006.jpg,,100%)
各チャンネル(#A、#B、#C)毎に楽音およびノイズ音を出力するかを設定する。
レジスタに0を書き込むと音を出力する。
楽音とノイズ音がともに0の時はミキシングされて出力する。
4. 音量コントロールとDAC($08〜$0A)
#ref(ymz007.jpg,,100%)
各チャンネル(#A、#B、#C)の音量を設定する。
M=0の時:L3〜L0によって16通りのレベルから音量を設定。
M=1の時:エンベロープ発生器で作られるデータ(5bit)によって音量を制御。
(まだエンベロープを使用したことがないのでとりあえずここまで。のちのち追加します)
**08/07/23(水)の記事へのコメント [#j2ca1077]
- この表はなにで描いているんでしょう?まさかペイント? -- [[akita]] &new{2008-07-24 (木) 11:04:09};
- エクセルで書いた表があったのでそれをキャプチャして使いました(^^; -- [[domae]] &new{2008-07-25 (金) 15:13:05};
- smicx' -- [[smicx']] &new{2021-12-28 (火) 09:34:41};
#comment
*08/06/27(金) [#t1238e24]
**PSoC First Touch 02 [#t400d1ff]
前回からかなりたってしまったけどいつも心はPSoC君とともに。
***CapSenseで遊ぶ [#eea4f5a3]
チュートリアル通りやってみたところ問題なくできました。
今後スライダは入力の1つとして使えそうですね。面白いです。
とりあえず応用編としてスライダの左側(CSB7)にいくほど青、右側(CSB1)にいくほど赤になるようにしてみました。
しかし、スライダから指を離すと青色に戻ってしまったので次のように少し改良。
#ref(psoc003.png,,100%)
するとこの通り指を離しても好きな色で光らせることができました。
#ref(psoc004.jpg,,50%)
MEMO:
今回使用したCSDの関数たち
-CSD_Start()
-CSD_InitializeBaselines()
-CSD_SetDefaultFingerThresholds()
初めに呼び出しておく。やってることはこれから使う値の初期化など。
-CSD_ScanAllSensors()
-CSD_UpdateAllBaselines()
while()文中の初めに呼び出すことで、毎回センサをスキャンし、ベースラインの更新を行う。
-CSD_bIsSensorActive(BYTE bSensor)
-CSD_bIsAnySensorActive()
タッチセンサがアクティブ(触ってる)かを調べる。
上のは何番目のセンサがアクティブかどうかを調べる。
下のはいくつかあるセンサの中でどれか1つのセンサがアクティブなら1を返す。
-CSD_wGetCentroidPos(BYTE bSnsGroup)
触ってる位置(重心)を調べる。スライダのときのみ使用可。
**YMZ294への挑戦 01 [#t400d1ff]
***マイYMZ294とご対面 [#j62f99d5]
#ref(ymz001.jpg,,50%)
(上からオシレータ(4MHz)、YMZ294、ソケット)
秋月にてYMZ294を購入してみました。
やはりマイYMZ294が手元にあると俄然やる気が出ます!!
***YMZ294について [#n21d7844]
-YAMAHAのPSG(Programmable Sound Generator)音源。
-YM2149相当の音源LSI。
-3系列の矩形波発生器と1系列のノイズ発生器、エンベロープ発生器を内臓。
-CS、WR制御信号と8bitデータバスによる汎用CPUインターフェース。
-8オクターブの発音域。
-マスタークロックは4MHzまたは6MHzから選択できる。
-5V単一電源。
***端子配置と端子機能 [#n65a7137]
↓外見(18pin) 太く描きすぎました(^^;
#ref(ymz002.jpg,,100%)
↓各ピンの説明
#ref(ymz003.jpg,,100%)
+φM
マスタークロック入力。入力周波数は4Mhzか6Mhzのどちらかを選択できます。
今はとりあえず4MHzとします(一緒についてきたオシレータも4MHzなので)
+4/6
マスタークロックの周波数を選択します。
4MHzとするため"H"にします。
+D0〜D7
8bitのデータバス。
+/CS、/WR、A0
8bitのデータバスからのアドレスとデータの書き込みをコントロールします。
(/CS、/WR、A0)
(0,0,0)→SSGLPにアドレスを書き込む。
(0,0,1)→SSGLPにデータを書き込む。
+/IC
"L"の時システムリセットになり、レジスタアレーの内容が全て'0'になります。
+SO
音声信号のアナログ出力。
+/TEST
テスト用端子。無接続でOK。
+VDD、GND
VDDは+5Vの電源端子、GNDは接地端子。
さて、困ったことにデータバスや制御信号用のために最低12本以上のピンが必要です。
PSoC First Touchでは…。ちょっと厳しそうです。。。
そこでこのYMZ294さんのパートナーを探してます。
今のところ目をつけているのはこのCY8C29466です。
[[CY8C29466(Products - Cypress Semiconductor):http://www.cypress.com/products/index.jsp?fid=24&rpn=CY8C29466]]
28PinでディジタルI/Oとして使用できるピンが8bit×3グループ分(P0、P1、P2)あります。アナログ入力として使えるピンもあるみたいです。
1グループ分を8bitのデータバス用として、他のピンを制御信号用としても十分余りができそうです。
また、PSoCのモジュールも有効利用できないか検討中。
-PWMを使って4MHz出せんじゃね?オシレータ必要ないんじゃね?
→マスタークロックは楽音やノイズの音程を決めるのに使われるのでそれなりの精度が必要。
聞くところによるとPWMから出せる周波数には多少誤差があるとか?
ちなみにおまけとして付いてきたオシレータには4.0000MHz(テスターで測ってみないと…)と書いてある。うーん。
-AMP使えるんじゃね?
→調査中…。
とりあえずここまで。レジスタ機能の説明については次回に。
**08/06/27(金)の記事へのコメント [#sd1add91]
- 29466は、去年の自主課題でも使っていましたし、機能ブロックもピン数も多くて、よいのではないでしょうか。半田部屋に在庫があったはずなので、使ってみてください。ちょっと書き込みに時間がかかるのが難点かな・・・ -- [[akita]] &new{2008-06-29 (日) 12:42:20};
- PSoCの内蔵発振回路は、なかなか精度がよいので、基準クロックとして使っても大丈夫だと思いますよ。PWMで4MHzは、全く問題ないですね。(24MHz/6)あと、「テスターで4MHzは測れません」よ。 -- [[akita]] &new{2008-07-01 (火) 09:12:30};
- ではPWMのクロックを使ってみることにします。 -- [[domae]] &new{2008-07-01 (火) 18:03:26};
- smicx' -- [[smicx']] &new{2021-12-28 (火) 09:35:04};
#comment
*08/05/29(木) [#t1238e24]
**PSoC First Touch 01 [#t400d1ff]
[[PSoC入門:PSoC First Touch編]] をやりつつ、PSoC君との距離を少しずつ埋める・・・(未来日記)
***LEDと光センサ [#n4b9691b]
今のところ例題1まで。ここまで特に問題なし。
1つのPWM8で赤と青のLEDを点灯してみました。
#ref(psoc002.jpg,,50%)
明→赤、暗→青。部屋の中では赤:青=3:7くらいでしょうか。適度な明るさ、かな。
次はCapSenseで遊ぶつもり。→のちのち使えそうなのでしっかり遊ぶ。
***書き込み器からの独立 [#gb2e7a9b]
今流行っている(?)PSoC君の書き込み器からの独立を試みる。
#ref(psoc001.jpg,,50%)
-片面ユニバーサル基板(×基盤)←訂正
-2.1mm標準DCジャック
-ピンソケット(メス)20P(2×10)L字タイプ←akita先生感謝します!
-パスコン(0.1uF)
写真の通りうまく独立できました。
欲をいうならsenda君みたいに電源のスイッチつければよかったorz
MEMO:
[[パスコンって何?(電子のおたすけMEMO):http://www.geocities.co.jp/HeartLand-Tachibana/9059/otasuke/pascon.htm]]
**今後のこと(チャレンジしたいこと) [#y1ab0cee]
&size(24){僕はゲームミュージックが大好きだ!};
とはいうものの、
ゲームミュージックの基礎の基礎といえるファミコン音源についてはあまり知りません。
(ガキの頃はほとんどスーファミかプレステでした)
そこで、実際にその"音"を聞いてみたい!(特にノイズ音)
さらには実際に演奏してみたい!!
というのがささやかな願いだったりします。(100%趣味ですが)
とりあえず今はマイコンのお勉強と以前akita先生に教えてもらったYMZ294について調べてます。
MEMO:
実際に遊んでいる方もいるみたいで・・・
-[[YMZ294で楽しむPSG音源(それはそれ、これはこれで・・・。):http://hijiri3.s65.xrea.com/sorekore/develop/pic/PIC04_YMZ.htm]]
-[[YMZ294 - SSG音源ボード(mattic):http://www.mbin.jp/~masa-u/electron/ymz294/]]
-[[音源IC YMZ294 � 屮謄好函�(You Tube):http://jp.youtube.com/watch?v=pGqa6ESeb1A]]
**08/05/29(木)の記事へのコメント [#s2553b61]
- 「基盤」ではなく「基板」ですね。よくある誤字ですので気をつけましょう。 -- [[akita]] &new{2008-07-08 (火) 20:12:35};
- 気をつけます(汗) -- [[domae]] &new{2008-07-23 (水) 12:45:28};
- smicx' -- [[smicx']] &new{2021-12-28 (火) 09:35:25};
#comment
IP:186.90.70.214 TIME:"2021-12-28 (火) 09:35:25" REFERER:"" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"