Seeeduino XIAOを使ってみる | お父にゃんの電子工作

お父にゃんの電子工作

暇なおじさんが、電子工作(主にラジオ製作)をして勝手な感想を書く

以前に、本屋で立ち読みしていた雑誌で、Seeeduino Xiaoなるものが有ることを知った。とってもコンパクトで使いやすいらしい。

秋月電子で売っていた↓のを買っておいたので、試すことにした。

 

MicrochipのATSAMD21G18が載っている。

Cortex M0+ 48MHz、 256KB ROM、 32KB RAM

USBも付いて、1個850円とお安い。

特別高性能というわけではないが、おじさんが使う分には十分すぎる性能。

 

袋から出すと、本体とシールが入っていた。

ピンヘッダーは付いていないので、細ピンヘッダーを別途用意する必要がある。

 

お好みの色のシールを貼れ、ということのようなので貼ってみる。

雑なおじさんが貼ると、やはり斜めになってしまう。

シールは端子表になっている。このページ等が参考になる。

 

Arduino Pro miniと比べてもこんなに小さい。

 

次に、Arduino IDEにSeeeduino Xiaoを対応させる。

Arduino IDE Ver2.3.2の場合

ファイル-基本設定を開き、追加のボードマネージャーに以下を追加

 https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

 

 

追加したらボードマネージャーからSEEED SAMDを検索してインストール

 

インストールが出来たらボードでSeeeduino XIAOが選択できるようになる。

 

さっそく、Lチカを試す。

このページによると、このちっちゃなボードにLEDが4個載っていて

一つは電源表示。

後の3つは デジタル11-13番出力 に割り付けられているらしい。

デジタル11-12番はUART通信時に点滅するようなので、UARTを使う場合は13番のみ使えるということか?

 

まぁ、せっかくなので、3つとも光らせてみる

void setup() {
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}
 
void loop() {
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);  
  delay(500);                    
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  delay(500);                    
}

 

LED OFF

 

LED on

写真ではぼやけているが、3つとも光っている。

なんか調子が良い。

 

次にDACを試してみる。

0番ピンのみアナログのDA出力に出来る。

試しに、1KHzのサイン波を出してみる。

 

最初にサイン波のデータを作っておいて、後でデータを連続でDACに出す。

DACは10bitなので最大1023まで出力可能。一旦最大値を510で試してみた。

int sindata[24];
 
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(0, OUTPUT);
 
  for (int n=0; n < 24; n++) {
    sindata[n] = (sin(n*0.26)+1)*255;
  }
}
 
void loop() {
  for (int n=0; n < 24; n++) {
    analogWrite(0,sindata[n]);
    delayMicroseconds(40);
  }
}

 

0番ピンを見てみると、ギザギザした波形だが、それっぽく出力されている。

 

試しに最大値を1022まで上げて動かしてみると、途中でサチってしまう。

3.3V近くまで出てほしいのだが、2.3Vくらいまでしか出力されない。

余裕をもって、2Vが最大値と思って使った方が良さそうだ。

 

 

他のポートだとanalogWrite()ではPWM出力となる。

D3ポートにPWM出力してみる

void setup() {
  pinMode(3, OUTPUT);
  analogWrite(3,128);  
}
void loop() {
}

 

比率は8bit指定。733KHzで出力されている。

 

analogWriteResolution()が使えるか試してみた。

10bit指定にする。

void setup() {
  pinMode(3, OUTPUT);
  analogWriteResolution(10);
  analogWrite(3,128);  
}
void loop() {
}
 
値は128のままだが、10bit指定なので128/1023となり約13%DUTY波形となった。
周波数は733Hzと変わらず。
 

 

次にタイマー割込みを調べてみる。

 

Arduinoのタイマー割込みでは”MsTimer2.h”が使えたが、Seeeduino XIAOでは

”TimerTC3.h ”を使うらしい。早速試してみる。

42μsecごとに割り込みが発生するようにして、sin波形データをDACに出力してみる。

int sindata[24];
int sincnt;
#include <TimerTC3.h>
 
void setup() {
  pinMode(0, OUTPUT);
 
  //sin波形作成
  for (int n=0; n < 24; n++) {
    sindata[n] = (sin(n*0.26)+1)*255;
  }
 
  sincnt = 0;
 
  TimerTc3.initialize(42); //42usタイマー
  TimerTc3.attachInterrupt(SINOUT)  ; //割り込み関数を指定
}
// callback function
void SINOUT(){
  analogWrite(0,sindata[sincnt]);
  sincnt++;
  if (sincnt == 24){
    sincnt=0;
  }
}
 
void loop() {
}

 

 

42μsecごとの割り込みなのでどうかと思ったが、ちゃんと動作した。

割り込み応答も良さそうだ。

 

次にADCを使ってみる。

簡単にテスト用のスケッチ

int AD_in;
 
void setup() {
  pinMode(1, INPUT);
 
  Serial.begin(115200);      
  while (!Serial);          
  Serial.println("Start");  
}
 
void loop() {
  AD_in = analogRead(1);
  Serial.println(AD_in);
  delay(2000);
}

 

10Kの抵抗を介して1番ピンに3.3Vを繋ぐ

10bitの最大値の1023となった。

 

さらに10KΩ抵抗2つで1/2に分圧すると約半分の516となった。

正確さは分からないが、ESP32のような大きな誤差は無いと思われる。

analogReadResolution(12);を使えば0-4096で読込まれる様に変更出来るらしいが、おじさんには10bitでも十分すぎるのである。

 

 

Seeeduino XIAOを、ちょっと触った感じでは、とても良い感じがする。

今後はこれをメインに使えるんじゃないかと、あれこれ考えてしまう。

とにかく、このSeeeduinoは小さいので扱いやすい。

こうすれば、300穴のブレッドボードでもDSPラジオが出来そうぢゃ。

今度試してみる。

 

 

 

「また、おかしなことを考えているようだニャ」