月別アーカイブ: 2009年4月

小ネタ:フラグを8秒間保持

あるイベントが起きたら、フラグを最後のイベントから一定時間だけ(たとえば8秒)立てておきたいとき、下のようなコードだとちょっとだめです

----------
volatile uint8_t flag;

ISR(TIMER0_OVF_vect) // 割り込みは8秒おき
{
    flag = 0;
}

int main()
{
    while (1) {
        if (check_event()) {
            flag = 1;
        }
    }
}
----------

これだと、割り込みハンドラでクリアするフラグが、8秒前に立ったものか1秒前に立ったものか区別つかないからです。

続きを読む

ひとプロジェクト組みあがり

複数走っているマイコンを使ったプロジェクト

やっとこさひとつがひと段落つきました。まだ細かい改良が残っていますが、もう大暴れはしないでしょう。

マイコンでプログラミングしてみて、普段やっている UNIX プログラミングが、いかにリソースを気兼ねなく使っているのかよくわかりました。

ATTiny2313 のプログラミングで覚えた、マイコンで不幸にならないコツ

  • でかい配列は使わない
  • 割り込みは極力避ける(普段だって、例外が恒常的に飛ぶような設計はしないでしょ?)
  • 関数コールを嫌がらずに、普段と同じように関数を細かく切ってしまってよし。
    関数を切ったからといってそれが関数コールにコンパイルされるとは限らない。最適化はコンパイラに任せよう。

あれこれあるかと思ったけど、せいぜいこんなものですね。

組み込みプログラミングでも、リソースの使いすぎやトリッキーな割り込みの使用を避ければ、あとはいつものプログラミングと同じスタイルで良さそうだということがわかったのは収穫でした。オブジェクト指向プログラミングも問題なくできます。あ、もちろん継承なんてやらないし、動的なオブジェクトは必要なかったので、構造体は使わず命名規約だけで組みましたが。

ああもう!

かなり簡単なプログラムを組んでいるのに、各所でデータ破壊が起きておおあばれ
ああもうああもう、わけがわからん。中はどうなっているんじゃ~
覗くには JTAGICE なるものが必要らしい。
要るかな、要るかな

デバッガのない今、一から組みなおしたほうが早くないかこのじゃじゃ馬プログラム?

普段の UNIX プログラミングがどれぐらい手厚く OS に守られているかよくわかりました。

いまさらなんですが AVR STK500

何故かここしばらくマイコンを使った作業がたてこんでいます。

何故かAVR ISP mkII が不調なため、いまさらですが死蔵していたSTK500を出してきて、内臓のISPを使いました。

いや、STK500、便利です。電源は内蔵しているし、ISPは常備しているし、強制書き込みモードにもすぐ切り替わるし、全ピンへのアクセスが確保されているし、外部クロックも常備だし、毎度ブレッドボードで試作回路を組むよりずっと楽ですね。こんどからは、可能な限り動作確認レベルの試作はSTK500上でやろうと思いました。

それにしても、ISP mkII、どうしちゃったのかしら...
ほとんどの基板でマイコンを認識しません。STK500に挿してもだめでした。中には認識するものもあるのがまたヤな感じです。

デジものは、ほんにトラブルが起きると面倒で時間食いです。

進行中の試作

いろんなことが並行で走っていてなにがなにやらわからなくなっている日常ですが

その一つ、試作中の基板(抜粋)です。パタン引きが終わったところです。久々に隙間 1/100 インチのベタパタンを使います。焼きとエッチングをうまくやらないとブリッジが発生しまくってえらいことになります。気合をいれてかからないと。

ちなみに、Analog 2.0 でのベタパタンは、だいたい隙間 1/50 インチぐらい。これぐらいあると手作り基板でも楽々です。

手が止まってます — nanoKEY をスタンダロン化

ここまでは順調だったのですが Serial MIDI でつまづき

Serial MIDI は、レガシー MIDI の規格と違うのですね。不勉強でした。レガシー MIDI にしないとつなぐ機器がありません。

解決法を思案しています。今のところ思いついているのは2つ:

  1. USB MIDI -> レガシー MIDI 変換をするデバイスを作る
  2. Serial MIDI -> レガシー MIDI 変換をするデバイスを作る

もあさんの PepperMIDI をベースにできるならば 1. の方法のほうが良さそうです。

続きを読む

nanoKEY とシリアルポートをつなぐ

進行中プロジェクト「ナノキーのスタンダロン化」

nanoKEY の信号をシリアルポートに出力させるところまでできました。

一日60分程度しか時間を割いていない(さけない)亀プロジェクト...ですが、なんとかじわじわと前進...

今のところ、プログラミングなしでできています。遅延の問題がなければ、このままスクリプト作成ぐらいで済ませても良い気もしてきました。問題は、小型化したときにディスプレイなしでどうやって起動確認するかですね。電気的にシリアルの TxD 信号をモニタするのが良いかもしれません。信号を検知したら LED を光らせる回路をくっつけておくのはどうかしら。

https://gaje.jp/projects/labo/usb_midi_host/#section5

kicad

PCB CAD は Eagle を使っているわけですが、現在のライセンスでは、ほんの小さな基板しかレイアウトできません。

この制限に引っかかる頻度が近頃どんどん増えてきて、いよいよ、ライセンス購入も検討しないとならないかもしれないのですが、その前に代替手段をあさってみましょう。

ということで、kicad

チュートリアルをなぞり中です。めずらしいオープンソースの統合 CAD なので、試してみようと思いますが...

続きを読む

新プロジェクト: Steam Controlled Synthesizer

新プロジェクトを立ち上げました。

相変わらずシンセばっかですが、今回は蒸気式です。とはいえ、コントロール入力は MIDI なのですが。

ブロック図はこんなです。

ボイラーからの蒸気をふた系統に分けて、片側はオシレータの制御蒸気に、もう片側はフィルタとミュートの制御蒸気として利用します。まあ、古典的な方法ですね。

フィルタは、パスカルの考案したトランペット・ラダー方式を使います。蒸気式ならまずはこれでしょう。近頃では、ディジタル・スチーム・シンセを使っても、オリジナルと聞き分けつかない、わざわざ手間をかけて蒸気式で作る必要はない、という人もいますが、そんなことはないと思うのです。やはりトランペット・ラダーは蒸気式に限ると思うのです。

オシレータは、下図の、Doepfer 型の圧力 – 回転数変換方式で制御します。シンプルだけどいい音。Steam Controlled Oscillator といったら、やはりまずはこれです。

今年のサミットには間に合うかしら。いつかはこれぐらいの規模のものも作ってみたいです。