電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

Arduino DUEでファミコンの三角波を再現

Arduino Dueのアナログ出力でちょっと遊んでみたと思います。

ファミコン三角波を再現してみます。
この三角波は正確な三角波ではなく、16段階の階段状になっています。

音を鳴らすにはスピーカーが必要です。
Arduinoエントリーキットに入っているような圧電スピーカーが手軽です。
+極をArduino DueのDAC0へ、−極をGNDへ接続してください。

三角波を出力するソースです。

#define RANGE     4095   // 12 bits DAC

// 16段階の三角波テーブル
unsigned int buffer_tri[] = {
    15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
};

void setup() {
  // DAC解像度12bit
  analogWriteResolution(12);
  // 16段階の三角波テーブルをアナログ出力値に変換
  for (int i = 0; i < 32; i++) {
    buffer_tri[i] = (unsigned int)(RANGE * (float)(buffer_tri[i] / 15.0f));
  }
}

void loop() {
    // 実行開始からの経過時間で三角波テーブルの使う値を計算
    int times_us_one = (int)((1000000 / 440) + 0.5); // 440Hz A(ラ)の周波数
    int times_mod = micros() % times_us_one;
    int f_no = times_mod * 32 / times_us_one;
    // DAC0からアナログ電圧出力
    analogWrite(DAC0, buffer_tri[f_no]);
}

この出力結果の波形です。
(DSO203 ポケット デジタルオシロスコープでの計測結果)


きれいな階段状の三角波になっています。

これを応用すれば、自作のアナログシンセも作れそうです。

Arduino Dueは少々高価ですが、互換品も検討してみてください。
純正品とAliExpressから$15程で購入した互換品も全く同じ動作をしているので、問題はないと思います。

Arduino エントリーキット(DUE版)

Arduino エントリーキット(DUE版)