2022年04月23日

LaVoixski@CounterOverFloor

システムを立ち上げてから大凡8時間後に停止するPhaseShifterの挙動を観察した。



再起動は、Button04をシングルクリックして行う。

Screen Shot 2022-04-23 at 21.49.09.png

このルーチンでは、phaseShifterに関連するローカルカウンタ "offsetT3" をリセットしているのだが、、、

Screen Shot 2022-04-23 at 22.32.39.png

このカウンタがオーバーフローして、除算のリザルトを返せなくなった時点で、PhaseShiftが停止するようだ。






posted by Yasuski at 20:43| LaVoixski

2022年02月11日

LaVoixski@L/RmixOutの波形表示



DMAの導入を検討しているのだが、難易度が高く実現は難しい。
posted by Yasuski at 13:55| LaVoixski

2022年02月03日

LaVoixski@フローチャートを書き出す

まずは、レイヤーが浅いボタン・スイッチ&ロータリーエンコーダ廻りの構造図を描こうとしたのだが、、、

upperLayerSignalFlow.png

例によって、グチャグチャになった。 処理を行うハードウエアとソフトウエアの切り分けが難しく、ザクッと概念図寄りに描こうとした結果がこの有様だ。

次に、よりシンプルな描画を目指してチューニング機構廻りの構造をまとめてみた。

inputCapture.png

その過程で、Sequencerのチューニングを行う mode == 3 の表示が行われていないことを発見、LavenderにLEDの配色を行っておいた。

Screen Shot 2022-02-03 at 13.54.03.png

マニュアル執筆中にバグや足りない部分を見つけるのはよくあることだが、早速プログラムに修正が入ってしまった。

ちなみに、参考のために資料を漁って出てきた米国製軍用ラジオのマニュアルに記載されているフローチャートはこんな感じで、、、

Screen Shot 2022-02-03 at 22.02.13.png

正直「解り易い」かと問われると微妙なところか。

とりあえず、作図サービスのサイトにあったテンプレからスタートアップ・ルーティンを模式図にしてみたが、、、

startUp Diagram.png

フォントサイズの設定に悩まされそうだ。
posted by Yasuski at 19:24| LaVoixski

2022年02月01日

LaVoixski@円形LCDの取付金具を作成する

LCDを取り付けるためのパネルを、軍用ラジオのジャンクパーツから切出した。

IMG_20220128_152759848.jpg

軍用の超超ジェラルミンは、薄くても強度が高く「粘り」が少ないために、加工が行い易い。 これは、同型ラジオのパーツで、外装はパネルに転用することができる。

IMG_3340.JPG

送料の高騰で気軽にジャンクを購入できる時代ではなくなってしまったが、材によっては新品の民生品を買うよりもトータルで安くなるのが魅力だ。 今回は、ラジオの天板から材を切出している。

IMG_20220201_124143910.jpg

発注を掛けていたLCDが到着したのを機に、サブフレーム用に切り出しておいたアルミ板に下穴を開けた。

IMG_20220201_145606234.jpg

実際にデバイスを取付けてみると、液晶パネルがマウントされている位置に若干の個体差が認められたので、LCDデバイス側の取り付け穴を加工して、現物合わせで調整を行っていく。

IMG_20220201_170249164.jpg

その後、フロントパネルにLCDユニットの仮実装を行ったが、フロントパネルとLCDユニット間のクリアランス・チェックを怠ったために、サンドイッチ状態で圧が掛かった液晶表示部がパッキっと逝ってしまった。 

全てが手探り状態な試作段階とはいえ、ケアレス・ミスが多すぎることを反省しなければならない。

IMG_20220201_222146742.jpg
posted by Yasuski at 15:06| LaVoixski

2022年01月29日

LaVoixski@新たにシステム・クラッシュが発生する

安定していたシステムが、また頻繁に落っこちるようになってしまった。

今回、プログラム面の改変は一切行っておらず、波形選択プリセット#25に制御波形として登録しているリニア鋸波を設定し、それを再生し続けたことが原因と考えられる。

IMG_20220109_122042257.jpg

これをサイン波合成タイプの鋸波に登録し直した結果、

Screen Shot 2022-01-29 at 10.38.46.png

