部品箱整理でBehringerのHA400が出てきた。ヘッドフォンが4個つけられるヘッドフォンアンプだ。なんとロングセラーな現行モデルだ。もちろん,購入したのは2006年頃なので,現行製品の黒ではなく銀色。Behringerがまだ安かろう悪かろうだった頃の製品だ。音もそれなりでオーディオとは程遠い,楽器としてのアンプだった。確か千円台で売っていた気がする。今は5千円台まで値上げ。値上げだけで中身は昔の安物のままだったりすれば残念だがどうなのだろう。中はオペアンプで,入力に1つ,各々の出力に1つづつSOP8サイズの4580がついている。横幅が200milのずんぐりタイプだ。この4580,見慣れたJRCやTIのものではなく,なんとCoolAudio製のV4580Mだ。さすがBehringer,開けると必ず出てくるCoolAudio。まさか汎用オペアンプまでセカンドソースを作っていたとは。で,ヘッドフォン出力のカップリングコンデンサは中国XUNDA製の100uF/16Vが。うーん,マイルドな味付けはここか。ラジオかいな。同容量同サイズのニチコンFGや東信の銀コンに交換したらシャリシャリするのだろうか。おまけにコイツは個数をケチる為にグランド側に入ってる。ヘッドフォン専用ならアリだが頂けない。もう少し高容量の奴に付け替えたいが,ヘッドフォンジャック間の隙間が5.5mmくらいなので,直径5mm以下である必要がある。もっとも,不恰好だが足を延ばしてヘッドフォンジャックの上に寝かせれば直径12mm程度まで行けそうなので,これなら手持ちのKEMETの高分子コンデンサ2200uF/16Vが余裕で入る。
プリントパターンを追ってみると,入力の4580はボルテージフォロワで,只のバッファ。出力の4580は反転アンプで,入力に10K,帰還にVRと発振止めの20pFだ。VRの摺動子のところにオペアンプのマイナス入力が繋がっているので,最大10倍,最小だとマイナス無限大になる回路だ。オペアンプ次第では発振器になりそうだ。カップリングは最初の入口に2012サイズのセラコン0.1uFが載ってる。なぜ容量がわかるかって,わざわざシルク印刷してあるからだ。入力の負荷が100KΩなので,単純にカットオフ周波数を計算すると15Hzくらいになる。出力側が47uFなので,これで十分な気もするが,出力側を増強するならここも増やしたいところ。ただ,このセラコン,ご丁寧にも接着してあり,除去するのは容易ではないかもしれない。基板のランドは実測で3.1mmあるので,外すことさえできれば2012のコンデンサに改装可能だ。オペアンプの出力には47Ωが直列についている。ここはオペアンプが強力ならば遠慮しないで4.7Ω位にしたいところ。オペアンプは色々なオペアンプに改装できそうだが,問題になるとすれば200milの幅だ。秋月だとNJM2746とNJM2904とNJM4558。意外に種類が無く,わざわざ4580から貼り替えるものでもない。Digikeyも見てみたが,5532とTL072が足されているだけだった。ヘッドフォンを鳴らすのに5532は昔の定番だがそれでは面白くない。まぁ,150mil幅の品物も無理すれば付きそうな感じはする。現行品ではOPA1656だと直列抵抗が4.7Ωでも問題なくヘッドフォンをドライブできそうだが,はてさて。1回路くらい改造してみるかな。
当時の中国製にしてはマトモな作りだ。
一昨日の部品箱整理の続き。PQIのモバイルバッテリーPower 6000CVが出てきた。コストコ専売モデルだ。ほとんど使っていない新品なのだが,ラバーコーティングが加水分解してしまい,強烈なベタベタ状態。ボタンをおすとLEDが3つ点灯するのでまだ生きているようだ。それなら復活させてやろうと,強烈ベタベタ加水分解を取り除いてみる。取り除き方は色々あって,地道にアルコールやアセトンで拭くのが常道。ただ,これはかなり時間がかかる。暇ならよいが,さっさと部品箱整理を終わらせたい。手っ取り早いのがキッチンハイター。コイツは水酸化ナトリウムも入っているので,コイツを使ってコネクターに溶液を絶対につけないように慎重に落とす。さすが強アルカリ性溶液だけあって一瞬で中和する。結構臭いのは仕方がないが。で,一応モバイルバッテリーとして使えるようにはなったのだが,そういえばコイツは過去にリコールが出ていたことを思い出しサイトをみてみると,リコール対象は製造番号に依存するという。で,製造番号を確認してみたのだが,すっかり消えてしまって判らなくなってしまった。LED付10倍ルーペで痕跡を探ってみたのだが数字跡があるのだか無いのだかよく判らん状態。ややこしいのは,コストコの案内によると元々記載のないモデルもあり,それはリコール対象外だということ。うーん,これの片割れ(元々2個セットだった)を使っていた人にあげようと思っていたのだけど,さすがにリコール対象だとマズイので,もったいないけど処分するかなぁ。
先週のLFSR,アセンブラでコードが改善できないかどうか,Arduino IDEのコンパイルメッセージに出てくるコンパイル用テンポラリディレクトリから無理矢理オブジェクトコードのELFファイルを奪い取り,AVR用逆アセンブラにかけて中身をみてみる。
で,肝心のLFSRのシフト部分はというと,こんな感じ。
reg = (reg >> 1) | (bit << 14);
312: 36 95 lsr r19 r19を論理右シフト
314: 27 95 ror r18 r18をローテート右シフト (これで,reg >> 1)
316: 90 e4 ldi r25, 0x40 r25に0x40をロード
318: 89 9f mul r24, r25 r24(変数bitを格納)とr25(0x40)を乗算
31a: 90 2d mov r25, r0 下位8ビットを上位r25へ。(これで,bit << 14)
31c: 88 27 eor r24, r24 下位8ビットはクリア
31e: 11 24 eor r1, r1 上位8ビットはクリア
320: 28 2b or r18, r24 reg >> 1(r19,r18)とbit << 14(r25,r24)のOR
322: 39 2b or r19, r25
こりゃびっくりなコードだ。r24はbit変数で,0か1が入っている。0の場合はどうでも良いが,1の場合はr1=0x00 r0=0x40となり,r0を上位に入れるので,結果0x4000で14ビットシフトと同じになる。ATtiny202はハードウェア乗算器が入っているので,乗算命令は2クロックだ。シフト繰り返しより速い。Cだから仕方がない0x31cバイト〜0x321バイト以外は無駄がまったく無いわ。
訳あって昔の部品箱を整理したら,任天堂初代ファミコンの初期バージョンACアダプタとか,ローランドのMPU-401本体だけとか,ミズホ無線AMアンテナUZ-77のアンプだけとかかなりレアなアイテムが出てきた。初期バージョンのファミコンACアダプタ(角形・銀シール無)なんてかなりレアだが無価値って奴だな。中古で千円前後だ。MPU-401やUZ-77はヤフオクみてみると結構な価格で落札されているものもあるが,動作確認できないし,ジャンク扱いにしてもハズレ落札者だと落札金額分以上の手間がかかりそうだ。MPU-401なんかはケーブル自作してラズパイ繋げて,パススルーモードではなく本来のモードで制御したりすると面白そうだ(需要は全く無いだろうけど)。コイツは本来のモードであれば,面倒なリアルタイム処理はMPU-401の中のCPU,HD6801が全部やってくれるので,ラズパイ側の処理はPerlやPythonのスクリプトだけでもよくなる。標準MIDIファイルのプレーヤーにするなら,標準MIDIファイルを読み取って,あとはイベントとタイミングをMPU-401に送るだけだ。タイミングは指示するだけでよくて,ラズパイ側で管理する必要はない。あ,でもラズパイが5Vトレラントではないのでケーブル自作だけじゃダメか。電源は5Vで良いのだが,ラズパイ側から供給では容量的に可哀想だ。適当なバスブリッジと電源コネクタを載せたハットを作らんと。まぁ,それで繋いだとして,大昔ローランドのサービスステーションで購入した仕様書はどこにあるのだか全く見当つかず(たぶん捨てたか古本屋に持っていったか)。ググると英語版が出てくるのでできないことはなさそうだが,はてさて。
某所の掃除の帰りに八潮の秋月に寄って店頭特価品の高分子電解コンデンサをいくつか購入。5Vラインで使えて4.7uFくらいの奴はなかなか最適サイズなのが無いので助かる。セラミックが高容量化したので不要と言えば不要なのだが,パスコンにセラミックを使うと発振する某レギュレータIC対策。あと,音声通すにも良い。タンタルは少しでも逆電圧がかかる可能性のあるところには使えないし,高分子電解コンデンサが良いのよ。
RP2040のArduino環境でのPWM音声出力,なかなかいい感じに鳴るので色々やってみたが,繰り返し試験をすると何度目かでハングしてしまう。データの書き込みが追いつかない場合は必ずハング。必ず追いつくように送っても機嫌が悪いとハング。こりゃダメだ。中々安定しないのはバージョンアップに期待するとして,コイツは外付けDACをつけることにした。音質は正直どうでも良くて,速度も10KHzくらい出れば良いので,秋月で100円で買える定番I2C DACのMCP4725をつけてみた。100円で解決するなら悩むより精神衛生上良い。ソースの音声データのサンプリング周波数は8KHz。一昨日のPWM出力の場合だと,サンプリング周波数8KHzで使うとキャリアの8KHzがおもいっきり聞こえてしまう。なので一昨日組んだソースはオーバーサンプリングして32KHzで動かしたのだが,DAC出力の場合はそんなことは考慮しなくて良いので8KHzで出力してみる。8KHzだと間隔は125uS。普通に考えれば125uS周期で割り込みを入れてDACにデータを出力。そこまでの精度の必要ないので,ループ1回あたりの所要時間をオシロで計測し,あとは全体が125uS周期になるようdelayMicrosecondsを突っ込んでいく簡便な方法で。結果,当たり前だが普通に鳴る。まぁ,そりゃそうだ。
記譜ソフトDoricoの4から5へのアップデート案内が来た。もちろん有償なのだが,2023/4以降にアクティベートした場合は無償になるらしい。無償期間が随分短いが,おいらがProバージョンをセールで買ったのがセール終了直前の4月6日。おお,無償だ。ギリセーフ。そういう訳で,早速Dorico5にアップデートしてみた。まだ譜面を書いてないので,感想は後日。
昨日のPCMデータ,8Kサンプリングで30秒ほどのもの。PWM Audio Libraryを使って確かに実際に鳴らすことはできた。ただし,8Kだとキャリア音がそのまま出てきてしまってうるさいので,オーバーサンプリングのコードを入れて32Kで再生してみた。でも何度か鳴らしているとハングアップしてしまう。うーん,これはまだ時期尚早かもしれん。DAC付けるかなぁ。もう少し粘ってみるか。
RP2040で簡単な音楽再生できないか試してみる。トラ技のラズパイDACもあるが,Arduino環境ではどうか。I2SのDACをつければ簡単だが,PWMだと中々大変なようだ。ただ,ググってみると,PWM Audio Library というのが出てくる。16ビットPCMを適当に丸めてPWM再生してくれるらしい。PCMデータはソースコード埋め込みで適当に準備するにして,ちょっと試してみるか。
秋月でアナログシンセ用VCO CEM3340の互換ICが在庫復活していた。今度はCoolaudio V3340ではなく,ラトビアのALFA製AS3340Aだ(ちなみにALFAのページにあるTipsはかなり役立つ情報。特にTuning the AS3340は素晴らしい)。周波数安定度を改良したALFA特製のAバージョンというのが有難い。このラトビアの会社はヨーロッパやアメリカで製造中止になったアナログICを多数作っている。そのまま互換ではなく,かゆいところを改良していたりするのが有難い。で,秋月のV3340はしばらく在庫があったのだが,結構高価で手が出せないうちに,おいらにアナログシンセ熱が現れてからは完売になってしまった。仕方がないので海外の業者からAS3340を十何個か仕入れたのだが,秋月の在庫復活は有難い。それも¥380と格安だ(海外の業者も似たりよったりの価格なのだが)。販売ページには電源電圧±15Vと書いてあるが,まぁご愛嬌。データシートに記載がある通り,マイナス側は電流制限抵抗ナシに-15Vかけたら内部のツェナーダイオードがぶっ壊れる。まぁでも,それでぶっ壊して文句言うようなヤカラはこんな買い物しないわな。他にアナログシンセ用VCAのSSI2164互換品,AS2164まで復活している(もっとも,以前扱っていたのはCoolaudioのV2164だけど)。こちらは¥650と少し高い。海外直輸入や国内の他業者から互換品を買った方が若干安いかもしれない。で,さっそく発注してみた。2VCO 6音ポリくらいなら作れる部品を揃えておいてあるのだが,歳のせいか最近誤配線や机上からの落下でよくぶっ壊しているので,予備が多い方が心理的安心感。秋月で買える間に仕上げればソケット使ってICを大事に使いまわさなくても良いっていう安心感が大きい。
しかしどのようなルートで入荷したのかは知らんが,秋月でALFAのICを扱ってくれるのは有難い。CA3080やCA3280の互換品なんかエフェクター用に需要ありそうだけどなぁ。CA3080があれば今や真空管屋になってしまったエレハモのSmallStoneが作れる。ギターがシュワシュワ鳴るぞ。いや,ちょっと前まで別ベンダのCA3080互換品扱っていたような気が。完売したか?
昨年諸事情でサボったエアコンのファン掃除を朝から。ファン部分についた黒カビを洗い流すのが目的。去年サボっただけあって,例年以上に水が茶色く染まる。カビが付きにくいようシーズン中は24時間運転していてもコノザマなんだよなぁ。さすがというかなんというか。 毎度毎度よくこんなに色がつくと感心するわ。
先週金曜のつづき。ATtiny202のLFSRのループのうち,ArduinoのdigitalWriteとdigitalReadを,digitalWriteのソースを見て同じようなことを省力化しながら自前で処理するとどうなるかテストしてみた。
ソースはこんな感じ。
uint16_t bit, reg;
uint8_t port1m, port6m;
PORT_t *port1 = digitalPinToPortStruct(PIN_PA1);
PORT_t *port6 = digitalPinToPortStruct(PIN_PA6);
port1m = digitalPinToBitMask(PIN_PA1);
port6m = digitalPinToBitMask(PIN_PA6);
bit = 0;
reg = 0x1234;
while (1) {
bit = (reg ^ (reg >> 2)) & 1;
if (port1->IN & port1m) {
if (bit) {
port6->OUTSET = port6m;
} else {
port6->OUTCLR = port6m;
}
} else {
port6->OUTCLR = port6m;
}
reg = (reg >> 1) | (bit << 14);
}
最初のdigitalPinToPortStructでポートを構造体としてアドレスを得て,そこに目掛けて実際にOUTSETかOUTCLRを立てているだけ。このあたりはAVRの流儀そのままだ。PORT1をチェックしてLOWだったら出力マスクするところもif文で記載。まぁ,実際のdigitalWriteがそのような作りになっていたので,余計な部分を省略して真似したというか。で,結果はというと,無駄な処理が若干減ったのか300KHz出るようになった。これでTR-909のノイズジェネレータとほぼ同等。周波数が同じでもあっちは31ビットでこっちは15ビットだが,音に出してしまえば大差ない。先週も書いたが,70円のマイコンでここまで出れば上出来のような気がする。
先週に比べ,1割くらいのスピードアップ。
整理できていない部品が溜まってきたので,部品箱への大整理。何か作りたいと思わなければ溜まらないのだが,それでは貯まるけれども堪らない。うーん。
昨日の回路を基板化してみた。サービスサイズ10cm×10cmの基板に,出力用RCAと,MIDI IN/THRUのDINコネクタと,16桁×2行のOLEDパネルと,ボタン8個(こんなに要らないとは思うが)とロータリーエンコーダ1個と,コントローラとして秋月のAE-RP2040を搭載。これにYMF262-Mが2個と,YAC512-Mが2個と,オペアンプ4個(TL074×3,TL072×1)と,EEPROMと,ボタン用のポートエクスパンダと,MIDI用のフォトカプラとバッファ。それ以外は3端子レギュレータくらいか。もちろん両面実装。面積的にはもう少し余裕ありそうに見えるが,4層基板ではなく2層基板で実装しているので配線だらけになっている。TL074はデジットの特売品。サービスサイズ基板には有難いSMDタイプ。ただ,これは普通のオペアンプなので,5V単電源で使うと歪みをオーディオではなく楽器として考慮しても1.5Vp-pくらいしか使い物にならない。それ以上はオーバードライブを通したエレキギターのような音になる。DAC YAC512のデータシートを見ると最大2.5Vp-pと記載されている。これが2個だと5Vp-pになる訳。シンセベースを弾くなら歪み上等だが,電源電圧が足りないときの歪みは耳障りな歪みになるパターンが多いので歪ませておく訳にもいかない。電源を9Vとして,ダイオード3本直列でグランドの電位を約2V上げて,プラス側は約7Vになるよう振り分けを実施。これ以上ダイオードを並べてマイナス側を上げると5V用の3端子レギュレータ(LD1117S50)が厳しくなるのでこの辺で。レールtoレールのオペアンプを用意しても良いのだろうが,USBで動かそうとうかそんな気は全く無いので,9V電源が使えるのであればそこまでする必要もないと思う。
先月,途中まで設計して中断していたFM音源シンセを,アナログシンセの前に習作として作ってみることにした。先月設計していたのは90年代のサウンドブラスターに載っていたFM音源LSI YMF262の4オペ4チャネル独自出力を生かして,出力に何故かVCFとVCAが4組ついている4音ポリの謎シンセだったが,設計しなおしているのは普通のFM音源シンセ。例によってネオクラシックなハードシンセだ。もっとも,YMF262はあまり良い音だった記憶がない。当時のサウンドカードのアナログ回路がショボかったのと,同時発音数を稼ぐ為に2オペで使っていたデータが多かったものと予想するが,だったら物量作戦で2個載せて,微妙なディチューンをかけて同時に鳴らせば少しは厚い(暑苦しい?)音になるかもしれないと,YMF262とDAC(YAC512)を2ペアにしてみたのだが,吉と出るか単なる無駄金と出るか。はてさて。
昨日の楽譜をなんとか入稿。歌い手には全く無縁なパリピ仕様の表紙で作成してみた。ってか,曲に合わせた70年代風味のフォントにパリピのミスマッチ感がおいらの自己満足的ツボ。それはおいといて,連絡が来た発送予定日が非情の5/23。うーん,5/23に必要なのだけどなぁ。フライヤーや折パンフを頼むと土日も営業日勘定に入れてくれるのだが,まぁ仕方がない。5/23に配布するのは諦めるか。
楽譜の原稿大詰め。かなりこまかく浄書。Doricoでなんともならん場所や,どうみてもバグっているような場所はPDF出力したあとにAffinity Designer (イラストレータみたいなソフト)でPDFファイルを修正。まぁ,これは実際の編集さんもやっているような気がする。まだまだ先は長いが,明日入稿できればなんとか5/23の練習には間に合いそうだ。
パスポートがそろそろ切れるので写真撮影。色々あって,今回は機械ではなくて写真屋さんで。なんだか家族経営みたいなところだった。最近の証明写真は自動の機械かスマホでの素人撮影ばかりだったので,カメラマン撮影はなんだか新鮮かもしれん。顔をあげたり,肩がちょっと斜めになっていたり,そういうのを直してくれるのが有難い。もっとも,自動撮影でもAIでなんとかできそうな分野ではあるのだけれど。
メインのマシンのMacOSをVenturaにアップデートしてみる。思えば毎年,ゴールデンウィーク前後にアップデートしていたような。今年は互換が気になるソフトは無し。あとは運次第かもしれん。気持ち,Safariの復旧が速くなった気がする。あちこちのページを開けたままでうっかりCommand-Qで終了させた場合,Safariの再起動に物凄く時間がかかったのが,VenturaのSafariはそうでもない。何か改善したのかもしれん。
水曜の続き。実際にLFSRの乱数発生器を作ってみるテスト。コードを簡単にする為に16ビットで回す。ショボいコードを回して最小パルスが8ビット記載で約109KHz,16ビット記載で約120KHz。じゃあ更にコードを簡単にする為に15ビットで回すと約260KHz。遅いと言われているdigitalWrite/Readの部分だけ残して,bitをXORで反転させるだけでも約500KHzは出るので,LFSRをアセンブラで書くか,digitalWrite/Readの部分を直接レジスタアクセスに変更すれば更に最適化できそうだ。それはともかく,8ビットプロセッサなのに16ビット記載の方が速かったのは意外。まぁ,1ビットで260KHz出るなら16ビットとして見立てても16KHzは出ていることになるので,今のままで十分な気がする。TR-909は300KHzだし。
70円でこれだけ出れば御の字。
コードはこんな感じ。ArduinoのmegaTinyCoreボード使用。
まず,AVRは8ビットなので素直(!?)に8ビットで記載。XORするビットは16,14,13,11なので,全て下位バイトだけで処理。LFSRの出力はPA6。PA1はDisableフラグで,コイツが"0"だと出力しない仕様。これで109KHz。
uint8_t bit, regH, regL, cr;
regH = 0x12; regL = 0x34;
while (1) {
bit = (regL ^ (regL >> 2) ^ (regL >> 3) ^ (regL >> 5)) & 1;
cr = (regH & 1) << 7;
regH >>= 1;
regL >>= 1;
regL |= cr;
regH |= (bit << 7);
digitalWrite(PIN_PA6, bit & digitalRead(PIN_PA1));
}
こちらは深いことを考えずに全く同様のコードを16ビットで素直に記載。こっちの方が1割ほど速く120KHz出た。もうひとがんばり。
uint16_t bit, regr;
reg = 0x1234;
while (1) {
bit = (reg ^ (reg >> 2) ^ (reg >> 3) ^ (reg >> 5)) & 1;
reg = (reg >> 1) | (bit << 15);
digitalWrite(PIN_PA6, bit & digitalRead(PIN_PA1));
}
これが完成形。シンセに使うなら15ビットで十分と,思い切って15ビットに削減。XORするビットは15と14。すると260KHzも出る。遅い原因はやはりシフトなのかもしれん。
uint16_t bit, regr;
reg = 0x1234;
while (1) {
bit = (reg ^ (reg >> 2)) & 1;
reg = (reg >> 1) | (bit << 14);
digitalWrite(PIN_PA6, bit & digitalRead(PIN_PA1));
}
大井競馬第10レース,レースそのものが中止。これはびっくり。返し馬で9番クールマニワが倒れてしまった。そのまま除外になっただけだと思ったら,馬が全く動けずに移動させるのに結構時間がかかってしまったらしく,次の11レースが重賞なのでそのままレース中止と来た。当然,全部払い戻しなんだが,トリプル馬単(後半3レースの馬単を全部当てる)対象レースだったので,トリプル馬単まで払い戻し。キャリーオーバー継続だそうだ。しかし一昨年まで中央にいて,去年大井に来て,今年はそこそこ勝っていたらしい。本馬場入場するまで普通にパドックを回っていたのにね。助けようと思えばなんとかなるのかもしれないけど,右肩甲骨骨折で予後不良。ご冥福を。
先週ネタにしたLFSR,これをtinyAVRで動かそうと早速ArduinoのCでコードを書いてみたのだが,コンパイルしてびっくり。なんじゃこの膨大なオブジェクトコードは。31番目と13番目のXORをすればよいだけなので,32ビットで計算するなら,AVRは8ビットなのでレジスタを4つ用意して,順にRORで右ローテートして,最上位のレジスタのbit 6と下から2番目のバイトのbit 6をANDで引き出してEORして,LSLで左1ビットシフトしてから元の最上位レジスタにORするだけのような。出力は最下位のレジスタのbit 0を拾ってGPIOのビットを立てる。うーん,せっかくArduinoで楽をしようと思ったのだけど,結局アセンブラか? でもまぁ,Cのままで出力してどこまで速度出るかだよなぁ。
松屋で今日から販売のネギたっぷりスパイスカレーを喰ってみた。なんだか口が強烈に臭くなりそうな組み合わせだが,中身は平成時代のカレギュウに長ネギを足したような感じだ。ルーはスープカレーのようなスパイシーさ。でもインド系統の味ではないな。あれはコショウだ。松屋の平成カレーと色は違うが味は似てる。これにウスターソースを入れたら平成カレーだ。で,こいつはライスの上に大量の長ネギが載っている。これがスパイスと意外に合う。でもまぁ,長ネギとコショウのお陰で肉として載ってる牛めし用の肉の味が隠れてしまっている。なんだか勿体無い気もしなくもない。令和カレギュウはカレーが割高なので物凄く贅沢品になってしまったが,あれはまだちゃんと肉の味が残る。コイツは残らない。なんだか勿体無いのでライスと肉の部分だけを牛めしとして喰ったらルーが余ってしまった。これはイマイチだ。
トモちゃん最終回まで。なんだか清々しいわ。ずっと応援していたい恋って感じ。性悪女と仮面な笑顔の裏側が怖い餅女もいい味だしてる。ってか,性悪女はそういうキャラなんだろうが,あの餅女,なかなかやるな。見直したぜ。
先週のシンセの続き。スペースの都合でノイズ発振器に4000シリーズを3つも並べられそうもない。となると,マイコン化して8ピンが有難いのだが,PICで作るとなると現行製品用のライターの手持ちはMPLAB SNAPだけだ。まだ2千円しない頃に買ったもの。ただ,コイツも対象チップが限られるので,何が使えるかのリストを調べてみると,アルファベット順で並べているので頭の方にATtinyがある。そうだ。AVRマイコンのATMEL社って今はMicrochip社なんだっけ。コイツを使えば安いしArudino IDEが使えるのでプログラム開発も最適化しない限り楽だ。ATtiny202なら秋月で40円だった筈。しばらく品切れで眼中になかったけど今はどうなのだろうと通販サイトを覗いてみると,あった。70円に値上げしているが70円ならアリだ。で,コイツの書き込みにもMPLAB SNAPが使える訳だが,コイツは単純にArduinoを使って書き込める筈。そう思って調べてみると,最近は中華USBシリアルCH340を使うのがトレンドらしい。数ドルで買えるという利点の他に,5Vキッカリ出力をしてくれることと,書き込み対象マイコンとのタイミングの相性が決め手だそうだ。昔はMacでCH340を使うにはドライバが必要だったが,最近はプレインストールされているのも嬉しい。
このATtiny202の書き込みに必要な部品はCH340モジュールと,ショットキーダイオード(BAT43やBAT54が指定されているがショットキーなら何でも良い)と抵抗(100〜2.2K)1本だけ。何とシンプルなこと。ちなみに,CH340ではなくFT232を使う為には許容可能な性能を得る為にタイムアウト設定を変更しろと書いてある。ここは素直に推奨通り秋月の¥550モジュールと,¥70のATtiny202を購入。ついでにゼロプレッシャーソケットを追加して書き込み器として作成してみた。書き込みソフトとプログラム側の環境はArduino IDEを使って,早速Lチカを書き込んでみる。ボードマネージャでmegaTinyCoreを選択。megaでTinyとは面白い名前。続いてボードを設定。今回試すのはATtiny202なので,ATtiny412/402/212/202 を選択。次にボードのシリアルポートを指定。秋月のCH340モジュールをMacに繋げた場合のデバイス名称は,/dev/tty.usbserial-場所ID だ。場所IDはFT232のようなシリアル番号(?)ではなく数字。差し込んだUSBポートによって変わる。次にチップの種類を設定。場所がわかりにくいが,ツールメニューの中に Chip: "ATtiny412" とか書いてあるメニューがあるので,これもATtiny202に設定する。ATtiny402 (bad signature)と書かれた謎選択種もあるが,これは署名を間違えて最後のバイトが本来0x27であるべきところを0x25になっている個体に対応したものらしい。それはともかく,このChip:を設定しないとコンパイルはできるが書き込み時にIDが違うとエラーになる。ここまで設定すれば,あとはスケッチをコンパイルして,「書き込み装置を使って書き込む」メニューで書き込むだけ。そこそこの速度で動くのが有難い。Arduino IDEのサンプルスケッチBlinkを書き込み,PA3(7ピン)にLEDを抵抗を繋いで点滅を確認。書き込みは問題はなさそう。
よく考えたら変換基板に載せると幅300milという訳にもいかない場合があるので,幅の広い方のソケットも追加。
トグルスイッチは8pと14,16pの切替。
それはともかく,この¥70マイコン,擬似乱数発生器には十分使えそうなので,ノイズジェネレータとして使えるか試してみようと思う。SOP8ピンで,外付け部品はパスコン位なので省スペースなのも有難い。あと,tinyAVR0と呼ばれるATtiny202には非搭載であるが,一つ上の品種tinyAVR1なら8bit DACを搭載しているという。ノイズ評価が必要になるかもしれんが,エンベロープジェネレータとして使えないだろうか。あらかじめエンベロープの設定を送っておいて,ゲートをONにすると設定通りにエンベロープ電圧を生成するとか。まぁ,そんなものは別にメインのマイコンで制御しても大した仕事量ではないのだが,エンベロープジェネレータがあった方が昔のアナログシンセっぽい。
今日でゴールデンウィークも終わり。エアコン掃除をしようと思ったが悪天候でダメ。某教会へグレゴリオ聖歌を歌いに行く。5月なので昇天がテーマ。昇天教会が何故オリーブ山にあるのか。マタイやヨハネとルカの解釈(!?)の違いが興味深い。
上海問屋の新しいキーボードが届いた。壊した方は赤軸だったが,今度はピンク軸だ。タッチの感触はあまりかわらないが静音になってる。まぁ,夜中にゲームやるなら必須の機能なのかもしれないが,押し込んだ感じがなんとなくメンブレンのような感触だ。それこそHHKB-Liteに近いかもしれない(メカニカルなので,あれよりは軽いが)。今度は壊さないようにしないと。
楽譜編曲5曲分,ようやく納品終了。お疲れ様。おいら。
上海問屋のキーボードがぶっこわれた。まぁ,使い方が荒くて前から調子が悪かったので昨年秋くらいからFILCOのMajestouch MINILA-R Convertibleに浮気していたのだが,こいつはWindowsキーボードにありがちな,CTRLキーをAの横に配置するとESCキーが左下の元CTRLの位置になるというvi使いには鬼畜仕様。つい,全角半角キーを連打してしまうということになる。まぁそれだけなら慣れれば良い。四半世紀前に仕事で使っていたHPのキーボードのようにAの左隣のCTRLキーの更に左隣がCAPSで,その下の左シフトの左隣にESCがあるなら使い勝手も良さそうだ。しかしそんなキーボードは現行製品では見当たらないし,そもそもあの配列の小型キーボードは製品すらない。それはともかく,MINILA-Rはカーソルキーが無いのが特徴。仕事で仕方なく使うMS-WordやExcelと,最近やたらと出番があるArduino IDE以外では普段カーソルキーを使わないのでそれでよかったのだ。ところが,先週くらいからずっとDoricoで譜面描き。これがカーソルキーを多用するのだ。音階をABCDEFG文字キーで入力すると音符を五線に載せてくれるのだが,前の音階に使いところに載せるので意図したオクターブではない場合がある。そこでCommand-Option-↑↓でオクターブを変更するのだが,MINILA-RだとCommand-Option-FN-/か右ALTという4つ押しの鬼畜コンビネーションとなり,ブラインドタッチは無理。音符を前後にずらすときはOption-FN-KANAかDELだ。ここでFNの押しが足りなかったり,隣のキーを押していたりするとDELが有効になって音符が消えてしまう。何度それにハマったか。もっとも,初めからMIDIキーボードで入力すれば良いのだが作業場はそこまで広くない。残念ながらこのキーボードではDoricoは無理。ということで,以前使っていた上海問屋の赤軸に戻して譜面描きをしていた。ところがそれが故障。コネクタが弱っていたのが,トドメを刺してしまったっぽい。うーん,昔使っていたHHKB Lite for Macがどこかにあると思うのだけど,あとはApple純正キーボードもどこかに。こいつらはMacで使うには良いのだけど,ゴールデンウィークが終わるとWindowsでも使わんとならんのでMac用ではダメだ。仕方がないのでまた上海問屋をポチり。赤軸は軽くて嫌なのだが仕方がない。CtrlとCAPSの入替と,CommandとOptionの入替がハードでできて(ハードだと借り物のWindowsマシンでも有効),テンキーレスで,カーソルキーがあって,TABの上がESCという年寄仕様はこれくらいしかない(というか,この製品を企画したのは年寄なのだろう)。あとは自作するかだよなぁ。
例によってコメダで譜面描き。今日完成した2曲分を納品。お陰でどこにも遊びに行けないんだよなぁ。
ヤクルト山田哲人のホームランボールを3席隣の少年が取ろうとしたところを強奪した中年オヤジの話がバズってた。ハイビジョンのテレビ中継が入ってなきゃよくある球場与太話で済んだのかもしれんが,テレビ中継が入ってるってのによくやるわ。おまけにソイツがバカツイートしたお陰で一瞬で本名から居住地まで晒されている。なかなか怖い世界だわ。
シンセ回路図検討の続き。12ビットの基準電圧内蔵I2C 4チャネルDAC MCP4728が沢山入手できたので,2VCO目にFMシンセを入れるのはやめて,素直にCEM3340の2VCOにするかなぁ。I2CといってもMCP4728はアドレスが固定なのだが,秋月に置いてあるPCA9306をチップセレクトとしてペアで使えば複数個使うことが可能。まぁ,そんなことをしなくてもCMOS 4051とオペアンプをペアにしてサンプルホールドして使うのが王道なんだろうが,それだと四六時中出力しないとならないので面倒臭い。まぁ4チャネルあればVCOピッチ調整,VCFエンベロープ,VCFレゾナンス,VCAエンベロープと振り分けられるので,1音分の仕事はできる。まぁ,最後のVCAエンベロープは別にDACでVCAを制御しなくても,デジタルボリュームで十分なのだが。あと,ノイズ発振器は昨日の回路が使えそう。まぁ,コイツはPICマイコンでも十分な気はするが。
昔懐かしいローランドのリズムマシンTR-909のノイズ発生器の回路の紹介記事を見かけた。よくあるXORを使ったLFSRのハードウェア実装だ。使っている部品が日立のHD14006なんてまたマニアックなシフトレジスタだが,これは4段か5段のシフトレジスタが4つ入っていて,全部繋げると18段になる。このICを2個使って,13段目と31段目をXORし,1段目にフィードバックしているだけだ。31段目を使うなら28段目とXORかと思ったが,まぁそれはそれ。31段目を出すと28段目を出すのはこのICでは無理だ。実際に作成するにはどうしたらよいか。4006もXORの4070も日立にこだわらなければ国内でヴィンテージ品が未だ入手可能。それを使っても良いし,74HC164を4個組み合わせても良い。74HC164を使うならわざわざ4個買う必要もなく,ループ時間は短くなるが15段と14段で2個の方が安上がり。これが特殊な実装という訳ではなく,Prophet-5なんかで使っているノイズIC MM5837も,データシートを見ると中身は17段シフトレジスタの14段目と17段目をXORしているので,作りは似たようなものだ。TR-909の回路の方が31段使っている分,同じパターンになるまでの時間が長いくらいの違いだ。
しかしこのノイズ,どこで使っているのか気になったので,TR-909の回路図をググって眺めてみた。ここで生成したノイズは緩めのローパスフィルターを介してスネアに使われている。おそらく,これが主目的なのだろう。他に,バンドパスフィルターを介してハンドクラップ,味付けとして強めのローパスフィルターを介してバスドラ,フィルタは通さずそのままタムとして利用。あのアクの強いバスドラやタムの味付けになり,それで現役時代は売れずに,製造終了後にハウスミュージックでブレイクするという皮肉な結果に。ちなみに,もっと味付けが濃いハイハットやシンバルはPCMだ。マスクROM HN61256(32Kbyte)をハイハットとクラッシュとライドでそれぞれ1つずつの贅沢構成。コイツのアドレス線に繋がっているのは16ビットのバイナリカウンタで,12ビットの4040と4ビットの4520のカスケード接続。32Kbyteなので15ビットあれば良く,最上位の1ビットは不要だが,これを~CS信号に繋いでいるので,カウンタが0x0000から0x7FFFまでカウントアップしたら,次のカウントでROMからの出力が切れるという賢い仕掛けだ。ハイハットはオープンとクローズがあり,同時に鳴ることはありえないので,同じROMを使って14ビット目と15ビット目で切り替えて使う(最初の24Kbyteがオープンで,次の8Kbyteがクローズ)。コイツを60KHzのクロックで順次読み出す仕掛け。サンプリングレートだけみると60KHzなので44.1KHzのCDより贅沢なのだが,その先,DACなんて高価なものはついている筈もなく,D-FFが6個入っている4174に抵抗をぶら下げて6ビット出力としている。このチープさがアクの強さなのかもしれん。
しかしTR-909って,中古で二束三文の時代を知っているだけに,今の価格を見るとびっくりするね。なにしろ売れなかったらしいし。