ミント缶コントローラ4試作版をいじる [DCC/MM2シールド]
twayDCCさんからミント缶4の試作ボツ基板?を分けていただきましたので、作ってみました。
夏は気温が高くて秋葉原の秋月電子に行くのは命の危険を伴いますので、家にある手持ちの部品を流用します。このため、オリジナルと少々異なる出来になっています。
変更部分は、
・OLED:適当にAliで買った1.3インチ品OLED。老眼の味方!
・C1:電解コンデンサ 220uf→1000uF(Aitendoの中華品)
・SW1:適当な秋月のスイッチ(P-03774)
・タクトスイッチ:秋月のスイッチ→AliExpressで買った14mm品。ケース付けたら足りなさそう 18mmと20mmをAliに注文
・モータードライバ:TB6568KQ→TB6643KQ(たぶんこっちのほうが電流値高い)
まずは組み立てです。
twayDCCさんからの注意2点ですが、
(1)「SPIのGNDがつながっていないので、GNDをどっかからつなぎましょう」とのことで、I2C用のジャックから拝借しています。
次に、
(2)「モータードライバの放熱板とDCジャックがショートしないように気を付けて。」とのことで、放熱板の端を切って、DCジャックのはんだ部分と接触しないようにしておきます。
あとの部分は、普通に組立てています。部品点数がとても少ないので組み立ては簡単です。
OLED無しの写真はこんな感じです。
なおスケッチですが、DesktopStationのミント缶のWikiにはr02までありそうなことが書いてありますが、そこからのリンクではr01までしかありませんでしたので、r01を入れました。
で、完成して写真撮ったらいろいろと変でした。(ITガジェット的にはかっこいい見た目だと思いますが。)
問題は2つあって、
(1)なんかOLEDの黒いはずの部分が縦線のすだれ状に化けている。
(2)以前のDSMainにOLEDを付けたときの問題点を同じで、1.3インチのOLEDだと2ドットX方向に文字や画像がずれる。
ということで、まず、(1)問題の切り分けのため、0.96インチのOLEDをつけてみましたが症状は変わらず、すだれ状の縦線が出てました。ということで、OLED本体ではなさそうと思い、以前のDSMainのOLEDモジュール(I2C版)のソースと比べてみました。
OzOLED_spi.cppを見ていくと、ClearDisplay関数内が少々違うようで、
と変更したら、すだれ状ノイズはなくなりました。
次に、1.3inchOLEDで2ドット画像がずれる不具合ですが、以前と同じ対策を入れたら、もっと表示がぐちゃぐちゃになりました。試行錯誤して、直った方法が以下です。(以前にDSMainでやった方法は一部間違えていたようで、そのままのやり方では画像がより変になってしまいました)
ということで、めでたく完成です。
次はこれにオリジナルケースをつける検討でもしようかなあと思います。
(いつになることやら)
そうそう、あとAliExpressで買った1.3インチのOLEDは2個中1個動作がおかしく、よく見たらガラスが割れてて、配線が切れていました。
このため、上側は1ライン置きに不点灯ラインがでるという、こんな表示でした。
夏は気温が高くて秋葉原の秋月電子に行くのは命の危険を伴いますので、家にある手持ちの部品を流用します。このため、オリジナルと少々異なる出来になっています。
変更部分は、
・OLED:適当にAliで買った1.3インチ品OLED。老眼の味方!
・C1:電解コンデンサ 220uf→1000uF(Aitendoの中華品)
・SW1:適当な秋月のスイッチ(P-03774)
・タクトスイッチ:秋月のスイッチ→AliExpressで買った14mm品。ケース付けたら足りなさそう 18mmと20mmをAliに注文
・モータードライバ:TB6568KQ→TB6643KQ(たぶんこっちのほうが電流値高い)
まずは組み立てです。
twayDCCさんからの注意2点ですが、
(1)「SPIのGNDがつながっていないので、GNDをどっかからつなぎましょう」とのことで、I2C用のジャックから拝借しています。
次に、
(2)「モータードライバの放熱板とDCジャックがショートしないように気を付けて。」とのことで、放熱板の端を切って、DCジャックのはんだ部分と接触しないようにしておきます。
あとの部分は、普通に組立てています。部品点数がとても少ないので組み立ては簡単です。
OLED無しの写真はこんな感じです。
なおスケッチですが、DesktopStationのミント缶のWikiにはr02までありそうなことが書いてありますが、そこからのリンクではr01までしかありませんでしたので、r01を入れました。
で、完成して写真撮ったらいろいろと変でした。(ITガジェット的にはかっこいい見た目だと思いますが。)
問題は2つあって、
(1)なんかOLEDの黒いはずの部分が縦線のすだれ状に化けている。
(2)以前のDSMainにOLEDを付けたときの問題点を同じで、1.3インチのOLEDだと2ドットX方向に文字や画像がずれる。
ということで、まず、(1)問題の切り分けのため、0.96インチのOLEDをつけてみましたが症状は変わらず、すだれ状の縦線が出てました。ということで、OLED本体ではなさそうと思い、以前のDSMainのOLEDモジュール(I2C版)のソースと比べてみました。
OzOLED_spi.cppを見ていくと、ClearDisplay関数内が少々違うようで、
--- void OzOLED::clearDisplay() { digitalWrite(cs, LOW); for(byte page=0; page<8; page++) { setCursorXY(0, page); for(byte column=0; column<128; column++){ //clear all columns //setCursorXY(column, page); sendData(0); } } setCursorXY(0,0); digitalWrite(cs, HIGH); } ---
と変更したら、すだれ状ノイズはなくなりました。
次に、1.3inchOLEDで2ドット画像がずれる不具合ですが、以前と同じ対策を入れたら、もっと表示がぐちゃぐちゃになりました。試行錯誤して、直った方法が以下です。(以前にDSMainでやった方法は一部間違えていたようで、そのままのやり方では画像がより変になってしまいました)
--- void OzOLED::setCursorXY(byte X, byte Y){ // Y - 1 unit = 1 page (8 pixel rows) // X - 1 unit = 7 pixel columns sendCommand(0x00 + ((FONT_WIDTH*X + 2) & 0x0F)) ; //set column lower address sendCommand(0x10 + (((FONT_WIDTH*X + 2)>>4)&0x0F)); //set column higher address sendCommand(0xB0 + Y); //set page address } ---
ということで、めでたく完成です。
次はこれにオリジナルケースをつける検討でもしようかなあと思います。
(いつになることやら)
そうそう、あとAliExpressで買った1.3インチのOLEDは2個中1個動作がおかしく、よく見たらガラスが割れてて、配線が切れていました。
このため、上側は1ライン置きに不点灯ラインがでるという、こんな表示でした。
2018-08-12 16:01
コメント(3)
廃材を活用して頂きありがとうございます。
clearDisplay()はfujigaya2さんのがオリジナルで理論的にも正しいのですが、画面クリアしなかったのでsetCursorXYの位置を移動してました。元に戻したら...クリアしますね、なんでだろう。
r2はアップ忘れてます。あまり使われないOPSとConsistモードです。気が向いたら試して、きつい突っ込みをお願いします。走行中のVVVF音変更は未だ試していません。うまくいくでしょうか。
by twaydcc (2018-08-17 11:47)
コメントありがとうございます。
すいません。あまりきつい突っ込みをしたつもりはないのですが。
OPSモードでVVVF音を途中で変えたら、多分、ちゃんと変わりません。というのは、VVVF行列のRAMコピーは割と時間がかかるので、デコーダのループが始まった一回目とかにこっそり読み込んでいるからです。OPSでの変更はリセットかからないと思いますので、音は変わらないと思います。今考えると、行列をRAMにコピーする必要ないとも思います。
by fujigaya2 (2018-08-17 23:11)
あ、いや、きつい突っ込みは愛の鞭。おかげさまで無駄な労力使って疲弊する事が避けられました。OLEDはAliExpressの違うショップにサンプル発注するので、同じ目に合うかも知れません。
VVVFはそんな予感がしてました。OPSで突然何かが変わる面白い仕掛けないかなぁ。
by twaydcc (2018-08-18 07:24)