Creating a new project with Eclipse for a microcontroller these days is fairly easy, and I have the choice if I want to start the project with C or C++:
Choice of C and C++ for a new project
Still the embedded microcontroller world is dominated by C and not C++. So while it is easy to start with a C++ project, most vendor provided example or tutorial project are C projects. So how can I transform such project to C++?
In an earlier tutorial I introduced using I2C with the NXP LPC55S69 on OKdo E1 board to read a Bosch BME280 environmental sensor on a Mikroe Weather Click board. The MCUXpresso Clocks, Pins and Peripheral Config tools were used to get it running. It’s all for my Weather Station project that I’ve been working on during these months of lockdown. It is starting to take shape – as you can see from the photograph:
Now I really need to start reading and writing to the BME280 sensor, and that means using the I2C driver in the lpcxpresso55s69 SDK. And so this week I’ll provide a forensic examination of the most commonly-used I2C function call.
I want to share with you a little embedded trick that I use to improve the reliability of my code. And in addition to improving reliability, the technique can be used to schedule any event to occur ‘sometime in the future’. It uses the MicroTick (UTICK) timer found on the NXP LPC55S69 microcontroller, and could be applied to any device with a simple timer.
The MicroTick timer is an elegant, thing of beauty. But there is not a driver example built into the lpcxpresso55s69 SDK, and I believe that the timer is not widely used. That means we need a tutorial!
This is a follow-up article of my earlier project presented in “FatFS, MinIni, Shell and FreeRTOS for the NXP K22FN512“. I wanted to extend it with a USB MSD (memory stick) device: The USB storage device gets automatically mounted, and depending on a configuration (.ini) file on the memory device I can perform various actions, for example automatically copy data from the SD card to the USB device. For example the system logs data, and to get the data I insert the memory stick, it copies the data on it and automatically unmounts it, and I can remove the memory stick.
The NMI is a special interrupt on ARM Cortex-M architecture: as the name indicates, it cannot be ‘masked’ by the usual ‘disable interrupts’ flags (PRIMASK, BASEPRI), similar to the Reset signal.
cortex-m-vector-table (Source: adapted from arm.com)
Dealing with the reset signal is kind of obvious, and most designs and boards have it routed to a reset button or similar. The NMI is less obvious if you don’t pay attention to it: most ARM-Cortex implementations and boards have the NMI signal routed to a pin and are ‘hiding’ it in the schematics behind a normal GPIO pin or port: if you don’t pay attention to the NMI functionality, the board might not work as intended.
As promised I’m going to share more details about the “60 Billion Lights” project. It is about a project to build a piece of electronics behind a 100×50 cm canvas to show animations or to display information like temperature, humidity, weather, time or just any arbitrary text.
An essential tool especially developing larger applications or distributed firmware is to use logging. This article presents an open source logging framework I’m using. It is small and easy to use and can log to a console, to a file on the host or even to a file on an embedded file system as FatFS.
I selected the Bosch BME280 environmental sensor as the heart of my OKdo E1-based weather station. It is convenient to use, and I can prototype with the Mikroe Weather Click board MIKROE-1978. But the sensor is accessed over I2C, and that is my least favourite of the communication interfaces. In this short tutorial, I show you how the MCUXpresso Config tools (Pins, Clocks, Peripherals) are used to set up the I2C driver from the MCUXpresso lpcxpresso55S69 SDK. And very quickly, I am able to communicate with the BME280 sensor.
FreeRTOS is pretty much everywhere because it is so simple and universal, and it runs from the smallest to the biggest systems. But it still might be that for the microcontroller device you have selected there is no example or SDK support for it from your vendor of choice. In that case: no problem: I show how you could easily add FreeRTOS plus many more goodies to it.
It is one thing to create something ‘cool’ or technically interesting. But it is a completely different story to convince your girlfriend, partner, wife, family (or whatever you can name it) to hang something on a wall in our house or office. Then it is not about technology: it is more about design and art. So here is my attempt to solve that challenge:
Displaying temperature with a painted canvas, stepper motors and 2400 RGB LEDs
At the university we collect and recycle: bottles, batteries, glass, electronics and metal. Somebody did not have any use for a bunch of copper wires. I thought: there must be a better second live for it. This is how it looks:
I’m using the NXP Kinetis K22FN512 in many projects, either with the FRDM-K22F or on the tinyK22: with 120 MHz, 512 KByte FLASH and 128 KByte it has plenty of horsepower for many projects. The other positive thing is that it is supported by the NXP MCUXpresso IDE and SDK. I have now created an example which can be used as base for your own project, featuring FreeRTOS, FatFS, MinIni and a command line shell.
This week I’m sharing my experience “getting started” with the OKdo E1 board. This board, featuring the NXP LPC55S69 150 MHz, dual Cortex M33 core microcontroller was a joy to use. OKdo have provided an online Getting Started guide, and I’ve field-tested this for you. My video tutorial recorded as I follow the guide is less than 7 minutes long… it may take you a little longer if you need to download MCUXpresso IDE or the lpcxpresso55s69 Software Development Kit (SDK) but I am confident that you will quickly have the board up-and-running.
I spend a lot of my time writing software to run on manufacturers’ evaluation (or development) boards. Here on Erich’s site, my blogs have been based on Cortex M33, using NXP’s LPC55S69-EVK and LPC55S16-EVK. Development boards are great – firstly you know that the suppliers’ software should run without issues, and secondly: many of the pin functions are brought out to headers, transceivers, codecs, switches and LEDs. So, whilst it is easy to get started, by definition the boards can be large physically, power hungry, and expensive.
What do you do if you need to embed a high performance microcontroller into your prototype or small production run and don’t have time (or the inclination) to spin out a PCB?
OpenPnP is a great open source framework for building a DIY SMT Pick&Place machine. But it does not stop there: It is possible to use OpenPnP with a commercial pick & place machine, for example the Charmhigh CHM-T36VA. This Chinese machine comes with its own controller software which works but is not that great. The good news is that it is possible to hack and retrofit the machine so it can run the much more powerful OpenPnP.
I will always take the same approach when I receive a new embedded board: firstly I want to see how quickly I can get it up-and-running, then I want to see what it does “out-of-the-box” and finally I want to find out if the board is “useful”. Does it have some features that will inspire me for new projects??
The NXP LPC55S16-EVK has some great features – CAN-FD, dual USB and a high performance Cortex M33 microcontroller, running at 150 MHz. I have an idea to use the LPC55xx series as the basis for a Weather Station. But this is only feasible if the chip has a low power consumption and can run for weeks on a small battery.
Time to run some test code and get my digital multimeter out…
Hi, this is Mark from embeddedpro in the United Kingdom and I’m back with more videos and blogs. In the next few weeks there are two new Cortex M33 development boards becoming available. I’ll blog about my first impressions of the boards, and what I’ve been doing with them. I want my blogs give you some tips, hints and ideas about things that you can do: let me know in the Comments below.