Wanderlst

Kid 作製記

2008.8.13 新しいdsPIC

MicrochipのサイトでdsPICの仕様を調べていたら、新しいdsPICがでていた。

28pinのdsPIC33Fで、このサイズでRAM容量も16Kバイトもある。多ピンのは、バスも付いているので外付けROM/RAMも付けられる。(ただし、アドレスでの指定じゃなくて、レジスタアクセスになるけど)

今までのとコアは同じなので、ソースもそんなに変更ない。うーむ。いいなぁ。新しいリビジョンは28pinのdsPICで小型化図ってみようと。

dsPIC自体もアセンブラで使いこなせれば、悪くないです。覚えるの大変ですけどね。

2008.8.3 面倒くさい

ずいぶん前にスルートーク、簡単なオーバードライブ程度はできていたのに、その後ほったらかしだったKid君。時間に少し余裕ができたので、遊んでいたのですが…。

うーん。最近、SHARCでの浮動小数点というぬるま湯につかっていたので、固定小数点演算を行うのが面倒です(汗
あげくに、主要部分はいちいちアセンブラに置き換えないといけないので、もう面倒くさいことこの上ない(笑

学生の頃は、数万行ものコードをアセンブラで書いても苦にならなかったけどなぁ。

こうなると、演算ライブラリでもつくりたいけど、たまに整数部がほしいケースがあって、すべてQ1.15に収まるとは限らないので、どうしようか迷い中。せめてこの基板のサイズでBlackfinが使えればなぁ。とか妄想してみる。

けど、一番はVisual DSP++のBlackfinのライセンスがないんだよなぁ。(SHARCならあります)
gccでもいいけど、macの最適化具合とかどうなのかなぁ?

今度酔漢さんにお会いしたら、聞いてみようっと。

2008.2.16 ケースよ再び

年末に頼んでおいたケースがようやく来ました。また依頼してるのを忘れたよ。板金屋の人。

今回のケースでジャックも何とか収まりましたが、スペースの都合でノブの間隔も結構キツイです。このケースが電池を入れるスペースを取って置いたので基板を小さくする必要があったのですが、次基板作るときは、電池スペースを削除して、もう少し基板を広くし、アクティブフィルタを追加したいかも…。

んで、POTの値もdsPICのADCで読めたし、これで一応ハードは完成でしょうか。

2007.11.15 ケースが来た!

板金屋に頼んでいたケースが来たんだけど…。お約束のように設計ミス。orz
ジャックの位置を間違えて、基板入れると入らないという自体に。

Chuckさん、もうちょっとだけ待ってください(汗

2007.10.19 ようやくフィルタ実装完了

使い慣れないツールや構文に戸惑いながらも、MicrochipのHPからDLしてきたサンプルソースとにらめっこしながら、DMA転送とFIRフィルタの実装までは出来ました。

PICは開発環境に恵まれているせいか、FIRやIIRなど簡単に実装できるのは嬉しいのですが、肝心の純正フィルタ設計ツールのバージョンが古く(アップデートされてない?)、C30アセンブラのV1.00の構文を吐き出すので、そのままでは実装できず、意味が分からなくてえらい苦労しました。(そのままコンパイルしてプログラムしても、フィルターが動かない)

Microchipがソース公開してくれなかったら、さっぱり分からなかったでしょう。

とりあえず、FIRフィルタ実装して、トーン状態になったときにはガッツポーズ(笑)
数日使い込んでいたので慣れてきたし、色々分かってきたので、Amaterasのほうも併せてこれから色々作ろうー!とは思うのですが、ちょっと失敗したなーとおもうことが。 

今回使用したADC/DACはTIのPCM3002というチップなのですが、データ部が20bitなので、I2S転送では必ず32bitになります。言い換えると、1サンプリングの単位が必ず2ワードになります。取り込んだとしても、16bit固定小数点という観点から下位4ビットを捨ててるわけですが、これがくせもので、必要のないデータのために、2倍の転送バッファが必要になります。さらに、タイミングの問題だとおもうのですが、ADCでサンプリングしたときにLとRが逆転するという状態になっているため、ちょっと面倒くさい orz

あと、BlackfinやSHARCのように、信号処理部分の大半がCでもOK!という状況は無理そうです。コンパイラがMACやリピート命令を吐き出してくれれないので、DSPライブラリにないコードをCで書くとどうやっても間に合いません。けど、そこそこは速いので、最適化さえすれば、色々出来そうです。

2007.10.12 Talk Through

ハードウエアの確認をするため、日々dsPICのデータシートと格闘しながらソースを書いていたのですが、SPIとDCIの設定で失敗しまくり。色々調べても、dsPIC30FとdsPIC33Fでは細かいところで違いがあるうえ、色々なソースをしらべてもdsPIC33F用のがない…。dsPIC33Fを使う方はあまりいないんですかねー?

で、SPIは勘違いというのが分かったので、無事DAC/ADCにパラメータを送れたのですが、DCIは最初はクロックが出ず、でても全然クロックがあわない。
(クロックが出ないのもレジスタの設定ミスだったわけですが、DCIのBCGは0に設定するとクロックが出ないのね orz)

現在は単にADC/DACの確認で、トークスルーにしたかったので、32kHzのサンプリングにした。32kHzだと、I2SのBCKは

32kHz * 32bit(そのうち、データは20bit) * 2(LとR) = 2.048MHz

のはずなんだけど、音が出ない。オシロで調べていくと、BCKが1.2MHzぐらいしか出ていない。

あ(・Д・)(・д・)ん?

dsPICへの入力は、16.384MHz。プリスケーラで3分周して、24逓倍して、コアクロックが131.072Mhz。dsPICは1命令が4クロックかかるので、実質32.758 MIPSで動作。(本当は40MIPSぎりぎりまで上げたいのだけど、ADC/DACのI2Sクロックの都合で今はこうしている)

ペリフェラルクロックが32.758MHzなので、16分周すれば、2.048MHzでるはず…なんだけどな。

ここで数時間データシートとにらめっこ&テスト。
ようやく分かった原因は、dsPICのコアクロックの設定ミス。3分周するはずが、5分周してた orz
以前Blackfinでも、コアクロックの設定ミスってて失敗してたし、皆様もコアクロックの設定は、計画的・・・じゃなかった確実に〜。

で、無事音は出ました。これで、次はフィルターの設計やね!

2007.10.10 dsPIC de デジタルエフェクタ

2ヶ月もまともに更新してませんでしたね。 ハハハハ orz

色々作るモノもありーの、下手くそながら作曲もがんばりーの、そんな日々です。決してtakerockさんと酒を飲みながら、電話魔ばっかりしていたわけではないです(笑
11月は東京新宿でtakerockライブ、12月(予定しているのは12月上旬)には大阪で忘年会やるので、今から楽しみではあります。

関西圏の方は1年会ってないですしねー。といいつつも、近いうちに大阪に出張になりそうです。ハイ。

 

最近こんなの作りました。他のもとっとと完成させろよという声が聞こえてきそうですが(汗

1590Bのサイズのケースに入るデジタルエフェクタ基板です。dsPIC33F + ADC/DACを積んでます。PCBマウントできるPOTを4つまで、もしくはPOT3つ+ロータリースイッチ1個を載せられる仕様です。dsPICでエフェクタの信号処理を実装してしまえと言う発想なので、ソフト入替えれば、作成可能な範囲のエフェクタなら何でもござれと言う代物。

問題はdsPICは外部メモリが載せられないので、ディレイやコーラスなどには使えず、増幅率調整や、周波数調整ものに限定されちゃうことでしょうか。なのでAmaterasとは全然コンセプトが違います。

が、夢は広がります。これができれば、色々実験も出来るわけですし。特にShrill(リングモジュレータ)は停滞しっぱなしなので、これで一度理論組んで、アナログ回路に起こしてもいいのかなと思ってます。とりあえず、MPLABで、dsPICの認識までは出来ました。

 

ところで、認識までは一発で終わったのですが、ADC/DACがちゃんと動くか確認するために簡単にソフトウエアを作ろうとして、つまずき中。なんでって、PIC特有の部分で、どう書いたらいいかまだよくわからんのです。実は私、PICは全然さわったこと無いのです。入手の問題で、学生の頃はZ80やV40使ってましたし、その後はAVRやSH、Blackfinだったので、PICいじる機会が。

とにかく、dsPICのサンプルソースを見てみると…。includeの後にこんな文が。

_FGS(GWRP_OFF & GCP_OFF);
_FOSCSEL(FNOSC_PRIPLL);
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF);

ヽ(  ̄д ̄;)ノ あうあうあう??

何かを宣言しているんでしょうけど、何の宣言だ?ヘッダやデータシートを再確認。コンフィグレーションビットの設定らしい。AVRだと、プログラムとは別にISPで設定でしたが。
なるほど。コード単位でコンフィグレーションが設定できるとは便利だ…。

後は、周辺の制御レジスタを細かくいじらなくても、便利な関数群が色々用意されてることとか。
等々、かなり開発環境が整備されていることには驚いてます。PICが普及するわけですね。

ハードの確認が取れたら、回路図とか公開しようと思っていますが、先に色々と実験をば。