Florian's most newest Diary

ふろりあんの再最新日記

mbed

なぜブレッドボードの電源ピンは6ピンごとに隙間があるのか

一番使いたいp18にGNDがない。かと言って直接GNDのピンにつなぐのはお行儀悪いだろうしなぁ。

なぜ今mbedか?

ずっと昔から「シンセサイザーの自作」が夢でした。 順当に考えて、VCOのラックとケーブルで作るのがシンセサイザー界の常道みたいですが、私の中のシンセサイザーはYMOでもクラフトワークでも冨田勲でもなく(両方好きですが)、「80年代のアーケードゲー…

InterruptInでp19,p20は使えないらしい

と、書いてあった。日本語に訳してくれた人の所に。 InterruptIn - ピン変化割込み | mbed 英語のハンドブックにも書いてあった。 InterruptIn - Handbook | mbed でもDoxygenから作ったドキュメント(IDEからはこれが見える)にはどこにも書かれてなかった。…

InterruptInにはEI,DIがあることがわかった

このクラス、ピンの指定はあるけど電圧のスレッショルドの指定ないんね。p15以降のAnalogInに対応してるんだろうけど、ボタンを付けてチャタリングが起こることを考えるとEI,DIがあるのは当然だな。 しかし、サンプルにprintfとかあるのは不思議だなぁ。シリ…

使用可能メモリの取得

こんな感じのコードがサンプルに。 How to print Free RAM, available RAM or used RAM - Question | mbed { char a; void* b=malloc(1); size_t size=&a-b; } やー、シンプルなメモリモデルになってるのはわかるけど、あんまりといえばあんまりなコードだ。

割り込みをたくさん使ってるとマルチタスクのような気がするけど

基本的にはmbedはシングルタスクのOSです。スタック領域が1本しか無いしね。 割り込みは所詮割り込み。コンテキストスイッチのような高度なことはOSはやりません(流石にレジスタの退避くらいはしてくれる)。DI考えるよりも複数に割り込まれた時に正常に動…

実行バイナリはフラッシュメモリに置かれたまま実行されるらしい

Memory Model - Handbook | mbed この図を信じると、スタートアップ時にディフォルト値が指定されているところ以外はFlashをバスから見て直接動かしてるっぽい。text領域はFlashにおいたまま。 ってことは、constを使うとディフォルト値がコピーされないから…

割り込みを2つ同時に動かす

こんなかんじ。 #include "mbed.h"DigitalOut myled(LED1);bool gLEDOn=true;Ticker gTicker;DigitalOut myled2(LED2);bool gLEDOn2=true;Ticker gTicker2;static void tick();static void tick2();int main() { gTicker.attach(tick,1); gTicker2.attach(ti…

スイッチを付けたい

「この曲をもう一回初めから」と「次の曲」を指示するプッシュスイッチを付けたい。 3.3Vの出力は21番ピン「VOUT」から出てるので、これをブレッドボードの+に挿してp3,p4辺りにつなぐのがいいかな。AnalogInは一定以上のボルトになると割り込みが使えるらし…

LEDチカチカさせるだけのプログラムを作った

こんな感じ。 #include "mbed.h"DigitalOut myled(p20);bool gLEDOn=true;Ticker gTicker;static void tick();int main() { gTicker.attach(tick,0.01); while(1) { wait(0.2); }}void tick(){ if (gLEDOn) { myled = 1; } else { myled = 0; } gLEDOn=!gLED…

実行時メモリを減らす方法

わかってはいるんだけど、できればやりたくない。インスタンスにWT持たせないでWTへの参照にすれば結構実行時メモリは減るはず。32bit*16節*発声チャンネル数だから結構大きい。でもなー、WTは実行時に変化させたいんだよなぁ。サスティンで音色の変わるFM音…

高周波で三角波を出しても

イマイチ味が出ない。ファミコンっぽくベースに使うべきか。 それよりも容量だ。音源を作って音楽データが入らないなんて洒落にもならない。でも、かなりプログラムは最適化してるから下手に削れない。C++なんか使うな? や、継承とポリモーフィングを多用し…

三角波を作った

今日もはんだづけカフェでオシロを借りた。オシロなかったらこのプログラムあてずっぽうな波形出してたな。感謝。 勢いで三角波も実装。ファミコン風にデューティー比を変えた矩形波をつくろうとしたところで、バイナリサイズが膨れ上がってることに気づく。…

今日も「はんだづけカフェ」でオシロを借りよう

波形テーブル音源を作って、音の違いはわかったけどほんとにこの形になってるのか心配なのでオシロで見る。矩形波、サイン波、のこぎり波、ノイズと調べて、ノイズがシンクが取れなければ正常。ついでに三角派と矩形波のデューティー比違いを実装してもいい…

トーンジェネレーターができたのでパブリッシュしてみた

Synthesizer - a mercurial repository | mbed コメントにも書いたけどまだEnvelope GeneratorとLFOが無いのでこのまま曲を作るのはちょっと無理。というか、MMLが無いので曲として流せない。 EGとLFOは早々に作ります。MMLも文法考えとかないとなぁ。 興味…

