M0AGX / LB9MG

Amateur radio and embedded systems

  • 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... voltage trace

    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 \n) is received or received bytes can be retrieved one-by-one from a ringbuffer (more useful for GPS units). This driver …

    Read more...

  • 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...