Arduino Voltmeter using SH1106 OLED display

A voltmeter is an important tool on the workbench of every electronics hobbyist, maker or hardware design engineer. As its name suggests, allows the user to measure the voltage difference between two points.  For today’s tutorial, we will look at how you can build an Arduino based DIY voltmeter, for use in situations where you don’t have the standard meters around.

Measuring a DC voltage, should probably be as easy as connecting the voltage to be measured to an analog pin on the Arduino, but this becomes complicated when voltages are higher than the Arduino’s operational voltage (5V). When applied to an analog pin, Arduino will not only give a false reading but it could also damage the board. To solve this, today’s project uses the principle of voltage divider such that only a fraction of the voltage to be measured is applied to the Arduino. This fraction of voltage that goes in is determined by the ratio of the resistors used, as such, there is usually a limit to the maximum voltage that can be applied. For this tutorial, we will use a combo of a 100k and 10k resistor, with the 10k resistor on the “output side”. Feel free to experiment with other resistor values as well.

Arduino Voltmeter using SH1106 OLED display – [Link]

Nokia 5110 LCD based Arduino Datalogger with Menu

Over time, we have built several Arduino based weather stations, real-time clocks, dataloggers and a dozen of projects based on Nokia 5110 LCD display. For today’s tutorial, we will merge all that we have learned from each of those tutorials and we will build a datalogger with a display that allows you to select different ways of viewing the data, a line graph or a bar chart, etc.

The idea behind today’s project is to show how real-time data can be plotted and displayed on the Nokia 5110 LCD. The project will also look at the development of a menu through which the user can select the different kind of plots/graphs to view the data.

At the center of today’s project is the Nokia 5110 LCD Display. The Nokia 5110 LCD is one of the most popular LCD display among makers. It was originally developed for use as a screen for cell phones and was used in lots of mobile phones during the ’90s. The display uses a low power CMOS LCD controller/driver, the PCD8544, which drives the 84×48px graphics display. In a normal state, the display consumes about 6 to 7mA which makes it quite ideal for low power devices. We have published quite a number of tutorials on this display that might help you understand how to drive it. Today’s use of the display will be to show that it can be used to plot real-time data and how different kind of graphs can be displayed on it.

Asides the Nokia 5110 LCD, we will use a DHT11 temperature and humidity sensor, DS3231 real-time clock, a rotary encoder, and an Arduino pro mini. The DHT11 will serve as the source for the data to be logged as it will measure temperature and humidity data from the environment and push to the display. The DS3231 will be used to generate a timestamp for the data and rotary encoder will be used to navigate through the menu that we will create on the LCD. All of these components will be driven by the cheap and tiny Arduino Pro Mini.

Nokia 5110 LCD based Arduino Datalogger with Menu – [Link]

Arduino FM Radio Receiver with TEA5767 and a Nokia 5110 LCD display

TEA5767 FM Radio Receiver Module

FM radio transmitters and receivers are one of the projects that fascinated a lot of people and drove them to become makers. The lure of being able to deploy your own radio station, or build your own surveillance(-like) devices was what encouraged most of us to build our first fm transmitter or receiver. Nowadays, microcontrollers help simplify and add a lot of functions to analog projects that’s why for today’s tutorial, we will look on how you can build an Arduino based FM radio receiver using the TEA5767 FM radio and an Arduino Nano.

At the heart of today’s project is the cheap TEA5767 FM radio module. This module comes with all the components required to build a FM radio receiver, all on board. The module is based on the TEA5767GH which is a single-chip, electronically tuned, FM stereo radio for low-voltage applications with fully integrated Intermediate Frequency (IF) selectivity and demodulation. Through an I2C interface, the module can be connected to a microcontroller to digitally control its tuning frequency and other characteristics, giving room for opportunities to digitize some of its operations. It comprises of two headphone jacks, one of which is for connection to an headphone/speaker while the other is for connection to the antenna which usually comes with the module.

Arduino FM Radio Receiver with TEA5767 and a Nokia 5110 LCD display – [Link]

InfraRed Robot Controller Shield For Arduino Nano

This compact Infrared robot controller is based on Arduino Nano and L298 H-Bridge. The Nano shield can be used in various DC Motor driver applications using infra-red remote control or speed controller using trimmer potentiometer and direction control with help of slide switch.   The board can drive two small size DC-Motors with current rating up to 1A each. Board also has jumpers to drive single DC Motor up to 2A. Additional 10K trimmer potentiometer and slide switch provided for DC Motor speed and direction control. The L298 IC mounted under the PCB so board can be mounted on heat sink directly in horizontal position. Screw terminal provided to connect motors. Circuit requires 7-18V DC , close the Jumper J-5V to power up the Arduino Nano. Close J1, J2, J3, J4, J5, jumpers for single motor operations.

InfraRed Robot Controller Shield For Arduino Nano – [Link]

Raspberry Pi 4 – A Look Under the Hood and How to Make most of it

The Raspberry Pi 4 was announced a while back and it surpassed the expectations of many, with many new features from its dual-core, Cortex-A-72 processor at 1.5GHz to the modern communication ports among several other upgrades. We published an announcement about it a few weeks ago but on this article we will take it a little bit further.

The Raspberry Pi 4 was announced a while back and it surpassed the expectations of many, with many new features from its dual-core, Cortex-A-72 processor at 1.5GHz to the modern communication ports among several other upgrades. We published an announcement about it a few weeks ago but on this article we will take it a little bit further.

With features as impressive as those possessed by the Raspberry Pi 4, I couldn’t bear to not take a look at the components under it, everything powering up the Raspberry Pi 4 and the source of its new features. For today’s article, we will examine the capacities of the new Raspberry Pi 4 and the components/design consideration, making it all happen.

Raspberry Pi 4 – A Look Under the Hood and How to Make most of it – [Link]

Programming STM32 Based Boards with the Arduino IDE

Blue Pill Board

Since it’s inception the Arduino IDE has demonstrated the desire to support all kind of platforms, from Arduino clones and variations of different manufacturers to third party boards like the ESP32 and ESp8266. As more people get familiar with the IDE, they are beginning to support more boards that are not based on ATMEL chips and for today’s tutorial we will look on one of such boards. We will examine how to program the STM32 based, STM32F103C8T6 development board with the Arduino IDE.

The STM32 board to be used for this tutorial is none other than the STM32F103C8T6 chip based STM32F1 development board commonly referred to as “Blue Pill” in line with the blue color of its PCB. Blue Pill is powered by the powerful 32-bit STM32F103C8T6 ARM processor, clocked at 72MHz. The board operates on 3.3v logic levels but its GPIO pins have been tested to be 5v tolerant. While it does not come with WiFi or Bluetooth like the ESP32 and Arduino variants, it offers 20KB of RAM and 64KB of flash memory which makes it adequate for large projects. It also possesses 37 GPIO pins, 10 of which can be used for Analog sensors since they have ADC enabled, along with others which are enabled for SPI, I2C, CAN, UART, and DMA. For a board which costs around $3, you will agree with me that these are impressive specs.

Programming STM32 Based Boards with the Arduino IDE – [Link]

Programming STM32 Based Boards with the Arduino IDE

Since it’s inception the Arduino IDE has demonstrated the desire to support all kind of platforms, from Arduino clones and variations of different manufacturers to third party boards like the ESP32 and ESp8266. As more people get familiar with the IDE, they are beginning to support more boards that are not based on ATMEL chips and for today’s tutorial we will look on one of such boards. We will examine how to program the STM32 based, STM32F103C8T6 development board with the Arduino IDE.

Blue Pill Board

 

The STM32 board to be used for this tutorial is none other than the STM32F103C8T6 chip based STM32F1 development board commonly referred to as “Blue Pill” in line with the blue color of its PCB. Blue Pill is powered by the powerful 32-bit STM32F103C8T6 ARM processor, clocked at 72MHz. The board operates on 3.3v logic levels but its GPIO pins have been tested to be 5v tolerant. While it does not come with WiFi or Bluetooth like the ESP32 and Arduino variants, it offers 20KB of RAM and 64KB of flash memory which makes it adequate for large projects. It also possesses 37 GPIO pins, 10 of which can be used for Analog sensors since they have ADC enabled, along with others which are enabled for SPI, I2C, CAN, UART, and DMA. For a board which costs around $3, you will agree with me that these are impressive specs. A summarized version of these specifications compared with that of an Arduino Uno is shown in the image below.

Comparing the Blue Pill with Arduino Uno