安定した状態に復帰することが出来たのだが、メモリへの制御系と音源系の同時アクセスが問題になっているのだろうか?

もしくは、フルスケールの波形を読み出そうとする際に、何かが起こるのかもしれない。

これから、リニア波1波だけを選択したプリセットをアサインして様子を見ていくが、1Hを経過した時点でトラブルは認められない。 リニア5波分のWavetableに同時アクセスする状況が問題になるのかもしれない。

追記: 1H過ぎ、言っている側から再起動が掛かってしまった。

追記2: どうも描画関連のメモリ配分に原因が潜んでいるようで、其処をいじった場合にトラブルが発生するようだ。

例えば、この部分にvolatile型を指定した結果、数分でクラッシュに至っている。

Screen Shot 2022-01-30 at 6.25.03.png

逆にこの画像処理系の変数には何故かvolatile型が指定されていて、(記述を行った時期が違うために、型を統一していなかった)それを外した結果、1H後にクラッシュが発生している。 掘っ立て小屋特有の記述の不統一がトラブルを誘発している可能性を考えてしまうが、気付いた部分だけを統一しても問題は解決しないようだ。

Screen Shot 2022-01-30 at 6.24.31.png

現在、新たにvolatile型を指定していなかったカウンタ関連の変数を書き直してクラッシュテストを行っているところ。

追記: 01_31_22

10H以上の安定状態のあと、何故か再起動が多発する状況に陥る。

起動後に2VoiceModeに移行してMute状態にすると、ほぼ2分弱で再起動が掛かるパターンを繰り返す。

UpperEncoderのModeを「一巡させた後」にMuteを行うとクラッシュが回避できるようだが、クラッシュを誘発する原因は不明。

対症療法として、StartUpルーチンにModeを一巡させる機構を組み込んで、クラッシュの発生を抑えることが出来た。

Screen Shot 2022-01-31 at 11.46.16.png

これから追試を行っていくが、RAM1以外の場所にデータを格納する場合に発生してしまう「初期化の不徹底」が原因なのだろうか。

追記2:

またシステムクラッシュが発生したが、原因の相関性が見えてこない。 バラック構造な試作環境によって発生する「物理的な要因」が影響している可能性を考えるべきか。
posted by Yasuski at 10:18| LaVoixski

2022年01月25日

LaVoixski@PhaseShifter選択時に表示するフォントの色味について

ランダム色のバックグラウンドを背景にしたPURPLE固定のフォントは視認性が悪いので、配色を反対色に変更した。

Screen Shot 2022-01-25 at 8.06.36.png

コンパイル後にRAM1のフリーメモリが若干ではあるが漸減している他、

Screen Shot 2022-01-25 at 22.40.12.png

変更・再起動後に8H余り経過した時点で「システムが落っこちた」点が不安要因なので、これから経過観察を行うことにしている。



追記:

3H後にシステムが再起動した。想像では埒が明かないのでデバッガが欲しいところだが、リソースがジリ貧でクリティカルな動作をしているシステムをデバッグモードで動作させられるかどうかはまた別の問題だ。

そして、これも想像に過ぎないのだが、現状はどのようにすればインターラプトによって描画が中断される確率を下げられるのか?問題を解いているだけなのかもしれない。

追記2:

2H後に再起動が掛かった。 いまのところ再起動のトリガーとなる原因を確定できていないが、何らかの形でJPEGの描画ルーチンが妨害された結果再起動に至る、という機序がほぼ確定している。 今回の場合はArpeggiatorのクロックが関係している可能性が考えられるが、駆動クロックは停止状態にあった。

他にトリガーの可能性として考えられるのはPITとGPTから発生するインターラプトで、DMAMEMにアサインするメモリを増量した後にトラブルが頻発しだしたことがヒントになるか。

追記3:

43分後に再起動している。メモリのヒープ領域にトラブルの原因が蓄積するのか? 今回はArpeggiatorを起動せず、起動後のほぼ素の状態でButton4をアクティヴェイトせずに2VoiceModeを選択して様子を見る。 

追記4;

4H経過後、状態は安定している。これからButton04をオンにして様子を見る。

追記5;

