SSブログ
DCCデコーダ ブログトップ
前の10件 | -

プラレールE353系とかALFA-X HO化にスカートつけて音付けて動画とりなおし [DCCデコーダ]

 作ったけど、土日にやる気力がなくて、お蔵入りになっていたプラレールE353系とALFA-XのHO化音付きの動画をやっととったので、載せます。
 大人のプラレールは予約しました。これで、本家がHO化とか乗り出したら面白そうだと思います。
 まずは、E353系。3Dプリンタでスカート伸ばして、ガンダムカラー(マジック)で色塗ってみましたが、まあ、趣味は自己満足なので、クオリティは気にしていません。中間車だけ何となく背が高いのはそのうち直そうと思いました。
DSC03652.jpg

 横から見ると、こうです。
DSC03654.jpg

 で、動画はこれ。DCCデコーダはESUのLoSound5です。音はOpenSound E235系(山手線)です。


 で、次にALFA-X。こっちもスカートと先頭車のみ側面のカバーをつけてみました。
 なにか、雪かきにしか見えませんが、まあ、北国用なので間違っていない気もするし・・・。
DSC03651.jpg

 全体の感じはこれ。
DSC03655.jpg

 動画はこれ。DCCデコーダDesktopStationのSmileSound Next18です。音源はOpenSoundのE5系だと思います。(次は宇都宮ですって聞こえたし)
 俯瞰視点で。


 固定視点で。


 今回の電車はすべて、3両分(12軸)集電しているので、とても集電が安定しており、安定した自動運転ができるのではないかと思っています。

コメント(0) 

プラレールのHO DCC化改造 その2 [DCCデコーダ]

 さて、DCC化です。
 まず、3両並べるとこんな感じとなります。まずはアナログで実験するため8pinのコネクタはトラックとモーターを短絡させておきます。
re_DSC03583.jpg

 ですが、ウェイトもほぼないこともあり、HOですがあまり集電が良くないこともわかっているので、全軸集電に変えます。各車両のトラックの配線を繋ぎます。私の保有車両だと、Tomixの白いロマンスカーに続いて2編成目の全軸集電です。
re_DSC03584.jpg

 これで、スムーズな走りになります。こんな感じです。


 そして、E235ボディを載せました。床下機器(デフォルメしたもの)やスカート(どちらかというとE233をイメージして作って物)もつけています。
re_DSC03588.jpg

 全軸集電なので、連結部分にはリード線がでています。ちょっと博物館ぽくてプロっぽい?_
re_DSC03590.jpg

 こうなると、こんな感じで走ります。


 で、次はDCC化です。アナログ状態のこれだったものですが、
re_DSC03591.jpg

 8pin(nem652)端子にESUのLokSound5をくっつけます。
re_DSC03592.jpg

 準備は整いました。
re_DSC03593.jpg

 で、まずは、プラレールらしく、ジョイント音と汽笛だけの時はこんな感じで、汽笛はこれではないかも・・・。


 次に走行音もと思ったけど、これ多分 旧国の音を入れているので、不思議な音になっているかも・・・。


 あとは、なんかモーターのフィードバックがうまくいってなさそうな感じです。
 次は、E233系辺りに音を書き換えないとね・・・。

コメント(0) 

プラレールのHO DCC化改造 その1 [DCCデコーダ]

 8月はElecrowが1ドルで基板を作ってくれるキャンペーンをしていたので、思わず、プラレールHOの床板を頼んでしまいました。基板は1ドルだけど、送料が12ドルぐらいでしたが、日本の円安のせいで、結局1800円ぐらいだったかなと思います。
 で、来た基板を付けたらこんな感じでした。
re_IMG20220823212836.jpg

 一応、DCC拡張用に8pin(nem652)コネクタを付けられるようにしておきました。
 そして、毎度のごとく、綴り間違えました。Tailと書こうとして、Taleと書いてしまいました。
re_IMG20220823212848.jpg

 それ以外にも、
・長さが0.5㎜ぐらい大きいので、短くする。
・天賞堂のコアレスパワートラックを付けると、配線が干渉するので、パワートラック部分の配線穴を大きくする。
 というのがあるので、そのうち作り直す予定です。
 で、重さは3Dプリンタで作った床板が5gに対して、10gと重量感のあるものができました。表裏ともに、ベタGNDにして、重さを稼いだつもりですし。

 次に、天賞堂のコアレスパワートラックですが、一度分解して、DCC用にモーター配線を外に出したら、ロケットスタートするようになってしまいました。スロー走行ができず、これではNゲージの方が全然良い走りです。
 で、分解して確認します。最初の状態。(これはモーター配線出していないものの写真になります。)
