Arduino základy 3 – generování max. frekvence

Pokud potřebujete Arduinem generovat obdélníkový signál, nabízí se dvě možnosti 

1. využití původního programovacího jazyka z Arduina:

#define LED 13
void setup() 
{
 pinMode(LED, OUTPUT);
}
void loop() 
{
 digitalWrite(LED, HIGH); 
 digitalWrite(LED, LOW); 
}

Jak je vidět program je opravdu jednoduchý, pouze zapíná a vypíná LED na pinu 13 maximální rychlostí. Z obrázku z osciloskopu je znát že frekvence je pouhých 146,2kHz! Což při 16MHz krystalu opravdu moc není. Také je poznat že při náběhu a poklesu napětí dochází ke znatelným překmitům.

2.programování v assembleru:

void setup() 
{
 DDRB = B11111111; //nastavení portu B jako výstupní
}
void loop() 
{
 PORTB = B00000000; //port B LOW
 PORTB = B11111111; //port B HIGH
}



Pro jednoduchost je ovládán celý port B najednou (piny 8 - 13). Je vidět že frekvence stoupla až na 2,66MHz ale na úkor střídy.

Je názorně vidět že i při 16MHz krystalu použitém v Arduinu nedosáhne maximální frekvence ani poloviny frekvence krystalu. Nemluvě o střídě, která při použití assembleru není 1:1.  Někdy to vadit může a někdy ne, záleží na účelu. Ale pokud bych potřeboval stabilní frekvenci, využil bych spíše oscilátor s krystalem a případně děličkou kmitočtu.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *