前回、古いPICマイコンで大惨事になったので、比較的新しいPICで挑戦することにした。
PIC16F1619というもの。
3.3Vで動くしPIC内蔵OSCが32MHzまでいけるので部品点数がかなり減った!!
あとは
- 乾電池で動くようにする
- ボタン操作などで再生を切り替える
- LEDなどの装飾
- いい感じに収納する
ソフト
ソフトの書き方も今風のやり方?にした。MCC(MPLAB® Code Configurator)というもの積極的に使用する。
チュートリアル
http://microchipdeveloper.com/mcu1101:start
https://www.microchip.co.jp/download/dl_download.php/ID=17399660df745a6b64cd99d30b56a30b809e6694/
が大変参考になった。
日本語の情報はうまいこと見つけられなかった。
みんなArduinoとかSTMに移行したのかな。寂しいね。
MCC
基本的には、前述のチュートリアルの通り。MCCプラグイン使用時は以下の感じ
困ったこと
PIC16F818のときには使いたい機能とピンに制約があったのだけど、こちらは、ある程度自由に割当ができる。その分、悩むことも多い。。。
ファイルが自動生成させるので、それに従ってコーディングする必要がある。
統一した書き方ができて良いのだけど、ちょこっとしたものを書くのに、複数ファイルを行ったり来たりするのは、頭が付いて行かない(笑
良いところ
ピン割当がビジュアライズされてわかりやすい。また、UARTの通信速度やタイマーやPWM設定で計算がかなり不要になった。
移植
基本的には、MCCのおかげであまりマイコンの差異を意識しなくて済んだ。クロックが32MHzになったけど、TMR0の周期は8KHzと指定すればレジスタの設定を計算してくれるし。
SPIのクロックがOSC/4なので8MHzになったので、読み込みに余裕が生まれたはず。
20MHzの時は、コマンド+アドレス 計4B データ8Bで合計12Bを読むのに約273usとなった。
データ1Byteあたり約34usなので、約29kHzだった。
一方、32MHzになったので、単純に5/8・・・約170usになると思いきや、約102usになった。なぜ??
データ1Byteあたり約13usなので、約78kHz。
なので、音源のサンプリングレートを16kHzにしてみた。
すごくクリアになった・・・。
PWMが31.25kHzなので、32kHzにはできないね。どんな感じになるかは試してみたいけど。
ちゃんと計算してなかったけど、記録可能時間は、
2MByteのフラッシュ(8bit210241024 = 16,777,216bit)なので16,777,216 / (8bit16kHz) = 131.072s 約131秒・・・2分11秒くらい。
0 件のコメント:
コメントを投稿