re_IMG20220902222611.jpg

 爪を外して、中を見ていって、
re_IMG20220902222900.jpg

 モーターが回転しないように突起が付いていることを知りました。(写真で右側)
re_IMG20220902222926.jpg

 この突起をパワートラックの上面の穴に合わせないと、モーターの動作始めにモーターが空回りして、その結果として、電車がロケットスタートすることがわかりました。(最初に気づきたかった・・・。)
 ということで、ロケットスタートする台車のモーターの突起をパワートラック上面の穴に合わせたら、ちゃんと低速で動くようになりました。良かったよかった。
re_IMG20220902223255.jpg

 さて、土曜日ですが、MSXDevconというのが東大であり、面白そうなので、参加しました。東大の中にちゃんした用事で入ったのは初めてです。講演の中身のことは言ってはいけないという誓約書を書かされているので言えませんが、丸ノ内線の本郷3丁目で降りて、
re_IMG20220903141511.jpg

 赤門を横目に、
re_IMG20220903150232.jpg

 正門から入って、安田講堂の所を曲がって、聞いてきました。
re_IMG20220903150725.jpg

 西和彦さんのMSX3の話を聞きました。とても面白かったです。「反省記」というサイン入りの著書もいただきました。いわゆる自叙伝になりますが、ビルゲイツと意気投合して、マイクロソフトを大きくして、MSX作って大きくしてまでは、全てがうまくいっているように見える話で、まるで「俺TUEEE」系のラノベで、読んでて気持ち良かったです。で、その後、ASCII社長になってからいろいろとうまくいかなくなって、という話でした。大切なところで仕事仲間とケンカして、あとで、あの時こうだったらと悩むのが読んでて共感できました。まあ、講演中も、参加者からの質問に対して、怒り出したり、ちょっと高圧的な態度になったりというのもあったので、ケンカしやすそうな人なのねと納得しながら読めました。

コメント(0) 

DCC-CheCar16を作った [DCCデコーダ]

 TRAINOさんからDCC-CheCar16を頒布いただいたので、組み立てました。
re_IMG20220827154825.jpg

最初の状態です。部品はほぼ組付け済みで、調整が必要なセンサなどは組み立てる必要があります。台車は自分で調達が必要です。
re_IMG20220822111544.jpg

 で、手持ちのトミックスの台車がないので、3Dプリンタで作って、天賞堂のT-evolution用の車輪を付けていきました。価格と手間を考えると、トミックスのスペアパーツの台車を買った方がどう考えても安いと思います。
re_IMG20220822144521.jpg

 天賞堂のはリード線で配線しないとですので、こんな感じで付けていきます。
re_IMG20220827151446.jpg

 そして、動きましたが、最初、マグネットがセンサに反応しませんでした。(走らせても、床板のLEDが点滅せず、点灯しっぱなしとなる)
 で、今回の失敗ですが、速度測定用の磁気センサは、車軸に巻いたマグネットにそれなりに近づけないと反応しないとのことで(と説明書にも書いてあったが、適当に基板に密着させてはんだ付けをしてしまいひどいことになった)、いびつですが、こんな感じで、センサを強引に浮かせて、センサが車軸のマグネットに反応するようになりました。
re_IMG20220827154918.jpg

 関係ないですが、先週、21日も有明アリーナにライブに行きましたが、天候が雨で無かったこと、今回は規制退場で最初に出れたこともあり、楽に帰れました。国際展示場前でなく、東雲に行くと、人も少なく良い感じでした。ほかの予約しているライブを確認したら11月にも有明アリーナに行く予定があったので、今度もコソコソと東雲経由で帰ろうと思います。

 

コメント(0) 

RP2040で音の実験、SDカードから (補足) [DCCデコーダ]

 音を1音増やすと15msかかるのはちょっと遅いと思うので、
(1)SDカードの呼び出しでSPIクロックはどれくらいに設定しているか?
(2)SDカード呼び出しにDMAは使っているか?
という質問があったので、書いておきます。
 と言いつつ、(2)についてはわかりません。
 SPIクロックですが、多分、
SD.begin(SS,SD_SCK_MHZ(32));
のSD_SCK_MHZ(32)で、
ファイルを開いて、4KByteずつ8回Readして閉じる作業をクロックを変えながらやってみました。
 結果は以下の通りだったので、なんとなく32MHzを選択しています。24MHzから75msだったので、内部では24MHzが選択されているのではないかと思います。
MHz ms
1 343
2 205
4 133
8 99
16 85
24 75
32 75
48 75


ファイルオープン+(4kByte*8回=)32KByteのリード+ファイルクローズで75msなので、いわゆる読み込みスピードとは少し異なると思いますが、427KByte/s程度と遅そうではあります。
なお、SDカードは、見かけからすると、ADATAの16GBで80MByte/sらしいです。

PicoのSDのスピードを測っている参考サイト
https://elehobica.blogspot.com/2021/03/raspberry-pi-picosdxcexfat-spi-if.html
https://community.element14.com/products/raspberry-pi/b/blog/posts/rp2040-sd-card-spi-benchmark



コメント(0) 

RP2040で音の実験、SDカードから鳴らす。 [DCCデコーダ]

 4か月ぶりですね。
 仕事がいまいちで、趣味が進みませんが、メモだけ書いておきます。
 Desktopstation様とDCC電子工作連合でRP2040を使ったDCCデコーダ(SmileSound)を作っていますが、SDカードの抜き差しで電車の音を変えられる据え置き型コントローラを作りたい!という話があり、SDカード(内蔵のFlashに比べ遅い)でどれだけ、ダメになるかを試してみました。
 ソースの方は現在使っているLittleFSSDに変える感じで、あとはほぼ一緒です。

 LittleFS.h
→SPI.h,SD.h

 LittleFS.begin();
→SD.begin(SS,SD_SCK_MHZ(32));
 SCKは上げて処理が速くなるようにしています。 

 f = LittleFS.open(inFile, "r");
→f = SD.open(inFile, "r");
という感じに機械的に変更すれば、とりあえず動きます。
 
 pinはSPI0のデフォルトを使います。(変更方法がわからなかった・・・。)
#define PIN_SPI0_MISO (16u)
#define PIN_SPI0_MOSI (19u)
#define PIN_SPI0_SCK (18u)
#define PIN_SPI0_SS (17u)

 で、それ用に適当に配線して、こんな感じです。
re_IMG20220618164430.jpg

 まあ、全体ではこんな感じで、
re_IMG20220618164513.jpg
 
 秋月のマイクロSDカードスロットDIP化キットを使用して、SD部分は下記のように繋ぎました。
sd_pico.png

 で、元々音の処理は85ms周期で音の処理をしていますが、無音状態で15msぐらいかかります。一音増やすごとに15ms程度処理時間が増えるため、同時に4~5音出すのがやっとでした・・・。
 44.1kHzで、1音当たり、音の処理に10ms、ファイルのヘッダ呼び出しに5msかかっています。
 
 ハマったところは、最初、SDカードのファイル一覧は見れるが、中身が化けてて変というのがあり、一度、スケッチからファイルを書いたら、読めるようになりました。それとも最初にちゃんとFAT32でフォーマットしないといけないかもですが。
 まあ、最終手段で、SDカード挿した後、内蔵のフラッシュに全部コピーして、それから動かすとやれば、SDの遅い呪縛から逃れられるというのはあります。

コメント(0) 

RP2040で音の再生実験 その3 [DCCデコーダ]

 気づいたら、1月も半分が終わっていますね。昨日はトンガの噴火が原因で、携帯から津波注意報が何回も流れていたようですが、私は気づきませんでした。理由は、ハーゲンダッツのラムレーズンを半分食べたのですが、アルコールがきつすぎて、寝込んでいたせいです。
 さて、RP2040での音の再生実験ですが、細々と続けています。(時間はすごいかかっています)
 動画として見せられるようなものはありませんが・・・。
DSC03571.jpg

やることは、
(1)PWMレジスタにDMA伝送する機能の追加。
(2)DMA用のバッファ(0.5秒分x2?)の定義の追加、バッファに書き出す処理の追加(今の割込みごとを、0.5秒分まとめてガツンと書くなど)
(3)LittleFSでのサウンドデータアクセス
でしたが、もちろん全然できていません。

 前回、(3)をやってみたものの、LittleFSでデータアクセスすると、処理量が増えるためか、同時発音が増えるとともに、音が揺れて遅くなるという現象があり、オシロで見ていてもPWM変更の割込みがずれまくります。
 で、原因はタイマーでした。
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt
を使っていたのですが、もしかしたら使い方が悪いだけかもですが、割込みの呼ばれ方が、割込み処理が終了したら、XX us後にまた割込みが入るというもののようで、いろいろと処理が立て込んでくると、音用のサンプリングクロックが遅くなっていたようでした。
 調べていったら、もともとpico SDKにある、repeating_timerで十分で、