そろそろ1Hが経過する頃だが、問題は発生していない。 やはり、Arpeggiatorの絡みでなんらかのトリガーが引かれている可能性が高くなってきた。

追記6:

9H経過の時点で安定状態が維持されている。 MuteをPhaseShiftに切り替えて、位相の変化を確認した。VoiceModeをArppegiatorに切り替えない限り、諸々の不具合は発生しないようだ。

追記7:

不要なタイミングで頻繁に画像が更新されるArpeggiatorのMute表示は不健全なので、描画を行う対象を選択する条件分岐をより厳密に設定することにした。

Screen Shot 2022-01-26 at 16.15.00.png

元々設定していたSwitchで条件分岐を行った後に画像表示に関するパートを挿入しているので、処理全体の行程数は変更前と変わらない筈だ。 (case 3: の”Mute”に関しては、むしろ行程数が減少している)
posted by Yasuski at 08:17| LaVoixski

2022年01月22日

LaVoixski@SequencerModeのStepCounterの表示を変更する

シーケンスの進行をバーグラフのアニメーションで表す機能を実装した。

IMG_20220122_180728752.jpg

StepCounterから、データを引いて、、、

Screen Shot 2022-01-22 at 18.21.11.png

バーグラフの描画を行っている。

Screen Shot 2022-01-22 at 18.20.56.png

改装の過程で、OLEDディスプレイに表示系を移植する作業を行っていたが、これが全く使い物にならないことが判明、試作機のフロントパネルに設置していたOLEDディスプレイを全て撤去して、LCDにリプレイスすることになった。

追記: 01_31_22

視認性が極端に悪いSequencialArpeggiatorの表示色MAROONをPINKに変更した。
posted by Yasuski at 18:34| LaVoixski

2022年01月21日

LaVoixski@LCDのデータラインについて

MCUからLCDまでの配線距離が10cm以上になる時は、高速でデータを流すSDAとSCLを隣接させてはいけないという話題がTwitterに流れていたが、そもそもデバイスの端子がそうなるように配置されているのが物凄く間抜け。

Screen Shot 2022-01-21 at 22.03.47.png

SDAとSCLの間に電源とGNDラインを挟んでシールドにするのが簡易な混信対策として有効らしいが、実際の運用は未了。

LaVoixski41_adat_card.png
posted by Yasuski at 22:14| LaVoixski

LaVoixski@MUTE発動時にシステムが再起動に陥る問題

音源をミュートモードにすると何故かシステムが落ちる現象の再現性をチェックしているのだが、ある特定の状況で起こるそれの原因を掴むことが難しい。

負荷の軽い2VoiceMode選択時にアルペジエータを走らせた状況でMUTEを行った場合、電源投入後に9Hが経過した時点でトラブルが発生しておらず、これをイニシャルモード(ピッチ変換なし)という最も負荷の軽い状況を選択した途端にシステムが落ちてしまうことが判明している。

Screen Shot 2022-01-21 at 12.16.47.png

過去の経験から鑑みて、どうもこれは「ミュート時にJPEG画像を表示する機能」が悪さをしている可能性が高い。 

MUTE時に再起動が掛かって音が出て仕舞うのは流石にマズいので、ひとまず対策を行うことにした。 まず思い付くのはJPEG画像を表示する際のオフセットの設定で、修正前のライブラリはこのポイントにバグが潜んでいた。

Screen Shot 2022-01-21 at 10.18.33.png

とりあえずの手当として、現行設定しているオフセットのpixelを-1方向にズラした結果、暫くの間は状況が安定していたものの、2Hほど経過した後にシステムにリセットが掛かった。 

原因は不明だが、実用上は問題がないレベルなので、とりあえずは現状で様子を見ることにする。

追記:

その後、再起動を繰り返す症状が再発した。タイマの閾値をHEXで記述したり、bitReadを使ったりといろいろ試してみたが、状況が改善する兆しは感じられない。

再現性に乏しい、よく解らないタイミングでシステムが落ちる原因には、インターラプトが絡んでいる可能性がある。 それを踏まえて描画のシーケンスを割り込みを禁止する cli(); / sei(); でラップしたところ、なんとか安定状態に持ち込むことが出来た。

Screen Shot 2022-01-21 at 12.50.54.png

