2020年07月17日

FTMの分周率を変更する

FTMのDividerの設定を /8 から /2 に変更し、

Screen Shot 2020-07-17 at 16.19.37.png

それにあわせて、ハンドリングするデータのレンジ調整を行った。

Screen Shot 2020-07-17 at 15.33.55.png

所謂「グリッチ」の周波数を8倍上に引き上げることが目的で、グリッチそのものは消滅しないものの、音質はクリックに近いものに変化している。

ちなみに、当初はグリッチの周波数を「下げる」為に分周率を/32に設定したものの、レンジ調整が上手く行かず、計画は頓挫している。
posted by Yasuski at 17:21| LaVoixski

2020年07月13日

その後のDaisy

Daisyのコンパイル・エラーの原因を探っていると、「参照するファイルが不在」とのアラートが出ていて、今一度ライブラリ内のファイルを点検したところ、必要なファイル群が存在していないことが判明した。

LibralyのZipFileを自動登録するコマンドでは、「空のフォルダ」がインストールされるようだ。

件のフォルダには、Git内のリンクを辿って別のファイル群を追加する必要があったのが、

Screen Shot 2020-07-13 at 6.34.54.png

そのような指示はWiki内には見当たらず、、、

Screen Shot 2020-07-13 at 6.51.18.png

本来参照されるべきファイルの不在によって、エラーが返っていた、、、という間抜けな結末だった。

ファイルの補充後は、

Screen Shot 2020-07-13 at 6.36.02.png

無事にコンパイルを完了しているが、

Screen Shot 2020-07-13 at 6.45.06.png

書き込み後は、相変わらず「起動不能」のアラートが出ている。 

稼働状態を確かめるため、テンプレートのフリースペースに設定されていたLoop内にBlinkを書き込んでみたところ、これが正常に作動していることから、プログラム自体は「ほぼ正常に」起動しているようだ。

ちなみに、先日発覚したBlinkのExampleで発生するエラーは、今回のファイルを追加したことによって解消した模様。

なんにせよ、音を出して確認するためには、取り急ぎ実験用のプラットフォームをでっち上げる必要がある。

追記:

IMEの切り替えがトリガーとなって、Arduino IDE 1.8.13 がいきなり落ちる現象が発覚している。

追記2:

Arduino関連のファイル取得は、個別に行わず一括でダウンロードすれば解決する模様。

Download the Daisy Arduino libraries here. Once downloaded, unzip the file.
posted by Yasuski at 07:59| DaisySeed

2020年07月07日

Daisy@Arduinoの開発環境について

DaisySeedのオンボードLEDが点灯しないのは、Pinの設定がライブラリで行われていなかったことが原因と判明。

Screen Shot 2020-07-07 at 17.48.13.png

EEPROMの消去も同様に動作不能で、こちらもアドレス設定のミスマッチが疑わしい。

Screen Shot 2020-07-06 at 8.18.00.png

ポート設定を、pinMode(ledPin, OUTPUT); とすることで、オンボードLEDを認識させることが出来たが、Arduinoの開発環境ではExsampleCodeを始めとして、この手の初歩的な設定がきちんと行われていない可能性が高い。 

Screen Shot 2020-07-06 at 8.16.06.png

これはあくまでも個人的な見解ではあるが、このボードはオンライン上でプログラミングを行うことを前提にしているフシがあって、Arduino環境下の開発は今後もお留守である可能性が高そうだ。

mbedが性に合わなかった原因は、このオンライン上でプログラミングを行うスタイルにあったのだが、Arduinoもゆくゆくはオンライン化の方向を模索しているようだ。Teensyはその点で地に足がついている思想なのが良い。 

Daisyがオンラインに拘る理由は、OS依存によって発生するであろう問題の解消とUserの情報を吸い上げたいという意思によるものと想像しているが、IDEのオンライン化はブラウザ依存という更に間抜けな局面をクリアすることが出来ない。

要は開発者側の「やる気の問題」に見えてきたのだが、Arudinoのライブラリがまともなものに書き直されるまでは使い物にならない。 このまま開発環境の整備に進展がなければTeensy陣営の覇権は安泰だろう。 

