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周期処理
maenoh!さんwrote: said:AD変換終了時に割り込みをかけられればメインの処理(FFTとかボイスチェンジャーとか)も行えるのですが... 引用終わり
GR-KURUMI にクロック単位で指定できるタイマー割り込み機能を追加したのに合わせ、GR-SAKURA の MsTimer2 ライブラリに先に追加したメソッド setPCLK() を GR-KURUMI と同じ setClock() に変更しました。他の変更はありません。
テスト用スケッチ
/* GR-SAKURA Sketch Template V2.13 */ #include <Arduino.h> #include <MsTimer2.h> volatile unsigned long timerCount = 0; void timer() { timerCount++; } void setup() { Serial.begin(9600); delay(1000); Serial.println("\x1b[2J\x1b[;Hstart"); #if 0 // 1ms 毎に割り込み MsTimer2::set(1, timer); #elif 0 // 100us 毎に割り込み MsTimer2::setMicros(100, timer); #else // 10kHz で割り込み MsTimer2::setClock(PCLK / 10000, timer); #endif MsTimer2::start(); } void loop() { static unsigned long lastMicros = micros(); unsigned long currentMicros; do { currentMicros = micros(); } while (currentMicros - lastMicros < 1000000UL); lastMicros = currentMicros; Serial.println(timerCount); }
実行結果