Pervasive Displays expands its popular range of red tri-color e-paper displays

Pervasive Displays (PDi), a world leader in e-paper displays (EPDs), today announces the strengthening of its red tri-color EPD line-up with the launch of two new sizes of display. The 3.7-inch and wide-format 4.37-inch models can both render high-quality images and text in red, white and black.

The additional size options give product and service designers more flexibility when choosing displays, typically for use cases where there is no access to mains power. Unlike conventional TFT LCDs, e-paper displays only consume energy when you change what’s on the display, so maintaining a static image requires no energy at all. And because each screen update uses relatively little energy, e-paper displays can be powered using either a small battery or harvested energy.

This makes them a popular choice in a variety of applications where the contents of the display only needs updating sporadically such as logistics tags, ID and visitor badges, e-labels or IoT sensor node status screens.

With state-of-the-art driving waveform and respective pixel densities of 130 dpi (3.7-inch) and 117 dpi (4.37-inch), both can render sharp and detailed images and text. And because Pervasive Displays pre-programs key capabilities into the displays, they can be driven without consuming resource from the host controller.

Moreover, the displays’ slimline footprint, enabled in part by the built-in timing controller (Tcon), gives designers more space for other components, or the ability to minimize their overall product size.

Alchin Wang, CEO, Pervasive Displays, said:

Red EPDs provide a striking contrast that helps attract people’s attention and conveys critical information more quickly. Our red tri-color EPDs have been extremely popular, which is why we are expanding the range to give designers greater choice when selecting a display for their product.

And with speed-to-market a critical consideration for many customers, these displays are designed to be easy to integrate into end products, so they can be in customers’ hands as quickly as possible.

More information about both new red tri-color e-paper displays can be found on the Pervasive Displays website:

Menu on Nokia 5110 LCD display with Arduino

Demo

We have published quite a number of tutorials using different displays with the Arduino, with the most recent being the tutorial on displaying graphics on all kind of displays with Arduino. For today’s tutorial, we will look into achieving more with displays by implementing a menu based system with the Nokia 5110 LCD display and the Arduino. The menu is one of the easiest and most intuitive ways through which users interact with products that require navigation. From mobile phone to PCs, its applications are endless. Today we will explore how to add this cool feature to your Arduino project.

At the heart 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 90’s. 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 such a display.

Menu on Nokia 5110 LCD display with Arduino – [Link]

Menu on Nokia 5110 LCD display with Arduino

We have published quite a number of tutorials using different displays with the Arduino, with the most recent being the tutorial on displaying graphics on all kind of displays with Arduino. For today’s tutorial, we will look into achieving more with displays by implementing a menu based system with the Nokia 5110 LCD display and the Arduino. The menu is one of the easiest and most intuitive ways through which users interact with products that require navigation. From mobile phone to PCs, its applications are endless. Today we will explore how to add this cool feature to your Arduino project.

At the heart 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 90’s. 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 such a display.

Nokia 5110 LCD Display

To showcase how to create the menu on a display with the Arduino, we will build a simple demo menu with three pages.  To navigate through the menu, we will use 3x push buttons. The first to scroll up, the second to scroll down and the third one to select a highlighted option. The first screen/page of the menu will serve as the home page and will host the options that open the next two screens/pages. The second page will open after the first menu option on the homepage has been selected. Users will be able to change the contrast of the display using the up and down push buttons to increase or reduce it respectively. By pressing the select button, users will be able to go back to the home page. The second option on the homepage displays the third page, where users will be able to turn the backlight of the display on/off by pressing the select item button.

The Menu

Selecting the last option on the homepage does what it is labeled for, it clears all the previous settings for the contrast and backlight. This is a fun and interesting project which I believe can be very useful to anyone irrespective of your technical know-how level.

That’s it for introduction, Let’s now see how to build this project.

Required Components

The following components are required to build this project;

  1. Arduino Uno
  2. Nokia 5110 LCD 
  3. Small Breadboard
  4. Buttons
  5. Jumper Wires
  6. Wires

As usual, the exact components used for this tutorial can be bought via the link attached to each of them.

Schematics

The schematics for this project is quite simple, connect the components as shown in the schematics below.

Schematics

To make the schematics easy to follow, a pin map of the connection between the Arduino Uno and the Nokia 5110, which isthe major component, is shown below.

LCD - Arduino
RST - D12 
CE  - D11 
DC  - D10 
DIN - D9 
CLK - D8 
VCC - VCC
LIGHT - D7
GND - GND

