|
|
实验条件 Arduino Uno 16M 示波器 Teledyne Lecory Wave Runner 606Zi 600Mhz 20GS/s
实验1,只使用DigitalWrite 能制造出来的最大频率是多少?
- const int PinA = 13;
- void setup() {
- pinMode(PinA, OUTPUT);
- digitalWrite(PinA,LOW);
- }
- void loop() {
- digitalWrite(PinA,HIGH);
- digitalWrite(PinA,LOW);
- digitalWrite(PinA,HIGH);
- digitalWrite(PinA,LOW);
- digitalWrite(PinA,HIGH);
- digitalWrite(PinA,LOW);
- delay(500);
- }
复制代码
使用示波器抓图如下:
我们设置的Delay 是500ms, 然后示波器的水平方向每一格也是500ms,垂直方向是电压,当前选择每格2V,因此看起来差不多是5v左右,符合预期。
我选择了了Stop功能,放大波形查看。
实际上我们看到的黄色竖线实际上是一组波形,就是对应我们的拉高拉低。
示波器有测量功能,直接调用该功能进行测试:
首先看看幅度,是4.946V,具体的测量方法示波器直接给出。
再测量一下频率:是100kHz.
关于测试的方法可以在菜单中选择(通用的方法是斜率50%的位置)
测量周期,其实给出来了频率,周期是可以直接折算出来的
结论:如果我们用 DigitalWrite拼命上下拉,最高是可以输出100Khz频率的。
实验2,使用PortB赋值直接拉出来的频率是多少?
- const int PinA = 13;
- void setup() {
- pinMode(PinA, OUTPUT);
- digitalWrite(PinA,LOW);
- }
- void loop() {
- PORTB = B100000; //digitalWrite(PinA,HIGH);
- PORTB = B000000; //digitalWrite(PinA,LOW);
- PORTB = B100000; //digitalWrite(PinA,HIGH);
- PORTB = B000000; //digitalWrite(PinA,LOW);
- PORTB = B100000; //digitalWrite(PinA,HIGH);
- PORTB = B000000; //digitalWrite(PinA,LOW);
-
- delay(500);
- }
复制代码
可能是因为速度太快的缘故,波形感觉畸变比较严重。
测试幅度,不知道为什么会达到5.248v
同样,使用自带功能测试频率:惊人的 7.99590Mhz
因为一个周期里面实际上是有两条指令的(拉上拉下),已经非常接近主芯片的16Mhz了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|