-
Reading OBD2 data without ELM327, part 2 – K-Line
K-Line is another popular OBD2 interfacing standard, that has been used in European cars before CAN bus became common. There are a couple of physical variations (K-line, K+L, KKL) and slightly different protocols (KWP2000 or Keyword Protocol, and ISO 9141) running on those lines. Basically all you need to …
Read more... -
Reading OBD2 data without ELM327, part 1 - CAN
All modern cars have an OBD2 diagnostic connector that allows reading many engine and drivetrain parameters like RPM, vehicle speed, temperatures etc.
Most of car interfaces use a special protocol translating chip like ELM327 or STN1110 to convert different vehicle protocols (that depend on the age and brand of the …
Read more... -
FreeRTOS on Kinetis E Cortex M0+ : easy porting tutorial
FreeRTOS is a popular, open-source operating system that can run on a variety of microcontrollers. This post shows how to make a minimal working setup with two tasks on a new MCU without starting from a complete demo code or code generators (like Processor Expert) on an inexpensive development board …
Read more... -
XMEGA power down mode for battery powered devices
This post describes how to implement firmware-controlled device power switching on an XMEGA. I am working on a portable device that is powered from a Li-Ion cell, has an USB socket for charging, MCU, couple of LEDs and a button. I wanted to keep the design as simple as possible …
Read more... -
Kinetis - relocating variables to upper SRAM
NXP Kinetis microcontrollers have an inconvenient architectural feature - split RAM. The memory is split into two areas of equal size. You can run into this issue when the size of all RAM variables (data+bss) approaches half size of available SRAM. It manifests itself with a linker error looking similar …
Read more... -
Practical NodeMCU endurance with a big NiCd battery pack
Some time ago I have built a WiFi thermometer with a NodeMCU and a 6Ah recycled nickel-cadmium battery. WiFi is probably the least power-efficient communication methods but I was curious how long could a NodeMCU run from a big battery pack.
It took some time to get meaningful data...

After …
Read more... -
XMEGA USART driver with TX DMA
This is a quite universal, non-blocking UART driver for XMEGA. It supports both transmission (with optional DMA) and reception. Receive side can deliver callbacks whenever a complete line (terminated with
Read more...\n) is received or received bytes can be retrieved one-by-one from a ringbuffer (more useful for GPS units). This driver … -
XMEGA high-performance SPI with DMA
I developed an universal SPI driver for XMEGA line of MCU for a battery powered device where power efficiency was important. To get anything started on new hardware I have started with a simpler code first which uses interrupts and then I began looking at using XMEGA's DMA controller (that …
Read more... -
XMEGA and HD44780 LCD
Character LCD are one of the easiest and cheapest way of adding output to a microcontroller system. The world of character LCDs has mainly standarized on HD44780 controller chip, which was designed to be interfaced with the rest of the system by a parallel bus but today simple bit-banging does …
Read more... -
Making call graphs with GCC, egypt and cflow
Call graphs are a visual way of showing relations between functions in a piece of code. They can be useful to analyze dependencies and to get basic understanding of a large, unfamiliar codebase. Tracing program flow can also help in finding bugs. I will use my antenna switch and rotator …
Read more...