You are here: Home / ECS / Teaching / Courses / Microcontroller



Microcontrollers demand very precise and resource-saving programming. Therefore it is necessary to investigate the processor core; in particular, one has to study assembler language. This understanding enables to analyze compilation of C programs, which is a precondition to write efficient C programs for microcontrollers. Of utmost importance is the investigation of the microcontroller's hardware components. Goal of this course is the development of understanding of internal processes in the microcontroller chip. This will enable the student to conduct sound high-level-programming of such chips.


Lecture contents:
- Microcontroller architecture
- Assembler toolchain
- Interrupts vs. polling
- C-Compiler
- Memory analysis
- Digital communication
- Analog-digital- and digital-analog-conversion
- Interfacing
- Applications

Lab contents:
- Assembler and C
- Digital I/O
- Interrupts
- Timer
- Communication interfaces
- Analog I/O
- Anwendungen
- Embedded Operating Systems

Didactic methods:
- Important principles are presented in class
- Advance reading
- Supervised lab
- Guidance to read and comprehend datasheets
- Weekly learning objectives


ao.Prof. Dr. Widder Josef



[News] [Course Organization] [Course Enrolment] [Applications] [Exams] [Grading]

[Manuals/Datasheets/Programs] [Lecture/Theory] [Lab Hours] [Self Assessment Test]



Feb 12, 2015

Updates of the Webpage. Not stable right now!
Feb 26, 2015

Lab hours set. Updates of organization, grading, ...

Mar 25, 2015

Specification of Application 1 is online and can be found here. Additional material, such as templates and libraries can be found here.

Apr 17, 2015

Update of Application 1 specification to 1.1. Update of serial_rpc. Published RFid how-to. Extension of IP Review deadline.

Apr 23, 2015

Bugfix for serial_rpc: On some systems a received 0x0D was converted to 0x0A.

May 18, 2015

Update of Application 1 specification to 1.2. This update provides a clarification to theory task 5.

May 22, 2015

Specification of Application 2 is online and can be found here. Additional material, such as templates and libraries can be found here.

May 29, 2015

Update of Application 2 specification to 1.1. Thus update includes a note on how to debug the network with wireshark. Furthermore, we added more songs to the sdcards in the lab.

Jun 02, 2015

Update of Application 2 specification to 1.2. A few interface have been changed from their Atm128 basis to Atm1280.

Jun 10, 2015

Update of Application 2 specification to 1.3. We made a mistake during the composition of the repository, which caused the solution for the Ping/ICMP-Task to be already included in the provided code. We therefore removed this task and redistributed the 2 points to the PRNG and PS/2 task.
Update of scoreboard to 1.1. The tool didn't send "gameid" in the reply to "start game".

Course Organization

The course is organized in three parts which focus on different aspects of microcontroller programming. The first two parts are concluded by an exam and accompanied by weekly lectures. In the second and third part you have the chance to additionally hand in a microcontroller application.


DateEvent / LecturePre-ReadingSlidesLab exercises
04.03.2015 Preliminary talk - Slides -
08.03.2015 Deadline for course registration - - -
11.03.2015 A deep look into the processor core
Getting code onto the microcontroller chip
2.1, 4.2, 4.3


1.2, 2.1.1,
2.1.2, 2.2.1
18.03.2015 Assembler programming 2.2, 2.3, 2.5


2.2.2, 2.2.4,
2.2.5, 2.4.1

Recitation for first exam
Introduction of Application 1

- Slides,

2.2.8, 2.4.2,
2.4.3, 2.4.4

26.03.2015 Deadline for course de-registration (12:00)
- - -
Exam for (and end of) part 1 - - -

Compilation of C programs
Q&A Application 1

Lecture script: 2.2
avr-libc-Manual: 4, 5, 7, 23.28
For reference only: GCC internals


3.1.1, 3.1.3,
3.3.2, 3.4.3

Deadline for Implementation Proposal (12:00)




Structured C Programming
Memory analysis
Bit tricks

Lecture script: 2.2


3.3.1, 3.4.1,
3.6.1+2, 3.9.1
28.04.2015 Deadline for Implementation Proposal Review - - -
Problems of digital communication 3.1, 3.2, 3.3 Slides,
3.4.4, 3.6.4,
3.8.2, 3.8.4
TinyOS Slides,
3.5.2, 3.5.3,
3.7.5, 3.10.4
13.05.2015 Reserved - -
17.05.2015 Deadline for Application 1 code submission
- - -
20.05.2015 Recitation for second exam - 3.6.3, 3.7.2,
3.8.1, 3.10.14
22.05.2015 Exam for (and end of) part 2 complete lecture script - -
26.05.2015 Deadline for Application 1 protocol submission
- - -
27.05.2015 Introduction of Application 2 - Slides,
- - - - 4.2.1, 4.2.2, 4.2.3
21.06.2015 Deadline for Application 2 code submission
- - -
24.06.2015 Recitation for make-up exam - - -
26.06.2015 Make-up exam complete lecture script + TinyOS Slides,
28.06.2015 Deadline for Application 2 protocol submission - - -

Events are marked bold in the table above. Beside the exams, and when specified otherwise, the deadlines for the given events are at midnight.


For organizational announcements, for questions and discussions. You are expected to subscribe to the forum (log in with your student account and subscribe to course and forum).
For "inter-student" communication it is also possible to use the forum of the FSINF. Please be advised that we are not responsible for (maybe wrong) posts of other students.
Teaching Assistant
For questions that the tutors could not answer to your complete satisfaction.
Teaching Staff
For personal questions, notifications on broken microcontroller hardware, problems with the registration system.
TILAB system administrator (Heinz Deinhart)
In case of account troubles (e.g., forgotten password), software problems, broken PCs, ...

Course Enrollment and Lab Account

Enrollment for the course is done via TISS but all other things are done via myTI ( ). Please note that students of computer engineering (033 535) have priority. Enrollments as "Wahlfach" can only be accepted as long as there is enough capacity. The enrollments are transferred from TISS to myTI on March, 9. (without the need for additional course enrollment from your side). Late enrollments are only possible per email and if capacity is available!

You also have to ensure you have an account in myTI ( ), and have logged in at least once in the system before the enrollments are transferred! Ensure you have uploaded a valid photo into myTI, else your chipcard/account cannot be created! Around March, 11., you will get a notification to your e-mailaddress that your account has been generated. After that you have to visit and accept the usage policy of the TILab. After that your chipcard will be activated, if you already got one. If  you don't already have a chipcard, it should be available in the lab, where they can be picked during the lab hours, after your account as been generated. You have to accept the usage policy by March, 26., even if you plan on working from home, as the sysadmin has to remove all accounts where the policy has not been accepted! This will also lead to you being dropped from the course!

On March, 26. noon, all enrollments will be deleted that are not active in both, myTI and TISS!

From March, 9. to March, 22. you can also suggest up to three of the weekly supervised lab slots, in myTI, you want to attend. On March, 23. one of these slots is assigned to you.

Enrollment for exams and submissions of the applications are via myTI only!


During parts 1 and 2, there is one lecture per week on Wednesday from 10:30-12:00 in lecture hall EI4.

Lecture notes download: Lecture notes
Exercises download: Exercises
Manuals/Datasheets download: Manuals/Datasheets

Application Programming Task

The specification for the application, which you can program, will be posted on this website in due time.

All relevant manuals, datasheets, etc. can be found here.

The applications are intended to help you understand the intrinsics of hardware-based and microcontroller programming, and to develop the necessary programming and debugging skills.

Implementation Proposal

For Application 1 you have to prepare an implementation proposal by the specified deadline. The proposal should at least answer the general questions given in the template and thereby present major implementation ideas, show a continuous improvement of your skills and show that you have spend time to understand the task at hand.
If you submitted a complete proposal, you will be assigned two proposals from your collages for a blind review. The reviews should point out weaknesses or problems in the texts, and highlight good ideas. Do not put down a good proposal or praise a bad one. Most importantly: be polite!

We encourage you

  • to talk with a tutor about your plan on how to solve the application.
  • to discuss with your collages, but keep in mind that the cheating policy also applies for the implementation proposal!
  • not to hold off on working on the application due to the outstanding proposal reviews!
  • to take the reviews seriously. You can learn from seeing other approaches, or detect problems you overlooked!

In case you did not submit a implementation proposal, you will not receive any points for the code of application 1, and you cannot participate in the review round.
Should your proposal be incomplete, you can still achieve points for application 1, but the received points for the code and the reviews will be divided by 2.



The code of your application must adhere to the specified coding guidelines. The specification of each application also contains theory tasks which you also can solve. Additionally, you have to write a protocol in LaTeX which covers the following sections:

  • A detailed description of your solution, including all design decisions.
  • Correct and detailed answers to all exercise questions, if applicable.
  • Any problems you encountered (programming difficulties, trouble with datasheets, mistakes you made, ...).
  • How much time (in person hours) you spent for the exercise, broken down into preparatory work (e.g., reading datasheets), design, programming, debugging, and protocol (including questions).
  • Your solution (attempt) to the theory tasks (if you worked them out).

You have to submit the application and the protocol before or at the day of their respective deadline!

There will be a 25 minute delivery talk (Abgabegespräch) in the week of the protocol-deadline (= Exam-Week).
The sign-up for this talk will happen via myTI, and you must take such a talk to get points for the application.
During this talk a tutor will check your submission and will ask you questions related to your implementation. Should there by discrepancies, you may be asked for an additional talk with a member of the teaching staff, which can lead to point deductions.
Please, also bring the signed first page of the Protocol to the delivery talk.

