2018年01月16日

Open.Theremin@VolumeControlModeの拡張を行う

ほぼ1年間/2モデルのハードウエアの運用でOpenThereminのプログラム可能な音源16アドレス分の使用頻度を吟味した結果、最後尾にアサインしていた音色固定モード8CHは殆ど使われることがなかった。

一方、直前にアサインしていた出力値を可変できるVolumeControlモードは使用頻度が高く、遊んでいるCHが勿体無い。 ということで、後半の4アドレスをVolumeControlモードに変更することにした。

やはり、動的制御の魅力は抗い難く、ノイズっぽい低品質な出力とトレードオフ出来る機能と判断している。

スケッチを改変してアップロードを行って確認したところ、処理アドレスの変更は問題なく行えた。

次に、沈黙している16bitDACのテストを行っが、オシロスコープでロジック出力の波形を観る限り破綻はなさそうだ。 これで、ハードウエア側に問題(電圧レベル等の)が発生している可能性が大きくなってきた。

試しにDACの出力を検証するためのスケッチを走らせて出力電圧を測ってみたが、何故か電圧が出ない。 この結果は後に回路図をチェックした結果、測定ポイントを勘違いしていたためと判明しているが、他にもコンデンサの実装を間違えたりとミスが散見されている。 機械的な失敗は測定以前の問題なので、一度修正と確認を行った後、再度試験を行うことにする。
posted by Yasuski at 03:42| open.Theremin

2018年01月15日

またもや機材車のエンジンにトラブルが発生する

夕方になって買い物に出かけるつもりがVWの6気筒エンジンにトラブルが発生、エンジン関連の警告灯が点灯してパワーが上がらない。エグゾーストパイプから異臭がするのは生ガスを吹き出している証拠。

出立を諦めてクルマに診断用のデバイスを接続して故障箇所を探るってみると、1気筒目がミスファイアを起こしている模様。フードを開けてイグニションコイルユニットを引き抜くと恒例のイグニッションコイル折損事故(3回目)な事が判明する。

とりあえず、工具を持っていそうなJAFを呼んで、折れた部分の引き抜きを依頼するも、サービスカーは狭い部分に届くプライヤーを持ちあわせておらず、当てが外れる。 結果、自力修理、もしくはディーラーまでクルマを牽引というアレな状況に。

折損するVWのイグニションコイルは明らかに欠陥品だが、何故か日本のディーラーはそれを認めず有償修理扱いという鬼畜な対応なので、出来れば自力で修理を行いたい。

こんなこともあろうかと1年半前に輸入していたスペアを活用する絶好の機会が到来したのだが、プラグホール奥に鎮座する折損部を引き抜かないことにはスペアパーツは役に立たない。

で、JAFのおっちゃんと協議した結果、歯医者が持っていそうな返しの付いた工具で対応できるのでは?との示唆を貰う。

ナルホドその手があったかと、ひとまずJAFにはお帰り頂いて、在庫している自転車用チタンスポークの折れ曲がった部分をダイヤモンドルーターで研磨、折損部のクリアランスにねじ込んで折れたパーツを引き抜くための工具を自作した。

チタンスポークは激硬いので強度的には問題なさそうだったが、押し込んだ工具を回転させるのが難しい。トルクを加えられるように、スポークのストレート側を折り曲げて持ち手に加工した後、折損部の一番奥に至るまでスポークを押し込み、これを回転させて詰まった折損部を引きぬくことが出来た。

心配だった代替パーツの互換性は問題なさそうな感触だったので、町内を一周してエンジンの動作を確認しておいた。

まだヤバそうな死亡が確定しているパーツがあと3本残っているので、保険のために改めて代替用のパーツを発注しておいた。製作した治具は使い易いように再加工して、故障判断デバイスのケースに入れておく。

今回は、合計で20K程の節約ができた計算だが、そもそもリコール扱いのパーツをなんで自腹で揃えにゃならんのかと微妙に納得いかないのがトホホ。
posted by Yasuski at 04:20| AudioElectronics

2018年01月10日

MEMSなスピーカーが発売されるらしい

