eddiewwm 发表于 2018-6-26 17:15:13

8F328P-U 的最大開關頻率

測試程序:
void setup() {
pinMode(9, OUTPUT);

}

void loop() {
digitalWrite(9, HIGH);
digitalWrite(9, LOW);
}

結果: ~ 39.5kHz

結論:這與Arduino Nano 的 ~124kHz 有很大的差別

eddiewwm 发表于 2018-6-26 17:35:01

本帖最后由 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"));
}
}


BinXU 发表于 2019-2-23 15:42:44

:D大神级别,看了您很多帖子。

ino 发表于 2021-2-17 22:50:37

我之前测试过GPIO最大翻转频率可以达到8MHz

UrDaYe 发表于 2021-6-1 10:33:45

我用下边的程序测试了,发现改变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]
查看完整版本: 8F328P-U 的最大開關頻率