作業日誌
マイコン初心者によるマイコン挑戦記
目次
記事についてのコメントは記事ごとに置いてあるコメント欄を使ってくださいまし。
久々の更新です。えへ。
PSoC29466の中にあるSDCardモジュールを使ってmicroSDに「Hello World」を書き込んでみる。
(参考にさせていただいたページ)
最初はmicroSDのソケットを使っていたのですが、うまくmicroSDが認識されなかった(たぶんうまくピン接続されてない)ので、
後者の方のようにmicroSDカード→SDカードの変換アダプタを使用しました。
あと、PSoCに与える電圧を3.3Vにしたので抵抗も少なくて済みました。
ちなみにmicroSDとPSoCの接続方法やPSoCのピンの設定方法はSDCardモジュールのデータシートに載ってます。
プログラムもほとんどデータシートのサンプルプログラムの丸写しでOKです。
(今回の場合、SD_CDを使わないのでSDCard_Present()を使う部分は不用ですね)
↓結果はこちら
これだけ書き込むのに約3秒かかりました。
LED光らせて動作確認してみたところ、サンプルプログラムの
cardInfo = SDCard_InitCard();
のところで時間がかかるみたいです。
(これって毎回必要なのかな?→明日試してみる)
中途半端なところで止まってたので今更だけど更新(汗)
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/汎用ポートを使用しよう
次にアドレスとデータを指定してデータを送る関数を作る。
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君ともだいぶ仲良くなれた、と思います(^^;
興味のある方は是非挑戦してみては?
タイマーを使うときの流れ
��Timerを設置
��Clockの設定(使いやすい周波数にしておく)
��Periodの設定(割り込みが発生する間隔を決める)
�ぅ廛蹈哀薀爐鮟颪�(Timerの割り込み許可とスタート、割り込み処理ルーチンの記述)
定期的にLEDの明るさを変えることに成功。
またTimer_PeriodWrite()を用いれば途中で割り込みの間隔を変更できるみたいです。
全機能は内臓されるレジスタによって制御されます。
よって各々のレジスタの値を変えることによって音を発生させることができます。
データシートがボロボロになってきたので、、、以下、自分用のメモ。
1. 楽音周波数の設定($00〜$05)
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)
ノイズ発生器で作られるノイズ音の周波数fnを決める。
fn=fst÷16NP
NP=NP4×2^4+NP3×2^3+NP2×2^2+NP1×2^1+NP0
3. ミキサーの設定($07)
各チャンネル(#A、#B、#C)毎に楽音およびノイズ音を出力するかを設定する。
レジスタに0を書き込むと音を出力する。
楽音とノイズ音がともに0の時はミキシングされて出力する。
4. 音量コントロールとDAC($08〜$0A)
各チャンネル(#A、#B、#C)の音量を設定する。
M=0の時:L3〜L0によって16通りのレベルから音量を設定。
M=1の時:エンベロープ発生器で作られるデータ(5bit)によって音量を制御。
(まだエンベロープを使用したことがないのでとりあえずここまで。のちのち追加します)
前回からかなりたってしまったけどいつも心はPSoC君とともに。
チュートリアル通りやってみたところ問題なくできました。
今後スライダは入力の1つとして使えそうですね。面白いです。
とりあえず応用編としてスライダの左側(CSB7)にいくほど青、右側(CSB1)にいくほど赤になるようにしてみました。
しかし、スライダから指を離すと青色に戻ってしまったので次のように少し改良。
するとこの通り指を離しても好きな色で光らせることができました。
MEMO:
今回使用したCSDの関数たち
(上からオシレータ(4MHz)、YMZ294、ソケット)
秋月にてYMZ294を購入してみました。
やはりマイYMZ294が手元にあると俄然やる気が出ます!!
↓外見(18pin) 太く描きすぎました(^^;
↓各ピンの説明
さて、困ったことにデータバスや制御信号用のために最低12本以上のピンが必要です。
PSoC First Touchでは…。ちょっと厳しそうです。。。
そこでこのYMZ294さんのパートナーを探してます。
今のところ目をつけているのはこのCY8C29466です。
CY8C29466(Products - Cypress Semiconductor)
28PinでディジタルI/Oとして使用できるピンが8bit×3グループ分(P0、P1、P2)あります。アナログ入力として使えるピンもあるみたいです。
1グループ分を8bitのデータバス用として、他のピンを制御信号用としても十分余りができそうです。
また、PSoCのモジュールも有効利用できないか検討中。
とりあえずここまで。レジスタ機能の説明については次回に。
PSoC入門:PSoC First Touch編 をやりつつ、PSoC君との距離を少しずつ埋める・・・(未来日記)
今のところ例題1まで。ここまで特に問題なし。
1つのPWM8で赤と青のLEDを点灯してみました。
明→赤、暗→青。部屋の中では赤:青=3:7くらいでしょうか。適度な明るさ、かな。
次はCapSenseで遊ぶつもり。→のちのち使えそうなのでしっかり遊ぶ。
今流行っている(?)PSoC君の書き込み器からの独立を試みる。
写真の通りうまく独立できました。
欲をいうならsenda君みたいに電源のスイッチつければよかったorz
MEMO:
パスコンって何?(電子のおたすけMEMO)
僕はゲームミュージックが大好きだ!
とはいうものの、
ゲームミュージックの基礎の基礎といえるファミコン音源についてはあまり知りません。
(ガキの頃はほとんどスーファミかプレステでした)
そこで、実際にその"音"を聞いてみたい!(特にノイズ音)
さらには実際に演奏してみたい!!
というのがささやかな願いだったりします。(100%趣味ですが)
とりあえず今はマイコンのお勉強と以前akita先生に教えてもらったYMZ294について調べてます。
MEMO:
実際に遊んでいる方もいるみたいで・・・