Based on the specs above, the frequency at which Blue pill operates is about 4.5 times higher than an Arduino UNO, for today’s tutorial, as an example on how to use the STM32F1 board, we will connect it to a 1.44″ TFT display and program it to calculate the “Pi” constant. We will note how long it took the board to obtain the value an compare it with the time it takes an Arduino Uno to perform the same task.

Required Components

The following components are required to build this project;

  1. STM32 Board
  2. FTDI Programmer
  3. Color TFT
  4. Push Button
  5. Small Breadboard
  6. Wires
  7. Power Bank
  8. USB to Serial Converter

As usual, all the components used for this tutorial can be bought from the attached links. The power bank is however only needed if you want to deploy the project in a stand-alone mode.

Schematics

As mentioned earlier, we will connect the STM32F1 board to the 1.8″ ST7735 based colored TFT Display along with a push button. The push button will be used to instruct the board to start the calculation.

Connect the components as shown in the Schematics below.

To make the connections easy to replicate, the pin to pin connections between the STM32 and the display is described below.

STM32 – ST7735

5V - VCC
GND - GND
PA2 - CS
PA3 - DC
PA4 - RST
PA5 - SCK
PA7 - SDA
3.3V - LED

Go over the connections once again to be sure everything is as it should be as it tends to get a little bit tricky. With this done, we proceed to set up the STM32 board to be programmed with the Arduino IDE.

Setting up the Arduino IDE for STM32

As with most boards not made by Arduino, a bit of setup needs to be done before the board can be used with the Arduino IDE.  This involves installing the board file either via the Arduino Board manager or downloading from the internet and copy the files into the hardware folder. The Board Manager route is the less tedious one and since the STM32F1 is among the listed boards, we will go that route.

Start by adding the link for the STM32 board to the Arduino preference lists. Go to File -> Preferences, then enter this URL ( http://dan.drown.org/stm32duino/package_STM32duino_index.json ) in the box as indicated below and click ok.

Now go to Tools -> Board -> Board manager, it will open a dialogue box with a search bar. Search for STM32F1 and install the corresponding package.

The installation procedure will take a few seconds. After that, the board should now be available for selection under the Arduino IDE board list.

Code

The code will be written the same way we’d write any other sketch for an Arduino project, with the only difference being the way the pins are referenced.

To be able to easily develop the code for this project, we will use two libraries which are both modifications of standard Arduino Libraries to make them compatible for the STM32. We will use the modified version of the Adafruit GFX  and the Adafruit ST7735 libraries. Both libraries can be downloaded via the links attached to them.

As usual, I will be doing a short breakdown of the code. We start the code by importing the two libraries that we will use.

#include <Adafruit_GFX_AS.h>  //https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/Adafruit_GFX_AS
#include "Adafruit_ST7735.h" // https://github.com/KenjutsuGH/Adafruit-ST7735-Library

Next, we define the pins of the STM32 to which the CS, RST, and DC pins of the LCD are connected.

#define cs     PA2
#define rst    PA4 
#define dc     PA3

Next, we create some color definitions to make it easy to use colors by their names in the code later instead of by their hex values.

// Color definitions
#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0 
#define WHITE    0xFFFF

Next, we set the number of iterations we want the board to go through along with the refresh duration for the progress bar to be used.

#define ITERATIONS 500000L    // number of iterations
#define REFRESH_TFT 7500      // refresh bar every 7500 iterations
#define ACTIVATED LOW

With this done, we create an object of the ST7735 library which will be used to reference the display all through the entire project. We also indicate the pin of the STM32 to which the pushbutton is connected and create a variable to hold its state.

Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

int percent = 0;
int progress = 1;
const int buttonPin = PB9;     
int buttonState = 0;

With this done, we move to the void setup() function.

We start by setting the pinMode() of the pin to which the pushbutton is connected, activating an internal pull-up resistor on the pin since the pushbutton connects to ground when pressed.

void setup(void) {

  pinMode(buttonPin, INPUT_PULLUP);

Next, we initialize serial communication and the screen, setting the background of the display to black and calling the printUI() function to display the interface.

  Serial.begin(9600);
  
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  tft.fillScreen(ST7735_BLACK);

  printUI();
 
}

Next is the void loop() function.

The void loop function is quite simple and short, thanks to the use of libraries/functions.

We start by reading the state of the push button. If the button has been pressed, we remove the current message on the screen using the removePressKeyText() and draw the changing progress bar using the drawBar() function. We then call the start calculation function to obtain and display the value of Pi along with the time it took to calculate it.

void loop() {
  
  buttonState = digitalRead(buttonPin);
  if (buttonState == ACTIVATED) {   
    removePressKeyText();
    drawBar();
    startCalculation();
  }

If the pushbutton is not pressed, the device stays in Idle mode with the screen demanding that a key be pressed to interact with it.

else {
  }

Finally, a delay is inserted at the end of the loop to give a bit of time before sketch “loops”.

delay(10);
}

The remaining part of the code are the functions called to achieve the tasks from drawing the bar to calculating the Pi. Most of these functions have been covered in several other tutorials that involve the use of the ST7735 display.

void fillBar(int percent)
{
    int counter =60;
    percent = map(percent,0,100,5,121);     
    for(counter = 60; counter<75;counter++)
    {
     tft.drawFastHLine(5, counter, percent, YELLOW );
    }
}

void printUI()
{
 tft.setCursor(30,5);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("PI BENCHMARK");

 tft.setCursor(30,60);
 tft.setTextColor(WHITE);
 tft.setTextSize(1);
 tft.print("PRESS KEY");
 
 tft.setCursor(5,120);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("PI:");

 tft.setCursor(5,140);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("TIME:");
}

void removePressKeyText()
{
 tft.setCursor(30,60);
 tft.setTextColor(BLACK);
 tft.setTextSize(1);
 tft.print("PRESS KEY");
}

void drawBar()
{
  tft.drawRect(5,60,120,15, YELLOW);
}

void startCalculation()
{
 unsigned long start, time;
 unsigned long niter=ITERATIONS;
 int LEDcounter = 0;
 unsigned long i;
 float x = 1.0;
 float pi=1.0;

 Serial.begin(9600);
 Serial.print("Beginning ");
 Serial.print(niter);
 Serial.println(" iterations...");
 Serial.println();

 start = millis();  
 for ( i = 2; i < niter; i++) {
   x *= -1.0;
   pi += x / (2.0f*(float)i-1.0f);   
    if (LEDcounter++ > REFRESH_TFT) {
     LEDcounter = 0;
     progress++;
     percent = progress*100/(ITERATIONS/ REFRESH_TFT);
     fillBar(percent);
    }
 }
 time = millis() - start;
 
 pi = pi * 4.0;

 Serial.print("# of trials = ");
 Serial.println(niter);
 Serial.print("Estimate of pi = ");
 String piString = String(pi,7);
 String timeString = String(time)+"ms";
 Serial.println(piString);
 
 Serial.print("Time: "); Serial.print(time); Serial.println(" ms");
 
 tft.setCursor(40,120);
 tft.setTextColor(GREEN);
 tft.setTextSize(1);
 tft.print(piString);

 tft.setCursor(40,140);
 tft.setTextColor(GREEN);
 tft.setTextSize(1);
 tft.print(timeString);
}

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

#include <Adafruit_GFX_AS.h>  //https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/Adafruit_GFX_AS
#include "Adafruit_ST7735.h" // https://github.com/KenjutsuGH/Adafruit-ST7735-Library

//Please note that you need to delete the Adafruit ST7735 library for Arduino if you have it installed, else the
//sketch won't compile.

#define cs     PA2
#define rst    PA4 
#define dc     PA3

// Color definitions
#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0 
#define WHITE    0xFFFF

#define ITERATIONS 500000L    // number of iterations
#define REFRESH_TFT 7500      // refresh bar every 7500 iterations
#define ACTIVATED LOW 

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif

Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

int percent = 0;
int progress = 1;
const int buttonPin = PB9;     
int buttonState = 0;    

void setup(void) {

  pinMode(buttonPin, INPUT_PULLUP);  
  
  Serial.begin(9600);
  
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  tft.fillScreen(ST7735_BLACK);

  printUI();
 
}

void loop() {
  
  buttonState = digitalRead(buttonPin);
  if (buttonState == ACTIVATED) {   
    removePressKeyText();
    drawBar();
    startCalculation();
  }
  else {
  }

delay(10);
}

void fillBar(int percent)
{
    int counter =60;
    percent = map(percent,0,100,5,121);     
    for(counter = 60; counter<75;counter++)
    {
     tft.drawFastHLine(5, counter, percent, YELLOW );
    }
}

void printUI()
{
 tft.setCursor(30,5);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("PI BENCHMARK");

 tft.setCursor(30,60);
 tft.setTextColor(WHITE);
 tft.setTextSize(1);
 tft.print("PRESS KEY");
 
 tft.setCursor(5,120);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("PI:");

 tft.setCursor(5,140);
 tft.setTextColor(RED);
 tft.setTextSize(1);
 tft.print("TIME:");
}

void removePressKeyText()
{
 tft.setCursor(30,60);
 tft.setTextColor(BLACK);
 tft.setTextSize(1);
 tft.print("PRESS KEY");
}

void drawBar()
{
  tft.drawRect(5,60,120,15, YELLOW);
}

void startCalculation()
{
 unsigned long start, time;
 unsigned long niter=ITERATIONS;
 int LEDcounter = 0;
 unsigned long i;
 float x = 1.0;
 float pi=1.0;

 Serial.begin(9600);
 Serial.print("Beginning ");
 Serial.print(niter);
 Serial.println(" iterations...");
 Serial.println();

 start = millis();  
 for ( i = 2; i < niter; i++) {
   x *= -1.0;
   pi += x / (2.0f*(float)i-1.0f);   
    if (LEDcounter++ > REFRESH_TFT) {
     LEDcounter = 0;
     progress++;
     percent = progress*100/(ITERATIONS/ REFRESH_TFT);
     fillBar(percent);
    }
 }
 time = millis() - start;
 
 pi = pi * 4.0;

 Serial.print("# of trials = ");
 Serial.println(niter);
 Serial.print("Estimate of pi = ");
 String piString = String(pi,7);
 String timeString = String(time)+"ms";
 Serial.println(piString);
 
 Serial.print("Time: "); Serial.print(time); Serial.println(" ms");
 
 tft.setCursor(40,120);
 tft.setTextColor(GREEN);
 tft.setTextSize(1);
 tft.print(piString);

 tft.setCursor(40,140);
 tft.setTextColor(GREEN);
 tft.setTextSize(1);
 tft.print(timeString);
}

Uploading Code to the STM32

Uploading sketches to the STM32f1 is a little bit complex compared to standard Arduino compatible boards. To upload code to the board, we need an FTDI based, USB to Serial converter.

Connect the USB to serial converter to the STM32 as shown in the schematics below.

Connect FTDI to STM32

Here is a pin to pin map of the connection

FTDI  – STM32

VCC - 5V
GND - GND
Rx - A9
Tx - A10

With this done, we then change the position of the board’s state jumper to position one (as shown in the gif below), so as to put the board in programming mode. Press the reset button on the board once after this and we are ready to upload the code.

On the computer, ensure you select “Generic STM32F103C board” and select serial for the upload method after which you can hit the upload button.

Select the board and set upload method to serial

Once the Upload is complete, change the state jumper to position “0” this will put the board in “run” mode and it should now start running based on the code uploaded. At this point, you can disconnect the FTDI and power the board over its USB. In case the code does not run after powering, ensure you have restored the jumper properly and recycle power to the board.

Demo

With the code complete, follow the upload process described above to upload the code to your setup. You should see the display come up as shown in the Image below.

Press the pushbutton to start the calculation. You should see the progress bar slide gradually until the end. At the end of the process, the value of Pi is displayed along with the time which the calculation took.

The same code is implemented on an Arduino Uno. The result is shown in the image below.

Arduino Speed Test

Comparing these two values, we see that “Blue Pill” is over 7 times faster than the Arduino Uno. This makes it ideal for projects which involves heavy processing and time constraints. The small size of the Blue pill also serves as an advantage here as it is only a bit bigger than the Arduino nano and it can be used in place where the Nano won’t be fast enough.

That’s it for today’s tutorial guys. What will you be building with the Blue Pill? feel free to share along with any questions you might have, under the comment section.

The video version of this tutorial can be watched on youtube.

Raspberry Pi 4 – A Look Under the Hood and How to Make most of it

The Raspberry Pi 4 was announced a while back and it surpassed the expectations of many, with many new features from its dual-core, Cortex-A-72 processor at 1.5GHz to the modern communication ports among several other upgrades. We published an announcement about it a few weeks ago but on this article we will take it a little bit further.

With features as impressive as those possessed by the Raspberry Pi 4, I couldn’t bear to not take a look at the components under it, everything powering up the Raspberry Pi 4 and the source of its new features. For today’s article, we will examine the capacities of the new Raspberry Pi 4 and the components/design consideration, making it all happen.

Raspberry Pi 4 Features

Before we start looking at the components that make up the Raspberry Pi 4, it is probably important to go over some of the features and specs.

Some of the new features include;

  • SoC – Broadcom BCM2711 quad-core Cortex-A72 (ARMv8) @  1.5GHz with VideoCore VI GPU supporting OpenGL ES 3.0 graphics
  • System Memory – 1GB, 2GB or 4GB LPDDR4
  • Storage – MicroSD card slot
  • Video Output  & Display I/F
    • 2x micro HDMI ports up to 4Kp60 (Currently 1080p60 max. in dual-display configuration, although 2x 4Kp30 is being worked on)
    • 3.5mm AV port with composite video (and stereo audio)
    • 2-lane MIPI DSI display port
  • Video
    • Decode – H.265 up to 4Kp60, H.264 up to 1080p60
    • Encode – H.264 up to 1080p30
  • Camera – 2-lane MIPI CSI camera port
  • Audio – Stereo audio via AV port, digital audio via HDMI ports
  • Connectivity
    • True Gigabit Ethernet (RJ45)
    • Dual-band (2.4 GHz/5.0 GHz) 802.11b/g/n/ac WiFi 5
    • Bluetooth 5.0 BLE
  • USB – 2x USB 3.0 ports, 2x USB 2.0 ports.
  • Expansion – Standard 40-pin GPIO header fully backward-compatible with previous Raspberry Pi boards
  • Power Supply
    • 5V DC via USB-C connector (minimum 3A )
    • 5V DC via GPIO header (minimum 3A )
    • Power over Ethernet (PoE) via optional PoE HAT
  • Dimensions – 85 x 56 mm (same as other model B boards)
  • Temperature Range – 0 – 50°C

Components Behind the Features

The awesome features written above are a product of several top-notch design considerations and powerful electronic components. We will take a look at some of these electronics components one after the other.

Raspberry Pi 4 Components

1. The SOC (BCM2711)

At the heart of the Raspberry pi, 4 is the Broadcom BCM2711 SOC which is responsible for a good number of the new features on the raspberry pi 4.

The architecture of the BCM2711 is considering an upgrade to the SoCs used n earlier Pi models. It continues the quad-core CPU design of the BCM2837BO (used in the raspberry pi 3 B+) but is based on the high-performing, 64-bit, and Armv8-A architecture based ARM Cortex-A72 processor which was released in 2015 as a successor of the Cortex-A57, which was used in the BCM2837BO.

The design of the Cortex-A72 and its availability as a SIP Cores Licensee makes it suitable for integration with other SIP cores like GPUs and display controllers among others which no doubt aided the implementation of all the other features of the Raspberry pi.

The BCM28711 also features a PCIe link that connects the USB 2 and USB 3 ports,  ability to access more memory than previous Pis and separate ethernet controller all leading to a greatly improved GPU feature set with much faster input/output.

Some of the features brought about by the use of this SoC includes;

  • 2x micro HDMI ports up to 4Kp60 (Currently 1080p60 max. in dual-display configuration, although 2x 4Kp30 is being worked on)
  • 3.5mm AV port with composite video (and stereo audio)
  • 2-lane MIPI DSI display port
  • Video Decoding – H.265 up to 4Kp60, H.264 up to 1080p60
  • Video Encoding – H.264 up to 1080p30

The BCM2711 chip continues to use the heat spreading technology started with the BCM2837B0, which provides better thermal management but the speed and performance of the chip means it still generates considerably more heat than the BCM2837BO, as such a heat sink will definitely be needed for processing-intensive operations.

2. LPDDR4  RAM

One of the cool thing about the Raspberry pi 4 is the RAM, with 1GB, 2GB and 4GB variety giving different categories of users an adequate cost vs required processing power solution.  The Raspberry pi 3 implemented the LPDDR2 but things were kicked off double time in the raspberry pi 4 with the LPDDR4 RAM.

Data Travelling faster in LPDDR4 due to the shorter path as a result of the duo infrastructure

LPDDR stands for Low Power Double Data Rate Random Access Memory which is essentially a low power equivalent of the DDR4 memory which has been in use in most recent High-end computers. It possesses faster memory speed and is low power. Unlike with the DDR4, the LPDDR RAMs come with smaller bit bus which helps it maintain power efficiency even at superb memory speed. Compared with the 10GB/s single-channel die bandwidth of the LPDDR2, the LPDDR4 was redesigned as a 2-channel die, bringing 16 bits and a bandwidth of 17GB/s to each of the channels as such, both channels can be arranged in a dual configuration that pushes the bandwidth to an even greater number.

All of this is what the LPDDR4 brings aboard the Raspberry pi 4.  It provides the Pi with an immense processing power for use in computationally intensive operations like Computer Vision which is gradually becoming one of the most popular applications of the raspberry pi.

3. MxL7704

According to Ben Upton, the Raspberry pi 4 was designed to meet the desire of users based on the feedback received. With all the effort made towards improving power management through the pi, one can safely assume that quite a number of that feedback was about power management on the Pi.

The Raspberry pi 4 makes use of the highly integrated MxL7704 power management IC. The MxL7704 comes with an on-board 100mA LDO which provides clean 1.5V to 3.6V power for analog sub-systems, four synchronous step-down buck regulators that provide system, memory, I/O and core power from 1.5A to 4A, an integrated 8-bit ADC with 2 external inputs, and utilizes a conditional sequencing state machine, which according to MaxLinear is “flexible enough to meet the requirements of virtually any processor”. It provides all the key power rails required by the raspberry including the low noise voltage required by the audio circuity of the Pi.

The MxL7704 boast a robust I2C interface through which it receives commands from the Pi’s onboard SoC, for dynamic voltage scaling, PGOOD Routing, sequencing control, and status monitoring, enabling the Pi to save power by dynamically reducing the power to the SoC when the system is in an idle state and push maximum power to it when running at full speed.

4.  BCM54213PE

The Raspberry pi 3 B+ was the first attempt to bring Gigabit ethernet to the raspberry pi, but because the USB connection was to the same physical layer as the Ethernet, the maximum speed attainable on the Pi 3 B+ was about 300 Mbps max. To ensure this feature is implemented in its true form, the shared USB + Ethernet bandwidth was severed on the raspberry pi 4 and a “true” Gigabit Ethernet port with a separate Gigabit Ethernet transceiver (BCM54213PE) was implemented.

According to the datasheet, the BCM54213PE is a triple-speed 1000BASE-T/100BASE-TX/10BASE-T Gigabit Ethernet (GbE) transceiver integrated into a single monolithic CMOS chip. it performs all physical-layer functions for 1000BASE-T, 100BASE-TX, and 10BASE-T Ethernet on standard category 5 UTP cable. It is highly integrated and combines digital adaptive equalizers, ADCs, phase-locked loops, line drivers, encoders, decoders, echo cancellers, crosstalk cancellers, and all required support circuitry on the single chip.

The BCM54213PE is fully compliant with RGMII and is signed for reliable operation over worst-case cat 5 cable. It is also capable of negotiating with its link partner to determine the highest possible operating speed, thus allowing the network to which it is connected to dictate the speed of data transfer in the sense that, it can revert to slower speeds if the network to which it is connected is not fast enough.

The full implementation of the Gigabit Ethernet makes the Pi 4 ideal for projects that implements it as a media server, router or that relies one way or the other on good Ethernet bandwidth.

5. VL805

Indicating future transition of all USB ports to USB3.0, the Pi 4 implements 2 x USB 3.0 ports along with 2 x USB 2.0 port which is being controlled by the VL805 chip.

VL805 on the Raspberry Pi 4

According to VIA Labs, VL805 is a USB 3.0 Host controller, which enables a PCI Express equipped platform to interface with USB Super-Speed (5 Gbps), High-Speed (480 Mbps), Full-Speed (12 Mbps), and Low-Speed (1.5 Mbps) devices. The root hub consists of four downstream facing ports enabling the simultaneous operation of multiple peripheral devices. Based on this, the raspberry pi team could migrate all of the USB ports to USB3.0 in the next version without changing the USB controller.

Asides the USB ports, the Pi 4 is powered over a USB-C connection that is capable of delivering up to 3A to Pi thereby solving most of the power issues that the models have been plagued with over the years.

Several elements exist under the hood including the jump to Bluetooth 5.0 and the reduction in BOM due to the use of the PIMC, but we will leave that for another day as I personally believe they are not so critical to performance.

Making the Most of the Raspberry Pi 4

Immediately after the release of the Raspberry Pi 4, dozens of open-source hardware manufacturers began the release several kits, accessories and add-ons to help users of the raspberry pi fully capitalize on its new features.

This section will look at a few add-ons and accessories for the raspberry pi that are worth investing in.

1. Heat Sinks

From the Pi4 benchmark and general usage so far, one of the key things you will need to put the Pi 4 to any meaningful use is a heat sink, due to the amount of heat the new processor generates. While the processor has the ability to self throttle when the temperature gets to a particular level, this still affects the overall experience and reduces the amount of work to which you can put the Pi to. There quite a number of an amazing heat sinks and cooling technologies available to the Pi 4 but one of my favorites so far still remains the ICE Tower CPU Cooling Fan sold by Seeed Studio. If you put the Pi through heavy-duty work, this will be worth your while. Other cheaper type of heat sink/cooling system worth looking at includes the dual cooling fan and this copper heat sink kit.

ICE Tower Cooling Fan

 

2. Power Over Ethernet(POE) Hat

Power Over Ethernet(POE) was introduced on the Pi 3 B+ and this feature was retained for the Raspberry pi 4. The feature allows you power the raspberry pi via an Ethernet cable connected to a networking device which is capable of sourcing power to the Pi. However, the feature can only be accessed via a “special hat (/shield like we say for Arduino)” known as the POE Hat. If you at any time want to take advantage of the connection via an Ethernet cable to reduce the number of cables connected to the Pi, then you should totally consider the POE Hat.

POE HAT

3. Docker Pi IoT Node

Looking to build some IoT Solution with the Raspberry pi 4? then the Docker Pi IoT node will certainly come in handy. The Docker pi IoT node brings GPS/BDS, GSM and LoRa Communication ability to your Raspberry pi. It comes as a Hat and directly plugs into the pi, making use of only the I2C pins as the communication between it and Pi takes place over I2C. It allows the Pi sends and receive data over LoRa, make calls, send texts, etc over GSM and get real-time location and related NMEA data via GPS.

Docker Pi

4. Raspberry Pi Keyboard and Mouse

One of the key points that were mentioned during the release of the raspberry pi 4 is the fact that it’s capable of comfortably replacing your desktop computer. If this represents your plans for the raspberry pi then you will definitely need a keyboard and mouse for the setup, and there is none better than the official raspberry pi keyboard and mouse. 

Raspberry Pi Keyboard and Mouse

5. Raspberry Pi Enclosures

The Raspberry pi 4 has a slightly different form factor compared to the other raspberry Pis, from the 2 mini HDMI ports to the change in position of the Ethernet port, the Raspberry pi 4 will not fit into enclosures for other versions of the Pis. To ensure owners of the raspberry pi 4 have access to protective enclosures, the raspberry pi foundation released the official Raspberry pi 4 enclosure same day as the device. It will provide all the coverings you need to ensure the pi stays dust-free.

Raspberry Pi 4 Case

So, the list can still go on, but for readability, we will stop here. However, I will look into creating another article focused on sharing some of the coolest raspberry pi add-ons out there.

For those who may still look to get your hands on the Raspberry pi, it is currently available in quite a lot of stores online with many stores like Seeed Studio adding different perks, discounts, and add-ons when you buy from them.

That’s it for this article, thanks for reading. Feel free to reach me via the comment section with any questions you might have as regards it.

Micron MTSD1T0AKC7MS-1WTCS – c200 microSD Card has 1TB capacity

MTSD1T0AKC7MS-1WTCS – Record, share and enjoy more content with Micron’s c200 microSD UHS-I cards

With 1TB of removable storage, the c200 is the world’s highest-capacity microSD card, designed for 4K HDR video capture/playback and blazing-fast file transfers.

The c200 microSD family is designed as removable storage for consumer cameras, drones, STB, smart phones, game consoles, etc.

Key features

  • Capacity: 128GB to 1TB
  • Performance: Optimized for burst performance
  • Sequential Speed
    • Reads: up to 100 MB/s
    • Writes: up to 95 MB/s
  • Random Speed
    • Reads: 4000 IOPS
    • Writes: 2000 IOPS
  • Speed Class: UHS-I C10, U3, A2, V30
  • Temperature Range
    • Operating: –25C to 85C
    • Storage: –40C to 85C​

No more information is available for the Micron microSD card.

TOP PCB Companies