8F328P-U 的最大開關頻率
測試程序:void setup() {
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(9, HIGH);
digitalWrite(9, LOW);
}
結果: ~ 39.5kHz
結論:這與Arduino Nano 的 ~124kHz 有很大的差別 本帖最后由 eddiewwm 于 2020-3-3 11:28 编辑
詳細檢查後,發現是忘了把板型從 Arduino Nano 轉至 LGT8F328P。
改正後,結果為 ~239kHz。
void setup()
{
sysClock(INT_OSC); //use internal 32MHz RC clock
CLKPR = 0x80;
//CLKPR = 0x00; //Divider=1, =>32MHz/1 = 32MHz
CLKPR = 0x01; //Divider=2, =>32MHz/2 = 16MHz
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, INPUT);
Serial.println("Speed Test will begin momentarily.");
Serial.println("");
delay(4000);
speedTest();
}
void loop()
{
// Do nothing
}
void speedTest(void)
{
register int i, j;
volatile unsigned char c1, c2;
volatile int v;
volatile long l1, l2;
volatile float f1, f2;
int p, q;
long int r;
unsigned long m, n;
float d, overhead;
char buffer;
Serial.println(F(""));
Serial.println(F("Speed test"));
Serial.println(F("----------"));
Serial.print(F("F_CPU = "));
Serial.print(F_CPU, DEC);
Serial.println(F(" Hz"));
Serial.print(F("1/F_CPU = "));
Serial.print((1000000.0 / (float)F_CPU), 4);
Serial.println(F(" us"));
delay(800); // Allow the Serial text to be transmitted
for (int outPin=2; outPin<20; outPin++){
pinMode(outPin, OUTPUT);
}
for (int k = 2; k < 20; k++) {
Serial.print(F("digitalWrite "));
Serial.print(k);
Serial.print(F(":\t"));
delay(70); // Allow the Serial text to be transmitted
m = millis();
for (i = 0; i < 2; i++)
{
for (j = 0; j < 10000; j++)
{
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
digitalWrite(k, HIGH);
digitalWrite(k, LOW);
}
}
n = millis();
d = ((float)n - (float)m) / ((float)i * (float)j);
d *= 1000.0;
// d -= overhead;
d -= 4; //overhead 32MHz = 2, 16MHz = 4
d /= 20.0;
Serial.print (d, 3);
Serial.print (F("\t us,\t Max Frequency :\t"));
Serial.print (500/d, 3);
Serial.println (F("\t kHz"));
}
}
:D大神级别,看了您很多帖子。 我之前测试过GPIO最大翻转频率可以达到8MHz 我用下边的程序测试了,发现改变CLKPR的设置对运行速度没有影响,请问楼主可能是什么问题?程序用数码管显示管脚电平10000次跳变所用时间
#include "TM1637.h"
#define CLK 2//pins definitions for TM1637 and can be changed to other ports
#define DIO 4
TM1637 tm1637(CLK,DIO);
void setup() {
sysClock(INT_OSC); //use internal 32MHz RC clock
CLKPR = 0x80;
//CLKPR = 0x00; //Divider=1,=>32MHz/1=32MHz
CLKPR = 0x01; //Divider=2,=>32MHz/2=16MHz
//CLKPR = 0x02; //Divider=4,=>32MHz/2=8MHz
//CLKPR = 0x03; //Divider=8,=>32MHz/2=4MHz
//CLKPR = 0x04; //Divider=16,=>32MHz/2=2MHz
//CLKPR = 0x05; //Divider=32,=>32MHz/2=1MHz
//CLKPR = 0x06; //Divider=64,=>32MHz/2=0.5MHz
//CLKPR = 0x07; //Divider=128,=>32MHz/2=0.25MHz
//CLKPR = 0x08; //Divider=256,=>32MHz/2=0.125MHz
Serial.begin(9600);
}
void loop() {
int i,j,k,l;
long t0;
for(j=5;j<14;j++){
pinMode(j,OUTPUT);
tm1637.init();
tm1637.set(0); //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
for(l=0;l<5;l++){
t0=millis();
for(i=0;i<10000;i++){
digitalWrite(j,HIGH);
digitalWrite(j,LOW);
}
t0=millis()-t0;
displaynumber(j);
delay(4000);
Serial.println(t0);
displaynumber(t0);
delay(2000);
}
}
}
void displaynumber(long n)
{
int i,j;
long k;
boolean f=false;
tm1637.init();
k=n;
for(i=3;i>-1;i--)
{
j=k/pow(10,i);
if(j>0) f=true;
if(f) tm1637.display(3-i,j);
k=k-j*pow(10,i);
}
if(f==false) tm1637.display(3,j);
}
页:
[1]