Encoderを他の用途に使えるようにする。パターン切り替えとパラメータの保存。16stepのパターンだけだとつまらないのでスイッチ等でパターンの切り替えが出来るようにしたい。SDカードか何かでパラメータを保存出来るようにしたい。シーケンス打ち込み用のデバイスも使いやすいように筐体に収める。パラレルだと配線がぐちゃぐちゃするので将来的に専用のマイコンを入れてNucleoとシリアル接続出来るように考えておく。BPMにenvelopeLengthを追従させる?休符時にノイズが入る。NJM13700のDCAがすぐにはOFFにならないのか?これも要調査。リビジョン117に戻して音声系とUI系を結合したら、まあまあちゃんと動作した。repository:https://developer.mbed.org/users/ryood/code/BaseMachine_Sequencer/メモ:RTOSがらみの問題は別にして、シーケンス再生中にLCD表示させるのはなかなかつらい感じだ。LCD表示(入力系も含める?)は別のマイコンで制御してSPIかI2Cで本体と通信したほうがいいかもしれない。完成させたいのでシーケンス打ち込みのプログラミングをしてからもう少し考える。47mm)を入れるのにぴったりのようだ。抵抗は釣具のケースにまとめて収納している。雑談2016年8月21日日曜日ATTiny85のUSIでI2C通信を試してみる。Interface)が備わっているので半分ハードウェア制御でI2Cも使えるようだ。Programmerというのを使っている。Tiny85を使うのははじめてなのでとりあえずLチカしてみた。}}I2C出力I2Cはオープンドレインなので、1kΩのRでVCC(+5V)にPullUpしている。ライブラリは「https://github.com/adafruit/TinyWireM」を使わせてもらった。Aruduino用のライブラリだが、USI_TWI_Master.cppUSI_TWI_Master.hは素のAVR用なのでこれを使ってみた。}}スレーブのアドレスは適当に0xAA(7bit)にして、最下位はI2CのWriteの1なのでSDAは0b10101011になる。出力波形I2C信号らしきものは出力されてるようだ。オシロのカーソルで測定するとI2CのSCLは約400KHzだった。SCLの9bit目はスレーブがSDAをLに引っ張らないといけないのでマスター側としての最初の動作はうまく行っていると思う。LCDを制御できるようにしてみたい。小ネタ実験2016年8月20日土曜日ベースマシンの全体をつないでmbedでつまずく。音声系とUI系を全部つないでいざUIのプログラミング!といきたかったが。以前のRTOSTimerを使ったクラスをインポートして使うと、deprecatedが出てしまうので、この際シーケンサーのプログラムをレビューしながら書きなおしてみたがやはり動作がおかしい。84という実行時エラーが発生する。https://developer.mbed.org/users/ryood/code/SpiSequenceSender_Test/はAnalogInを使っているが、再コンパイルしても動作する。officialのライブラリのリビジョンは以下のとおり。ここまでmbedでむちゃくちゃするということはsoftbankの思惑としか思えない。雑談mbed-rtosのThreadをdeprecated(非推奨)を避けて使ってみる。*stack_pointer=NULL)だとdeprecated(非推奨)のWarningが出るのでどうすればいいかやってみた。*stack_pointer=NULL)を使えばいいようだが、コンストラクタでThread本体の関数が指定できない。method)で、本体の関数(task)を指定するらしい。Templateを使っていてちょっとわかりにくいが、objにClassから導出されたオブジェクトへのポインタ、methodにClassのメンバ関数へのポインタを指定すればいいらしい。task);という、Classのメンバ関数ではない素の関数もtaskに指定できるようだ。}}thread1が素のprint()、thread2がFooクラスのメンバ関数のprint()をThreadのtaskとして指定している。実行結果メモ:プロジェクトに「mbed-rtos」をインポートしておけば、"rtos.h"をインクルードしないでもコンパイルできた。5のExampleと思われる「mbed-os-example-blinky」というプロジェクトをオンライン・コンパイラでやってみたが、「mbed-os」というライブラリがインポートされていて、普通の「mbed」はインポートされていない。mbedを分離しているのかな?「mbed-os」はパブリッシュされていないようで、オンライン・コンパイラでは普通にインポートできないようだ。F401RE(mbed)をMasterにしてPSoC4とSPI通信する。」)RtosTimerは使わざるを得ないかもしれない。POT(AverageAnalogInクラスを利用)POTを並べたコントロール・パネルもつなげてみた。入力にはAnalogInの読み取り値を移動平均する自作のAverageInクラス(「mbedのAnalogInでPotentiometerの読み取り値のふらつきを抑える。84というエラーが出るようになってしまった。プロジェクト内でいろいろやったが、RTOSを使いつつAnalogInとst7567を同時使用するとこのエラーが出る。シンプルな状態にしてもこのエラーが出る。タクト・スイッチ(PinDetectクラスを利用)先ほど、PinDetectクラスが動かないと書いたばかりだが、いろいろやっていたら動作した。原因は不明だが、配線の接触不良やPinDetectクラスの割り込みハンドラ内でprintfを呼び出したりしていたせいかもしれない。混乱していたのでよくわからない。InterruptInの内部PullUpが効かなのはまだ未確認なので、前回の記事はそのまままにしておきます。LCDで組んだ回路にタクトスイッチを追加した。現状のパラメータをTextでLCDに表示。BaseMachine_Sequencer(mbed):https://developer.mbed.org/users/ryood/code/BaseMachine_Sequencer/Github:https://github.com/ryood/BaseMachine_Sequencerメモ:mbedのRTOSでThreadのコンストラクタがdeprecatedのWarningを吐く。新しいRTOSについてもう一回調べないとダメかも。F401REでmbedのInterruptInが動作しない。タクトスイッチのプログラミングをしようと思ったら、PinDetectクラスが動作しない。OfficialのInteruptInクラスも動作しないようだ。}}main()関数内のsw1.fall(&sw1Pushed);で割込みハンドラをsw1Pushed()に指定すると、プルアップされなくなる(←テスタで測定)めんどくさいけど、割り込みではなくDigitalInでPollingするクラスを作ろうか(@@;以前は動いていたので(参考:「NucleoF401REでQEIライブラリを使う。5になったのが原因かなぁ。LCDとロータリーエンコーダーLCDはaitendoの「CH12864F-SPI」を使うことにした。YAMANISHIさんがst7567用に改変されたhttps://developer.mbed.org/users/masato/code/st7565LCD/でないとダメだったかもしれない。st7565LCD.cppのpagemapという変数の要素の並びを変えてやればちゃんと表示された。5になってRTOSの仕様がちょっと変わったのかも。ThreadのコンストラクタでWarningが出た。18LCDの表示はまとめてクラス化することにした。単体テスト(途中)SpiSequencerDisplay_Testhttps://developer.mbed.org/users/ryood/code/SpiSequencerDisplay_Test/メモ:D0、D1をDigitalInなどで使うと、printf()でUART出力できなくなる。そのくせD0、D1にはそれらしい波形は出ていないようだ(@@;参考:「ArduinoとNucleoでPCとのSerial(UART)通信の最高速度を調べてみる。」Nucleo64でもピン数がカツカツになってきた。Headerのピンがあるのではまらないように再度メモ。3でPCM5102Aを使ってみる。PiでもPCM5102Aがよく使われているようなので動かしてみた。LPに書き込んで動作確認した。KitでPCM5102Aを使ってみる。↑このプログラムはDMAの扱いが雑で、片チャンネルの出力が変だが、PCM5102A周りの回路が動作するかどうかは確認できる。PCM5102Aで直接ヘッドホンを駆動するのはムリがあるが、音は出た。動いてくれてうれしいような、寂しいような。メモ:PCM5102Aは電源電圧によって出力が歪む様なので(参考:「PCM5102の出力にLPFをかける」)実作するとすれば電源はがんばる。Volumio+デバイス・ドライバでプログラミングしなくても音楽を再生できそうなので、このあたりをもう少し調べてみる。LME49600を使ったヘッドホンアンプを作るのが先かな。電源(3.3V)とGNDをショートさせるとRebootがかかる。3にVolumioをインストールしてみる。3にネットワーク・オーディオ用のLinuxのVolumioをインストールしてみた。2016ネットワーク設定Raspberian(NOOBS)と違ってローカルのGUIがない(たぶん)のでWifiの設定がめんどくさい。我が家ではネットワークはWi-fiで運用していて、親機が1F、作業場が2Fなので簡単には有線でLANに接続できない。LinuxでWi-fiの設定はやったことがないし、DHCPサーバが立ち上がっているLANでないと自力でネットワークの設定もしないといけないので、押入れをひっかきまわして、無線LAN子機のWL54SEを探し出して有線LAN環境を作った。有線でつながれば、PCのWebブラウザからhttp://volumio.localにアクセスすればWi-fiの設定もできた。あとはWi-fi経由で使っていけばいいが、他のディストリビューションも試してみたいので、しばらく有線LAN環境は残しておくつもり。SSHいちいちモニターやキーボードをつなぐのもめんどくさいので、SSHでアクセスしてみたがrootでは入れないようだ。Web上の記事だとrootでOKの様だが。volumioでSSHで接続できた。sudoも使えるようだ。夏コミ(C90)参加します。”g”-03a「PNPNMS」です。今回は師匠のtozさんと隣のブースで、おそらくDAISOで売ってるおもちゃのピアノを改造する本を合同で出す予定です。LCDのCH12864F-SPIを使ってみる。F401RE(mbed)で動かす。Headerでもやってみた。Morphoというのはモルフォ蝶という蝶の一種らしい。Headerの横に蝶の様にハネを広げているということなのだろうか。画像を検索するとなかなか綺麗な蝶だ。Headerとつながっている。ヘッダのオス/メスが違う。Headerにつないでも表示できた。F401REにはSPIのHWが3個あって、2番目を使ってみた。配線図ファームウェアhttps://developer.mbed.org/users/ryood/code/CH12864F-SPI2_Test/こちらは半分ずれて表示されてしまった。オシロで信号を確認するとSPIのSCK、MOSI、CS、LCDコントロール制御用のa0はそれっぽい波形が出ているので制御コマンドがらみかもしれない。メモ:SPI1では正常表示されてSPI2ではダメ。表示バッファが2枚あって順番が逆とかかな。作成中のベース・マシンでは音源系にSPIを使っているので、シーケンス打ち込み用のLCDはSPI2を使いたい。Aなので、その実力を見るために以前やったサイン波テーブルの生成をやってみた。gen_sine_table.c速度を上げる工夫は何もしていない。前回とほぼおなじプログラムをgccでコンパイルしただけ。バイトの入れ替えは__REV()関数を使ったほうが早そうだが、前回と同じく1byteずつ入れ替えた。Linux上で動かしているので割り込みやらなんやらの影響(?)で実行するごとに値が変わる。適当に見繕って表にしてみた。F401は84MHz駆動で、RasPi3は1.2GHz駆動なのでもっと差がでても良さそうだが、いろいろなオーバーヘッドがあるのだろう。8192バイトのサイン・テーブルをdouble型で生成しても3ms以下なので、ファンクションジェネレータとして使った場合、ロータリーエンコーダーをガチャガチャ回したタイミングで毎回波形テーブルを作ってもストレスは少なそうだ。専用機にしてしまうのはもったいないけど。まじめにやるならスレッドの優先順位を上げたり、HWを使ったりとかいろいろ方法がありそう。メモ:Webを眺めていると、GPGPUで行列演算をされている方がいた。http://qiita.com/9_ties/items/15ab7fa198991a61a3a9ARMのAとMはよく見るが、Rはあんまり見ない。どのへんで使われてるんだろう。PC)なら安いし消費電力も小さいようなので、いろいろ使えるかな~。早く手軽に入手出来るようにならないかな。シーケンス再生中にLCDを表示する(SPIの調査)リズムマシンをアルミの制御盤に載せる構想。シーケンス打ち込みベースマシンは旧バージョンのmbedで開発続行できそうaitendoの「プラボックス入り金属皮膜抵抗」のケースの使いみちATTiny85のUSIでI2C通信を試してみる。ベースマシンの全体をつないでmbedでつまずく。mbed-rtosのThreadをdeprecated(非推奨)を避けて使ってみる。F401REでmbedのInterruptInが動作しない。3でPCM5102Aを使ってみる。3にVolumioをインストールしてみる。夏コミ(C90)参加します。3でLチカをしてみる。DCOの出力にノイズ除去用のLPFを入れてみる。