Looking at the schematics, you will see that the push buttons are connected to the Arduino without the common pull-up or pull-down resistors. This is because we will use the Arduino’s internal pull-up resistor. You can read more about using pull-up/down resistors here. If you have any challenges understanding the concept, do reach out to me via the comment section.

With the connections all done, we can now proceed to the code for the project. It might be useful to go over the entire connection one more time to ensure everything is as it should be.

Code

To be fair, the code for today’s tutorial is a little bit complex and while I will do my best to break it down and ensure you understand the basics, it might take you building your own menu to fully grab the concept. The code for today is heavily dependent on two major libraries; The Adafruit GFX library and the Adafruit Nokia 5110 LCD Library. The Adafruit GFX library is probably one of the libraries we use the most in our tutorials. It makes it easy to display graphics and perform simple animations on supported displays. The Nokia 5110 LCD library, on the other hand, reduces the amount of work and code required to interact with the LCD.

We start the code as with other sketches by including all the libraries required for the project which in this case, are the Adafruit GFX and Nokia 5110 LCD libraries.

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Next, we declare the pins to which the buttons are connected and also declare all the variables that we will use for the project. I believe the variable name provides enough insight into what each variable stands for.

boolean backlight = true;
int contrast=50;

int menuitem = 1;
int page = 1;

volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;

int downButtonState = 0;
int upButtonState = 0;  
int selectButtonState = 0;          
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

Next, we write the void setup function. Here we declare all the pins to which the push buttons are connected as inputs and set digital pin 7 as output since the Light pin of the LCD is connected to it. This pin will be used to turn the backlight on/off later on.

