Egyszerű programot írtam - jeleket generál a D porton
keresztül 4 MHz-en:
#include <Arduino.h>int main (void) {DDRD = B11111111; PORTD = B00000000; míg (igaz) {PORTD = 0; PORTD = 5; PORTD = 10; PORTD = 15; PORTD = 20; PORTD = 25; PORTD = 30; PORTD = 35; PORTD = 40; } return 0;}
és ez a jel jön ki a D4-en:
Módosítottam a programot úgy, hogy minden hozzárendelés után beillesztettem a NOP-ot a POTRD :
#define NOP __asm__ __volatile__ ("nop \ n \ t") int main (void) {DDRD = B11111111; PORTD = B00000000; míg (igaz) {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; } return 0;}
és most a jel rendben van, de a frekvencia 800 KHz-re korlátozódik:
Mi az oka a 4 MHz-es interferenciának? Van-e korlátozás a digitális kimenet maximális frekvenciájára? Valójában nincs szükségem egy adott projektre, csak meg akartam ismerni.
Tettem fel ezt a kérdést a stackoverflow oldalon, de aztán felfedeztem ezt a dedikált fórumot, így ... úgy döntöttem, hogy kipróbálom;)