Table of Contents

Exercises

The goal is to write a program performing tasks described below.

Warm up exercise

For beginners

  1. Display on LCD screen, with the accuracy of 100 ms, time between pressing of any random two buttons. Execution of the time measurement is your own choice
  2. Pressing button S1, the blinking speed of all three LEDs is slowed down two times. Pressing button S3, the blinking gets 2 times faster and pressing button S2 the frequency of the blinking will be set to 1 Hz. Use delay functions or interruptions (the interruptions are more difficult but when delay functions are used there will be an extra delay due to the filtering function of the buttons).
  3. Display the frequency of pressing down the button S1 on the 7 segment LED indicator in Hz-s. The display of the frequency must be limited with 0 at the bottom and with 9 at the top.
  4. If button S1 is pressed, the program counts down the seconds from 60 to 0 and then lights the red LED. If button S2 is pressed the time is 30 seconds, followed by lighting of the yellow LED. For S3 the time is 10 seconds and the LED is green. All the processes have to take place simultaneously. The LEDs switch off when corresponding buttons are pressed.
  5. Display the Time on the LCD as follows: hh:mm:ss. Use hardware timer 1 with interruptions and the Time must be configurable with the buttons. It is advised to use three buttons, S1 for increasing rotationally the hours, S2 for minutes and S3 for seconds.

For advanced

  1. Design a stopwatch, which displays hours, minutes, seconds and milliseconds on LCD screen. Button S1 starts the time, S2 stops it and S3 zeros it. Interruption of the timer must be used.
  2. In 2 second intervals red, yellow and green LED are smoothly lit and switched off after each other. The smooth lighting is achieved by modulating the LEDs with hundredths of hertz (by lighting and switching it off very fast) and by changing the proportions between lighted/switched off time, causing to appear for the eye, that the brightness of the LEDs is changing (this is Pulse With Modulation).
  3. Make a part of program in C-language which produces a delay of 10 μs ± 10 % at frequency of 14,7456 MHz. Verify the functioning of the delay theoretically - compiled program. By commenting the instructions in assembler language in the .lss file of compiled program.

Questions

  1. What are the methods for crating delay?
  2. How is software delay created? On which parameters depends the duration of the software delay?
  3. What makes us use hardware delay/timer with interruptions?
  4. Calculate the overflow interruption period for 8-bit timer, if the clock rate is 16 MHz and frequency divider's factor is 1024.
  5. What is RTC hidden in the computers?
  6. What happens on the 19.01.2038 in the world of computers?
  7. What can be done with the AVR timers besides counting time?
  8. What indexes can be used to set up the ATmega128 timer 0? What can be adjusted with these registers?
  9. Which is the longest duration of the interruptions in milliseconds which can be achieved with ATmega128 micro-controller that work at the clock frequency of 14,7456 MHz? Show the calculation formula.
  10. In case the processor is heavily loaded with an execution of a program (for example, it controls several motors and the values of several sensors at once), does this have an effect on the accuracy of the timer? Explain your answer.