void setup() {

  pinMode(2, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(0, INPUT_PULLUP);
  pinMode(7,OUTPUT);

After setting the pin modes, we initialize serial communication, initialize the screen, and set the screen contrast to 50 which serves as a default value (to be varied later using the menu buttons) and use the display.display() function to apply the changes.

Serial.begin(9600);

display.begin();      
display.setContrast(contrast); //Set contrast to 50
display.clearDisplay(); 
display.display();

Next, we write the void loop function. We start the void loop function by calling the drawmenu() function which contains the code to create the menu objects on the screen.

void loop() {
 
 drawMenu();

Next, we read the buttons to check if any of them has been pressed.

downButtonState = digitalRead(2);
selectButtonState = digitalRead(1);
upButtonState =   digitalRead(0);

checkIfDownButtonIsPressed();
checkIfUpButtonIsPressed();
checkIfSelectButtonIsPressed();

The state of the buttons is then fed into a series of if-else statements which checks which button was pressed and which of the screens is currently being displayed to determine what action is done next. For instance, the first if statement checks if the menu is currently on page 1 and if the up button is pressed. If this is the case, it then checks the position of the menu cursor and adjusts it accordingly.

  if (up && page == 1 ) {
    up = false;
    menuitem--;
    if (menuitem==0)
    {
      menuitem=3;
    }      
  }else if (up && page == 2 ) {
    up = false;
    contrast--;
    setContrast();
  }


  if (down && page == 1) {
    down = false;
    menuitem++;
    if (menuitem==4) 
    {
      menuitem=1;
    }      
  }else if (down && page == 2 ) {
    down = false;
    contrast++;
    setContrast();
  }


  if (middle) {
    middle = false;
    
    if (page == 1 && menuitem==2) 
    {
      if (backlight) 
      {
        backlight = false;
        turnBacklightOff();
        }
      else 
      {
        backlight = true; 
        turnBacklightOn();
       }
    }

    if(page == 1 && menuitem ==3)
    {
      resetDefaults();
    }


else if (page == 1 && menuitem==1) {
      page=2;
     }
else if (page == 2) {
      page=1;
     }
   }
   
  }

The remaining part of the sketch are the functions called within the loop function.

void drawMenu()
  {
    
  if (page==1) 
  {    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("MAIN MENU");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(0, 15);
   
    if (menuitem==1) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.print(">Contrast");
    display.setCursor(0, 25);
   
    if (menuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }    
    display.print(">Light: ");
    
    if (backlight) 
    {
      display.print("ON");
    }
    else 
    {
      display.print("OFF");
    }
    display.display();
    
    if (menuitem==3) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 35);
    display.print(">Reset");
    display.display();
  }
    
 
  else if (page==2) 
  {
    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("CONTRAST");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(5, 15);
    display.print("Value");
    display.setTextSize(2);
    display.setCursor(5, 25);
    display.print(contrast);
 
    display.setTextSize(2);
    display.display();
  }
  
  }

  void resetDefaults()
  {
    contrast = 50;
    setContrast();
    backlight = true;
    turnBacklightOn();
  }

  void setContrast()
  {
    display.setContrast(contrast);
    display.display();
  }

  void turnBacklightOn()
  {
    digitalWrite(7,LOW);
  }

    void turnBacklightOff()
  {
    digitalWrite(7,HIGH);
  }


The complete code for the project is available below and attached under the download section at the end of the tutorial.

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

boolean backlight = true;
int contrast=50;

int menuitem = 1;
int page = 1;

volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;

int downButtonState = 0;
int upButtonState = 0;  
int selectButtonState = 0;          
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

Adafruit_PCD8544 display = Adafruit_PCD8544( 5, 4, 3);

void setup() {

  pinMode(2, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(0, INPUT_PULLUP);
  pinMode(7,OUTPUT);

  digitalWrite(7,LOW); //Turn Backlight ON
  
  Serial.begin(9600);
  
  display.begin();      
  display.setContrast(contrast); //Set contrast to 50
  display.clearDisplay(); 
  display.display();   
}

void loop() {
  
  drawMenu();

  downButtonState = digitalRead(2);
  selectButtonState = digitalRead(1);
  upButtonState =   digitalRead(0);
 
  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();

  if (up && page == 1 ) {
    up = false;
    menuitem--;
    if (menuitem==0)
    {
      menuitem=3;
    }      
  }else if (up && page == 2 ) {
    up = false;
    contrast--;
    setContrast();
  }


  if (down && page == 1) {
    down = false;
    menuitem++;
    if (menuitem==4) 
    {
      menuitem=1;
    }      
  }else if (down && page == 2 ) {
    down = false;
    contrast++;
    setContrast();
  }


  if (middle) {
    middle = false;
    
    if (page == 1 && menuitem==2) 
    {
      if (backlight) 
      {
        backlight = false;
        turnBacklightOff();
        }
      else 
      {
        backlight = true; 
        turnBacklightOn();
       }
    }

    if(page == 1 && menuitem ==3)
    {
      resetDefaults();
    }


else if (page == 1 && menuitem==1) {
      page=2;
     }
else if (page == 2) {
      page=1;
     }
   }
   
  }

  void checkIfDownButtonIsPressed()
  {
    if (downButtonState != lastDownButtonState) 
  {
    if (downButtonState == 0) 
    {
      down=true;
    }
    delay(50);
  }
   lastDownButtonState = downButtonState;
  }

void checkIfUpButtonIsPressed()
{
  if (upButtonState != lastUpButtonState) 
  {
    if (upButtonState == 0) {
      up=true;
    }
    delay(50);
  }
   lastUpButtonState = upButtonState;
}

void checkIfSelectButtonIsPressed()
{
   if (selectButtonState != lastSelectButtonState) 
  {
    if (selectButtonState == 0) {
      middle=true;
    }
    delay(50);
  }
   lastSelectButtonState = selectButtonState;
}

  
  void drawMenu()
  {
    
  if (page==1) 
  {    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("MAIN MENU");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(0, 15);
   
    if (menuitem==1) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.print(">Contrast");
    display.setCursor(0, 25);
   
    if (menuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }    
    display.print(">Light: ");
    
    if (backlight) 
    {
      display.print("ON");
    }
    else 
    {
      display.print("OFF");
    }
    display.display();
    
    if (menuitem==3) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 35);
    display.print(">Reset");
    display.display();
  }
    
 
  else if (page==2) 
  {
    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("CONTRAST");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(5, 15);
    display.print("Value");
    display.setTextSize(2);
    display.setCursor(5, 25);
    display.print(contrast);
 
    display.setTextSize(2);
    display.display();
  }
  
  }

  void resetDefaults()
  {
    contrast = 50;
    setContrast();
    backlight = true;
    turnBacklightOn();
  }

  void setContrast()
  {
    display.setContrast(contrast);
    display.display();
  }

  void turnBacklightOn()
  {
    digitalWrite(7,LOW);
  }

    void turnBacklightOff()
  {
    digitalWrite(7,HIGH);
  }


Demo

Go through the schematics one more time to ensure everything is connected as it should be, then connect the Arduino to your computer and upload the code. After a couple of seconds, you should see the menu displayed on the LCD and it should respond to the push buttons when pressed.

Demo

That’s it for today’s tutorial. Thanks for reading. While this is certainly not a project that is useful on its own, it will be a fantastic feature to add to your existing or new projects. Feel free to reach out via the comment section with your questions, suggestions, and comments on today’s tutorial. I will try to reply to them as soon as possible.

The video version of today’s tutorial is available on Youtube.

Midas Displays introduce range of HDMI TFT displays

 

Display manufacturer and supplier, Midas Displays, has announced the introduction of a range of plug and play HDMI TFT display modules. The new displays are available in three different size and resolution options, have excellent brightness and contrast performance, and feature a fully integrated interface PCB.

With the addition of a Raspberry Pi SBC, the Midas Displays HDMI TFT display module becomes a fully functional, easy-to-use LCD monitor. The integrated interface PCB has a 40-pin GPIO interface and a standard 19-pin type-A HDMI interface connector, enabling direct connection of a Raspberry Pi SBC. The HDMI TFT modules can also easily be used with many other single board computers. These key features enable the HDMI TFT displays to be used with any external HDMI input source.

Midas Displays also supports interconnect solutions to enable enhanced connectivity of the Raspberry Pi to the HDMI TFT display module. A bespoke HDMI to HDMI interconnect board connects the HDMI output of the Raspberry Pi to the display mounted interface PCB, and a Type-A USB to Micro-B USB cable enables touch-screen functionality to be implemented.

All three display modules feature excellent optical performance which ensure bright, clear and concise images, high brightness white LED backlights, and a 16:9 Landscape aspect ratio. The operating temperature range of -20°C to +70°C enables reliable operation in extreme temperature environments.

For applications that require a dedicated graphical user interface, capacitive and resistive touch-screen options are available for all modules.

Paul Barton, technical director, Midas Displays said,

Our new HDMI TFT display module product range has been designed and produced to meet the needs of engineers and developers in the embedded and industrial market sectors. Our key goals were to provide a simple yet versatile display solution that could be used with an external HDMI input source. The industry standard video interface HDMI, is extensively supported on single board computers, personal computers, industrial equipment and many other embedded applications. Enabling a ‘plug and play’ HDMI TFT display in a range of sizes and resolutions, coupled with a choice of touch-screen options, provides designers with an easy-to-use display solution that is ideal for prototyping and product development.

The three HDMI TFT display modules currently available have the following attributes:

  • The 5.0-inch MCT050HDMI-A features WVGA resolution (800 x 480 pixels), a brightness of 500cd/m² and a contrast ratio of 500:1. The mechanical outline dimensions are 120.70mm (w) x 75.80mm (h) x 21.50mm (d) with an active display area of 108.0mm (w) x 64.8mm (h).
  • The 7.0-inch MCT070HDMI-B features WSVGA resolution (1024 x 600 pixels), a brightness of 600cd/m² and a contrast ratio of 800:1. The mechanical outline dimensions are 164.80mm (w) x 99.80mm (h) x 24.80mm (d) with an active display area of 154.21mm (w) x 85.92mm (h).
  • The 10.1-inch MCT101HDMI-A features WXGA resolution (1280 x 800 pixels), a brightness of 1100cd/m² and a contrast ration of 800:1. The mechanical outline dimensions are 230.56mm (w) x 155.01mm (h) x 25.60mm (d) with an active display area of 216.96mm (h) x 135.6mm (w).

The new Midas Displays 5.0″, 7.0″ and 10.1” HDMI TFT modules have outstanding optical performance and compact mechanical dimensions, enabling these displays to be used in a wide range of industrial equipment and embedded applications. The new HDMI TFT display modules are available directly from Midas Displays, and via Midas Displays sales channel partners and franchised distributors.

PICkitPlus – A programming software that revitalizes the outdated PICkit2 and PICkit3

Microchip’s PICkit2 and PICkit3 are both In-Circuit Debugger/Programmers, designed for programming and debugging Microchip PIC microcontrollers (and occasionally EEPROMs).

The PICkit2 programmer was released back in 2005, and allowed the user to program and debug most of the 8 and 16 bit PIC microcontrollers and dsPIC controllers as well. Its successor, the PICkit3 programmer, was released some years later.

In 2009 and 2012, Microchip stopped providing support for the PICkit 2 and PICkit3 software , respectively.  They released the source code for the Windows GUI software, making it possible for users to update and maintain it themselves. This resulted in the launch of the PICkitPlus software in 2018 by the PICkitPlus team.

The PICkitPlus software is a total replacement for the original PICkit 2 and PICkit 3 software, designed to facilitate programming of any 8-bit PIC microcontroller using a supported programmer (either genuine or clone).  In contrast to the original PICkit software, which doesn’t provide support for the newer 8-bit microcontrollers, PICkitPlus includes support for old chips and new chips alike.

PICkitPlus offers a new reliable alternative solution for Microchip PICkit2 and PICkit3 programmers to support users in programming their hex code into the PIC microcontroller by using this standalone software.

The PICkitPlus software comes in 3 main variants for the PICkit™ 2 and PICkit™ 3 applications called PICkit 2Plus, PICkit 3Plus, and PICkitCommandLine.

  • PICkit 3Plus Graphical user interface application. A specific solution for the PICkit™ 3 In-Circuit Debugger/Programmer and clones
  • PICkit 2Plus Graphical user interface application. A specific solution for the PICkit™ 2 In-Circuit Debugger/Programmer and clone
  • PICkit Command line user interface application.
PICkit Command Line
PICkit Command line user interface application.

The PICkitPlus command line application supports both the PICkit2 and PICkit3 programmers and even potentially clones as well.  It can run alone, but is mainly intended for use with Integrated Development Environments such as Great Cow BASIC. The PICkitPlus command line software does not support EEPROM chips; although the PICkitPlus GUI software does.

A common problem with using the old PICkit2 and PICkit3 software is their inability to work with very old or very new Microchip microcontrollers; but the PICkitPlus software comes with new programming protocols that support the various classes of Microchip’s 8-bit PIC microcontrollers. Not only does it support the currently released chips, but it also has an updated microcontroller database which helps to keep the software current with future microcontroller products.  So if you are concerned about future compatibility, then PICkitPlus will be your best bet.

The old Microchip software has not been updated for many years, suffers from unreliability and lack of support.  So, things failed to work, you were pretty much on your own.  However, PICkitPlus comes with improved reliability and a better user interface; and since support is readily available you can always be sure to get help with any issues that might arise.

PICkitPlus Key features:

  • Standalone programming – no internet connection required
  • Supporting up to 932+ type of popular Flash PIC MCU, includes PIC10F, PIC12F, PIC16F, PIC18F, PIC24, PIC32, dsPIC30 and dsPIC33 family
  • Manages Microchip HEF and SAF memory
  • Programming CAN I/O Expander & KEELOQ series: MCP2502X/5X & HCSxx
  • Read and write operation for serial EEPROM 11LCxx, 24LCxx, 25LCxx and 93LCxx
  • Supported operating systems (32bit/64bit): Windows XP ,Windows Vista, Windows 7, Windows 8, Windows 10
  • New programming protocol support for new classes of 8-bit Microchip PIC microcontrollers
  • Updated and managed database for 8-bit Microchip PIC microcontroller
  • Improved user interface, help, guidance and direct access to the 8-bit Microchip PIC microcontroller database.
  • USB (Full speed 12 Mbits/s interface to host PC)
  • Supports low voltage (2.0v to 5.0v range) where supported by the programmer
  • Read/write program and data memory of microcontroller
  • Erase of program memory space with verification
  • Supports Low Voltage Programming (LVP) and High Voltage Programming (HVP).
  • Supports VDD-First and VPP-First programming modes.

 

PICkitPlus other features:

  • Safe Usage Enhancements:
    • Supports disabling part auto-detection to ensure circuits are not incorrectly powered-up
    • Supports selection of recently used microcontrollers
    • Supports Windows user profiles for ini files
    • Same microcontroller database across all three software components
    • Does not require any change to PICkit Operating system
  • Command Line Software:
    • All new solution to enable handling of capabilities
    • New command line structure and options
    • Same microcontroller database as GUI software
    • Automatic loading of PICKit Operating System
    • Improved voltage control during programming and post programming with appropriate safety checks
    • Supports IDEs with hold-on-exit
    • Write/Read and Verify options
    • Control power on and off independent of programming state
    • OSCCAL support
    • Meaningful exit error levels for IDE and batch file integration
    • Log files for IDE integration
  • HEF & SAF Operation:
    • Managing Microchip HEF (High Endurance Flash Memory) and SAF (Storage Area Flash) memory could not be easier with PICkitPlus
    • Providing read, write, erase, verify, save and import with ease
    • Obviates the need for cutting and slicing of hex files
    • Automatically merge HEF or SAF into source program
  • Bandgap Configuration:
    • The Bandgap is an adjustable voltage level used for Brown-out Detect (BOD)/low voltage
    • BOD and Bandgap can be enabled to track down short power spikes and resolve Brown-out situation
    • Simple setup by clicking the [BandGap] text
    • Fixing default bandgap error on PICkitPlus software when BOD is enabled
    • Target chips: PIC12F629,  PIC12F675, PIC16F630 and PIC16F676
  • User Interface:
    • Simplification of user interface to improve stability and crashes
    • Check for latest version of the microcontroller database
    • Part type, revision and family displayed
    • Tooltips show memory size, eeprom size, HEF/SAF size and  UserID location and type
    • Fast access to microcontroller databases listing
    • Improved handling of errors when using Auto Import Hex option
    • Improved color coding of events and language
    • Improved handling of sound events (they now work…)
  • Installer:
    • Installer shows version of software and microcontroller database
    • Supports from Windows XP all the way to Windows 10
    • Contains help files, list of supported microcontrollers and user guides
    • Integration guides for popular IDEs

Introduction Video

PICkitPlus provides support for over 932 types of popular Flash PIC MCU including the likes of PIC10F, PIC12F, PIC16F, PIC18F, PIC24, PIC32, dsPIC30, and dsPIC33 family. Managing of the Microchip HEF and SAF memory just become easier with support for reading, write, erase, verify, save and imports. Read and write operation for serial EEPROM 11LCxx, 24LCxx, 25LCxx and 93LCxx is available. It can also easily integrate with popular IDEs. Programming of CAN I/O Expander & KEELOQ series: MCP2502X/5X &HCSxx are also supported.

PICkitPlus supports Low-Voltage (2v to 6v) Programming (LVP), and High-Voltage (9v to 12v) Programming (HVP). Brown-out Detect and Bandgap can be enabled to track down short power spikes and resolve Brown-out situation.

Currently, OS support is limited to Windows 10, Windows 8.1, Windows 8.0, Windows 7 and Windows XP; although Anobium plans to add support for Linux and MacOS in due course.

More information about the features of the PICkitPlus is available www.pickitplus.co.uk, and the PICkitPlus software is also available for purchase from Piccircuit for $12 or direct from www.pickitplus.co.uk for the complete package.

Read the Design Engineer’s Guide to Pressure Sensors from Avnet

The advent of smaller, lower-cost and lower-powered pressure sensors has generated a new wave of innovation, increasing efficiency and performance both in the sensors themselves and their applications. The worldwide pressure sensor market is set to grow to $11.4 billion by 2024, as demand for these technologies increases.

Selecting the right sensor technology for your application from the wide variety now available on the market can be challenging. So we’ve created The Design Engineer’s Guide to Pressure Sensorsto help you understand the types of sensors in common use, their operating principles, and their modes of use (absolute, gauge, or differential).

Whether you’ve designed with pressure sensors before or not, this field guide is intended to provide a comprehensive overview of the technologies, insight into the various applications, and assistance in finding the sensor that’s right for your design.

via oemsecrets.com

Getting Started with ESP32

ESP32 Module

Over the last few articles, we have covered the use of ESP8266 boards for building several WiFi based projects. For today’s tutorial, we will look at it’s recently released successor; the ESP32.

As mentioned in previous tutorials, ESP-12e module popularly referred as the nodeMCU came at a time where makers were struggling with the difficulties around the use of the ESP-01 modules. The ESP-01 modules were not breadboard compatible, had power issues, and could barely be used in a standalone application where more than two GPIOs are required. The NodeMCU solved all these issues adding additional features and it immediately became a darling of the maker community. However, the ESP8266 equally had its own limitations and like every good product, there was a need to improve it. This improvement came in the form of the ESP32.

Getting Started with ESP32 – [Link]

Getting Started with ESP32

Over the last few articles, we have covered the use of ESP8266 boards for building several WiFi based projects. For today’s tutorial, we will look at it’s recently released successor; the ESP32.

ESP32 Module

As mentioned in previous tutorials, ESP-12e module popularly referred as the nodeMCU came at a time where makers were struggling with the difficulties around the use of the ESP-01 modules. The ESP-01 modules were not breadboard compatible, had power issues, and could barely be used in a standalone application where more than two GPIOs are required. The NodeMCU solved all these issues adding additional features and it immediately became a darling of the maker community. However, the ESP8266 equally had its own limitations and like every good product, there was a need to improve it. This improvement came in the form of the ESP32.

DOIT DEVKIT V1 ESP32 Based Board

The ESP32 is way advanced compared to the ESP-12e. Among several features, the ESP32 packs a CPU core, a faster Wi-Fi, more GPIOs (especially increased analog pins that we all desired), supports Bluetooth 4.2 and Bluetooth low energy. The board also comes with touch-sensitive pins, alongside a built-in hall effect and temperature sensors. While both boards are quite cheap, the ESP32 ($6 – $12) costs slightly more than the ESP-12e ($3-$6).

The table below provides a more detailed comparison between the two modules.

ESP8266
ESP32
Microcontroller
Xtensa Single-core 32-bit L106
Xtensa Dual-Core 32-bit LX6 with 600 DMIPS
Wi-Fi Module
HT20
HT40
Bluetooth Support
X
Bluetooth 4.2 and BLE
Frequency
80 MHz
160 MHz
SRAM Availability
X
Flash Availability
X
GPIO
17
36
Hardware /Software PWM
None / 8 channels
None / 16 channels
SPI/I2C/I2S/UART
2/1/2/2
4/2/2/2
ADC Resolution
10-bit
12-bit
CAN Support
X
Ethernet MAC Interface
X
Touch Sensor
X
Temperature Sensor
X
Hall effect sensor
X
Working Temperature
-40ºC to 125ºC
-40ºC to 125ºC

Today’s tutorial will not only provide a comparison between these boards, but it will also show you how to put the ESP32 board to use. We will look at setting up the ESP32 module for programming with the Arduino IDE and we will run the Arduino blink example on the board. This will allow you to setup all that is needed for the exciting projects we will build with this new board over the next few tutorials.

Required Components

The following components are required for this tutorial;

  1. ESP32 based development board ( I will be using the DOIT DEVKIT V1 board)
  2. Breadboard
  3. Jumper wires.
  4. 100 Ohms resistor
  5. LED

The tutorial should work with any ESP32 based board. The choice of the DOIT DevKIT V1 is as a result of its availability and general popularity.

Schematics

We will connect a LED to the ESP32 such as that the LED blinks as the popular blink example.

Connect the LED to the ESP32 as shown below.

Schematics

Programming the ESP32

Like the ESP-12e modules and boards, the ESP32 modules and boards can also be programmed with LUA on the ESPlorer IDE or with C/C++ on the Arduino IDE. However, like the ESP8266, we will need to install the ESP32 core and board files on the Arduino IDE before it can be used to upload code to the ESP32.

The process of installing the ESP32 core on the Arduino IDE is similar to the one we followed to install the ESP8266 Arduino Core.  Follow the steps below:

– Open the preferences window from the Arduino IDE. Go to File > Preferences

– On the preferences window, locate the “Additional Board Manager URLs” text box and enter https://dl.espressif.com/dl/package_esp32_index.json into the field as shown below. As you may have other URLs there already, separate the URLs from each other using a comma (“,”) and click OK when done.

Insert URL

– Next, open the Arduino board manager. Go to tools > Boards > Boards manager

– When the board manager opens up, enter ESP32 into the search bar and scroll to the bottom, you will see “ESP32 by Espressif systems”, click on install.

Click on Install

With that done, you should now see quite a number of ESP32 based boards under the Arduino Board list.

ESP32 Boards listed under the Board Manager

You should also be able to see quite a number of libraries installed alongside the core. The libraries are pretty extensive and should cover for most of the tasks you might need to do with the ESP32.

At this point, it is important to note that the ESP32 is completely different from the ESP8266, and the code for ESP8266 based projects will not work directly on the ESP32 until necessary modifications are made. Also, most of ESP8266 compatible libraries are not compatible with the ESP32 so quite a number of modification may be required. This is one of the downsides to building projects based on the ESP32.

With that done, we can now write the code for the demo project.

Code

The code for this tutorial is the blink example we are all familiar with.

Load the example by going to tools and selecting your ESP32 board (Mine is the DOIT ESP32 DEVKIT V1) then go to file > examples > built-in examples > basics > blink. This will open the blink example.

While I believe most people understand the blink code, to stick to the tradition, I will do a brief explanation.

We will make a slight modification to the code since we connected our LED to a pin different from the one on which the ESP32’s built-in LED is located. We start by declaring that pin.

int LED = 2;

Next is the void setup() function. All we need to do here is set the pin to which our led is connected as an output.

void setup() 
{
  pinMode (LED, OUTPUT);
}

Lastly, the void loop function. Here we create lines of code to turn the LED on and off after certain intervals to create the blink effect.

void loop() 
{
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

The complete code for the project is available below.

int LED = 2;
void setup() 

{
   pinMode (LED, OUTPUT);
}

void loop() 
{
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

Demo

Connect the LED to the DOIT DEVKIT as illustrated in the schematics above and then connect the board to your computer and upload the code. You should see the LED blinking. It’s important to note that most ESP32 based boards have the “boot” button which must be pressed once the code is uploaded to the board.

That’s it for this tutorial guys. Over the next few tutorials, we will build more interesting and challenging projects using the WiFi and Bluetooth functionalities of the ESP32.  Do reach out via the comment section if you have any question(s).

16 x 2 LCD controlled via power line

Vinod blogged about a 16×2 LCD with data over power line:

Then I just thought why even 1 wire for data? Because we can easily multiplex the 1 wire data line with the Vcc line by keeping a diode + capacitor combination towards the LCD power supply pin. I am using an arduino board to do the serial to parallel conversion + some packet parsing and lcd backlight brightness control. I am not a huge fan of Arduino but for this simple proof of concept, I don’t want to bring out a Makefile folder with muliple files. I picked the Arduino UART RX as the serial receiver. RX pin is connected directly to the input Vcc, but before the schottky diode.

16 x 2 LCD controlled via power line – [Link]

Sony Releases 0.5″ OLED Microdisplay with 1600 x 1200 resolution

Sony Corporation today announced the upcoming release of the ECX339A OLED Microdisplay featuring UXGA (1600 x 1200 resolution), the highest in class for a 0.5-type. This product achieves the world’s smallest pixel pitch of 6.3μm by leveraging Sony’s OLED display technology and miniaturization technology, enabling a resolution 1.6x higher than the previous model1. By employing a new drive circuit design that operates on half the voltage of the previous model1, the new product achieves the same level of low-power operation as its predecessor but with much higher resolution. When paired with Sony’s original driving system2, a frame rate up to 240 fps is supported—double that of previous product1.

Enhancing the resolution on microdisplays has traditionally presented problems such as deteriorating image quality due to decreased pixel pitch and inferior viewing angle properties. The new product features optimized transistors layout and process to address uneven characteristics and loss of withstand voltage, the issues associated with transistor miniaturization. The Sony original variation compensation circuit also enhances picture quality. Additionally, the color filter is deposited directly on the silicon substrate, reducing its distance from the light emitting layer, and the filter’s color array has been modified. This helps to secure the viewing angle properties while achieving high resolution.

Comparison of images on OLED Microdisplays. New product (UXGA, left) and previous product (QVGA, right)

OLED Microdisplays are widely used in digital camera electronic viewfinders (EVF) for their superior high contrast, high color gamut, and high-speed responsiveness. Sony, having achieved this high resolution and high frame rate, now offers even more realistic image display and accurate capture of subjects for use in high-end cameras that demand extremely high image quality.

Going forward, Sony expects this high-definition OLED Microdisplay to be employed in a diverse range of fields and applications such as AR (augmented reality) and VR (virtual reality) head-mounted displays.

Main Features

Measures to secure viewing angle even with smaller pixel pitch
New product (UXGA, left) and previous product (QVGA, right)
  1. High-resolution UXGA in a 0.5-type – The new product has achieved the world’s smallest pixel pitch of 6.3μm by leveraging Sony’s proprietary OLED display technology and miniaturization technology, and has superior resolution 1.6x higher than the previous model*1. Generally, transistor miniaturization results in characteristic variation and reduced withstand voltage. This product uses a Sony original compensation circuit and optimized layouts and process for each individual transistor to address these adverse effects. Furthermore, the color filter is deposited directly on the silicon substrate, reducing its distance from the light emitting layer, and the filter’s color array has been modified to secure the viewing angle properties while achieving high resolution.
  2. High-speed frame rate – A new drive circuit design supports a high frame rate of up to 240 fps*2, nearly double that of its predecessor*1. This has made it possible to capture fast-moving subjects in the viewfinder with higher accuracy, so users will not miss a photo opportunity, delivering a more comfortable shooting experience. In head-mounted display devices, this will help to improve image delay issue for items superimposed on real-world vision of AR and to avoid motion sickness during usage of these kinds of devices.
  3. Low power consumption – By employing newly-designed peripheral circuits that operate on half the voltage of previous model*1, the new product delivers the same low-power operation as its predecessor when operating at the same frame rate, despite the nearly 1.6x increase in the number of pixels.
Name ECX339A
Display Size 0.5 type (12.6 mm Diagonal length)
Resolution UXGA(1600×RGB×1200)
Pixel pitch 6.3μm
Max. frame rate 120 fps (progressive) / 240 fps (dual-line progressive)
Power consumption (200cd/m2) 310 mW @ 60 fps (progressive) / 120 fps (dual-line progressive)
Video interface LVDS/Sub-LVDS
Max. luminance 1,000cd/m2
Contrast 100,000:1 or higher
Color gamut (u’v’) sRGB ratio: 110%

Footnotes

  • *1 Compared with the Sony OLED Microdisplay ECX337A (0.5-type QVGA (1280×960)).
  • *2 Driving method of dual vertical line simultaneously (“Dual-line progressive” driving technique)
TOP PCB Companies