https://qiita.com/keyyum/items/3ce448c098c546dced20
に、わかりやすく書いてありましたが、-の値を入れると設定したタイマー周期で呼び出してくれることがわかりました。音も揺れなくなったし、コンパイルのWarningも出なくなったし、早速乗り換えました。
 https://raspberrypi.github.io/pico-sdk-doxygen/group__repeating__timer.html

 メモですが、デバッグしているときに、割込みに時間がどのくらいかかるのかというので、Arduino標準のdigitalWriteを使ってPinに出力を出してオシロで見ていたのですが、RP2040には、gpio_putという高速な命令があります。
一回の時間を計ってみたら、
digitalwrite:672ns
gpio_put:39ns
と17倍速いです。
 というかDigitalWriteを使うと、割込みの時間を計っているつもりがdigitalWriteの時間を計っているような状態になっていました・・・。割込み内の処理(PWMの切り替えとBuffferの切り替え)は
500ns~600nsぐらいで、なんか工夫しないでも十分速いです。

 次に、音のRepeatの話です。Esuと同様のものを目指すなら、音が終了した後に継ぎ目なく、次の音を入れないといけませんが、そこをBufferでとなると、配列のどこからどう入れるかというので、音の継ぎ目が・・・と試行錯誤しながらできました。順序回路で作り直しました。44KHzでも、サイン波のなかに、1個だけ唐突に0とかが入っていると、継ぎ目音として聞こえます。
 ということで、現在、の出来は、
・100ms周期程度のバッファ(Ach,Bchの2ch)
・モノラル同時8音の発声
・44kHz 8bit(DAC(PWMだけど)を10bitとしているので、元音は8bitでよいのかなあと思っている。44kHzなら125MHzなので、11bitぐらいまでなら可能。I2S使うなら16bitも可能かと思うけど)
・同じファイル/違うファイルで継ぎ目のない、継ぎ目再生
が可能となりました。
次は、
・フローファイルに基づいて、音をだす(警笛のStart,Repeat,Endみたいなところ)
・各音のボリューム機能( interp機能でとても速くできそう。)
https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__interp.html
・音階を変える機能(できると、疑似音の和音での遷移ができるが、必要かどうかは不明)
・べた書きしたもののクラス化。
あたりです。

 今回のスケッチになります。
https://desktopstation.net/wiki/lib/exe/fetch.php/timer_test2_752_31.zip
 なお、前回までA0ピンにPWMを出していたのですが、デバッグ中の不注意で12Vを入れてしまい、A0~A3が死んでしまいましたので、現在D4に出しています・・・。
 あと、Core1で実行すると、グダグダになります。(割込みとかも守られないし、それに合わせて音もとぎれとぎれ、・・・。なぜでしょう。)

(1)、(2)のDMA関係はArduinoでのPIOのコンパイル環境がまだなさそうですので、誰かが作ってくれてからにしようかなあと思います。
 
コメント(0) 

RP2040で音の再生実験 その2 [DCCデコーダ]

 今日は箱根駅伝でした。沿道での感染はお控えくださいと主催者が案内していたような気がするので、見に行きませんでしたが、テレビで見ると、観戦者がいっぱいですね。まあ、オミクロン株って重症化しないようですし、リスクは低いってことですかね。
 で、本題ですが、年末に、やあさんさんから、以下のメールが・・・。面倒なので、ほぼ原文を書いてしまいますが、
ーーーーーーーーーーー
RP2040となり機能が増えているので、以下の2つの対応を順次、やっていければと思ってます。
【DMA伝送】
(1)PWMレジスタにDMA伝送する機能の追加。
(2)DMA用のバッファ(0.5秒分x2?)の定義の追加、バッファに書き出す処理の追加(今の割込みごとを、0.5秒分まとめてガツンと書くなど)
→割込みごとにPWMを書いているとCPUが食われるので、それを自動化する。DMA化することで同時発音数をさらに増やせるのではと。
あとのちのちのサウンドシーケンス(LokProgrammerのブロック図の状態遷移の実行)を実装するには必須になります。
【ファイルシステム対応】
(3)LittleFSでのサウンドデータアクセス
(4)LittleFSのファイルシステムに置くバイナリデータの作成ツールDSwav2の修正、バイナリ出力機能の追加(やあさんさんの仕事です)
ーーーーーーーーーーー

