The ‘delay’ function as used in the workshops is limited because it depends on approximate timing
based on how long the processor takes to execute the ‘NOP’ instruction, and the limitations of the size
of an integer means that the maximum delay will be approximately 65 seconds. Furthermore, the
processor cannot do anything else while the delay is going on, and any interrupts run during the ‘delay’
will cause the delay to be longer than intended.
The Atmel ATmega168 does provide the facility to maintain more accurate and longer timings through
the use of the crystal oscillator and the timer/counter circuitry in the processor.
Your task is to work out how to use these components so that programs can be written to accurately
trigger events after an amount of time, specified in minutes and seconds. The system should be able to
handle delays from a minimum of 1 second up to at least 60 minutes after ‘set’. The function should
allow for the timer interval to be set (input) in minutes and seconds.
Note: Assume the processor is setup as in the lab sessions (including crystal oscillator used with the
frequency specified in Nerdkit Guide).
Your solution should include the following:
1. Overall description of the principles of operation of your solution
2. Description of all timer/counters, registers, and interrupts used and their function
3. Details of all configuration information to get the processor to perform this function (e.g. what
needs to be written to different configuration registers, including explanations on WHY
particular bits are set or cleared)
4. Description of the overall algorithm(s) to implement the function
Note: This can be in the form of pseudocode. Code fragments (lines of code) can be used to
demonstrate where appropriate.
Note: You do NOT have to write the whole program for this assignment.


0 comments