2014年9月1日月曜日

ぴゅんぴゅん2号のファームウェアを更新した

DDSの位相変調の実験をしていたのでぴゅんぴゅん2号のファームウェアに反映させた

https://github.com/ryood/ArduinoPyunPyun/tree/master/Arduino/PyunPyunNo2

パソコンを新調して
波形を録画するのと同時に録音する方法がわからなくなったので今回は音無しだ


最初に基本のサイン波を出力して周波数をスイープ

サイン波→三角波→ノコギリ波(上昇)→ノコギリ波(下降)→矩形波と
基本波形を変更

LFOの位相変調でまた同じように基本波形を揺らしている


2つほどわからないことがあった

ソースのコメントに書いてあるが、LFOの演算を分周しているところで比較対象が
浮動小数点少数ならちゃんと動くんだが、整数にするとダメっぽい

SAMPLE_CLOCK / LFO_CLOCK

は、#defineの定義にしたがって

5.0

になるので、即値で「5.0」にするとOK

なのに「5」だとアウト

全く動かないわけではなくてブチブチノイズが入る

なんなんだこれは?

シリアル通信とかLCDへの出力はそれなりにwaitがかかるので
Timer割り込み中のprintfデバッグはしにくい

いずれまじめにデバッグすることにする(予定)


もう一つは位相変調の係数だ

前回は変調の値をマイナスにするとNGっぽいと書いたが(http://dad8893.blogspot.jp/2014/07/dds.html)
マイナスにふられてる値でもなんとなく大丈夫そうだ

理屈としては時間をさかのぼることになるが
逆に面白いノイズとなっている気がする

これもちゃんと調べないといかんな



2 件のコメント:

  1. 5.0と5問題
    tickがfloat値ならなんとなく推察できるのですがuint16ですからね。

    コンパイラの問題か?
    if文の処理系で、右辺左辺両方float化してから比較なんてやっぢまってるのかな。
    故に判断処理が少し遅くなってノイズ乗るとか。

    バイナリを逆アセンブルするとか、マシン語でどう処理しているかを覗くとなにかわかるかも。それもまたものっそ手間ですが。

    返信削除
  2. ArduinoのIDEは途中経過を残さないんですよ

    それゆえに初心者でも気軽に扱えるという

    調べればどっかにあると思うんですが

    プラグインを入れればAtmel StudioでもArduinoを扱えるみたいなので
    そのうち調べてみます

    返信削除