Free Elektor Article: DDS Function Generator

DDS chips are readily available, greatly simplifying the design of the analog part of a wide-range function- or signal generator. All you need to do (they say!) is choose one, add some suitable output circuitry, pick a microcontroller, provide a user interface and start programming. To which we reply: sweet dreams, here is the real story: power to the AD9834!

  • Original publication: Elektor magazine 5/2015, page 68.
  • Author: Theodorou Gerasimos (Greece) Post engineering: Ton Giesberts (Elektor Labs)
  • Free download expires: Friday 17 January 2020.

Specifications

• Direct Digital Synthesis (DDS) with analogue front-end
• Frequency range: 1 – 10 MHz
• Frequency resolution: 0.28 Hz
• Output: 0 – 15 Vpp
• THD+N (100 kΩ load, B > 500 kHz):
— 1 V, 1 kHz: 0.12% (0.09% for B = 22 kHz)
— 5 V, 1 kHz: 0.1% (0.09% for B = 22 kHz)
— 1 V, 10 kHz: 0.1% (0.09% for B = 80 kHz)
— 5 V, 10 kHz: 0.09% (0.08% for B = 80 kHz)
— 1 V, 100 kHz: 0.1%
— 5 V, 100 kHz: 0.08%
• S/N (referred to 1 V): 72 dB
• Maximum output (10 MΩ load):
— Sine: 16 Vpp
— Triangle: 16 Vpp
— Square: 18 Vpp
• DC offset voltage range: –10 to +10 V
• Output impedance: 50 Ω
• Duty cycle (square wave): 1 – 99%
• Rise and fall time (80%, square wave): 100 ns
• Sweep mode
• Power consumption: 3 VA

Like what you’re seeing? Then go to the article page and download a pdf copy of the full, original article. Downloading is free from Friday 10 January to Friday 17 January, 2020.

Kobol Launches Pre-Order for the Helios64 NAS

Kobol, the Singapore based manufacturer of Helios4 is set to launch pre-orders for its latest open HW/SW NAS system called the Helios64. The system which was created as an upgrade to the Helios4 NAS system will be available as a Nano-ITX SBC and a complete enclosed system, running the more powerful 64-bit Rockchip RK3399 compared to the Cortex-A9 based Marvell Armada 388 on the Helios4.

One of the major upgrades to the Helios4 is the use of the RK3399 SOC which comes with 2 x 1.8GHz Cortex-A72 cores, 4 x 1.4GHz Cortex-A53 cores, and a Mali-T860 GPU. To rain in utmost performance levels, the board ships with 4GB LPDDR4 RAM  along with a 16GB eMMC 5.1, and a MicroSD slot which could be used to further increase the storage.

Asides the upgrade in the SOC used, the new Helios64 comes with a 2.5Gbs LAN port(1 Ethernet port more than Helios4), a UPS, and an additional SATA interface to bring the total number of SATA III interfaces on it to five(5) (compared to the 4 on Helios4), with the possibility of configuring one of them for use with an SSD via an M.2 slot. In addition to the upgraded interfaces, the board also ships with:

  • 3x USB 3.0 host ports
  • USB Type-C that supports DP for displays or DAS (Direct Attached Storage) modes.
  • GPIO and special-purpose I/Os that support I2C, SPI, UART, and 2x PWM fan
  • Dual DC inputs Power Supply
  • Built-in UPS with optional battery.

The Nano-ITX SBC comes in a 120×120 size  that is slightly larger than the Helios4, while the full five drive systems with enclosure comes in a 250 x 222 x 134mm size with an exposed USB 3.0 port, a control panel and an internal space for dual 80mm PWM fans, and five 3.5-inch HDDs via a hot-plug tray system.

Kobol board

The new Helios64 will go on pre-order next week (Second week in January) with shipping and fulfillment due by March. During the Pre-order stage, the Nano-ITX SBC version will be available for $189 while the enclosure kit versions will go for $285. After the pre-order stage by March 1, the full kit will sell for $295.

