0
0
Embedded Cprogramming~7 mins

Generating precise delays with timers in Embedded C

Choose your learning style9 modes available
Introduction

Timers help us wait for exact amounts of time in embedded systems. This is useful when we want to control things like blinking lights or reading sensors at steady intervals.

Blink an LED on and off every second.
Create a delay before reading a sensor to let it stabilize.
Generate a precise time gap between sending data packets.
Control motor speed by timing pulses.
Measure how long an event takes to happen.
Syntax
Embedded C
void Timer_Init(void);
void Timer_Start(void);
void Timer_Stop(void);
void Timer_Delay_ms(unsigned int ms);

Timer_Init sets up the timer hardware with the right settings.

Timer_Delay_ms uses the timer to wait for the given milliseconds precisely.

Examples
Initialize the timer and wait for 1 second using the delay function.
Embedded C
Timer_Init();
Timer_Delay_ms(1000); // Wait 1 second
Start the timer to measure time, then stop it when done.
Embedded C
Timer_Start();
// Do something
Timer_Stop();
Sample Program

This program simulates a timer delay function that waits for 5 milliseconds. It shows how to initialize, start, and stop a timer to create precise delays.

Embedded C
#include <stdint.h>
#include <stdbool.h>

// Simulated hardware registers for timer
volatile uint32_t TIMER_COUNT = 0;
volatile bool TIMER_FLAG = false;

void Timer_Init(void) {
    TIMER_COUNT = 0;
    TIMER_FLAG = false;
    // Setup timer hardware here (prescaler, mode, etc.)
}

void Timer_Start(void) {
    TIMER_COUNT = 0;
    TIMER_FLAG = false;
    // Start timer hardware counting
}

void Timer_Stop(void) {
    // Stop timer hardware
}

void Timer_Delay_ms(unsigned int ms) {
    Timer_Start();
    while (TIMER_COUNT < ms) {
        // In real hardware, TIMER_COUNT increments every 1 ms by timer interrupt
        // Here we simulate by incrementing manually for demonstration
        TIMER_COUNT++;
    }
    Timer_Stop();
}

#include <stdio.h>

int main(void) {
    Timer_Init();
    printf("Starting delay...\n");
    Timer_Delay_ms(5); // Delay 5 ms
    printf("Delay finished after 5 ms\n");
    return 0;
}
OutputSuccess
Important Notes

Real embedded timers count automatically using hardware clock signals.

Delays using timers are more accurate than simple loops because they use hardware.

Always initialize timers before using them to avoid unexpected behavior.

Summary

Timers help create exact wait times in embedded systems.

Use timer start, stop, and delay functions to control timing.

Precise delays improve control over hardware like LEDs and sensors.