2024年11月09日

Web ADC Tool

以前にWeb HID APIを用いたMCP2210とWeb HID APIでブラウザを介して磁気エンコーダの動作確認をする通信するツール、Web USB Encoder Toolを紹介しました。今回はWeb HID APIとMCP2210を応用して、ブラウザを介して簡単にSPI接続のADコンバータ、MCP3208やMCP3204と通信するツール、Web ADC Toolを実装してみました。

WebAdcTool.png


対応するADコンバータはMicrochip社製のMCP3208、MCP3204に対応しています。ADコンバータの動作確認や接続確認等に便利です。接続後、Start/Stopボタンを押すと各チャンネルを順番に200msec毎に変換して電圧値が更新されます。Web HID APIに対応したブラウザはEdgeもしくはChromeのみ対応となっており、24年9月時点ではFirefoxやSafariは対応していません。Web HID APIを用いることで専用のソフトウェアなしでブラウザ単体で様々なツールを実装できるのは非常に魅力的だと思いました。今後もWeb HID APIを用いた応用的な機能を開発して順次公開したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2024年10月12日

GreenPAK Writer

以前にプログラマブルデバイスGreenPAKを紹介させて頂きましたが、今回はUSBシリアルI2C変換基板V2[スイッチサイエンスElecrow]を使って何度も書き換え可能なMTPタイプのGreenPAKに書き込みを行うツール、GreenPAK Writerを開発しましたので、紹介したいと思います。MTPタイプのデバイス、SLG46824 /SLG46826 /SLG47004にプログラムを書き込む方法として、下記の方法があります。

1. 専用のデバッガ書込ツールSLG4DVKGSD
 販売サイト[秋月]、[Digi-key]、[Mouser]


3. マイコン等からの書込



開発環境Go Configure Software Hubからデバッグや書込が可能な1.のSLG4DVKGSDが王道ですが、流通量が少ないようで、在庫なしのタイミングが多々あるのが難点です。その次に多いのは2.のArduinoからの書込ですが、コード上にプログラムを埋め込んでいるため、プログラムを変更する度にArduino側も書き換えが必要なため、手間が非常にかかります。既に確定したプログラムを大量に書込する場合は2.や3.が便利ですが、試行錯誤しながら使用する場合で、1.を使用しない場合は非常に不便でした。そこでUSBシリアルI2C変換基板V2を使ってEdgeやChrome等のブラウザから簡単に書込可能なGreenPAK Writerを開発しました。


GreenPAK_Writer.png


Web Serial APIを活用して、ブラウザから直接、COMポートを介してI2CデバイスのGreenPAKを制御しています。そのため、スクリプトはすべてブラウザ内で完結しているため、クラウド等を介さずに書込や読込等の操作をすることが可能です。

Connection.png

使用方法は下記の手順で行います。
@事前に上図のようにUSBシリアルI2C変換基板V2のRST端子とIO0をケーブルでジャンパさせます。
AUSBシリアルI2C変換基板V2とGreenPAKをI2Cで接続してPC等のUSBポートにUSBシリアルI2C変換基板V2を接続します。
BGreenPAK Writerにアクセスして、接続後、ControlCode(I2C Address)をPing機能で確認します。多くのデバイスの初期状態は0x01(0x08)です。
CNVM消去を行います。
DGo Configure Software HubのExportからhexファイル形式を選択してエクスポートして、そのファイルをGreenPAK Writerに読み込ませて、NVM書込を実行します。
EGreenPAKの電源を一旦切ってから再度、投入すると書き込んだプログラムが実行されます。

GreenPAK_Export1.png

GreenPAK_Export2.png


なお、@でRST端子とIO0をジャンパさせる理由はSLG46824/SLG46826でNVM消去時にACKを返さないというエラッタがあるためです。エラッタによってI2Cに準拠しない挙動をします。そのため、消去時にI2C通信エラーが毎回発生して以降のI2C通信ができません。対策としてページ消去ごとにUSBシリアルI2C変換基板V2内のSC18IM704をリセットさせて、I2C通信エラーを強制的にクリアさせています。SLG47004ではこのようなエラッタはありませんが、共通仕様としてSLG46824/SLG46826に合わせてジャンパさせてください(ジャンパなしの場合、処理が進まない場合があります)。

また、GreenPAKの設定メモリの書き込みや削除は1ページ16byte単位となっており、1ページ毎に書き換える必要があります。USBシリアルI2C変換基板V1ではSC18IM700を搭載しており、バッファサイズが16byteです。コマンドやアドレスを含めると20byte以上になり、バッファサイズ16byteを超えるため、書込ができません(分割して書込できない)。そのため、バッファサイズが256byteに拡張されたSC18IM704を搭載するUSBシリアルI2C変換基板V2のみ対応しています。なお、現在販売[スイッチサイエンスElecrow]しているUSBシリアルI2C変換基板はすべてSC18IM704を搭載したV2です。

MTPタイプのデバイスはSLG46824/SLG46826/SLG47004の他に先日発表されたSLG46827もありますが、まだ入手できていないため、使用可能か現時点では不明です。個人的にはSLG46824/SLG46826よりも、エラッタがなく、アナログ機能が強化されたSLG47004が好みです。SLG47004を活用したデバイスを今後、紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2024年09月14日

シーリングカバー

先日、ARTWORKSTUDIOのGrid PLUS 4とGrid PLUS 3を購入しました。購入前から分かっていたことですが、『丸型引掛シーリング』『ローゼット型取付器具』に取り付ける場合、付属のシーリングカバーは対応していません。そのため、付属のシーリングカバーを外して使用する必要があります。

分かって取り付けたものの、実際に取り付けるとカバーがなく、せっかくのデザインの良さが半減しているようで気になります。

CoverBefore.png

市販品のカバー等も調べてみましたが、微妙にサイズが合わず、形状も微妙だったため、結局、自ら設計してみました。『丸型引掛シーリング』『ローゼット型取付器具』に対応するため、直径を一回り大きくしています。純正のカバー同様に2つのパーツの接合部分はちょうど、照明のパイプ部分と重なる設計です。また、留め具の突起があるため、片方のみ中央部分に切り欠きがあります。切り欠きがあるパーツと切り欠きがないパーツを組み合わせて使用します。




cover.png


CoverA.png

今回はJLPCBの3Dプリントサービスを利用して出力しました。1個1500円程度でペアで使用するため、1台当たり3000円でした。材料は白色のSLS(Nylon) 1172Pro Nylonと黒色のSLS(Nylon) 3201PA-F Nylonで2台分オーダーしました。送料含めて6000円強でした。

実際に取り付けてみるとシーリング取り付け位置の差で若干、天井との隙間が黒と白で違いましたが、格段に見栄えが良くなりました。

CoverAfter.png



CoverAfter2.png

STLデータはこちらで共有しています。また、JLPCBでもファイルをシェアしています。なお、非公式かつ材質や安全性等の評価をしていないため、データの使用・出力したカバーの使用は自己責任でお願いいたします。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 3Dプリンタ | このブログの読者になる | 更新情報をチェックする

2024年08月17日

TkEasyGUIへの移行

Pythonで簡易的なアプリを作成する際に便利なライブラリとしてPySimpleGUIがあります。ただ、商用ユースでは先日から有償化され、個人ユースであってもライセンス登録が必要です。ライブラリ自体の使い勝手という点で難があるため、PySimpleGUIと互換性があるTkEasyGUIに移行してみました。ただし、互換性があるといっても完全互換ではないため、今までのコードそのままでは動かない場合が多々あります。

今回は自作アプリをTkEasyGUIに移行した際に互換性がなく、コード修正が必要になった箇所について紹介します。自作アプリ内で気づいた範囲のため、その他にも互換性がない箇所があると思いますが、今回分かった範囲で紹介したいと思います。


⓪ライブラリの変更
当然ながらライブラリを変更します。

import TkEasyGUI as sg
#import PySimpleGUI as sg


@テーマ
テーマ名が異なるため、'DarkGreen6'等のテーマは使用できません。
コメントアウトするか、下記のようにデフォルトもしくはwinライクなテーマを設定する必要があります

sg.theme('default')
sg.theme('winnative')

Aupdate
Updateからupdateに修正が必要です

window["-msg-"].Update("Some Message")
window["-msg-"].update("Some Message")

Brefresh
Refreshからrefreshに修正が必要です
window.Refresh()
window.refresh()

Cvalue
テキストボックスのvalueはTkEasyGUIでは定義されていません。
下記のように第一引数に変更する必要があります。
window["-msg-"].(value='OK', text_color='#00F000')
window["-msg-"].('OK',text_color='#00F000')


Dvisible
見ないようにするvisible機能はTkEasyGUIでは定義されていません。
項目自体を削除するか、消したのと同じような処理に修正する必要があります。
visible=false
➡ないので削除する


互換性がないのは仕方ないことですが、ライブラリだけ移行するだけでは下記のように非常に分かりにくいエラーが発生するのみで原因を調べるのに苦労しました。上記のような修正をすることでTkEasyGUIに移行して同等の機能を確認することができました。


return self.tk.call(self._w, 'cget', '-' + key)
~~~~^~~~~
TypeError: can only concatenate str (not "int") to str

この他にも互換性がない部分について分かれば紹介してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2024年07月20日

pico-sdkディレクトリ変更時のポイント

今回はRP2040でpico-sdkディレクトリを変更した際に忘れやすいポイントを覚書として紹介したいと思います。

通常、コードを変更してビルドする場合やPico Project Generatorで生成したプロジェクトの場合はbuildディレクトリに移動してmakeするだけです。一方でpico-sdkのディレクトリを変更した場合はCMakeLists.txt内のset(PICO_SDK_PATH "???/pico-sdk")を更新してもディレクトリが反映されず、古いディレクトリを参照してしまったり、pico-sdkのバージョン違いのエラーが発生してビルドに失敗する場合があります。パスをexport PICO_SDK_PATH=???/pico-sdkのように追加しても失敗する場合があります。

このような場合はビルドディレクトリに移動後、makeする前にでcmake ..を実行し、ビルド環境を再構築する必要があります。

普段はmakeのみでビルドできますが、pico-sdkディレクトリ等の環境を変更した場合はcmake ..のビルド環境の再構築が必要です。普段は再構築し直す必要がないため、忘れがちです。久しぶりだとそれに気づかず、ビルドが通らない原因の調査に時間を要してしまいました。ポイントはcmake ..です。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする