XCOM – Compact, embedded x86 platform for SDR and other applications

Designed to support unattended operation, IP65+, and passive cooling

Have you ever tried designing a truly embedded x86-based system? We have, and it was a journey full of unexpected pitfalls.

Consider the importance of unattended operation, including resilience in the face of power failures and power voltage fluctuation. Need support for different CPU models? A compact, IP65+ enclosure? Each of these requirements is tricky on its own; taken together, they begin to feel insurmountable. But wandering into previously uncharted territory is half the fun of engineering, and we at Fairwaves are not ones to shy away from a challenge!

Today, we are making the results of more than a year’s worth of development available to the world. With the launch of XCOM, no one ever needs to face this particular set of challenges again.

We designed XCOM to be the ultimate platform for the Fairwaves UmTRX and XTRX Software Defined Radios (SDRs), but it works just as well with other USB, Ethernet, and miniPCIe SDRs. We have already started using the first revision of XCOM in our OpenRAN cellular base stations, and the version that will ship at the end of this campaign will incorporate everything we have learned from that field experience.

We also believe that XCOM has many applications outside of the SDR space. If you have suggestions for how we could make XCOM even more useful for non-SDR projects, please reach out and let us know!

XCOM Handles Demanding CPU and I/O Requirements

These days, a lot of control boards are based on ARM chips because they are small, inexpensive, power-efficient, and embedded-friendly. But what if you need more CPU power or faster I/O than an ARM chip can provide?

What if, for example, you are working in the growing field of Software-Defined Radio (SDR) and the RF processing of your application demands intensive Digital Signal Processing (DSP) and high throughput I/O? You could use a specialized DSP chip or an FPGA, but processing your data on a sufficiently powerful x86 CPU is not only simpler, it also benefits from a more developed software ecosystem and easy virtualization.

XCOM Supports Reliable, Unattended, Always-On Operation

The downside of using x86 is a less developed ecosystem of truly embedded, unattended designs. A lot of x86-based embedded systems are used in point-of-sale terminals, measurement devices, and other equipment that are easy to access and therefore easy to restart or fix if something goes wrong. For our use case, we need equipment that adheres to the infamous telecom standard of 99.999% uptime, even though it might be hundreds of kilometers – and many hours of driving – away from anyone who could fix it. Or it might be deep under water. Or hanging from a weather baloon. Or orbiting the Earth!

Building an x86-based device that is always on when it’s connected to power, and that can be reliably reflashed to a new software release remotely is surprisingly non-trivial. We had to pay special attention to everything from hardware design to Coreboot support to make it possible.

Features

  • RF Power Amplifiers (PAs) control. XCOM uses the same PA control as our classic UmTRX SDR:
    • Two software-controlled, high-load DCDCs to control the RF output power of the PAs
    • Four ADCs to measure the forward and reflected power of two PAs for VSWR calculation
    • GPIO to turn PAs on and off
  • miniPCIe with 2x PCIe lanes. Unlike most miniPCIe slots, which provide only one PCIe lane, XCOM allows you to utilize the full bandwidth of XTRX SDR.
  • EEPROM with one write-lockable page. Allows you to store hardware-specific settings in a software-independent way. Unlike SSD, EEPROM is soldered on the board and is not changed when you re-install the OS. A write-lockable page allows you to store unique IDs, security keys, and other data that should not be changed by end-users.
  • Coreboot support (selected COM modules only). Unlike a proprietary BIOS, Coreboot is open-source and modular, which allows essential customization of the boot process for unattended, always-on operation. By way of example:
    • Coreboot allows safe, remote upgrades of its own firmware (with support for recovery and production images).
    • Coreboot can provide a simple recovery OS and can, for example, dial home and report an issue even in the case of SSD failure.
    • Coreboot settings can be flashed onto the image and do not require a CMOS battery, which is a frequent point of failure.
    • System indicators, such as LEDs, can be programmed to start almost immediately after XCOM is powered on and well before the OS is loaded. They can also be programmed to indicate various boot failures.
    • To simplify recovery, netboot can be configured to start if a particular combination is sent over a serial console.
  • Only vertical connectors. The classic side connectors used in most SBCs do not work well in small IP65+ enclosures. They require extra space around the board to plug in cables, and once the board is installed, those cables becomes virtually impossible to unplug. All of XCOM’s connectors are vertical, so the board occupies only the space required by its own footprint. Vertical connectors also make it easy to plug and unplug cables when the board is mounted in an enclosure.
  • Designed for passive cooling. We took special care to ensure that XCOM can be used in environments – like inside an IP65+ enclosure – where active cooling is not possible.

Specifications

  • COM Express Type 10 Mini Rev. 3.0:
  • Dimensions (without enclosure): 102 x 73 x 36 mm with only vertical connectors
  • Power:
    • 8.5 V to 50 V DC (12 V to 50 V DC for SATA support)
    • Input voltage monitoring
    • Polarity protection circuits
  • miniPCIe: 2x PCIe lanes (full XTRX SDR bandwidth support), no USB
  • Storage: M.2 SATA or SATA
  • I/O: DisplayPort, 2x USB 3.0, 1GbE, 2x RS232, SMBus, 16x GPIO, 4x ADC lines, RGB LED driver
  • Software-controlled high-load DCDC with 2x outputs
  • EEPROM: 128kB with one write-lockable page
  • Hardware watchdog

The project will soon be launched on Crowdsupply.

Differential Microphone Pre-Amplifier

 

The project shown here is a microphone preamplifier that provides high quality amplification, optimized for use in computers, media and mobile applications. The pre-amplifier provides a differential input stage, making the device particularly effective when layout constraints force the microphone amplifier to be physically remote from the ECM microphone. This project features adjustable gain using PR1 trimmer potentiometer, very high power-supply rejection (95dB), and common-mode rejection (79dB), making it ideal for low-noise applications. Board is provided with condenser microphone as well as connector to connect external microphone, selection of external or internal microphone is possible with the help of on board Jumper. Circuit requires 5V DC input. The circuit provides differential output, use +OP/GND for single ended output. External microphone gain can be changed using R5.

The project features two selectable inputs onboard microphone or external microphone, differential outputs, adjustable gain, an integrated low noise bias source, and a low-power shutdown mode. Two input paths provide both differential and single ended microphone sensing. The high-noise rejection of the differential input is ideally suited to an internal microphone where system noise and long-run PC board traces can degrade low-level signals. The single-ended input provides a simple connection to an external microphone, can be connected to CN2.

Features

  • Supply 5V DC
  • On Board Power LED
  • PCB dimensions: 34.62 x 15.86 mm

Input/output Connections

  • MK1: Onboard Microphone
  • CN3: Differential Output
  • CN1 : Power Input 5V DC ( 2.4V-5V Possible)
  • CN2 : External Microphone
  • D1 : Power LED
  • PR1 : On Board Microphone Gain Adjust
  • J1 : Onboard Mic./ External Microphone selection

Schematic

Parts List

Connections

Photos

MAX4063 Datasheet

Video

PC Hardware Monitor with Nokia 5110 Display and Arduino

Either for benchmarking purposes or as external telemetry to help you stay within the acceptable range for your computer power, super users usually have the desire to have a way of knowing what the performance numbers of your PC are. For today’s tutorial, we will build a PC Hardware monitor which is capable of obtaining several performance-related parameters from your computer and displaying them on a Nokia 5110 LCD display.

Our PC Hardware monitor tutorial is based on the Arduino Nano microcontroller and a Nokia 5110 LCD Display. We have extensively used both of the components in past tutorials, especially the Nokia 5110 LCD Display for which we have done tutorials on displaying custom graphics, and several more tutorials on creating a custom menu on the display etc.

The principle of operation of today’s project is based on the “Grant SnattsHardware Serial Monitor project, which in turn, is based on the SerialSender utility which uses the open-source OpenHardwareMonitorLib.dll to sniff the sensors of the dedicated GPUs, graphic Cards, CPU and motherboards of most modern personal computers whilst, also pooling windows hardware stats. This stats and data are then obtained by the Arduino over the serial port and displayed on the Nokia 5110 LCD display.  To do a better than other versions of the project out there, rather than just displaying the data, we will plot performance graphs to show information the CPU Load and the CPU Clock.

At the end of today’s tutorial, you would know things like graph plotting etc on the Nokia 5110 as well as interacting with the PC directly using the Arduino.

Required Components

The following components are required to build this project.

  1. Arduino Nano or Arduino Pro Mini with USB to serial adapter
  2. Nokia 5110 LCD
  3. Jumper Wires
  4. Breadboard

These components can be bought from any electronic components store online.

Schematics

The schematics for this project is simple and should be familiar if you have been following several of our tutorials. Since the project is made up of just two main components, all we need to do is connect the Nokia 5110 LCD Display to the Arduino as shown in the schematics below;

To further make the connection easy to follow, a pin to pin connection between the Arduino and Nokia 5110 LCD display is described below.

Nokia 5110 – Arduino 

VCC - 3.3V
GND - GND
DC - D8
RST - D9
CS/CE - D10
MOSI/DIN - D11
SCK/CLK - D13
LIGHT  - GND

Go over the connections once more to ensure everything is as it should be.

Code

The code for this project is quite straight forward. We obtain PC performance information via serial communication from the hardware monitor utility and display on the LCD as a graph and in raw data form.

To achieve this, we use N5110_SPI.h minimalistic Arduino library by cbm80amiga. The library uses a very small amount of MCU resources and contains methods that reduce the amount of code you need to write to display data on the Nokia 5110 LCD.

As usual, I will be doing a brief run through the code to explain some of its technical parts.

We start the sketch by including the libraries that we will use. In addition to the N5110_SPI library, we will use two fonts libraries; c64enh_font.h and small5x7bold_font.h They are attached under the download section.

#include "N5110_SPI.h"
// from PropFonts library
#include "c64enh_font.h"
#include "small5x7bold_font.h"

Next, we create an instance of the N5110_SPI library with the Arduino pins to which its, RST, CS, and DC pins are connected as arguments.

// define USESPI in above header for HW SPI version
N5110_SPI lcd(9,10,8); // RST,CS,DC

#if USESPI==1
#include <SPI.h>
#endif

We then choose if we want to display the load graph or clock graph.

// comment out for load graph
#define CLOCK_GRAPH

Next, create other variables that will be used in the code to store information retrieved from the PC among others.

String inputString = "";
char buf[30];
String cpuLoadString;
String cpuTempString;
String cpuClockString;
String ramString;
int cpuLoad=0;
int cpuClock=0;
int inp=0;
#define MIN_CLOCK 400
#define MAX_CLOCK 2900
#define NUM_VAL (21)
int valTab[NUM_VAL];
int i,ght=16;
int x=0;

Next, We write the void setup function. We start the function by initializing the serial monitor which we will use for debug purposes. Next, we initialize the LCD, set the font and display the string “Connecting” at the center of the screen.

void setup() 
{
  Serial.begin(9600);
  inputString.reserve(200);
  
  lcd.init();
  lcd.clrScr();
  lcd.setFont(c64enh);
  lcd.printStr(ALIGN_CENTER, 2, "Connecting ...");
}

With that done, we create the function readSerial. This function does 80% of the work involved in this project. The function picks up the data sent by the utility over serial and extracts the CPU Clock, the RAM usage, CPU temperature and CPU load information from the serial data stream.

int readSerial() 
{
  while (Serial.available()) {
    char ch = (char)Serial.read();
    inputString += ch;
    if(ch == '|') {  // full info chunk received
      int st,en;
      st = inputString.indexOf("CHC");  // CPU clock: "CHC1768"
      if(st>=0) {
        en = inputString.indexOf("|", st);
        cpuClockString = inputString.substring(st+3, en);
        cpuClock = cpuClockString.toInt();
        inp=3;
      } else {

        st = inputString.indexOf("R");  // used RAM: "R6.9"
        if(st>=0) {
          en = inputString.indexOf("|", st);
          ramString = inputString.substring(st+1 , en-1);
          st = ramString.indexOf(",");
          if(st>=0) ramString.setCharAt(st,'.');
          inp=2;
        }

        int cpuTempStart = inputString.indexOf("C"); // CPU temperature: "C52"
        int cpuLoadStart = inputString.indexOf("c"); // CPU load: "c18%"
        if(cpuLoadStart>=0 && cpuTempStart>=0) {
          en = inputString.indexOf("|");
          cpuTempString = inputString.substring(cpuTempStart+1, cpuLoadStart);
          cpuLoadString = inputString.substring(cpuLoadStart+1, en-1);
          cpuLoad = cpuLoadString.toInt();
          inp=1;
        }
      }
      inputString = "";
      return 1;
    }
  }
  return 0;
}

Next, is the void loop() function. The void loop function checks to see if the serial data is available by calling the readserial function. If data is available from the PC, it then displays the extracted data from the readserial() function on the LCD Display, while also using the LCD.fillWin() and drawGraphBar() function to plot the graph.

void loop() 
{
  //readSerial();
  if(readSerial()) 
  {
    int xs=38;
    lcd.setFont(c64enh);
    lcd.printStr(0, 0, "Temp: ");
    x=lcd.printStr(xs, 0, (char*)cpuTempString.c_str());
    lcd.printStr(x, 0, "'C  ");
    lcd.printStr(0, 1, "Load: ");
    snprintf(buf,20,"%d %",cpuLoad);
    x=lcd.printStr(xs, 1, buf);
    lcd.printStr(x, 1, "%  ");
    lcd.printStr(0, 3, "RAM: ");
    x=lcd.printStr(xs, 3, (char*)ramString.c_str());
    lcd.printStr(x, 3, " GB  ");
    lcd.printStr(0, 2, "Clock: ");
    x=lcd.printStr(xs, 2, (char*)cpuClockString.c_str());
    lcd.setFont(Small5x7PLBold);
    lcd.printStr(x, 2, " MHz    ");
#ifdef CLOCK_GRAPH
    i = 2;
#else
    i = 1;
#endif
    lcd.fillWin(83,i,1,1,B00111110);
    lcd.fillWin(82,i,1,1,B00011100);
    lcd.fillWin(81,i,1,1,B00001000);

    if(inp==3) addVal();
    clrBuf();
    drawGraphBar();
    lcd.drawBuf(scr,0,4,scrWd,scrHt);
  }
  if(inp>=3) { delay(1000); inp=0; }
}

The complete code for the project is available below and under the download section. It contains all the other functions that were used and is well commented so it should be easy to follow irrespective of your programming experience.

#include "N5110_SPI.h"
// from PropFonts library
#include "c64enh_font.h"
#include "small5x7bold_font.h"

// define USESPI in above header for HW SPI version
N5110_SPI lcd(9,10,8); // RST,CS,DC

#if USESPI==1
#include <SPI.h>
#endif


// comment out for load graph
#define CLOCK_GRAPH

String inputString = "";
char buf[30];
String cpuLoadString;
String cpuTempString;
String cpuClockString;
String ramString;
int cpuLoad=0;
int cpuClock=0;
int inp=0;
#define MIN_CLOCK 400
#define MAX_CLOCK 2900
#define NUM_VAL (21)
int valTab[NUM_VAL];
int i,ght=16;
int x=0;


void setup() 
{
  Serial.begin(9600);
  inputString.reserve(200);
  
  lcd.init();
  lcd.clrScr();
  lcd.setFont(c64enh);
  lcd.printStr(ALIGN_CENTER, 2, "Connecting ...");
}

int readSerial() 
{
  while (Serial.available()) {
    char ch = (char)Serial.read();
    inputString += ch;
    if(ch == '|') {  // full info chunk received
      int st,en;
      st = inputString.indexOf("CHC");  // CPU clock: "CHC1768"
      if(st>=0) {
        en = inputString.indexOf("|", st);
        cpuClockString = inputString.substring(st+3, en);
        cpuClock = cpuClockString.toInt();
        inp=3;
      } else {

        st = inputString.indexOf("R");  // used RAM: "R6.9"
        if(st>=0) {
          en = inputString.indexOf("|", st);
          ramString = inputString.substring(st+1 , en-1);
          st = ramString.indexOf(",");
          if(st>=0) ramString.setCharAt(st,'.');
          inp=2;
        }

        int cpuTempStart = inputString.indexOf("C"); // CPU temperature: "C52"
        int cpuLoadStart = inputString.indexOf("c"); // CPU load: "c18%"
        if(cpuLoadStart>=0 && cpuTempStart>=0) {
          en = inputString.indexOf("|");
          cpuTempString = inputString.substring(cpuTempStart+1, cpuLoadStart);
          cpuLoadString = inputString.substring(cpuLoadStart+1, en-1);
          cpuLoad = cpuLoadString.toInt();
          inp=1;
        }
      }
      inputString = "";
      return 1;
    }
  }
  return 0;
}


void addVal()
{
  for(i=0;i<NUM_VAL-1;i++) valTab[i]=valTab[i+1];
#ifdef CLOCK_GRAPH
  if(cpuClock<400) cpuClock=400;
  if(cpuClock>2900) cpuClock=2900;
  valTab[NUM_VAL-1] = (long)(cpuClock-MIN_CLOCK)*ght/(MAX_CLOCK-MIN_CLOCK);
#else
  valTab[NUM_VAL-1] = cpuLoad*ght/100;
#endif
}

// --------------------------------------------------------------------------
byte scr[84*2];  // frame buffer
byte scrWd = 84;
byte scrHt = 2;

void clrBuf()
{
  for(int i=0;i<scrWd*scrHt;i++) scr[i]=0;
}

void drawPixel(int16_t x, int16_t y, uint16_t color) 
{
  if((x < 0) || (x >= scrWd) || (y < 0) || (y >= scrHt*8)) return;
  switch (color) {
    case 1: scr[x+(y/8)*scrWd] |=  (1 << (y&7)); break;
    case 0: scr[x+(y/8)*scrWd] &= ~(1 << (y&7)); break; 
    case 2: scr[x+(y/8)*scrWd] ^=  (1 << (y&7)); break; 
  }
}

void drawLineH(uint8_t x0, uint8_t x1, uint8_t y, uint8_t step)
{
  if(step>1) { if(((x0&1)==1 && (y&1)==0) || ((x0&1)==0 && (y&1)==1)) x0++; }
  if(x1>x0) for(uint8_t x=x0; x<=x1; x+=step) drawPixel(x,y,1);
  else      for(uint8_t x=x1; x<=x0; x+=step) drawPixel(x,y,1);
}

void drawLineV(int x, int y0, int y1, int step)
{
  if(step>1) { if(((x&1)==1 && (y0&1)==0) || ((x&1)==0 && (y0&1)==1)) y0++; }
  if(y1>y0)for(int y=y0; y<=y1; y+=step) drawPixel(x,y,1);
  else     for(int y=y1; y<=y0; y+=step) drawPixel(x,y,1);
}

// --------------------------------------------------------------------------

void drawGraphBar()
{
  drawLineH(0,83,0,2);
  drawLineH(0,83,15,2);
  drawLineV(0,0,15,2);
  drawLineV(83,0,15,2);
  for(i=0;i<NUM_VAL;i++) {
    drawLineH(i*4,(i+1)*4-1,15-valTab[i],1);
    drawLineV(i*4+0,15-valTab[i],15,2);
    drawLineV(i*4+1,15-valTab[i],15,2);
    drawLineV(i*4+2,15-valTab[i],15,2);
    drawLineV(i*4+3,15-valTab[i],15,2);
    if(i>0) drawLineV(i*4,15-valTab[i-1],15-valTab[i],1);
  }
}

void loop() 
{
  //readSerial();
  if(readSerial()) 
  {
    int xs=38;
    lcd.setFont(c64enh);
    lcd.printStr(0, 0, "Temp: ");
    x=lcd.printStr(xs, 0, (char*)cpuTempString.c_str());
    lcd.printStr(x, 0, "'C  ");
    lcd.printStr(0, 1, "Load: ");
    snprintf(buf,20,"%d %",cpuLoad);
    x=lcd.printStr(xs, 1, buf);
    lcd.printStr(x, 1, "%  ");
    lcd.printStr(0, 3, "RAM: ");
    x=lcd.printStr(xs, 3, (char*)ramString.c_str());
    lcd.printStr(x, 3, " GB  ");
    lcd.printStr(0, 2, "Clock: ");
    x=lcd.printStr(xs, 2, (char*)cpuClockString.c_str());
    lcd.setFont(Small5x7PLBold);
    lcd.printStr(x, 2, " MHz    ");
#ifdef CLOCK_GRAPH
    i = 2;
#else
    i = 1;
#endif
    lcd.fillWin(83,i,1,1,B00111110);
    lcd.fillWin(82,i,1,1,B00011100);
    lcd.fillWin(81,i,1,1,B00001000);

    if(inp==3) addVal();
    clrBuf();
    drawGraphBar();
    lcd.drawBuf(scr,0,4,scrWd,scrHt);
  }
  if(inp>=3) { delay(1000); inp=0; }
}

Demo

With the code complete and the hardware connected as described under the schematics, connect the Arduino board to the computer and upload the code. Launch the hardware monitor software (attached under the download section) as an administrator and select the right com port to match the port on which your Arduino board is connected.

With this done, you should see the screen come up with PC performance information being displayed as shown in the image below.

To take things forward and improve on the project, how about we make things wireless?

That’s it for this tutorial, thanks for reading along. Feel free to reach out to me via the comment section with any question you might have about it.

The project is based on the work of cbm80amiga, you can watch a video of the device in action on youtube.

Wi-Fi 6 milestone reached

Wi-Fi 6, the newest generation of Wi-Fi connectivity, reached a significant milestone a few days ago with official certification. The Wireless Broadband Alliance (WBA) is the not-for-profit industry body for the Wi-Fi ecosystem whose members include BT, AT&T and Google.

The organization’s General Manager, Tiago Rodrigues states on this development:

“This is the point at which Wi-Fi 6 starts to become mainstream – it’s the end of the beginning.  Up until now, Wi-Fi 6 has been the domain of pioneers and pilots, including some of our members like Korea Telekom, SK Telekom, Cisco and Boingo Wireless. Those pilots and early deployments have been happening for some time, but now with the launch of Wi-Fi 6 CERTIFIED®, a much larger volume of wireless operators and enterprises will be more confident investing in Wi-Fi 6 devices and infrastructure, which ultimately benefits businesses and consumers.  This will likely create a virtuous circle, where hardware manufacturers and service providers will likewise become more focused on addressing the growing appetite for Wi-Fi 6.”

“In terms of what happens next on the ground, we’ll see service providers and likely early adopters like venues and the hospitality and retail sectors exploring their options with Wi-Fi 6.  There are still some things to watch out for and challenges to be addressed – it won’t necessarily be a straight rip-and-replace of existing equipment, as there will need to be some more planning and re-configuring to tackle the opportunity optimally.  That’s why we created our Wi-Fi 6 Deployment Guidelines to smooth the transition out and make the most of this huge leap in Wi-Fi capability.”

Toradex works with Amazon Web Services and NXP on a cloud-enabled AI demonstration

Toradex leverages Amazon® Web Services (AWS) and NXP® to demonstrate how to simplify the creation of Industry 4.0-ready industrial automation solutions. A live demonstration that leverages expertise and technology across all three companies will be on display at the Industry of Things World in Berlin from September 16 through September 17.

The demo includes:

  • NXP’s high performance MX 8QuadMax application processor, optimized for safety and reliability
  • AWS IoT Greengrass and Amazon SageMaker Neo, which provide optimized machine learning at the device edge, plus seamless online and offline capabilities
  • Toradex’s easy-to-use Computer on Modules/System on Modules and software, which simplify development and maintenance while lowering time to market

The demo is built around a conveyor belt simulating a factory automation line. A MIPI CSI Camera is used to detect and classify objects. Different types of pasta are used as an example for this showcase. The demo shows how to solve many challenges faced in today’s smart factories, some of which include:

  • Secure connectivity for integrations with business tools, remote monitoring, updates, etc.
  • Maximum uptime and reliability even with intermittent connectivity
  • Small rugged and cost-optimized computing hardware
  • Use of the latest technologies in computer vision and machine learning
  • Short time to market and limited development resources

It highlights how the collaboration between these companies simplifies many of the steps required to build advanced industrial automation equipment for Industry 4.0.

In the future, this demo will be made available as a starting point to reduce the risk and time to market.

More information on the Hardware:

Toradex’s Apalis iMX8QM System on Module features NXP’s i.MX 8 QuadMax SoCs. The i.MX 8 applications processor family is built with a high-level integration to support graphics, video, image processing, audio, and voice functions, and is ideal for safety-certifiable and efficient performance requirements.

The Apalis modules come with Torizon, an easy-to-use industrial Linux platform offered by Toradex. AWS IoT Greengrass runs on the device, providing connectivity and offline capabilities.

The demo has a local graphical user interface, as well as a cloud-based control dashboard hosted on AWS.

With Amazon SageMaker a neural network was trained to detect and classify different types of pasta. The trained network was optimized with Amazon SageMaker Neo for the Apalis iMX8QM, resulting in increased performance and efficiency.

 To learn more and see the demo in action, visit AWS at Industry of Things World Berlin on September 16 and 17.

If you can’t make it, stay tuned for more information on the demo, or reach out to your local Toradex office.

Free Elektor Article: USB Pseudo Battery

  • Original publication: Elektor magazine September 2015, page 102
  • Author: Danny Winkler
  • Free download expires: Friday 20 September 2019
  • Elektor PCB available: yes, low stock. Extra boards available by 23 September 2019, please check article page
  • Please Note: Four years since its original publication, the referred article may contain components, software elements and/or linked urls that require updating to the present moment

Go to the article page and download a pdf copy of the magazine article. Downloading is free until Friday 20 September, 2019

Indoor Solar Cells optimised to convert ambient indoor light to electricity

Swedish and Chinese scientists have developed organic solar cells optimised to convert ambient indoor light to electricity. The power they produce is low, but is probably enough to feed the millions of products that the internet of things will bring online. For more information see the IDTechEx report on Energy Harvesting Microwatt to Megawatt 2019-2029.

As the internet of things expands, it is expected that we will need to have millions of products online, both in public spaces and in homes. Many of these will be the multitude of sensors to detect and measure moisture, particle concentrations, temperature and other parameters. For this reason, the demand for small and cheap sources of renewable energy is increasing rapidly, in order to reduce the need for frequent and expensive battery replacements.

This is where organic solar cells come in. Not only are they flexible, cheap to manufacture and suitable for manufacture as large surfaces in a printing press, they have one further advantage: the light-absorbing layer consists of a mixture of donor and acceptor materials, which gives considerable flexibility in tuning the solar cells such that they are optimised for different spectra – for light of different wavelengths.

read more

Vishay Intertechnology’s New Cost-Effective Proximity Sensor Provides Sensing Distance Up to 30 cm

The Optoelectronics group of Vishay Intertechnology, Inc. (NYSE: VSH) today introduced a new proximity sensor that offers a sensing distance of up to 30 cm. Combining an IR emitter, photo detectors for proximity, amplifiers, and ADC circuitry into a single package, the Vishay Semiconductors VCNL3040 features a programmable interrupt function and supports the I²C bus communication interface for efficient object and collision detection in a wide variety of consumer and industrial applications.

Ideally suited for use in smart home, industrial, office, and toy products, the device released today provides a 33 % increase in proximity detection distance compared to previous-generation sensors at a lower cost than similar solutions on the market. Applications include presence detection to activate displays in printers, copiers, and home appliances; collision detection in robots and toys; vehicle occupancy detection in parking lots; and proximity detection in lavatory appliances.

Product Benefits:

  • Sensing distance up to 30 cm
  • Programmable interrupt function allows designers to specify high and low thresholds, which reduces the continuous communication with the microcontroller
  • Supports I²C bus communication interface
  • Selectable 12-bit and 16-bit outputs • Intelligent cancellation eliminates cross-talk
  • Smart persistence scheme ensures accurate sensing and faster response time
  • Emitter wavelength peaks at 940 nm and has no visible “red-tail”
  • Excellent temperature compensation from -40 °C to +85 °C • Offered in a lead-free 8-pin QFN package
  • RoHS-compliant, halogen-free, and Vishay Green

The VCNL3040’s programmable interrupt function allows designers to specify high and low thresholds, which reduces the continuous communication with the microcontroller. Featuring selectable 12-bit and 16-bit outputs, the proximity sensor uses intelligent cancellation to eliminate cross-talk, while a smart persistence scheme ensures accurate sensing and faster response time. The emitter wavelength peaks at 940 nm and has no visible “red-tail.”

The device offers a supply voltage range of 2.5 V to 3.6 V, an I²C bus voltage range from 1.8 V to 3.3 V, and excellent temperature compensation from -40 °C to +85 °C. Offered in a lead-free 8-pin QFN package, the sensor is RoHS-compliant, halogen-free, and Vishay Green.

Samples and production quantities of the new VCNL3040 are available now, with lead times of eight to 12 weeks for large orders.

CHUWI UBook Pro is a Low-Cost Alternative to Microsoft Surface Pro 6

Introduction UBook Pro

The latest 2-in-1 tablet/laptop from CHUWI, is the UBook Pro, that the Chinese manufacturer hopes will rival the Microsoft Surface Pro 6. The company has been manufacturing tablet/laptop computers since 2013. They targeted the mobile office industry with the UBook, and now the UBook Pro, with focus on versatility, quality, performance, and portability.

Processor Improvements

UBook Pro has some interesting enhancements to their original tablet. The processor is the first big change, being an upgrade from an Intel Core m3-6Y30 processor of the previous UBook tablet, to a high-efficiency 8th Gen Intel Core m3-8100Y processor with a claimed overall increase in performance of 50% compared to the original UBook tablets.

Display Ability

The 12.3-inch FHD IPS full lamination screen has a 3:2 ratio, which can be found on the Surface Pro, HUAWEI Matebook and others, delivers a vivid picture with exceptional resolution. The design is meant for the office work of many types and built to be used in the mobile office environment.

Storage and Stylus

The 128/256 GB M.2 SSD is able to read and write at up to 500MB/s compared to the eMMC of the UBook, this performance increase means the UBook Pro saves much faster than before and helps with start-up speeds and application loading. The stylus pressure sensitivity is increased from 1024 to 2048 in the HiPen H5, which is applicable to stroke thickness and the handwriting accuracy, which can translate into more complex graphics and improved handwriting capability.

Keyboard Enhancements

The keyboard has the same key switches as the Surface series and the back-lit keyboard design has improved the overall typing experience, which is suited to the mobile office capability that the UBook Pro is built to deliver.

UBook Pro Specs:

  • CPU: Intel Core m3-8100Y, 3.4 GHz, 2C4T
  • GPU: UHD Graphics 615, 900MHz
  • Display: 12.3’’ IPS full-laminated, 1920 * 1280, multi-touch screen
  • RAM: 8GB RAM, 128GB/256G SSD
  • Battery: 37Wh
  • I / 0 Ports: Full-featured USB-C, USB-A 3.0 * 2, Micro-HDMI, 3.5mm audio jack
  • OS: Windows 10 Home
  • Expected Price: around $600

UBook Pro Features, Size and Weight

The U-Shape kickstand at the back is made for a step-less adjustment, that can offer a max opening of 145° offering convenience and efficiency, as a tablet, workstation or laptop, in a wide variety of locations. Equipped with Intel UHD Graphics 615, making 4K hardware video decoding available. The tablet is a slim 9 mm thick and weighs a mere 780 g making the units extremely easy to carry and setup.  The fanless design makes the UBook Pro silent and cool-to-the-touch.

Intro Video

More Information

The IndieGoGo Campaign is to be announced and the cost of the units will probably run about $600 USD before shipping. There is a contest for a free UBook Pro to be announced once the IndieGoGo Campaign is kicked off. You can find more details and register for a 25% discount in the pre-launch page.

via www.cnx-software.com

Boardcon Idea3399 Feature-Rich SBC Comes with M.2 NVMe SSD and 4G LTE PCIe Sockets

A few years back, Boardcon introduced EM3399 single board computer powered by a Rockchip RK3399 processor through the company’s PICO3399 SO-DIMM system-on-module.

They’ve now designed another RK3399 based SBC , the Idea3399 – comprised of a baseboard and module, but instead of re-using the SO-DIMM module, CM3399 system-on-module with castellated holes was used instead. The new board comes with many of the same features as their first board but adds an M.2 NVMe SSD slot and mPCIe socket for 4G LTE modem on the back of the board.

CM3399 SoM

Key features and specifications:

  • SoC – Rockchip RK3399 dual Cortex-A72 @ 1.8GHz + quad Cortex-A53 @ 1.4GHz
  • System Memory – 4GB LPDDR4
  • Storage – 8GB eMMC flash
  • 202 castellated pin (1.3mm pitch) with  USB2.0 host, USB3.0 host, USB OTG, UART, MIPI, Ethernet, SPI, HDMI out, I2C, I2S, PCI Express, SDIO, SD/MMC, eDP, Camera, PWM, ADC IN, etc…
  • Power – Supply Voltage: 5V; RK808 PMU
  • Dimensions – 55  x 50mm (8 Layers, complying with EMS/EMI)

The module comes with Android 7.1.2 preinstalled and targets AIoT applications such as intelligent interactive devices, personal computers, and robots. The Android BSP is based on  Linux 4.4.126 and the cross-compilation toolchain runs on Ubuntu 16.04.

Idea3399 SBC

Idea3399 SBC specifications:

  • SoM – CM3399 module described above
  • Storage – MicroSD card slot, M.2 2280 NVMe SSD slot
  • Video Output / Display I/F
    • 1x mini Display Port
    • 1x HDMI 2.0 port up to 4Kp60
    • Up to 2x MIPI DSI interface for LCD (1x multiplexed with MIPI CSI)
  • Audio – Realtek ALC5651 Audio CODEC, 3.5mm jack for headphone, 14-pin header for MIC Array, digital audio via HDMI
  • Camera – Up to 2x MIPI CSI interface for 13MP camera (1x multiplexed with MIPI DSI); Optional OV13850 camera sensor (13MP)
  • Connectivity
    • Gigabit Ethernet (RTL8211E)
    • Dual-band (2.4GHz/5GHz) 802.11 a/b/g/n/ac WiFi 5 and Bluetooth 4.1
    • Optional 3G/4G LTE mPCIe card + SIM card slot
  • USB – 1x USB2.0 host port, 2x USB 3.0 Type-C ports
  • Serial
    • 4-wire UART1 (Multiplexed signal with Ethernet), 1x 8pin connector
    • 3-pin debug UART2
    • 4-wire UART3 (Multiplexed signal with Ethernet), 1x 4pin connector
  • Expansion Headers – 8-pin for SPI
  • Misc – IR receiver; recovery, power and reset buttons; CR1220 battery for RTC
  • Power Supply – DC 5V/3A or 3.6V~12.8V Li-Ion battery; 2x 5-pin power header; 2×4-pin PoE header
  • Dimensions – 135mm x 90mm

None of the software and related documentation is available publicly, but they do have some hardware documentation and datasheets which you’ll find on the product pages for the SoM and SBC respectively. Pricing has not been made public, but I understand the board and module have been available since late July.

via www.cnx-software.com

TOP PCB Companies