MUTEモードを起動して、11Hが経過しているが、いまのところシステムは安定している。 なお、PhaseShifterの機能が停止していたので、位相関係の初期化を行う必要があった。

結論は、描画中のインターラプトは禁忌で、データの転送中は割り込みを禁止にする必要がある。この設定をライブラリに組み込むのが正解かどうかは判らないが、試してみる価値はありそうだ。

追記2:

2VoiceMode選択時にシステムが再起動する案件が再発している。 再発した原因は不明。 対処法としてサブルーチンの記述場所を変更しているが、1H経過時点では安定状態を保っている。

Screen Shot 2022-01-23 at 17.51.32.png

トラブルを根本的に回避する方策として、microSDから直接JPEGファイルを読み出す方式を予めバッファに吸い上げたデータを読む形に変更を試みているが、DMAMEM/EXTMEMにバッファ領域を構築するとRAM1のメモリが破綻するという、機能の実装以前の状況に陥っている。

追記3:

SceneCaptureの設定値に関する表示を行う記述を修正した途端に「再起動」が頻発するようになった。 

JPEGの描画とは直接関係が無さそうな部位の変更から考えると面妖な反応だが、予想されるインターラプトの影響を軽減するため、プログラムの階層が一番浅いMainLoop内に条件分岐を移動する対策を採ることにした。

Screen Shot 2022-01-24 at 7.57.25.png

修正後1Hが経過した時点での動作は安定しているようだが、全く油断がならない。

追記4:

Arpeggiator選択時の映像。 Arpeggiatorをストップすると、JPEG画像の表示が固定される。



現時点で電源投入後12Hが経過しているが、システムの状態は安定している。

JPEGの描画は、処理を行うループの階層の浅いところで行うべきか。 トラブっていた時は、フリーランするMainの中のサブルーチンに入れ子になった条件分岐といった深いところから描画処理のサブルーチンを呼出していた。

今回は、処理上の最短距離を目指す観点で「合理的」と思われた配置から、見かけ上のステップが増えるものの、mainから直接描画処理のサブルーチンに飛ばすといった単純な構造にコードの配置を変更したのが正解だったのではないか。 この件に限らずトラブルが頻発する場合は、多重構造を避けるのが正解だろう。
posted by Yasuski at 12:21| LaVoixski

2022年01月19日

LaVoixski@ArpeggioSequencerが読み出すStepDataのハンドリングを改善する

SequencerModeのアドレス#1と#2に割り振っている「ArpeggioをSequenceするモード」を選択した際に、LPF/PhaseShifterにアサインしたLFOのSpeedパラメータの更新が、「Arpeggiator関連の操作頁を選択した時のみに行われる」バグが発覚した。

要は、Arpeggiatorの状態を示すピアノロールが表示されている時のみに、Speedのパラメータが更新される現象で、それ以外ではArpeggiatorのstep数が反映されず、Speedはランダムな倍率で固定状態になってしまう。

Screen Shot 2022-01-19 at 18.59.18.png

Arpeggiatorの表示系にはstepを読み出す機能が仕込まれているのだが、

Screen Shot 2022-01-19 at 18.59.40.png

ピアノロールの表示を選択しない場合には、このstep数を読み出すパートが働かないことになる。

実は、リンクを張り忘れていたstep数をハンドリングするサブルーチンが存在していて、、、

Screen Shot 2022-01-19 at 19.00.08.png

これをSequencerを駆動するクロックのパートに組み込むことで、

Screen Shot 2022-01-19 at 18.04.03.png

常時データの更新を行うことが出来るようになった。

追記:

起動時にPhaseShifterが稼働しないのは、steps の初期値を ”0” に設定した結果、LFOのスピードを決定するための式、lpf_lfo2 = (arpSpdB * steps) * (pot00k * 0.001); の値がゼロになってしまうことが原因だった。

初期値を”8”に修正することで、リセットを行わずにPhaseShifterを稼働状態に持ち込めている。

Screen Shot 2022-01-19 at 22.42.10.png

ついでに、Arpeggiatorの起動時にも steps をエントリーできるようにした。

Screen Shot 2022-01-19 at 22.42.48.png
posted by Yasuski at 19:18| LaVoixski