Further information on the specifications of the board and Pricing is available on the product page on Kobol’s website.

OnLogic Announces Four New Apollo Lake Pico-ITX SBCs

OnLogic (Formerly Logic supply) recently announced the launch of 4 new industrial SBCs based on Intel’s Apollo Lake Pico-ITX processors. The four boards; EPM163, EPM162, EPM161, and EPM160, combine small size (the Pico-ITX 3.9 x 2.8in form factor) with solid performance, with target use cases being diverse industrial applications.

The first board, EPM163, hosts the Quad-Core Intel Apollo Lake N4200 Pentium processor with 4GB of RAM, Intel HD 500 Graphics, and 64 GB onboard storage with support for two mini-PCIe slots (one shared with mSATA). Like all Apollo Lake generation processors, it offers up to a 30% performance boost over systems running on previous architectures and operates with low power consumption and reduced heat production.

For connectivity, the EPM163 features; a 9 pin RS232 box connector COM Port, a USB 2.0 port, two USB 3.0 ports, a MicroSD card slot, two Gb LAN ports, as well as two mini-DisplayPorts capable of 1080p or 4k resolution, with processor support for up to three separate displays at once. The board also features both full-height and half-height mPCIe slots which ensure it can support wifi and 4G connectivity with ease. The board comes with 64 GB of eMMC storage, and up to 1 TB of onboard storage may be added through an mSATA slot (shared with the full-height mPCIe) or using the MicroSD Card slot.

The second board, the EPM162, features the Intel Apollo Lake Celeron N3350 Dual-Core processor with 4GB of RAM, Intel HD 500 graphics, and 32 GB onboard storage for compact and efficient computing with support for two mini-PCIe slots (one shared with mSATA). It features the same type of connectivity/communication ports configuration as the EPM163 and also consumes low power since its processor is also based on the Apollo Lake generation.

The third board, the EPM161, is based on the same Intel Apollo Lake Celeron N3350 processor used in the EPM162, but it features a 2GB RAM(4GB on EPM162) with an 8 GB(32GB on EPM162) onboard eMMC storage. It however also supports up to 1TB of additional storage via the MicroSD Card slot or through an mSATA slot (shared with the full-height mPCIe).

EPM160

The fourth board, the EPM160, features the same dual-core Intel Celeron N335o processor and similar connectivity and performance specs as the EPM161 above with the major difference being a lesser RAM value of just 1 GB.

All four boards can be fully customized by the user to via the Onlogic product page which allows the user to select different options on configurations like Primary Storage size, Warranty years, and preloaded operating system options which include, the Windows 10 IoT Enterprise, and several Ubuntu Desktop and Server OS options.

The boards are already available for sale with the EPM163 starting from $382, the EPM162 starting at $289, the EPM161 starting at $252, and the EPM160 starting at $220.

More information on the new boards can be found on the Onlogic’s product page.

Battery (Lithium, NiMH, NiCd) Capacity Tester Using Arduino

Demo SPlash Screen

The increased interest in IoT and electric automobiles around the world is driving an increase in the use of Lithium-Ion/Lithium-Polymer/NiCd/NiMH batteries as more devices and applications are using them, due to their high energy storage capacity to size ratio. This increased interest is, however, causing an increase in the number of batteries with “fake” ampere-hours ratings in the market. These fake ratings could lead to the failure of several projects, especially IoT projects in which developers factor in the Battery ratings in their On-time calculations. As such, to find a way of mitigating the failure-risks this problem poses, for today’s tutorial, we are going to build a battery capacity tester which can be used to get the correct energy storage capacity of any Lithium-Ion/Lithium-Polymer/NiCd/NiMH batteries (with voltage below <5v).

Battery (Lithium, NiMH, NiCd) Capacity Tester Using Arduino – [Link]

Battery (Lithium, NiMH, NiCd) Capacity Tester Using Arduino

The increased interest in IoT and electric automobiles around the world is driving an increase in the use of Lithium-Ion/Lithium-Polymer/NiCd/NiMH batteries as more devices and applications are using them, due to their high energy storage capacity to size ratio. This increased interest is, however, causing an increase in the number of batteries with “fake” ampere-hours ratings in the market. These fake ratings could lead to the failure of several projects, especially IoT projects in which developers factor in the Battery ratings in their On-time calculations. As such, to find a way of mitigating the failure-risks this problem poses, for today’s tutorial, we are going to build a battery capacity tester which can be used to get the correct energy storage capacity of any Lithium-Ion/Lithium-Polymer/NiCd/NiMH batteries (with voltage below <5v).

Demo SPlash Screen

There are quite a number of battery testing projects on the internet, each with a different approach,  but for today’s tutorial we will be chronicling the efforts of Instructables user: Sam Moshiri, due to the quality of his build and its standalone and compact nature. The goal of the project according to him was to build a compact, easy-to-build device, capable of measuring the capacity of almost any kind of battery (< 5V) using an adjustable constant load setup with an LCD on which the capacity of the battery is displayed.

The idea behind the constant load current setup is simple. If you draw a constant current from a battery over a particular period of time, you will be able to calculate the true ampere-hour capacity of the battery based on the amount of voltage that was dropped during that time. To achieve the constant load current, a resistor network with an LM358 operation amplifier and a MOSFET was used. The setup has two push buttons (+ and -) that allow users to set the load current before the process starts, and a third push-button to reset the board when it’s time to test another battery. The Battery’s voltage is fed into one of the analog pins on an Arduino Nano which monitors the voltage drop based on the preset current draw, calculates the battery capacity, and displays it on a 16×2 LCD Display.

At the end of this tutorial, you would know not only how to determine the battery capacity, but also how to design for constant load / constant current draw and use a 16×2 LCD display with the Arduino.

Ready? Let’s dive in!

Required Components

The components required for this project are provided below:

  • Arduino Nano
  • 16 x 2 LCD Display
  • LM358N
  • Resistors – 4.7k(2), 47R(2), 1M, 10k, 3R
  • Capacitors 100nF(6), 100uf-16V, 1000uF-16V
  • Tact Switch (3)
  • IRF3710
  • Jumper Wires
  • Battery Holder
  • Variable Power Supply

Although the project was implemented on a PCB to make it compact, all of the components used are of DIP type to make it easy to solder for everyone, irrespective of the level of their soldering skills. The Arduino Nano was used because it can be easily soldered on a PCB, asides this reason, any other board could have been used.

Schematics

As earlier mentioned, the project was implemented using a PCB to make it portable. The PCB was designed using Altium and all the files are attached under the download section of the tutorial. The components are connected as shown in the schematics below;

A comprehensive BOM showing how each component fits into the schematics above is shown in the table below:

To create the PCB, Sam used the SamacSys component libraries, because of features like the industrial IPC standards which they follow and the fact that they are free. The Libraries were installed using the Altium Library plugin. The PCB after development is shown in the image below along with the assembled version of the board.

assembled PCB

Code

The code for this project is quite straightforward. We will basically monitor the time it takes for a battery to get to a predefined “low” value, and calculate the battery’s capacity using the depletion rate and the preset constant load current that was drawn from it. The whole process is displayed on an LCD in an interactive manner.

To reduce the amount of code to be written, we will use the Arduino Liquid Crystal library along with the JCbutton library. The liquid crystal library which comes preinstalled on the Arduino will be used to interact with the 16×2 LCD, while the JCbutton library, which can be downloaded from the attached link, is used in processing the state of the tact buttons, determining when it has been pressed, long pressed, etc., while also handling things like debounce.

As usual, I will do a quick explanation of how the code works with a focus on sections that I feel might be difficult to follow.

The code starts by importing the two libraries that will be used.

#include <LiquidCrystal.h>
#include <JC_Button.h>

