Choosing right programmer for AVR microcontrollers

Once you start building something with microcontrollers, one thing you need to take in to account is programming adapter. This is a device which allows to upload compiled code in to chip. I don’t know if this is still a fun to build your own DIY programming adapter which is not guaranteed to support all chips nor it will be safe and reliable. AVR microcontroller niche is one of most interesting when talking about programmers. If you take a look at AVRDUDE configuration file you will find that there is about 50 of them. Many of them are DIY while other are official. When I started with microcontrollers I also was looking for cheap and easy to build programming adapter. So I have built several if few years.

Using analog joystick in AVR projects


In many cases joystick manipulator is best choice for user input. Weather it is a game, robot or flying machine – joystick is most intuitive way of controlling them. You can actually find them in gaming controllers like PlayStation or XBOX. The one we are going to interface is Thumb Joystick I purchased some time ago from SparkFun. They are really cheap and as users report it is practically same as in XBOX 360 which can be replaces if one is broken. I didn’t bother making a PCB for it – just used a breakout board for it which also can be found on SparkFun. Simply speaking this joystick is nothing more than two potentiometers and one pushbutton. It is designed so that potentiometers are oriented perpendicular and thus moving stick you can have X and Y axis control. Push button is simply action button which can be activated by …

Continue reading

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 …

Continue reading

FreeRTOS on AVR with external RAM

AVR microcontrollers aren’t best choice to run FreeRTOS scheduler due to low RAM. Atmega128 has only 4K of RAM memory, so this limits FreeRTOS functionality to very basic. Anyway this can be solved by adding extra RAM connected to external memory interface. We have already implemented external memory block of 8K previously so now we can muck around. Lets continue with our previous code having several simple tasks (button state reading, LCD output and LED flash), and add more to it. We are going to set up external RAM for storing heaps. This will allow to store large data buffers without worrying of heap and stack overlap.

Running multiple FreeRTOS tasks on AVR

In previous post we just run a single task. Running RTOS with single task has no meaning at all. This can be easily done with conventional program. But what if we need to have more separate functions. To execute them at exact timing would require separate timer or interrupt. But microcontroller cannot guarantee an interrupt for every tasks. This way it is hard to make code modular and testing can be painful. Using RTOS solves this kind of problem. It allows programming each task as endless loop. Kernel scheduler takes care of assuring each task gets it’s chunk of processing time. Additionally it does bearing the priority systems – more important tasks are executed prior to less important ones. Let us go further with our example code and add more tasks to our FreeRTOS engine. We already have LED flashing task that toggles LED every second. Additionally we are going …

Continue reading

Using FreeRTOS kernel in AVR projects

FreeRTOS is known as Real Time Operating System. Probably it would be too dare call it real-time-os, rather a real time scheduler where applications can be split in to independent tasks that share full processor resources by switching them rapidly it looks like all tasks are executed in parallel. This feature is called multitasking. There are lots of debates on using RTOS on AVR microcontrollers as they are arguable too small for running scheduler. The main limitation is small amount of ram and increased power usage. If you are gonna use lots tasks in application, probably you will run out of ram that is used for saving context when switching between tasks. Consider FreeRTOS only if you use larger scale AVRs like Atmega128 or Atmega256. Surely you can find smaller schedulers that are specially designed for smaller microcontrollers even tiny series. In other hand if you master FreeRTOS it can …

Continue reading

Fresh microcontroller projects from Cornell University ECE 4760

It’s a tradition each spring to keep checking for a new batch of microcontroller projects from Cornell University ECE 4760 class. And here they are – 31 new project with new ideas and designs. They are still using WinAVR/GCC programming tools for their projects. So it’s still good news for hobbies to search for code snippets, implementations. Among all projects you will find projects like portable automated web-based bird trapping mechanism, cool Rock-Paper-Scissors Sensor glove game or even human tracking fan system that should be useful in upcoming summer time. So take your time, and enjoy the great work collection.