これとMEMSマイクを組み合わせて、ホースから開放されたトーキングモジュレーターを造りたいのだが、とりあえずセンサーの構造を考えてみると、、、

usoundmoon630.jpg

細い棒の先に防滴構造に加工した振動体を取り付けたものを口盆内に挿入し、マイクはその同軸上に設置することになるのだが、、、センサーの支持構造に工夫が要りそうだ。

posted by Yasuski at 05:49| AudioElectronics

Open.Theremin@新型トップパネルを仮設する

到着した分割式のトップパネルをケースに取り付けてみた。

分割している分フレームの強度が落ちているので、実装時に無理をするとメイン基板が破壊される可能性を忘れないようにしよう。

次回は赤色と黄色を発注する予定。

IMG_7839.JPG

左右の接合部は全く問題なし。グランドのスポットはもっと増やしたほうが良いかもしれない。 固定周波数のオシレーターを裏側に仕込むのも一案か。

IMG_7838.JPG

今回は、四隅はOKだったものの、丁度「凹」のヘコミにあたる部分のカーヴが小さ過ぎ、修正を余儀なくされた。 この部分のRを大きくすればジャストフィットするのだが、現物合わせ故に後数回は失敗しそうな雰囲気ではある。

IMG_7842.JPG

ちなみに、以前製作した一枚板の黄色い基板よりも修正箇所が減ったので、修正作業の工程はそれなりに費やされるものの、難易度はより低くなっている。

IMG_7399.JPG
posted by Yasuski at 00:06| open.Theremin

2018年01月09日

Open.Theremin@Teensy3.6対応ボードの稼働状況

ソフト/ハード何れの不具合によるものか原因を特定出来ていないが、16bitDAC/MAX5541から音声を出力できない。

一方、Open.Thereminシールドに実装されたMCP系列の12bitDACへの接続は問題無く行えているが、当初はアンテナのセンシング機能が不調でカウンタの設定をどう変更してもまともに稼働しない状態が続いた。

カウンタの問題はシステムクロックを168MHzにダウンする事で解決したが、16bitDACがドライヴできない問題は依然として継続中。

あと、立ち上げ時にチューニング用のDACにROMから読み出した設定が反映されない不具合と、修正データがROMに書き込めない問題が発覚しているが、こちらの方も解決の目処が立っていない。

16bitDACにはハードウエア側で不具合が発生している可能性も否定出来ず、DAC単体で通信試験を行う必要がある。
posted by Yasuski at 11:58| open.Theremin

2017年11月22日

Open.Theremin@緑基板の製作

Frequency側のオシレーターの定数を周波数が低くなる方向にLを倍量にして変更している。 撮影後、adatEncoder/DACの実装を完了済み。

IMG_7798.JPG

今回は、オシレーターのLにリードタイプのものを使用している。 VariCapを直接調整するためのVR接続端子の追加を忘れないこと。

IMG_7801.JPG

こちらは、V3基板/Teensy3.6用の基板。

IMG_7795.JPG



IMG_7789.JPG

これは、ベーシック仕様の基板。 緑基板から、Teensy3.5/3.6が共用できるようになった。 DCインレットとミニフォン端子の実装を忘れないこと。 

IMG_7790.JPG

この基盤には、基本形となる12bit出力限定のプログラムを準備している。 出力は、MCUからの2chと、V3基板側からの1chの合計3chとなる。

クロックソースをV3基板から受けた場合、オーディオクロックは8MHzを分周した31.25kHz。 それに合わせて、LPFの定数は低めに設定した。 テルミンの楽器としての性格を考えると、LPFは今よりも更に低めに周波数を設定したほうが良いかもしれない。

以上がオプション無しの素の状態。

IMG_7796.JPG

Teensy3.6にID-292版の修正済のファームウエアを書き込んだところ、機能切り替えスイッチの極性が逆に設定されていることが発覚、コレをさらに修正することになった。

IMG_7808.JPG

ID-292ではTeensyを損壊する事故(既に3基潰した)が多発しているので、実装前に保護対策を練る必要がある。

V3基板対応ボードに通電したところ、端子の設定ミスなどが発覚して修正を行った。 また、起動時のピポパ音は出力されるものの、アンテナのセンシングが全く行われない。