Next, we create a variable to hold the minimum level to which the battery is allowed to drop, and several other variables to store different values. The Current array is a series of value which is matched to the rotation of the R7 potentiometer which determines the load current.

const float Low_BAT_level = 3.2;
//Current steps with a 3R load (R7)
const int Current[] = {0, 37, 70, 103, 136, 169, 202, 235, 268, 301, 334, 367, 400, 440, 470, 500, 540};
 
const byte RS = 2, EN = 3, D4 = 4, D5 = 5, D6 = 6, D7 = 7;
const byte PWM_Pin = 10;
const byte Speaker = 12;
const int BAT_Pin = A0;
int PWM_Value = 0;
unsigned long Capacity = 0;
int ADC_Value = 0;
float BAT_Voltage = 0;
byte Hour = 0, Minute = 0, Second = 0;
bool calc = false, Done = false;

Next, we create an instance of the Liquid Crystal library with the EN, RS and other pins of the Arduino to which the LCD is connected, as arguments.

LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);

We also create instances of the button library for the two major buttons (up and down).

Button UP_Button(16, 25, false, true);
Button Down_Button(15, 25, false, true);

With this done, we move to the void setup() function. We start the function by setting the pinMode of the buzzer and PWM pin as output.

void setup() {
 
  pinMode(PWM_Pin, OUTPUT);
  pinMode(Speaker, OUTPUT);

After this, we initialize the two buttons we created along with the LCD.

UP_Button.begin();
Down_Button.begin();
lcd.setCursor(0, 0); 
lcd.begin(16, 2);

After initializing the LCD, display a splash screen of some sort with the name of the project and the version. After 3s, the display is cleared and it displays the Load Adj: up/Down button showing it is waiting for the user to set a load current.

  lcd.print("Battery Capacity");
  lcd.setCursor(0, 1);
  lcd.print("Measurement v1.0");
  delay(3000);
  lcd.clear();
  lcd.print("Load Adj:UP/Down");
  lcd.setCursor(0, 1);
  lcd.print("0");
 
}

Next is the void loop() function. We start the function by reading the tact buttons.

