Napsal jsem jednoduchý program - generuje signály přes port D
při 4 MHz:
#include <Arduino.h>int main (void) {DDRD = B11111111; PORTD = B00000000; while (true) {PORTD = 0; PORTD = 5; PORTD = 10; PORTD = 15; PORTD = 20; PORTD = 25; PORTD = 30; PORTD = 35; PORTD = 40; } návrat 0;}
a toto je signál vycházející z D4:
Upravil jsem program vložením NOP po každém přiřazení k POTRD
:
#define NOP __asm__ __volatile__ ("nop \ n \ t") int main (void) {DDRD = B11111111; PORTD = B00000000; while (true) {PORTD = 0; NOP; PORTD = 5; NOP; PORTD = 10; NOP; PORTD = 15; NOP; PORTD = 20; NOP; PORTD = 25; NOP; PORTD = 30; NOP; PORTD = 35; NOP; PORTD = 40; NOP; } návrat 0;}
a nyní signál vypadá dobře, ale frekvence je omezena na 800 KHz:
Jaký je důvod rušení při 4 MHz? Existuje omezení maximální frekvence na digitálním výstupu? Opravdu to nepotřebuji pro nějaký konkrétní projekt, jen jsem to chtěl vědět.
Tuto otázku jsem položil na stackoverflow, ale pak jsem objevil toto vyhrazené fórum, takže ... rozhodl jsem se to vyzkoušet;)