M0AGX / LB9MG

Amateur radio and embedded systems

  • Git - confirmation before commit

    I use Git for version control of all my projects. Every repository of course has many branches that I try to systematize like: stable, devel, experimental, per-feature etc. Many times I have run into the problem of committing my changes to the branch I did not intended to. Git shows …

    Read more...

  • Using the internal EEPROM of STM32L

    Most STM32 microcontrollers feature an internal EEPROM. It is useful for storing settings or calibration data. Regular flash (that stores code) can also be used but the EEPROM can be updated byte-by-byte and is independent from regular flash. This may come handy during application updating, as whole flash can be …

    Read more...

  • Open OBD2 datalogger

    This is a fully open-source car datalogger that reads engine data using the OBD2 interface in real time and stores it on an SD card. It also stores GPS data. All communication is done directly by the MCU without a translator chip like ELM327 or STN1110. The datalogger supports all …

    Read more...

  • Kinetis E - writing to internal flash

    While working on a bootloader for a Kinetis KE06 I obviously ran in to the task of having to write the internal flash memory of the microcontroller. Freescale's driver is over 1500 lines of code, exposes every single bit of the flash controller so the simple operation of erasing a …

    Read more...

  • Making graphics and fonts for embedded systems

    Microcontroller systems with graphical displays require a way to display text. In case of alphanumeric displays (like HD44780) it is easy - just send your ASCII bytes to the display. Graphical displays operate on individual pixels so firmware must generate the graphics and texts on the fly.

    In this post I …

    Read more...

  • Waveshare ePaper display library

    I bought a pair of ePaper displays from Waveshare with the intent to use them in a wireless sensor network for displaying slowly changing data. The reference code from Waveshare is quite clunky and not so easy to re-use so I made my own small, portable graphics library and display …

    Read more...

  • Hard fault in __libc_init_array

    When starting my STM32 makefile project for the first time I encountered a very early hard fault in the startup code. It happened exactly when calling libc function at

    1
    2
    /* Call static constructors */
        bl __libc_init_array
    

    The whole startup code came straight from ST so I did not suspect it …

    Read more...

  • STM32L151 makefile project

    I have published a basic Makefile project for STM32L151 on Github. I plan to develop it into a low-power wireless sensor network using SP1ML modules. The modules contains STM32L151RB MCU with 128K of flash, SPIRIT1 transceiver chip, antenna and passive components. Basically everything needed to make an 868MHz radio network …

    Read more...

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