IMG_7809.JPG

最初に発覚した失敗は、BUT端子がプログラムのミスで別のポートに割り振られていたことで、これはソフトウエア側の改修で難なく修正することが出来た。 

次に、発振の確認と端子の電圧を測定してみたところ、DACにデータを送れずチューニングが行えない情況が判明した。 原因はSwitch機構内で条件分岐が上手く働かず、ロータリーエンコーダのデータが更新されないことにあったが、これはTeensy3.5では問題なく動いていた部分で、機種依存のバグが発生している可能性がある。

その後、この不具合をプログラムのキャリブレーションモードにロータリーエンコーダを実装することで解決しているが、ノーマルモードとの切り替えの可否は未確認。

IMG_7804.JPG

エンコーダーの稼働確認後にDACを駆動して発振周波数の調整を行ったが、再起動後にセットアップ時にデータを送っているにも係わらず、何故か起動時のセットアップルーチン内でDACにデータが伝送されない問題が発覚する。 MCUの機種依存で不具合が出ているところが怪しく、IDEのバグが疑われるが「サブルーチン化せず、関連する処理は全部ローカルに記述」することで、問題を回避できるかもしれない。

Screen Shot 2017-11-21 at 11.35.08 PM.png
posted by Yasuski at 04:32| open.Theremin

2017年11月15日

pinConfigurations/ID-292

#define LATCH01 27
#define LATCH01_ON (CORE_PIN27_PORTSET = (1<<15))
#define LATCH01_OFF (CORE_PIN27_PORTCLEAR = (1<<15))

#define LATCH02 20
#define LATCH02_ON (CORE_PIN20_PORTSET = (1<<5))
#define LATCH02_OFF (CORE_PIN20_PORTCLEAR = (1<<5))

#define LATCH03 21
#define LATCH03_ON (CORE_PIN21_PORTSET = (1<<6))
#define LATCH03_OFF (CORE_PIN21_PORTCLEAR = (1<<6))

#define LATCH04 18
#define LATCH04_ON (CORE_PIN18_PORTSET = (1<<3))
#define LATCH04_OFF (CORE_PIN18_PORTCLEAR = (1<<3))

#define LATCH05 16
#define LATCH05_ON (CORE_PIN16_PORTSET = (1<<0))
#define LATCH05_OFF (CORE_PIN16_PORTCLEAR = (1<<0))

#define LATCH06 15
#define LATCH06_ON (CORE_PIN15_PORTSET = (1<<0))
#define LATCH06_OFF (CORE_PIN15_PORTCLEAR = (1<<0))

#define LATCH07 17
#define LATCH07_ON (CORE_PIN17_PORTSET = (1<<1))
#define LATCH07_OFF (CORE_PIN17_PORTCLEAR = (1<<1))

#define CLOCK01 25
#define CLOCK01_ON (CORE_PIN25_PORTSET = (1<<5))
#define CLOCK01_OFF (CORE_PIN25_PORTCLEAR = (1<<5))

#define DATA01 26
#define DATA01_ON (CORE_PIN26_PORTSET = (1<<14))
#define DATA01_OFF (CORE_PIN26_PORTCLEAR = (1<<14))

#define LEDred 7 // LED on D7
#define LEDred_ON (CORE_PIN7_PORTSET = (1<<2))
#define LEDred_OFF (CORE_PIN7_PORTCLEAR = (1<<2))

#define LEDgrn 8 // LED on D8
#define LEDgrn_ON (CORE_PIN8_PORTSET = (1<<3))
#define LEDgrn_OFF (CORE_PIN8_PORTCLEAR = (1<<3))

#define LED 9 // LED on D9
#define LED_ON (CORE_PIN9_PORTSET = (1<<3))
#define LED_OFF (CORE_PIN9_PORTCLEAR = (1<<3))

#define LED2red 38 // LED on D38
#define LED2red_OFF (CORE_PIN38_PORTSET = (1<<11)) //inverted
#define LED2red_ON (CORE_PIN38_PORTCLEAR = (1<<11))