DaisySeedはハードウエアの素材が良さそうなだけに大変に勿体無く思うのだが、ソフトウエアの運用は思想ベースに依るものなので、あまり期待はできそうにない。

posted by Yasuski at 17:54| DaisySeed

2020年07月06日

ArduinoIDEでDaisySeedのプログラミングを行う

ArduinoからDaisySeedにデータをアップロードするには、まずSTのProgrammerをインストールしなければならない。 

Screen Shot 2020-07-06 at 2.49.24.png

STのサイトからDLしたファイルを解凍し、右クリックでパッケージを開いて

Screen Shot 2020-07-06 at 2.49.32.png

Screen Shot 2020-07-06 at 2.08.41.png

Terminalでコマンドを叩き、

Screen Shot 2020-07-06 at 2.08.55.png

インストーラを起動する。

Screen Shot 2020-07-06 at 2.08.08.png

プログラマーのインストールを完了した後に、手順通りボードに delay(); を使ったLチカのスケッチをアップロードしたところ、アップロード自体は出来るものの、再起動後のボード上でプログラムエラーが発生、LEDは発光せず沈黙したままだった。

次に delay(); を使用せずに milles(); で点滅を制御するスケッチをアップロードしたところ、これもボード側でエラーが発生して正常な動作が行われない。 もしかすると、コンパイルの設定が問題と考えて、設定を SmallestCode から Fastest に変えて再コンパイルを行ったところ、IDEでボード側のエラーが検知されるものの、とりあえずLチカは達成出来た。

Screen Shot 2020-07-06 at 2.28.03.png

いまのところ不具合の原因を確定できないが、delay(); の実装が行われていない雰囲気もあって、挙動はかなり怪しい。
posted by Yasuski at 02:47| DaisySeed

2020年07月05日

GPT2_IRQの扱いに関して

チャンネルが分離されていたFLEXPWMとは違って、GPT関連のIRQはフラグが統合されているようだ。

Screen Shot 2020-07-04 at 15.58.02.png

InputCapture1/2のフラグはランダムなタイミングで発生するため、チャンネル毎に制御信号を分離した方が安全そうなのだが、条件分岐によって判定を行うポイントを設定する場所が問題になりそうだ。

例えば、ひとまず統合されたIRQをそのままサブルーチンに投げる方法と、、、

Screen Shot 2020-07-04 at 23.49.21.png

フラグの条件でIRQが発動した際の分岐先を決定する方法とでは、キャプチャの挙動が変わってくる可能性がある。

Screen Shot 2020-07-05 at 0.58.35.png

GPT系ではイニシャライズからタイマの起動、オーバーフロー、タイマの停止を統一して行うことになるが、

Screen Shot 2020-07-04 at 17.01.43.png

タイマ停止時にはGPIOの属性をALT1からALT5に変更し、InputCaptureに設定した端子を開放している。

Screen Shot 2020-07-04 at 23.52.27.png

キャプチャ・イベントが発生したタイミングでカウンタの値をレジスタに記録し、

Screen Shot 2020-07-05 at 0.57.29.png

値を読み込んだ後に、キャプチャ・フラグのクリアを行う。サブルーチン内でインターラプトの介入をを禁止することで、処理の混乱を回避している。

カウンタの読み出しは、InputCapture1/2 個別のタイミングで行っている。

Screen Shot 2020-07-04 at 23.50.54.png

本来はプライオリティーが設定されたIRQが分離されているGPT1/2を並列に運用するのが筋なのだが、ボードから端子が取り出せないためにGPT2のみの運用で妥協せざるを得ない。 

無理をすれば、ボード裏にあるPSRAMのCSからGPT1のInputCaptureを取り出せるが、

teensy41_memory.jpg

これは最後の手段と考えている。

32bitフルスケールをカウントする時間は7秒程度で、この間にOverFloorによるエラーが1回発生する。

Screen Shot 2020-07-05 at 8.20.29.png

テルミン用のFVCは、パルスのアッパーエッジのタイミングで取得したカウント値の差分を検出するために、実際に取得した値の実効値を調整する必要がある。Teensy3.6で構成した16bit精度のFVCから得られるデータの実効値は14bit程で、ピッチの制御に用いるには微妙な数値だ。 