Overall an application submission consists of several tasks:

  1. Create a gzip'd tar-archive, containing the application source code, according to the template provided by us.
  2. Electronically submit the archive to myTI before the code submission deadline.
  3. Show a tutor that your program solves the task during the delivery talk. The tutor may ask you questions about the functionality of your program and thing you must know if you implemented the application on your own. If there are discrepancies, you will be invited to a delivery talk with a member of the teaching staff.
  4. Create a gzip'd tar-archive, containing the protocol, according to the template provided by us.
  5. Electronically submit the archive to myTI before the protocol submission deadline.

Should there be any problem with the electronic submission to myTI, please inform us immediately. If this happens close to the submission deadline, you should also attach your submission to this e-mail so that you have submitted on time!


The TILAB is located in the Treitlstrasse building (building DE) on the mezzanine (raised ground floor). The lab is open from 8:00 to 22:00. It is closed on official holidays, but open on all student holidays. As you can see in the TILAB timetable, the course is assigned to Room 4. You will find tutors in the lab during their lab hours.


You can borrow a lab kit, which contains the bigAVR6 board with an ATmega1280 mcu card, 2x16 Character LCD, usb2serial converter, temperature sensor, and matrix keypad. The deposit for the kit is 100 Euro. You have to return the kit at the end of the course.

Collaboration Policy

We encourage discussions among students, but all work you submit must be written by you in your own words and must have been programmed by you. Using (parts of) programs or protocols from other courses or from previous years is not allowed.

If we detect cheating on a submission, we will not only ignore the submissions but also deduct 15 points from the finals result, of every person involved!
Please note: we deduct the points from all students involved, so if you steal from your colleagues without their knowledge and we find out, they will get punished for your misdeed. If they ask, we will disclose your name to them.


The exam consists of a theory exam (25 min), a preparatory phase for the practical exam (25 min), and the practical exam itself (about 50 min). You register for a particular 120 min exam slot. The remaining 20 minutes are for organizational things like changing rooms. You start with the theory exam in the TILab rooms on the Mezzanine, then move to the TI Seminarraum (ground floor) for the preparation, and finally go back to the TILab rooms on the Mezzanine for the practical exam. Please be in front of the TILab rooms on the Mezzanine shortly before the start time of your exam slot.


  • True/False Questions. 24 questions, grouped into 8 topics with 3 questions each.
  • The questions test whether you understand the material (pre-reading as stated in the timetable, lecture slides and lab hardware) and whether you can look things up in the ATmega1280 manual, avr-libc manual and AVR instruction set manual.
  • An ATmega1280 manual, AVR instruction set manual, board schematic, avr-libc manual and a calculator will be provided. Own notes, paper, and calculators are not allowed.
  • A correctly answered questions is awarded with 0.5 point, a wrong answer results in 0.5 point deduction.
  • If your overall score for the theory exam would be negative, it will be set to 0.
  • Thus the maximum is 12 points per theory exam.


  • 2 programming tasks. Here is an example test for the first part.
  • The task will not only involve components which have been used in the application programming tasks, but also components which were covered by the recommended exercises. Additionally, the operational modes of the components which can appear in a programming task are not limited to their usage in the application programming tasks and recommended exercises!
  • You will receive a program skeleton where you have to fill in the important stuff (mainly initializations, some computations and program logic).
  • All manuals and schematics necessary for solving the tasks are provided. Own notes, paper, and calculators are not allowed. You will get the task descriptions and program skeletons on paper so you can write down your design during the preparation phase. During the make-up exam you will be provided with a copy of 'TinyOS Programming', but only during the practical exam itself!
  • As soon as you have completed a task, call a tutor. The tutor will verify that your program is correct and, if it is correct, mark this on your exam sheet.

Viewing (Einsichtnahme)

The viewing for the programming exams is by email: Just mail us within a week after the exam which of your exam tasks you are interested in, and we will evaluate them and send you an explanation of your mistakes per email. Depending on our workload and the number of students interested in getting feedback, our response time may vary between a day and 1-2 weeks.

Viewing for a theory exam is by appointment (send email).


If we detect cheating during on part of the exam, or you submit code that has not been programmed by you, you will receive 0 points for both parts, theory and programming, of the exam. Additionally, we will deduct 15 points from your final result.


Your final score (max. 100 points) is composed of the following parts:

Programming Exams (26 points)
best two out of three exams, 13 points per exam. Each exam consists of two exercises.
Theory Exams (24 points)
best two out of three exams, 12 points per exam
Application 1 (25 points)
19 points will be rewarded for the hands-on programming of application 1. At most 1 point will be rewarded for the review of the implementation proposals. Finally, there are 5 points of the theory tasks to gain.
Application 2 (25 points)
hands-on programming of application 2 (20 points), including the corresponding theory tasks (5 points).

Prerequisites for a positive grade:

Two successfully submitted practical exam exercises (i.e., 13 points achieved with programming exams).

Grading Scheme

[0,100], prerequisites not fulfilled nicht genügend
[0, 55) nicht genügend
[55, 66) genügend
[66, 77) befriedigend
[77, 88) gut
[88, 100] sehr gut