#define LED2grn 37 // LED on D38
#define LED2grn_OFF (CORE_PIN37_PORTSET = (1<<10))
#define LED2grn_ON (CORE_PIN37_PORTCLEAR = (1<<10))

#define LED2 39 // LED on D39
#define LED2_OFF (CORE_PIN39_PORTSET = (1<<17))
#define LED2_ON (CORE_PIN39_PORTCLEAR = (1<<17))

#define buttonPin01 11 // Button Pin on D11
#define button_State1 (CORE_PIN11_PINREG & (1<<6))

#define buttonPin02 36 // Button Pin on D36
#define button_State2 (CORE_PIN36_PINREG & (1<<9))

#define buttonPin03 3 // Button Pin on D3
#define button_State3 (CORE_PIN3_PINREG & (1<<12))

#define buttonPin04 4 // Button Pin on D4
#define button_State4 (CORE_PIN4_PINREG & (1<<13))

#define buttonPin05 5 // Button Pin on D5
#define button_State5 (CORE_PIN5_PINREG & (1<<7))

#define buttonPin06 6 // Button Pin on D6
#define button_State6 (CORE_PIN6_PINREG & (1<<4))

#define LEDvol 28 // LED on D28
#define LEDvol_ON (CORE_PIN28_PORTSET = (1<<16))
#define LEDvol_OFF (CORE_PIN28_PORTCLEAR = (1<<16))

#define LEDvol2 13
#define LEDvol2_ON (CORE_PIN13_PORTSET = (1<<5))
#define LEDvol2_OFF (CORE_PIN13_PORTCLEAR = (1<<5))

#define SAMPCLK_STATE (CORE_PIN19_PINREG & (1<<2)) //sampling clock in
#define SAMPCLK_MASK (CORE_PIN19_CONFIG = PORT_PCR_IRQC(0)) //masking sampling clock in
#define SAMPCLK_ACTV (CORE_PIN19_CONFIG = PORT_PCR_IRQC(9)) //activate sampling clock in

#define CS01 29
#define CS01_ON (CORE_PIN29_PORTSET = (1<<18))
#define CS01_OFF (CORE_PIN29_PORTCLEAR = (1<<18))

#define LDAC01 33
#define LDAC01_ON (CORE_PIN33_PORTSET = (1<<24))
#define LDAC01_OFF (CORE_PIN33_PORTCLEAR = (1<<24))

#define SCK01 30
#define SCK01_ON (CORE_PIN30_PORTSET = (1<<19))
#define SCK01_OFF (CORE_PIN30_PORTCLEAR = (1<<19))

#define DAC16 40
#define DAC16_ON (CORE_PIN40_PORTSET = (1<<28))
#define DAC16_OFF (CORE_PIN40_PORTCLEAR = (1<<28))

#define DAC16_2 31
#define DAC16_2_ON (CORE_PIN31_PORTSET = (1<<10))
#define DAC16_2_OFF (CORE_PIN31_PORTCLEAR = (1<<10))

#define SD01 32
#define SD01_ON (CORE_PIN32_PORTSET = (1<<11))
#define SD01_OFF (CORE_PIN32_PORTCLEAR = (1<<11))


#define PC_STATE1 (CORE_PIN22_PINREG & (1<<1)) // pitch osc in
#define PC_STATE2 (CORE_PIN23_PINREG & (1<<2)) // volume osc in
posted by Yasuski at 01:05| open.Theremin

2017年11月10日

目玉スイッチの作り方@直径6mm編

目玉スイッチに仕込んだLEDが不良だったので、アクリル製のガワを破壊して、再組立てを行った。

その際、製作のステップを考えなおしたので、その備忘録。

1)まず、直径6mmの透明アクリルパイプを5mm長に切断する。 サーキュラーソウで切断を行う場合は、ピックアップが難しい(ノコ刃の隙間に切り出した部材が入り込む)ので、材の厚みギリギリに刃の深さを調整すること。

2)表面実装LEDは0805サイズのものを使用する。 耐熱両面テープでLEDを固定した後、水平に極細の配線材をハンダで接合する。

3)切り出したアクリルパイプの切断面を研磨した後、側面に配線を通すため1mm径の穴を貫通させる。