32bit精度のカウンタからはより柔軟に実効域を切り取ることが出来るので、データエラーによって発生するバウンシング現象を防止できるかもしれない。





posted by Yasuski at 01:44| Teensy

2020年07月03日

CubeMXの導入について

なかなか導入ができなかったCubeMXがやっとインストールできたので、備忘録を残す。

このソフトウエアはJavaが必須なので、事前にこれをインストールしなければならない。
既にインストール済の場合はSystemPreferencesに項目が存在するので、それをクリックしてまずはアップデートを行う。

Screen Shot 2020-07-03 at 14.17.28.png

が、Javaを最新版に更新した後に、インストーラをクリックしても全く受け付けられない場合が報告されていて自分も同じ状況にハマってしまった。 仕方がないのでForumのスレッドを検索して調べると、Terminalを使った対処法が紹介されていたのだが、これも上手く行かない。

Screen Shot 2020-07-03 at 14.17.17.png

で、賢い人が、そもそもJDKをインストールしなきゃダメなんじゃないの?と書いていて、、、

Screen Shot 2020-07-03 at 14.10.09.png

早速これをインストールしたのだが、アイコンをクリックしても無反応な状況は変わらない。

Screen Shot 2020-07-03 at 14.10.31.png

もしやと思って、コンテンツを開示してフォルダ内のリンクをクリックしたところ、アプリケーションが認識されてインストールが始まった。

Screen Shot 2020-07-03 at 14.14.15.png

IDEを起動してまず行うことは、使用するチップの選択で、プロジェクトを生成するとチップのフットプリントが現れる。

Screen Shot 2020-07-03 at 0.26.27.png

チップをドライヴするクロックの設定は別のタブを開いて行う。

Screen Shot 2020-07-03 at 0.26.33.png

列挙された機能を選択して、ピンの割振りと昨日の設定を行うのだが、これが上手くいかない。

Screen Shot 2020-07-03 at 5.32.48.png

何故かピンのコンフリクトが発生するのだが、これはハードウエアの制限なのだろう。あと、GPIOのコンフィギュレーションが行えず、どうやってもpinを入力端子に設定することが出来ない。

Screen Shot 2020-07-03 at 5.54.09.png

作業がスタック気味になってきたので、以前導入にトライしたものの、CubeMXと同様の不具合が発生したためにインストールを諦めていたMCUExpressの起動を行ったところ、こちらもすんなりと稼働状態に持ち込むことが出来た。

Screen Shot 2020-07-03 at 6.35.31.png

このアプリの操作感はCubeMXよりも良いのだが、コードを吐き出させると無駄にライブラリを参照するクセがあり、回路の検討は行えるものの、実用には至っていない。 

何れにしても自分のスキル不足が問題と思われるが、それにしても、、、である。
posted by Yasuski at 14:32| DaisySeed

2020年07月02日

Arpeggiator/Sequencer関連のコードをサブルーチンにまとめる

アルペジエーター/シーケンサーの制御を行うパートに変更を行った。

Screen Shot 2020-07-02 at 17.15.53.png

まず、サブルーチン arpeggiator01 の先頭に、パラメーター呼び出すセクションを移動。

Screen Shot 2020-07-02 at 17.16.38.png

リタルダンドのトリガーはここで発生させている。

Screen Shot 2020-07-02 at 17.17.07.png

サブルーチン arpeggiator02 にも同様の処置を行っている。

Screen Shot 2020-07-02 at 17.17.21.png

こちらにもトリガーを設定しているが、発動ポイントを若干ズラしてある。

Screen Shot 2020-07-02 at 17.17.44.png

シーケンサー専用のカウンターを別途サブルーチン sequenceCounter(); にまとめた。

Screen Shot 2020-07-02 at 15.37.16.png

divider02をトリガーとして、 sequenceCounter(); に処理をジャンプする。

Screen Shot 2020-07-02 at 15.42.06.png

これらの変更は、より解り易い形でコードを俯瞰するのが目的で、処理のスピードアップに寄与するものではない。
posted by Yasuski at 17:21| LaVoixski