Reklama

Vytvoření zpoždění pro mikrokontrolér ATmega v programovacím jazyce C

Úvod

   V tomto příspěvku si ukážeme, jak je možné vytvořit zpoždění v programovacím jazyce C. První možností, co každého asi napadne, je vytvořit si smyčku „for“ a zde nechat vykonávat nějaký kód, který by trval jistý čas. Toto řešení je nevhodné, protože není lehké odhadnout čas zpoždění a vytvoření delších časů by bylo obtížné. Proto pro mikrokontroléry ATmega existuje elegantní řešení pomocí funkce _delay_us(x) a _delay_ms(x), kde za x dosadíme požadovaný čas. Pro funkci _delay_us(x) se jedná o zpoždění v mikrosekundách, zatímco pro _delay_ms(x) se zadává čas pro zpoždění v milisekundách. Abychom mohli tyto dvě funkce využívat, je nutné vložit hlavičkový soubor <util/delay.h>. Ještě před vložením tohoto hlavičkového souboru je nutné definovat hodinový signál, kterým je taktován mikrokontrolér ATmega. To uděláme pomocí definice #define F_CPU 16000000UL. Ukázku vytvoření zpoždění 20 us a 20 ms lze vidět na zdrojovém kódu níže.

Okomentovaný zdrojový kód

#define  F_CPU 16000000UL   // Frekvence hodinového signálu (nutné pro delay.h)
#include <util/delay.h>  // Hlavičkový soubor pro zpoždění

_delay_us(20); // Zpoždění 20 us
_delay_ms(20); // Zpoždění 20 ms

Přesnost jednotlivých vygenerovaných průběhů

   Na následujících obrázcích Obr. 1, Obr. 2, Obr. 3 a Obr. 4 lze vidět přesnost jednotlivých vygenerovaných průběhů.

 

nazev

Obr. 1: Vytvořený generátor s periodou T = 2 µs, skutečná perioda 2,45 µs

 

nazev

Obr. 2: Vytvořený generátor s periodou T = 200 µs, skutečná perioda 205 µs

nazev

Obr. 3: Vytvořený generátor s periodou T = 2 ms, skutečná perioda 2 ms

 

nazev

Obr. 4: Vytvořený generátor s periodou T = 200 ms, skutečná perioda 200 ms

 

   Ze změřených průběhů lze vidět, že největší odchylka byla změřena při průběhu s periodou 200 µs, kde byla změřena skutečná perioda 205 µs. Do této nepřesnosti také určitě přispěli dvě nastavení hodnoty portu na log. 1 a posléze na log. 0 a také nepřesnost použitého osciloskopu.

Následující a předchozí příspěvek v kategorii:

 

Následující: Programovací propojky mikrokontroléru ATmega32

Předchozí: Vektory přerušení pro mikrokontroléry ATmega v programovacím jazyce C
 
Tajned facebook
 

Za případné chyby v textu, ve zdrojovém kódě, nebo ve schématickém zapojení se omlouváme.
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.