EagleでDocumentsフォルダが参照されない怪現象

CADソフトのEagleでは、通常は $HOME フォルダとはユーザーのDocumentsフォルダのことです。
ところがDocumentsフォルダが参照されず、なぜかEagleのインストールフォルダが参照される怪現象が発生。
調べてみると、下記のレジストリがなぜか空欄になってました。
値を設定したら解決。しかしなぜレジストリの値が消えたのか不明。

ディレクト

コンピューター\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

名前:Personal
:C:\Users\ユーザー名\Documents

XIAO nRF52840 のソフトウェアリセットとスリープ

リセット

    NVIC_SystemReset();

スリープ

  • ウェイクアップ信号でリセットがかかることに注意。 (復帰ではない)
  • バッテリー駆動でスリープ時にUSB接続してもリセットがかかる。
    #define PIN_WAKEUP  7 // ウェイクアップピン

    pinMode(PIN_WAKEUP,  INPUT_PULLUP_SENSE);
    sd_power_system_off(); 

XIAO nRF52840でUARTのTXのみ使用

Seeed Studio XIAO nRF52840で、USBデバイスを作る場合、デバッグ用UARTとして Serial1 (TX=D6, RX=D7) を使用したいが、ピン数の少ないボードなのでTX(D6)のみを使用してD7は別の用途に使いたい。

方法

レジスタを叩いてRXのピンアサインを解除する。

    // Debug Serial (TX only)
    Serial1.begin(115200);
    NRF_UARTE0->PSEL.RXD = 0xFFFFFFFF; // Disable RX

XIAO nRF52840 のバッテリー電圧計測

Seeed Studio XIAO nRF52840で、裏面のBATパッドに接続したLiPoバッテリーの電圧を計測する方法を調査した。

方法

バッテリー電圧(VBAT)は nRF52840 の P0.31(AIN7)に接続されている。ただし、下図のように1MΩと510kΩで分圧されており、P0.14 をLOWにしたときに計測可能になる。


サンプルスケッチ 1 (ボード設定: Seeed nRF52 Boards)

ボードの設定は Seeed nRF52 Boards を選択する。
シリアルポートにバッテリー電圧値をmV単位で出力する。

#include <Adafruit_TinyUSB.h> // for Serial

// PIN_VBAT     32     D32 = P0.31 (AIN7_BAT)
// VBAT_ENABLE  14     D14 = P0.14 (READ_BAT) 
#define HICHG   22  // D22 = P0.13 (BQ25100 ISET)

void setup()
{
  Serial.begin(115200);
  while ( !Serial ) delay(10);

  pinMode(HICHG, OUTPUT);
  digitalWrite(HICHG, HIGH); // Low Charging Current
//digitalWrite(HICHG, LOW);  // High Charging Current

  analogReference(AR_INTERNAL_2_4); // VREF = 2.4V
  analogReadResolution(10);         // 10bit A/D

  pinMode(VBAT_ENABLE, OUTPUT);
  digitalWrite(VBAT_ENABLE, LOW);
}

void loop()
{
  int vbat_raw = analogRead(PIN_VBAT);
  int vbat_mv = vbat_raw * 2400 / 1023; // VREF = 2.4V, 10bit A/D
  vbat_mv = vbat_mv * 1510 / 510;       // 1M + 510k / 510k
  
  Serial.println(vbat_mv);
  delay(1000);
}

サンプルスケッチ 2 (ボード設定: Seeed nRF52 mbed-enabled Boards)

ボードの設定は Seeed nRF52 mbed-enabled Boards を選択する。
1と同様に、シリアルポートにバッテリー電圧値をmV単位で出力する。

// PIN_VBAT   32 = P0.31 (AIN7_BAT)
// P0.14 READ_BAT 
// P0.13 BQ25100 ISET

void setup()
{
  Serial.begin(115200);
  while ( !Serial ) delay(10);

  pinMode(P0_13, OUTPUT);
  digitalWrite(P0_13, HIGH); // Low Charging Current
//digitalWrite(P0_13, LOW);  // High Charging Current

  analogReference(AR_INTERNAL2V4);
  analogReadResolution(10);

  pinMode(P0_14, OUTPUT);
  digitalWrite(P0_14, LOW);
}

void loop()
{
  int vbat_raw = analogRead(PIN_VBAT);
  int vbat_mv = vbat_raw * 2400 / 1023; // VREF = 2.4V, 10bit A/D
  vbat_mv = vbat_mv * 1510 / 510;       // 1M + 510k / 510k
  
  Serial.println(vbat_mv);
  delay(1000);
}

Seeed Studio XIAO nRF52840 の回路図について

Seeed Studio XIAO nRF52840 はオープンソースハードウェアではないらしく、回路図は公開されていない。
しかし、Seeed Wiki の古いページがまだ残っており、そちらから回路図をダウンロードできる。ただし、現在の製品と全く同じであるかどうかは不明。

最新版のページからは回路図が消えている。

関連記事

XIAO nRF52840 のVBUS判定

Seeed Studio XIAO nRF52840 (以下、XIAO nRF) で、USBが接続されているか (VBUSが給電されているか) を判定する方法を調査した。

何がしたいか?

XIAO nRFにはLiPoバッテリーを接続して給電/充電するパッドがある。USB接続されているときはマイコンにはUSBから給電され、USB接続されておらずバッテリーが接続されていればバッテリーから給電される。そこで、USB接続されているかどうかをマイコンのソフトウェアで判定したい。


判定方法

USBREGSTATUS レジスタの VBUSDETECT ビットの値をチェックする。VBUSが給電されていればビットがセットされる。Arduino環境のライブラリにそれらしいAPIが見当たらないので、レジスタの値を直接読み取る。

  uint32_t usb_reg = NRF_POWER->USBREGSTATUS;
  if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk) {

サンプルスケッチ

USB接続されていれば基板上の青色LEDが点灯し、シリアルポートがターミナルで開かれるのを待ってからメッセージを出力する。USBが接続されておらずバッテリーから給電されていれば赤色LEDが点灯する。

ボードの設定は Seeed nRF52 Boards を選択する。Seeed nRF52 mbed-enabled Boards を選択する場合は、1行目 (#include ...) をコメントアウトすること。

#include <Adafruit_TinyUSB.h> // for Serial

void setup()
{
  pinMode(LED_RED,  OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  digitalWrite(LED_BLUE, HIGH);
  digitalWrite(LED_RED,  HIGH);

  delay(100); // wait for VBUS detect (?)

  // VBUS detect
  uint32_t usb_reg = NRF_POWER->USBREGSTATUS;
  if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk)
  {
    digitalWrite(LED_BLUE, LOW);
    Serial.begin(115200);
    while(!Serial); // wait for Serial ready
    delay(10);      // wait a little more (?) 
    Serial.println("VBUS Detected!");
  }
  else
  {
    digitalWrite(LED_RED,  LOW);
  }
}

void loop()
{
}

注意点

XIAO nRF はいろいろクセがあるので要注意。

  • XIAO nRF の 5VピンはUSBのVBUSと直結。(上記回路図の VIN でなく VBUS )
  • そのため外部から5V給電するとVBUSと衝突するし、 VBUSでUSB接続を判定することができない。
  • 衝突を避けるには外部にダイオードが必要。
  • 起動直後にVBUS判定をするにはすこしウェイトが必要。
  • ボードの設定は Seeed nRF52 Boards と Seeed nRF52 mbed-enabled Boards の2種類があり、使えるライブラリが異なる。
  • Seeed nRF52 Boards では、Serial を使用するには Adafruit_TinyUSB.h のインクルードが必要。
  • ホスト側がCOMポートを開くまでにシリアル出力した内容はバッファされない。
  • while(!Serial); でホストがCOMポートを開くのを待った後、もうちょっとだけ待つ必要がある。
  • USBを使用しないスケッチを書き込むと、次にスケッチを書き込もうとしてもCOMポートが開けずにエラーになることがある。
  • その場合はリセットボタン (USBコネクタの横の小さいタクトスイッチ) をダブルクリックする。
  • その際、ホスト側でCOMポート番号が変わることがある。

参考


関連記事

今年作ったもの

今年一年の主な製作物のまとめ。

光る縄文土器 (ワイヤレス給電 & Bluetooth通信対応)




チェス盤風の将棋盤になるタオル


自作トースカン


Arduino用FRAMライブラリ


括弧置換ツール ( )→[ ]


FFmpegの簡易GUI


キングギドラのハンダ付けスタンド

光る縄文土器を作る (後編)

前回の続き。後編は回路を火焔型土器に組み込みます。

使用した粘土

  • 木粉粘土(茶色) パジコ ウッドフォルモ

  • 樹脂粘土(透明) すけるくん

焼かない粘土で土器に近い色合いのものということで今回は木粉粘土を使用しましたが、木粉粘土は粘りが弱くてぼろぼろと崩れやすく、成形が難しかったです。また乾きも遅いように感じました。

LEDが光る部分には光を透過する樹脂粘土を使用しました。すけるくんは乾燥前は白色ですが、乾くと透明度が出ます。ただし、乾燥がとても遅く、乾燥すると一回り小さくなるのが注意点です。透明度を増すための専用のコート液も販売されていますが、今回は水性ニスで代用しました。

デザイン画

デザイン画を描きました。
(原案です。製作過程で細部はいろいろ変更になりました。)

新潟県十日町市の笹山遺跡出土の火焔型土器No.1とNo.6 (ともに国宝) をメインにいくつかの火焔型土器の写真を参考にしました。胴は短めにアレンジしました。実物は高さ30cm以上 (No.1は46.5cm、No.6は34.5cm) ありますが、高さ約12cmのミニサイズで作ることにします。

製作過程

まず板状の粘土で底部を作り、ワイヤレス給電のコイルを埋め込みます。

ひも作りで胴部を作り、マイコン等の回路を埋め込みます。

ひも作りで頸部・口縁部を作り、形を整えます。容器のベースができました。

鶏頭冠のベースを作ります。(口縁部も少し修正しました。)

NeoPixelを埋め込み、隆線文などの文様を作ります。

NeoPixelの上に樹脂粘土を貼り付けて、乾燥してから透明度を増すためにニスを塗ります。

給電台

ワイヤレス給電ができる展示用の台を作りました。セリアで売っている「家事をへらす保存食器(L) 」というボウル型のタッパー的な容器がちょうどよい大きさでした。この中に下記の電装系を仕込みました。

  • モバイルバッテリー
  • USB→DC12V変換ケーブル
  • ワイヤレス給電モジュール


火焔型土器の作り方の参考資料

火焔型土器の作り方については下記の動画がたいへん参考になりました。
こちらの動画がなかったら今回の作品は出来なかったかもしれません。感謝。

火焔型土器の参考資料

本物の火焔型土器の形状については下記のサイトに掲載の写真を参考にしました。