hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

XIAO RP2040で外部12BitADCを使ってみる

2022-09-29 18:12:48 | マイコンハードウェア

今回はレベル変換を使わず直接つないで動作確認までやりました。
ハードウエアはテスト回路のブレッドボード上に組み立てについて、
ソフトウエアはボードマネージャ、ライブラリインストールと、
サンプルスケッチ改変の注意点を書きます。
・トラブルシュート【自己責任】2022.09.29追記修正
・参考情報 XIAO RP2040上のLED群について

プロジェクトの背景(目的)
 12Bit分解能でDC0〜5V測定モジュールをコンパクトに作りたい。
概要
・コンパクトなマイコンseeeduinoXIAOシリーズXIAO RP2040を選択
・外付けADC採用
 XIAO RP2040ポートは別用途使用を想定しているので開けておきたい。
・SPI接続を採用
 MCP3204 4ch12BitADC、MCP3208 8ch12BitADC
 小変更で8ch入力も使えそうなので動作を確認しておきたい。
・I2C接続は不採用 ADS1015 4ch12BitADC使い方不明点あり12Bit幅フルに使えない
 ESP8266(ESP-WROOM-02)、ESP32で使用経験あり
結論
 今回はXIAO RP2040とMCP3204でやってみます。

パッケージ下から左右に広がっているプリントパターンはGNDとして使っています。
チップコンやジャンパー配線は、カッターでレジスト膜を削り、銅箔を露出させて
はんだ付けします。
0.1μFと1μFは電源-GND間に入っています。VDDとVREFは電源に接続、
AGNDとDGNDはGNDパターンへジャンパー接続しています。
ピッチ変換基板は16pinSOP用なので余りpinをチップコン取り付けに使っています。
細ピンヘッダを取り付けてブレットボードに挿せるようにします。

ブレットボードに挿して配線します。
電源はUSBケーブル供給で、XIAO RP2040の3.3Vを使います。
XIAOの電源、GND接続 MCPの電源は14,15,16のいずれかを接続
AGNDとDGNDをGND接続
SPI・・・MOSIをMCPのDINへ、MISOをDOUT、SCKをCLK、CSnをCS/SHDNへ
それぞれ接続します。
電源-GND間に10μF、DOUT(MISO)とDIN(MOSI)はそれぞれ10KΩでプルアップします。
MCP3204の1〜4pinはADCのCH0〜CH3入力で、テストのための部品取り付けと
配線になっています。
0ch 可変抵抗を接続して電源-GND間の分圧電圧を入力(0〜3.3V)
1ch 電源(3.3V)
2ch GND(0V)
3ch 電源(3.3V)それぞれ接続しています。
 ハードウエアは準備できました。

ソフトウエア(ArduinoIDEスケッチ)

ボードマネージャ
 xiao rp2040で検索 「Seeed XIAO RP2040」のバージョン1.12.0をインストール
 最新は2.7.2

ライブラリマネージャ
 mcp3204で検索 「MCP_ADC」をインストール

スケッチ例から「MCP_ADC」の「MCP3008_analogRead_ESP32_SWSPI」を開いて
MCP3008 mcp1(23, 19, 21);      // ESP32 use SWSPI  dataIn, dataOut, Clockを探して
MCP3204 mcp1(D9, D10, D8);   と変更
次にmcp1.begin(5);を探してmcp1.begin(D7)と変更する

XIAO RP2040の MISOは D9、MOSIは D10、SCKは D8、CSは D7です。
Dをつけずに指定すると別のGPIOになるとの情報です。
これでUSB接続し、ポート設定すれば書き込めると思います。
シリアルモニタを開けば1秒おきに0〜3chのAD変換した数値が表示されます。

トラブルシュート【自己責任】
シリアルポートが認識されなくなった時の復旧方法

XIAOのプッシュスイッチBを押しながらRを押して離し次にBも離す。
「RPI-RP2」という名前のリムーバブル・メディアとして認識される。
「flash_nuke.uf2」ファイルを「RPI-RP2」ドラッグ・アンド・ドロップ(書き込む)。
書き込み完了すると「RPI-RP2」が消えて、シリアルポートが認識されるようになる。
Arduino IDEの「ツール」「シリアルポート」でポートを設定しなおす。

ファイル「flash_nuke.uf2」を探す
「Seeed k. k. エンジニアブログ」を検索 「停止できなくなった場合の復旧方法」
「・・・flash_nuke.uf2をドライブへ書き込むと復旧することができます。」
「コチラのページから取得することができます。」リンク先はRaspberry Pi picoの
サイトです。「Resetting Flash memory」の下にダウンロードのリンクがあります。

この方法でも復旧できない状態になりました。

「flash_nuke.uf2」を書き込むと一旦消えるがすぐに表示される。
Micro PythonのUF2ファイルを書き込むと「RPI-RP2」消えてシリアルポートが
認識される。Micro Pythonのプログラムが動くことを確認した。
再度「flash_nuke.uf2」を書き込んでみるが改善されない。
「ドライブの取り外し」をすれば「RPI-RP2」消えるが、シリアルポートは認識されない。
復旧方法【自己責任】
「RP2040 Factory Reset」でネット検索してみると、Arduio Nano RP2040用とAdafruit KB2040用のuf2ファイルが見つかります。こちらを書き込むと復旧されるようです。
ただしボードの仕様が違うので問題がおきる可能性があります。

書き込む時はシリアルモニタを閉じておいた方が良いかもしれません。

参考情報
XIAO RP2040上のLED群について

電源ON表示の赤LEDの横に3色のLED(USER LED 3colors)があり、
それぞれはGPIOに接続されています。緑 GPIO16、赤 GPIO17、青 GPIO25です。
スケッチで何も指定しなければ点灯した状態となります。
pinModeをOUTPUT設定してLOWで点灯、HIGHで消灯します。
更にプッシュスイッチの間にRGB LEDがあります。こちらは消えています。
使うにはAdafruit_NeoPixelライブラリをインストールする必要があるようです。

続く(予定)

ありがとうございます。web公開されている情報を参考にして動作確認できました。