で、音声ファイルを16MByteも入れられる、Nano RP2040も送っていただいたので、さっそく実験です。
DSC03567.jpg

 (1)は難しいので、(3)、(2)の順に進めています。
 まず、(3)「LittleFSでのサウンドデータアクセス」ですが、1音だと、事前にファイルをオープンして、割込み中にファイルアクセスしてもとりあえずは音が出ましたが、複数音だと、うまくできませんでした。ということで、LittleFSを使ってのファイルアクセスはできましたが、現状のPWM割込み部分にすべて詰め込もうとすると、全然ダメです。
 次に(2)「DMA用のバッファ(0.5秒分x2?)の定義の追加、バッファに書き出す処理の追加(今の割込みごとを、0.5秒分まとめてガツンと書くなど)」ですが、最初リングバッファ作って・・・と半日ほど考えましたが、なんか良い案が思いつかずに眠気だけが出てきてたので、それはやめて、字面通りの方法をとることにしました。ただし、現状は以下のいくつか制約付きです。
・もちろんDMA非対応です。
・バッファの最初からしか音は鳴らせない(将来的には、オフセットをつけて、バッファの途中からならすことも考えようかとは思う)
・バッファの途中でファイルが終わったらあとは無音(そのうちリピートモードを実装しようかとは思う)
。音のchは6chとする(For文を追加するだけで処理時間が間に合えば音の数は増やせるが・・・)
 スケッチです。
https://desktopstation.net/wiki/lib/exe/fetch.php/timer_test75.zip
 まあなんとなく作れましたが、音の周波数やバッファの大きさによって、制御がバグったりしたので、PWMの割込みと、バッファ制御計算部分にどのくらいの時間かかっているのかオシロで確認しました。
 ところで、PWMの制御は、bool TimerHandler1(struct repeating_timer *t)
で行っており、中身はバッファA、バッファBの切り替えと1byteずつ音を出していくという作業をしています。
 また、バッファ制御計算部分は、void manage_wave()
で、行っており、この関数はLoop()から呼ばれ、バッファが切り替わっているフラグをつかんだら動きます。各chについて音を鳴らすフラグが立っていたら、音をコピーし始めます。バッファ分だけファイルからPWMのバッファへコピーします。次に呼ばれたときに音の再生が終わっていなければ、またバッファ分だけコピーします。

 で、まずはPWMの制御がどのくらいの時間かかっているのかオシロで確認しました。
DSC03569.jpg

 デバッグ用に出力ピンを設定して、黄色い波形のパルスが立っているところがPWMの制御を行っているところで、1.13us程度で終わっています。ただし、このインターバルに問題がありました。
 なんか、踏切の音は低いし、車内放送の声が低くて暗いなと思っていたら、出力周波数が微妙に低かったです。
 Setup()のITimer1.attachInterruptInterval(TIMER1_INTERVAL_us, TimerHandler1);
の、TIMER1_INTERVAL_usで割り込みのインターバルを設定しているのですが、実出力からみると、+5usのインターバルになるようです。インターバルは下記で設定しているのですが、-5usするように直しておきました。これで、車掌さんの声もやる気がみなぎるようになりました。(最初の方の#define)
//44k 22->17
#define TIMER1_INTERVAL_us 17
//32k 31 -> 26
//#define TIMER1_INTERVAL_us 26
//16k 62 -> 57
//#define TIMER1_INTERVAL_us 57
//8k 125 -> 120
//#define TIMER1_INTERVAL_us 120

 次に、バッファ制御計算部分ですが、こちらは、
void manage_wave()で行っています。
 こちらもデバッグ用に出力ピンを設定して、オシロで青いパルスが立っているところが処理中です。
 バッファは8KHzの時に1024Byteとして、一秒に7回ぐらいは反応してくれるようにしております。
 バッファ数は下記で定義しています。(最初の方の#define)
//#define BUF_LENGTH 32768
//#define BUF_LENGTH 16384
//#define BUF_LENGTH 8192
#define BUF_LENGTH 4096
//#define BUF_LENGTH 2048
//#define BUF_LENGTH 1024

また、周波数によって、読み出すファイルを変更しています。(Setup()内)
//String dir = "/8kHz_8/";
//String dir = "/16kHz_8/";
//String dir = "/32kHz_8/";
String dir = "/";
 ルートフォルダに44KHz版を入れています。

 この時、同時発音数を振って、処理時間のパルス幅を確認した表が以下になります。
データ数と処理時間.png

 44KHz、バッファサイズ4096で6音同時に出したとき、35.1ms処理にかかり、インターバルに対する処理の占有率は32%程度となります。(ただし、この後に、PWM制御の割込みインターバルがおかしいことを見つけたため、もう少し占有率は高いかも)
 まあ、まだバッファ制御計算部分は適当に書いていて、速くできそうな感じはあるので、あまり気になるところではありません。

 あと、波形を見ていて気になったのが、音が揺れることがあるのですが、PWM制御の割込みを見てみると不安定です。黄色いパルスで真ん中のパルスでトリガーをかけてそろえているが、右のパルスが二重に見えている→パルスが揺れている。
クロックがふらつく.jpg

 なんか、バックグランドでこそこそ他の処理が動いている感があります。
 例えば、今回のスケッチに入れているvoid serialEvent()
 をトリガーに確認してみると、その前後で、PWMの割込みが数クロック消えるのが見えました。
 また、Core1は使っていないからいいかなあと思って、Setup1(),loop1()にスケッチを移してみてみたら、PWM制御の1.13usが大きく間延びすることもあるなど、やばそうな現象が見られました。
 まあ普通に考えて、割込み内では、ほかの割込み禁止!の命令を入れるべきだよなあとそういえば思い出しました。なんて命令だろう・・・。
 PWMのところはPIO化か?ちょっと敷居が高そうだけど、そのうち。
 
 今後ですが、16bitのWav対応、音の切れ目ないリピート、二つの音をシームレスにつなげる方法などをやっていこうかと思います。

コメント(0) 

RP2040で音の再生実験 [DCCデコーダ]

 お台場のヴィーナスフォートが来年の3月で閉店ということで、12/29に見納めに行ってきました。若い頃はよく行きましたが、近ごろは、外国人観光客も増え、また子供向けの施設でもないような気がしたため、足が遠のいていました。まあ、中はあまり変わっておらず、記憶を思い出しつつ適当に360度カメラで写真を撮っておきました。
 で、本題ですが、やあさんさん、なごでんさんと次期DCCデコーダに向けて話し始めていて、Raspberry Pi Pico RP2040でDCCデコーダー作るときにちゃんと音が出せるかどうかの確認を始めました。
 今まで使っていたDIYデコーダに使用していたATMega328P(1Core,8bit,8MHz,32kbyte)に比べ、raspberry pi Picoに搭載されているRP2040は2Core、32bit、125MHz,Flash2MByteとそれぞれのスペックがCore2倍、CPUビット数4倍、動作クロック15倍、メモリ62倍と、掛け算すると今までの約7000倍の可能性があることになります。(ほんとか?)
 今まであった制約は、
・効果音は、メモリが足りないので長時間のクオリティの高い音をでファイルが入れられない。(頑張って8kHzで4秒ぐらいだった)クロックが低いため、同時発音数を一音に限った。
・モーター疑似音も、音の長さが取れず、大きさの調節が難しく、和音も出せず、結果として音が残念になっていた。
 です。
 今回RaspberryPicoで、ArduinoIDEでコンパイルでき、ライブラリも使えるものは使えるらしいということで、適当なスケッチを作り、音を出してみました。
 あとで大体忘れるので、過程も書いておきます。
 やあさんさんの記事を参考に環境構築します。
 具体的には、RP2040開発環境をArduinoIDEに入れます。
「ファイル」→「環境設定」
追加のボードマネージャで
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
を指定して、
Raspberry Pi Pico/RP2040をインストール。1.9.9を入れました。

ArudinoにRaspberryPiPicoを認識させる方法ですが、最初のおまじないとして、
①リセットボタンを押しながらUSBケーブルを挿して、PCにPicoをストレージとして認識させる。
(このときCOMポートとしては認識しない。)
②この状態で、スケッチを書き込むと、IDEから認識されるものがCOM4(Raspberry pi pico)のような表記となり、この後は認識されています。
次からは、何も考えずにスケッチは書き込めるようになりました。
Comポートをシリアルモニタとかで開きっぱなしにしていると、書き込み時にエラーが出ました。

 次に音を出すための割込みですが、今までのモノはATMega328P専用で作っていて当該bitをいじってやっていましたので、そのまま流用できません。RP2040のタイマー割込みを確認すると、二つあるそうです。

高レベルAPIのpico_timeとhardware_timerの2種類が用意されているようですが、

https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__timer.html#details
https://raspberrypi.github.io/pico-sdk-doxygen/group__pico__time.html#details

なんか、スケッチを動かすと、comポートが認識されなくなり、どうやらちゃんと動かないです。

ということで、RPI_PICO_TimerInterruptを使います。
https://www.arduino.cc/reference/en/libraries/rpi_pico_timerinterrupt/
私の時は、RPI_PICO_TimerInterrupt 1.1.1でした。
ソースは以下のようです。
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt
とりあえず、これで割り込みができるようになりました。

 次に音をどう出すかですが、流行りので行くとI2Sで出す!だと思うのですが(それ用のPIOとかも世の中のライブラリにあるようですし)、まあ、デバッグとかも考えると、PWMで出して、LPFかけて、アンプで増幅していいか?ということにしました。
 具体的には、基板のA0端子からPWMを出して、それを昔作ったアンプ基板386でLPF+増幅して、スピーカーから出すことにしました。アンプ基板386は12V必要なので、PicoとGNDだけ共通にして、別電源から12V供給しています。
 で、今回の実験環境はこんな写真になります。
DSC03566.jpg

 スケッチはこちらになります。
https://desktopstation.net/wiki/lib/exe/fetch.php/timer_test5.zip
 スケッチの操作方法は0~6 をSerialで送信すると、その音がなり、cで音を消します。

 スケッチで使用している音源は、
https://desktopstation.net/sounds/mp3.html

・サウンドパック・日本版 R3 (Mar 20, 2014)
・185系 特急踊り子 (2021/5/31)
から拝借して、Wav変換して使用してます。

 動画は以下です。





コメント(0) 

DD51の基板でも作るかどうか・・・。その0 [DCCデコーダ]

 さて、ブログを更新していなかったら、ブログが広告だらけになっていました。
 久しぶりですが、DesktopStation様からNEXT18の新しいコネクタができたので、確認してください的なものが来たので、DE10基板にはんだ付けしてちょっと確認をしてみました。以前のものよりも挿すのに力が要りますが、いいんじゃないかと思います。(電気的なものは確認していません)
 それと、そういえば少し前の電子工作連合の飲み会でKATO DD51 HOも基板ほとんど一緒だから、それ用のNEXT18基板作ったらいいんじゃない的な話もあったので、そこら辺を検討してみました。MECYさんはDE10基板でDD51に搭載されていますが・・・。
 一応DD51の説明書によると電流は0.4Aとのことで、NEXT18は0.7Aまでいいんだっけ?なので、とりあえずの問題は無いかなあということで、考えてみます。

 なぜか、昔、普通の赤いDD51が無性に欲しくなって買っています。多分、MECYさんのDD51北斗星を見てて欲しい!となった気がするのですが、買ったら安心して押し入れの奥に眠っていました・・・。を出しました。

 まこぱぱのいろいろ様の「HO(16番) KATO DD51分解の仕方」の説明通りにDD51を分解します。最初ボディーを引っこ抜こうとして、四苦八苦してしまいました。
 ライト基板は写真のようになっています。(下の写真、分解時の方向が分かっておらず、向きがおかしいかもです)
re_DSC03548.jpg

 DE10の私の基板と比べるとこんな感じで、 集電部とモーター接続部はそのまま使えそうです。
re_DSC03549.jpg

 ただし、ボンネットギリギリに基板があるため、DE10のように基板の上にデコーダはおろか、表面実装パーツも載せない方がよさそうな感じがします。永末システムのデコーダもそうしているようですし。
 横から見ると、下の部分は割と実装してもよさそうです。右側の下側にデコーダを付けようかなあと思います。
re_DSC03550.jpg

 入りそうです。
re_DSC03556.jpg

re_DSC03555.jpg

 幅も今まで通りで問題なさそうです。
re_DSC03552.jpg

 ということで、DD51基板でも作るか・・・。

コメント(0) 
前の10件 | - DCCデコーダ ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。