Monthly Archives: December 2011

AVR GCC LCD library allows connecting pins in any order

Probably some of you are struggling in finding a proper LCD driver that would work on any circuit. Just wanted to point out that I found some time to improve my current LCD library so it would support a mixed pin connection case. Earlier you had to connect LCD in pretty strict way where pins had to be aligned and connected to single AVR port. Sometimes this can’t be done due to various reasons – you want to use those pins for other alternative functions or simply you want to trace your PCB better etc.

In this updated version of library there are two more modes added : LCD_4BIT_M and LCD_8BIT_M that allow controlling LCDs either in 4 or 8 bit mode but with any pin connection layout. So data pins and control pins can be connected to any pin number and any port. Couple examples should give some clue on how to start using it. If you used this library for some project you only need to modify header file while project source code can remain same. Download LCD library here.

Modeling of analog part for DDS3 signal generator

When building AVR DDS2 signal generator there were lots of discussions about signal conditioning in analog part of device. First argument was that LM358 wasn’t the best choice for this purpose. Another one pointed to sine wave that weren’t smooth enough.

As you can see there are some dents on it. Other waveforms also are distorted especially when higher voltages are selected. This definitely asks for better analog part. Some people suggested to replace LM358 with OPA2134, but it seems to be quite expensive choice. In my opinion low noise general purpose op-amp can be great too. I’m gonna give a try to Texas Instruments TL074 low noise op-amp. It is low power, high slew rate (13V/us) IC – almost five times faster than LM358 and for same reasonable price. Continue reading

FreeRTOS on STM32

High density line of STM32 microcontrollers have quite a bunch on features that can be used in user programs. The more features you add to source the more complicated program becomes and this way it starts to be difficult to keep up with all things. Using only main loop and interrupts becomes time consuming task to manage. If you don’t want to struggle in tuning things up manually you can use one of many real time operating systems (RTOS). They are great when you need lots of separate functions to run in parallel so no task would be missed. RTOS scheduler takes care of giving each task a decent time to perform. There are lots of great RTOS systems around. Many of them are free and opensource.

It happens so that I love using FreeRTOS which has quite long history and is flexible enough to fit multiple types of hardware. You can check out my recent demo on Atmega128. I encourage you to give a try to other RTOS systems like ChibiOS, BeRTOS, and many more. But lets stick with FreeRTOS. Simply speaking FreeRTOS is quite simple and easy to use. It has practically most of features you’d look for in RTOS. Some of key features would include preemptive, cooperative and hybrid scheduler, task and co-routine support, queues, semaphores and mutexes for task synchronisation and communication. Many demos, many ports to to get started with. Continue reading

New on WinAVR Tutorial New on WinARM Tutorial