Computer Laboratory

Course pages 2011–12

Low Power Embedded Systems Programming

Principal lecturer: Dr Ian Wassell
Additional lecturer: Mr Brian Jones
Taken by: MPhil ACS, Part III
Code: P31
Hours: 16 (8 × two-hour seminar sessions)
Prerequisites: Good working knowledge of C. Familiarity with analog and digital hardware would be advantageous.


This module aims to teach students how to write programs for low power embedded devices that communicate with other computers or devices to solve practical problems. The course will cover the relevant theoretical knowledge required for writing such applications, and provide practical experience writing C programs for Atmel microprocessors. The module will also give students an appreciation for some of the practical issues in low power embedded systems.


The module will have eight practical sessions, each lasting for nominally 2 hours. During the practical sessions embedded devices will be built and programmed. For each of the first four sessions a worksheet will be issued, each containing a number of exercises. The exercises on the worksheets will become progressively more challenging. Each worksheet will have some additional exercises and a reading task that will be required to be completed before the next session. Each student will formulate a project proposal by the end of the 4th session that they will execute during the final four sessions. Demonstrators will be available throughout each practical session to assist students with their work. In the final four sessions, the students will concentrate on implementing their chosen project. In the final session, each student will demonstrate their project to the module leader. The coursework will be completed over the Christmas vacation.

The topics of each practical session are:

1. Setting-up the software – tool chain. Setting-up the hardware – microcontroller master clock, basic Input/Output (I/O) techniques.
2. Basic serial communication, serial communications using interrupts, analogue to digital conversion (ADC).
3. Creating precise timing using timers. Interfacing to a liquid crystal display (LCD).
4. Accurately measuring time interval between input events – interrupts generated from input transitions and use of timers. Processor low power and sleep modes.
5–8 Project work.


On completion of this module, students should:

  • be able to read and write C programs for Atmel microprocessors;
  • understand the event-based programming paradigm presented by interrupts in C;
  • know how to minimise power usage in embedded platforms;
  • have an appreciation for the research issues presented by programming embedded devices.


Write a 4000 word report on an embedded C program application that the student has designed, written and tested. The report must be submitted by the first day of lectures in the Lent Term.

Practical work

The first four practical sessions will each involve assessed exercises that the students will be required to complete. Prior to session 5 a project proposal will have been formulated and agreed with the Module Leader. In the final four sessions the students will work on their chosen projects.


  • Ticks at the end of sessions 1 to 4. The ticks will contribute 8% of the final module mark.
  • Assessment of the written report describing the conduct and outcome of the project. The report will follow a format similar to that of the Part II undergraduate projects, i.e., the "Pink Book". The report will contribute 92% of the final module mark.

Recommended reading

Kernighan, B.W. & Ritchie, D.M. (1988). The C programming language. Prentice Hall (2nd ed.).

Useful websites

Atmel 8 bit avr micro controllers
Atmel application notes for 8 bit avr
avr-libc library