void loop() {
  UP_Button.read();
  Down_Button.read();

Each time the Up button is pressed, it adds 5 to the Pwm_Value variable which is used as the load current indicator. The inverse is true for the Down button. For each of the button pressed, the user is provided with visual feedback of the increase or decrease in the PWM_value, on the Display.

if (UP_Button.wasReleased() && PWM_Value < 80 && calc == false)
 {
   PWM_Value = PWM_Value + 5;
   analogWrite(PWM_Pin, PWM_Value);
   lcd.setCursor(0, 1);
   lcd.print("     ");
   lcd.setCursor(0, 1);
   lcd.print(String(Current[PWM_Value / 5]) + "mA");
 }

 if (Down_Button.wasReleased() && PWM_Value > 1 && calc == false)
 {
   PWM_Value = PWM_Value - 5;
   analogWrite(PWM_Pin, PWM_Value);
   lcd.setCursor(0, 1);
   lcd.print("     ");
   lcd.setCursor(0, 1);
   lcd.print(String(Current[PWM_Value / 5]) + "mA");
 }

If the Up button is long pressed (indicated by 1000ms), the system switches mode as it assumes the user has selected a load current that satisfies them. The mode switch involves invoking the timer interrupt() function which handles all the calculations involved with determining the capacity of the battery. This cycle is repeated as the loop continues.

if (UP_Button.pressedFor(1000) && calc == false)
{
  digitalWrite(Speaker, HIGH);
  delay(100);
  digitalWrite(Speaker, LOW);
  lcd.clear();
  timerInterrupt();
}

The timerInterrupt() function handles most of the project’s heavy lifting. It continuously monitors the battery voltage and as long as it’s not yet at the preset Low_BAT_Level, it increments the time. As soon as the measured battery voltage becomes less than the Low_BAT_Level, it stops the time increment and uses it to estimate the capacity of the battery. At this point, the buzzer is turned on and off in a pattern to indicate the completion of the process.

void timerInterrupt() {
  calc = true;
  while (Done == false) {
    Second ++;
    if (Second == 60) {
      Second = 0;
      Minute ++;
      lcd.clear();
    }
    if (Minute == 60) {
      Minute = 0;
      Hour ++;
    }
    lcd.setCursor(0, 0);
    lcd.print(String(Hour) + ":" + String(Minute) + ":" + String(Second));
    lcd.setCursor(9, 0);
    ADC_Value = analogRead(BAT_Pin);
    BAT_Voltage = ADC_Value * (5.0 / 1024);
    lcd.print("V:" + String(BAT_Voltage));
    lcd.setCursor(0, 1);
    lcd.print("BAT-C: Wait!...");
 
    if (BAT_Voltage < Low_BAT_level)
    {
      lcd.setCursor(0, 1);
      lcd.print("                ");
      lcd.setCursor(0, 1);
      Capacity =  (Hour * 3600) + (Minute * 60) + Second;
      Capacity = (Capacity * Current[PWM_Value / 5]) / 3600;
      lcd.print("BAT-C:" + String(Capacity) + "mAh");
      Done = true;
      PWM_Value = 0;
      analogWrite(PWM_Pin, PWM_Value);
      digitalWrite(Speaker, HIGH);
      delay(100);
      digitalWrite(Speaker, LOW);
      delay(100);
      digitalWrite(Speaker, HIGH);
      delay(100);
      digitalWrite(Speaker, LOW);
    }
 
    delay(1000);
  }
}

The complete code for the project is available below and also attached under the download section.

#include <LiquidCrystal.h>
#include <JC_Button.h>
 
const float Low_BAT_level = 3.2;
 
//Current steps with a 3R load (R7)
const int Current[] = {0, 37, 70, 103, 136, 169, 202, 235, 268, 301, 334, 367, 400, 440, 470, 500, 540};
 
const byte RS = 2, EN = 3, D4 = 4, D5 = 5, D6 = 6, D7 = 7;
const byte PWM_Pin = 10;
const byte Speaker = 12;
const int BAT_Pin = A0;
int PWM_Value = 0;
unsigned long Capacity = 0;
int ADC_Value = 0;
float BAT_Voltage = 0;
byte Hour = 0, Minute = 0, Second = 0;
bool calc = false, Done = false;
 
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
 
Button UP_Button(16, 25, false, true);
Button Down_Button(15, 25, false, true);
 
void setup() {
 
  pinMode(PWM_Pin, OUTPUT);
  pinMode(Speaker, OUTPUT);
 
  analogWrite(PWM_Pin, PWM_Value);
 
  UP_Button.begin();
  Down_Button.begin();
 
  lcd.setCursor(0, 0);
  lcd.begin(16, 2);
  lcd.print("Battery Capacity");
  lcd.setCursor(0, 1);
  lcd.print("Measurement v1.0");
  delay(3000);
  lcd.clear();
  lcd.print("Load Adj:UP/Down");
  lcd.setCursor(0, 1);
  lcd.print("0");
 
}
 
void loop() {
  UP_Button.read();
  Down_Button.read();
 
  if (UP_Button.wasReleased() && PWM_Value < 80 && calc == false)
  {
    PWM_Value = PWM_Value + 5;
    analogWrite(PWM_Pin, PWM_Value);
    lcd.setCursor(0, 1);
    lcd.print("     ");
    lcd.setCursor(0, 1);
    lcd.print(String(Current[PWM_Value / 5]) + "mA");
  }
 
  if (Down_Button.wasReleased() && PWM_Value > 1 && calc == false)
  {
    PWM_Value = PWM_Value - 5;
    analogWrite(PWM_Pin, PWM_Value);
    lcd.setCursor(0, 1);
    lcd.print("     ");
    lcd.setCursor(0, 1);
    lcd.print(String(Current[PWM_Value / 5]) + "mA");
  }
  if (UP_Button.pressedFor(1000) && calc == false)
  {
    digitalWrite(Speaker, HIGH);
    delay(100);
    digitalWrite(Speaker, LOW);
    lcd.clear();
    timerInterrupt();
  }
 
}
 
void timerInterrupt() {
  calc = true;
  while (Done == false) {
    Second ++;
    if (Second == 60) {
      Second = 0;
      Minute ++;
      lcd.clear();
    }
    if (Minute == 60) {
      Minute = 0;
      Hour ++;
    }
    lcd.setCursor(0, 0);
    lcd.print(String(Hour) + ":" + String(Minute) + ":" + String(Second));
    lcd.setCursor(9, 0);
    ADC_Value = analogRead(BAT_Pin);
    BAT_Voltage = ADC_Value * (5.0 / 1024);
    lcd.print("V:" + String(BAT_Voltage));
    lcd.setCursor(0, 1);
    lcd.print("BAT-C: Wait!...");
 
    if (BAT_Voltage < Low_BAT_level)
    {
      lcd.setCursor(0, 1);
      lcd.print("                ");
      lcd.setCursor(0, 1);
      Capacity =  (Hour * 3600) + (Minute * 60) + Second;
      Capacity = (Capacity * Current[PWM_Value / 5]) / 3600;
      lcd.print("BAT-C:" + String(Capacity) + "mAh");
      Done = true;
      PWM_Value = 0;
      analogWrite(PWM_Pin, PWM_Value);
      digitalWrite(Speaker, HIGH);
      delay(100);
      digitalWrite(Speaker, LOW);
      delay(100);
      digitalWrite(Speaker, HIGH);
      delay(100);
      digitalWrite(Speaker, LOW);
    }
 
    delay(1000);
  }
}

Demo

With the code completed and your PCB ready, connect the Arduino Nano to your computer and upload the code to it. After the code upload, you should see the LCD come up with the splash screen as shown in the image below.

Demo Splash Screen

With the code uploaded, we then need to power the board via an external power supply and connect a battery to it as shown in the image below. Based on this current design, you should only power the board with a maximum of 9V.

With the power supply and battery connected, set your desired load Current using the up and down buttons then press and hold the up button till you hear the buzzer beeps, to kick start the process.

Set the desired Load Current

As the process proceeds, an update will be provided on the screen, showing the time that has elapsed and the voltage of the battery.

Capacity Determination in Progress

At the end of the process, the battery’s true capacity is displayed as shown in the image below.

Battery Capacity.

That’s it. For the demo, a battery rated 8800mAh was used but at the end of the test, the battery was discovered to only have an energy capacity of 1190mAh.

That’s it for this tutorial guy’s thanks for reading. As usual, you can reach out to me via the comment section if you have any questions or difficulties replicating the project.

References:

Inside an iPhone Battery Factory – in China

Strange Parts visiting a giant factory in China that makes lipo iPhone batteries, aka lithium polymer batteries, and seeing how they are made from start to finish. This is by FAR the coolest and biggest factory I’ve been to date.

Inside an iPhone Battery Factory – in China – [Link]

Advantech VEGA-320 m.2 Edge AI Module

Advantech VEGA-320 m.2 Edge AI Module is an ultra-compact and low power consumption module with one onboard Intel® Movidius™ Myriad™ X VPU. This module is scalable for multiple video streams edge inference. The VEGA-320 module includes a built-in Edge AI suite. This Edge AI suite features OpenVINO™ toolkit, pre-trained modules, deployment wizard, and third party AI SDK. The VEGA-320 module supports Windows 10 Enterprise, Ubuntu 16.04.3 LTS, and CentOS 7.4. This module operates at 0°C to 45°C temperature range. The VEGA-320 also features passive cooling and hardware acceleration for common deep neural networks. This module is ideal for use in facial detection, pedestrian tracking, human pose estimation, vehicle detection, and optical inspection.

Features

  • Built-in Edge AI Suite:
    • OpenVINO™ toolkit
    • Pre-trained models
    • Deployment wizard
    • 3rd party AI SDK
  • TensorFlow and Caffe framework support
  • Intel® Movidius™ Myriad™ X VPU onboard
  • Ultra-compact and low power consumption
  • Hardware acceleration for common deep neural networks
  • Scalable for multiple video streams edge inference

Specifications

  • OS support:
    • Windows 10 Enterprise
    • Ubuntu 16.04.3 LTS
    • CentOS 7.4
  • 0°C to 45°C operating temperature range
  • PCIe Gen2 × 1 signal interface
  • 0.7m/s airflow
  • One Myriad × MA2485 SoC
  • M.2 2230 form factor

more information: www.advantech.com

Seeeduino XIAO is an Arduino Microcontroller based on SAMD21 Cortex M0+

Take a look at Seeeduino XIAO. What a small size and cute looking! It is the smallest member of the Seeeduino family. Seeeduino XIAO still carries the powerful CPU-ARM® Cortex®-M0+(SAMD21G18) which is a low-power Arduino microcontroller. On the other hand, this little board has good performance in processing but needs less power. As a matter of fact, it is designed in a tiny size and can be used for Arduino wearable devices and small projects.

Apart from the strong CPU, Seeeduino XIAO is excellent in many other functions. It has 14 GPIO PINs, which can be used for 11 analog PINs, 11 digital PINs, 1 I2C interface, 1 UART interface, and 1 SPI interface. Some PINs have various functions, A1/D1 to A10/D10 Pins have PWM functions and Pin A0/D0 has a function of DAC which means you can get true analog signals not PWM signals when you define it as an analog pin, that’s why 14 GPIO PINs can realize more I/O PINs and interfaces. Moreover, Seeeduino XIAO supports the USB Type-C interface which can supply power and download code. There are power pads at the back of the XIAO which support battery and make it designed for wearable devices to become realistic. Except for the power LED, we add a user LED on board for your better coding experience. Usually a Dev. Board as small as this size will use the chip’s inner crystal oscillator for time fixing, in order to make the clock more accurate, Seeeduino XIAO layouts an extra 32.768KHz to make the clock more stable.

Seeeduino XIAO is perfectly compatible with Arduino IDE, you can easily develop some small projects with the help of the large and comprehensive Arduino library. So get one and you will soon love it!

Key Features

  • Powerful CPU: ARM® Cortex®-M0+ 32bit 48MHz microcontroller(SAMD21G18) with 256KB Flash,32KB SRAM
  • Flexible compatibility: Compatible with Arduino IDE
  • Easy project operation: Breadboard-friendly
  • Small size: As small as a thumb(23.5×17.5mm) for wearable devices and small projects.
  • Multiple development interfaces: 11 digital/analog pins, 10 PWM Pins, 1 DAC output, 1 SWD Bonding pad interface, 1 I2C interface, 1 UART interface, 1 SPI interface.

Specification

  • CPU: ARM Cortex-M0+ CPU(SAMD21G18) running at up to 48MHz
  • Storage: 256KB Flash,32KB SRAM
  • I/O PINs: 14 GPIO PINs,11 analog PINs, 11 digital PINs, 1 DAC output Pin
  • Interface: 1 I2C interface,1 UART interface, 1 SPI interface
  • Power supply and downloading interface: USB Type-C interface
  • LEDs: 1 user LED, 1 power LED, two LEDs for serial port downloading
  • Reset button: two reset button short connect to reset
  • Power Pads: For the battery power supply
  • Software compatibility: Compatible with Arduino IDE
  • Projection cover for protecting the circuit
  • Dimensions: 23.5×17.5×3.5 mm

The board is on sale on seeedstudio for $4.90. [via]

TOP PCB Companies