WaveTable発振器をもりもり作った

子クラスで指定するのは波形だけ。単純。一応外からも指定できるようにした。 使えるのは Sine Saw Noise と、元からハードコードで作ってあった Square やっとシンセサイザーらしくなってきた。この調子でエンベロープ・ジェネレータも作ろう。 Noiseがいま…

WaveTable発振器を作った

SCCみたいにSin波がノイズが乗るのは仕方ないな。時間方向解像度低いし。 ポー(キーン) みたいな音になりました。 あとは鋸波を計算しないと。どれくらいの角度がいい音なんだろう? 三角波はいらないよな。

NXP1768について

(固有名詞を修正。ハイフンはいらないんね) 店員さんからツッコミが。 「スイッチサイエンスでもすごく良く売れてるんですが、その機械はなんですか?」 そう来るかー。いや、知りうる限りスイッチサイエンス(はんだづけカフェの運営元)が最安値で売って…

ふろーりあんが秋葉原にやってきた。やあ、やあ、やあ。

せっかくだったので京王線で新宿まで出て秋葉原まで。 ソ フマップでWindows10MobileのKATANA01を見たり、PCのパーツを見たり。開発環境がノートパソコンに本格的に移行しちゃってるので 変えられるパーツないんだよね。もっといいビデオボードほしいんだけ…

クラスの作りを変えた

基底クラスOccilatorを作って、その子クラスにSine,Square,WT,Noiseを作った。 ただ、インスタンスの取得はOccilator::getInstance関数に任せる形で。 だいぶいろいろすっきりしてきたぞ。 疲れたので今日はここまで。

C++のコンストラクタ・デストラクタ事情

コンストラクタ。 基本的にはディフォルトコンストラクタが呼ばれる 呼ばれる順番は親→子 「:」を使って、明示的に指定した時にはディフォルトコンストラクタは呼ばれない デストラクタ 呼ばれる順番は子→親 親にvirtualをつけないと子のデストラクタは呼ば…

行き当たりばったりに作ってきたので

ちょっと整理。 Occilator基底クラス 32bitのカウンターを持つ発信器。インスタンスを持つだけでタイマーとD/Aコンバータをハンドルする。インスタンスをnewするだけでどんどんポリフォニックになるという便利な作り。音の削除もdeleteでいける(デストラク…

ピエゾ素子は本格的に使わないように

グラウンドのピンがどうやってもすぐ抜けちゃうので諦め。ステレオミニジャック経由でMDR-NC300Dのディジタルアンプを通して聞くことに。ああ、なんか、音がいい(ピエゾ素子とディジタルアンプを比べるな(^^;)。 waitで待たせて簡易的なエンベロープジェネ…

オシレータの音量調節ができるようになった

[main.cpp] #include "mbed.h"#define MAIN#include "global.h"#define ADD 0x2000000/*#define ADD 0x20000*//*static unsigned int gLEDOn=0x0;*/static Channel* gChannel[2];DigitalOut myled1(LED1);DigitalOut myled2(LED2);DigitalOut myled3(LED3);D…

ワイヤーとヘッドホンジャックが発掘された

CPUボードの箱のなかから。ああー、一緒にしまったんだな、当時。 ヘッドフォンアンプをつなぐと「左チャンネルから」のみ音が出るようになった。モノラルだからどっちでもいいんだけど、右チャンネルから出て欲しかったなぁ。 配線を繋ぎ変えてもダメ。右チ…

現在のソース

[global.h] #define INTERRUPT_TIME_US 22#include "Channel.h"extern DigitalOut myled1;extern DigitalOut myled2;extern DigitalOut myled3;extern DigitalOut myled4; [main.cpp] #include "mbed.h"#define MAIN#include "global.h"#define ADD 0x200000…

今日の教訓

とりあえず。 OS起動前にグローバルイニシャライザーでOSの機能を使ってはいけない。 どういうことかというと、 void tick(uint32_t id) { } Channel::Channel(long us) { gTicker(::tick,us); } というコードがあったとして、 Channel gChannel(22); void m…

いろいろわかってきた

あとはこのCPUでポリフォニック・シンセサイザーを鳴らすだけのパワーが有るかどうかだ。割り算とか使いたくないけどオクターブを取るためのmod12はさけられないよなぁ。 まずはインスタンスを2つ作って2音鳴らすところからだな。徐々に増やしていって、矩形…

割り込みの限界

こんなソース。 #include "mbed.h"#define MAIN#include "global.h"#define ADD 0x1000000;static unsigned long gLEDOn=0;static void tick();int main() { gTicker.attach_us(tick,3); while(1) { wait(1); }}void tick(){ if (gLEDOn & 0x80000000) { myl…

振動板をつけた

圧電スピーカー単体では鳴らす面積が狭いので振動板をつけた。 あんまり音量は変わらない。そりゃそうか。