Arduino NANO 上 4Mhz 的数字输出受到干扰
Disturbed digital out at 4Mhz on Arduino NANO
我写了一个简单的程序 - 它以 4 MHz 的速度在 Port D
上生成信号:
#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;
}
return 0;
}
这是 D4 上发出的信号:
我修改了程序,在每次赋值给 POTRD
:
后插入 NOP
#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;
}
return 0;
}
现在信号看起来不错,但频率限制在 800 MHz:
4 MHz 干扰的原因是什么?数字输出的最大频率是否有限制?对于某些特定项目,我真的不需要它,只是想知道它。
我已经在 arduino.stackexchange.com 上发布了这个问题,它得到了答案:
我写了一个简单的程序 - 它以 4 MHz 的速度在 Port D
上生成信号:
#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;
}
return 0;
}
这是 D4 上发出的信号:
我修改了程序,在每次赋值给 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;
}
return 0;
}
现在信号看起来不错,但频率限制在 800 MHz:
4 MHz 干扰的原因是什么?数字输出的最大频率是否有限制?对于某些特定项目,我真的不需要它,只是想知道它。
我已经在 arduino.stackexchange.com 上发布了这个问题,它得到了答案: