GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
秋月の超小型シリコンマイクモジュール(SPU0414HR5H-SB使用)
http://akizukidenshi.com/catalog/g/gM-08940/
を使ってみようと思い、先ずはKURUMIの
attachMicroIntervalTimerHandler(test_cyclic_handler, 100);
で試しました。100us周期処理なので、「あ」の波形もそこそこ綺麗にサンプリングできました。
これをCITURSに移植しようとしたところ、エラーになりました。
us単位の周期処理はサポートされていないのでしょうか?
仕方なく
MsTimer2::set(1, test_cyclic_handler); // 1ms period
を使ってみましたが予想通り残念な結果でした。
波形:上がKURUMIの100us周期処理、下がCITURSの1ms周期処理
GR-SAKURA の MsTimer2 に μ秒単位でタイマー割り込みを指定できる setMicros() と PCLK(=48MHz)単位で指定できる setPCLK() を追加してみました。
使い方はだいたいこんな感じです。
/* GR-SAKURA Sketch Template V2.13 */ #include #include volatile uint32_t count = 0; void timer() { count++; } void setup() { Serial.begin(9600); #if 0 // 1ms 毎に割り込み MsTimer2::set(1, timer); #elif 0 // 100us 毎に割り込み MsTimer2::setMicros(100, timer); #else // 10kHz で割り込み MsTimer2::setPCLK(PCLK / 10000, timer); #endif MsTimer2::start(); } void loop() { Serial.println(count); delay(1000); }
GR-CITRUS は持っておらず確認等しておりませんが、まあ似たようなもんじゃないかと思うので試されてみてはいかがでしょうか。
fujitaさん、ありがとうございます。
F_CPUが定義されていないようだったので
MsTimer2.hの一部を以下のように変更(CITRUSのオリジナルから移植)したら正常に動作しました。
#if defined (GRSAKURA)#define F_CPU 48000000 //PCLK is 48MHz, CPU is operating at 96MHz#else#include <avr/interrupt.h>#endif
お陰様で100us周期で音声波形が取り込めました。秋月のマイクも小さくて使いやすいので色々作品が作れそうです。
残念ながら、MP3再生用のWavMp3p.hとは同時に使えないみたいですが。
F_CPUが定義されていないようだったので MsTimer2.hの一部を以下のように変更(CITRUSのオリジナルから移植)したら正常に動作しました。 #if defined (GRSAKURA) #define F_CPU 48000000 //PCLK is 48MHz, CPU is operating at 96MHz #else #include <avr/interrupt.h> #endif
F_CPU は Arduino.h で
#define F_CPU (96 * 1000 * 1000)
と定義されており再定義は不要な筈です。そもそも MsTimer2 で使用しているタイマは 48MHz の PCLK で動作しており F_CPU は関係ありません。
改変前の GR-SAKURA 版 MsTimer2 では元となった AVR 版では CPU クロックとペリフェラルクロックの区別がないためか CPU クロックの F_CPU とペリフェラルクロックの PCLK を混同しており、Arduino.h で (96 * 1000 * 1000) と定義されている F_CPU が MsTimer2.h をインクルードした後では (48 * 1000 * 1000) に再定義されるというわけの分からないことになっていましたが、今回投稿したものではその点を改めています。PCLK を使用したい場合は Arduino.h をインクルードしてください。
見ていませんが、恐らくは同じタイマを使用しているのだと思います。WavMp3p の改変が必要でしょう。
改善の意思があるようには思いませんがどうですかね?