Efficient and Cheap: Display With STM32L4
by Fernando Koyanagi in Circuits > Microcontrollers
6383 Views, 1 Favorites, 0 Comments
Efficient and Cheap: Display With STM32L4
Today, we’ll talk about three subjects that I absolutely adore: an LCD display that spends little energy, STM32 with Core Arduino, and Arduino Mega Pro Mini. This is an infallible trio for the Internet of Things. I’ll then introduce you to the HT1621 six-digit LCD display and create an example control with a code that works on both the Arduino Mega Pro Mini and the STM32 L432KC. A noteworthy detail is that the source code for the two microcontrollers is exactly the same. I won’t change the pinning either. It’s absolutely fantastic!
Introduction
The HT1621 LCD display has a screen commonly used in multimeters, electronic scales, electronic clocks, thermometers, and electronic measuring devices.
• It has 6 digits with 7 segments
• It uses 3-wire SPI communication
• It has a backlight that’s suitable for dark environments
• Its operating voltage is 4.7 ~ 5.2V
• It consumes 4mA with a backlight
Note that it has more than SIX digits, THREE decimal points, and a battery meter with THREE bars.
Library for Use
We will use the ANXZHU github user library, which is quite simple. It can be seen in the original version in the link below:
https://github.com/anxzhu/segment-lcd-with-ht1621
The library name is a tad strange, so I decided to rename it (files, classes, builders, etc.). Its original name is "A6seglcd”. I replaced this name with "lcdlib".
Library
Add library "lcdlib".
Access the link and download the library.
Unzip the file and paste it into the libraries folder of the Arduino IDE.
C: / Program Files (x86) / Arduino / libraries
Demonstration
Arduino mega assembly
Demonstration
SMT32 assembly
STM32 NUCLEO-L432KC
I want to highlight here that the STM32-L432KC doesn’t have a serial USB converter. Instead, it has a full USB, which uses STMicroelectronics ST-link protocol. Thus, it is quite sophisticated and enables very efficient debugging if you are using IR or Microvision. And being an Arduino Core (MBED, using Microsoft's native tool), it uses highly professional compilers. Do I need to say anything else?
Arduino Mega 2560 PRO MINI
I also love this, as it is a "pure" and "real" Arduino. It's a Mega, with a lot of IOs. But it’s Mini, so it fits anywhere. I like IO everywhere. With this, I like to connect Led, SPI, i2c, etc. In this respect, this Mega is wonderful.
Assembly
In our assembly, the row of the male pin is on the inner side, while the female pin is on the outermost side, facilitating our work and connection with a protoboard. We make the SPI connection, remembering that the Arduino Mega and this Arduino Nano clone have the same pinning, which is the STM32-L432KC.
Program
We will make a very simple program, where we’ll write various symbols (letters, numbers, and points) on the display.
Remember that this program works on both the Arduino Mega Pro Mini and the STM32 L432KC.
Libraries and Variables
We’ll then include the library responsible for communication and instantiate the control of the display. The "const char" function exposes an array table. It is through these vectors that you will make the reference of the character that prints on the display.
#include<lcdlib.h> //biblioteca para controle do display lcdlib lcd; //instancia do controlador do display /*0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, C, c, d, E, F, H, h, L, n, N, P, r, t, U, -, bat, pf,' ',*/ const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75, 0x37, 0x06,0x0F,0x6D,0x02,0x80,0xFF, 0x00 }; /*indice num [i] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 */
Setup
To start Setup, we’ll define the pins, do the initial setup, and set the display cleaning. We determined that the display shows "Hello," and after a certain delay, the display message is cleared.
void setup()
{ lcd.run(2,3,4,5); //[ cs wr data led+] definição dos pinos lcd.conf(); //configuração inicial lcd.clr(); //limpa o display //escreve HELLO lcd.display(10, num[17]); lcd.display(8, num[15]); lcd.display(6, num[19]); lcd.display(4, num[19]); lcd.display(2, num[0]); //fim HELLO delay(1000); lcd.clr(); //limpa o display }
Loop
Here, we create a function called "writeLoop,” which will write the word LOOP on the display, then write all the symbols of our arrray. We also have the "writeBattery" function, which prints the battery markers.
Finally, we have the "lcd.dispnum" command that writes the floating point value.