4)タクタイルスイッチのシャフトには予めOリングをはめ込んで、アクリルパイプ取付け時のクリアランスを確保しておく。

5)瞬間接着剤を使って、タクタイルスイッチの上面にLEDを固定する。

6)固定したLEDの配線材をアクリルパイプの配線用の穴に通す。 線材は、LEDの上面を交差する形でまとまる。 座りの良い所で、パイプを固定して、瞬間接着剤を滴下する。

7)パイプの固定を確認した後、LEDの通電テストを行う。 問題がなければ、アクリルパイプの上面に薄く瞬間接着剤を塗布し、目玉を取り付ける。

以上、作業時間は慣れれば15分程度。 予めアクリルパイプを切り分けておくと、作業時間は更に短縮できる。

タクタイルスイッチは、シャフト長が異なる製品をまとめたサンプル用のパッケージをebay等で調達するのがお得。
posted by Yasuski at 00:22| AudioElectronics

2017年11月04日

OLED簡易オシロスコープの製作@ポートの設定(暫定)

DigoleSerialDisp mydisp(1,5,14); //SPI: Pin 1:data, 5:clock, 14:SS, you can assign 255 to SS, and hard ground SS pin on module

#define buttonPin01 2 // Button Pin on D2
#define button_State1 (CORE_PIN2_PINREG & (1<<0))

#define buttonPin02 3 // Button Pin on D3
#define button_State2 (CORE_PIN3_PINREG & (1<<12))

#define buttonPin03 4 // Button Pin on D4
#define button_State3 (CORE_PIN4_PINREG & (1<<13))

#define LED 6  //Blue LED
#define LED_ON (CORE_PIN6_PORTSET = (1<<4))
#define LED_OFF (CORE_PIN6_PORTCLEAR = (1<<4))

#define LEDgrn 19
#define LEDgrn_ON (CORE_PIN19_PORTSET = (1<<2))
#define LEDgrn_OFF (CORE_PIN19_PORTCLEAR = (1<<2))

#define LEDred 18
#define LEDred_ON (CORE_PIN18_PORTSET = (1<<3))
#define LEDred_OFF (CORE_PIN18_PORTCLEAR = (1<<3))

const int ad_ch0 = 20; // Analog 0 pin for channel 0
const int ad_ch1 = 21; // Analog 1 pin for channel 1

posted by Yasuski at 12:59| Arduino

OLED簡易オシロスコープの製作@組立工程を進める

OLED簡易オシロスコープを構成する部品の実装を行っている。

まずは、LED(RGB)をトップパネル裏から両面テープ越しに固定する。

IMG_7777.JPG

ボディー側には、左右両端に取り付け穴を空けた後、Hirose/6pinコネクターを取り付ける。 オシロスコープは信号ラインに挿入する形で接続するので、端子間の配線は直結としつつオーディオ信号と電源を分岐させる。

IMG_7778.JPG

オーディオ信号は入力バッファーを介してオシロスコープに入力するので、Quad/Dualタイプのオペアンプを増設する必要がある。

基板との配線は、ブレッドボード用の配線材を流用する。

IMG_7779.JPG

各端子には丸ピンを配置している。

当初は、GFRPの厚板でVR取り付け用のシムを、

IMG_7780.JPG

GFRPの薄板でOLEDの保護パネルを製作していたが、、、

IMG_7783.JPG

クリアランスと視認性の問題が発覚したために、素材を再び吟味することになった。

IMG_7781.JPG

検討の結果、それぞれ素材をGFRPの薄板と透明アクリル板に変更している。

IMG_7784.JPG

GFRP製のシムには、カットシート(紙製)を貼り付けた。

IMG_7785.JPG

Hirose/6pinは取り付け穴の加工が難しい。

IMG_7786.JPG

心配していたプラグとの干渉は発生しなかった。

プログラム側の変更点は、OLEDのドライヴ速度を高速化するためにライブラリのdigitalRead(Write)をdigitalRead(Write)Fastに書き換えている。

残るは、タッチスイッチとオペアンプの実装だが、タッチスイッチの製作には欠品している部品の調達が必要。
posted by Yasuski at 07:04| AudioElectronics