This is an old revision of the document!


Timer

Timers are frequently used when programming controllers. They can be used in many different ways, such as counting time within code or giving an interrupt when the timer has counted up or down to a certain value. For example, the time between two pulses from outside could be detected, or the timers could be used as counters, counting pulses coming from a sensor. One common way of using a timer is as a realtime clock. The task of the timer would then be to give an interrupt at a specific interval. Every time an interrupt occurs, as part of the interrupt routine you could, for example, sample the sensors. This way, you will always be sure of having the same time between two samples from the same sensor.

Blinking LED example

/* 
Labor 2 example
 
Blinking LED using timer
Raivo Sell 2008
 
LED = 0 (ON)  		LED = 1 (OFF)
PORT direction: 1-output 0-input
 */
 
#define F_CPU 14745600UL
 
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
 
static int i; //globale variable
int SAGEDUS = 10;  // blinking frequency
 
#define INV(x) ^=(1<<x)	 //inversting bit in PORT x
#define LED 4 // Blinking LED (in this example LED2 (yellow)
 
// Interrupt function - starts on timer buffer overrun
 
ISR (TIMER1_OVF_vect){	
	i++; // increments every time when function is executed
	if (i>SAGEDUS){ // LED port is inverted when i reaches constant SAGEDUS
	    PORTC INV(LED); // Inverting LED
		i=0; // repeater is set to zero
	}
}
 
int main (void) {
	// Timer control regiters
	TCCR1A = 0x00;
	TCCR1B = _BV(CS10); //clk/1 (No prescaling)
 
    DDRC  = 0x38;  // DDRC  0bXX111000
    PORTC = 0x3F;  // PORTC 0bXX111111
 
    TIMSK = _BV (TOIE1); // Overrun interrupt is enabled
    sei (); // Global interrupts are enabled
 
    while(1); // endless loop
// No action here, LED is inverted through the interrupt function
}
en/examples/digi/timer.1239258719.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0