久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 求教 AVR16單片機控制DAC0832頻率怎么能達到0-20KHZ [打印本頁]

作者: bbxyliyang    時間: 2024-12-5 17:41
標題: 求教 AVR16單片機控制DAC0832頻率怎么能達到0-20KHZ
//定時器1的初始化,CTC模式,8分頻
void InitTime(void)
{
  SEI();
  TIMSK|=(1<<TOIE1);//允許T1 中斷
   TCCR1A = 0x00;
  TCCR1B=0x02;//8 分頻
   time=(1000000)/( HzNeed*36);        //1000000 是1秒       
TCNT1H=(65536-time+200)/256;
  TCNT1L=(65536-time+200)%256;
}


//定時中斷服務程序
#pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
void timer1_ovf_isr(void)
{
static unsigned char i=0;
TCNT1H=(65536-time+200)/256;
  TCNT1L=(65536-time+200)%256;

if(StartEn==0xff)
{

LED_ON;}
else
LED_OFF;

PORTC = *(DataPtr+i);
i++;

if(i > 35)
i = 0;

}


作者: 飛云居士    時間: 2024-12-9 10:59
實現 0 - 20KHz 頻率控制的改進思路
變量HzNeed的調整:
要實現 0 - 20KHz 的頻率控制,需要在程序的某個地方(可能是主函數或者通過外部接口)能夠動態地改變HzNeed的值。例如,可以通過一個函數來接收期望的頻率值,然后重新計算time和設置定時器 1 的計數值。
數據緩沖區DataPtr的更新(如果和波形有關):
根據不同的頻率要求,可能需要調整數據緩沖區DataPtr中的數據。例如,如果是生成正弦波,不同頻率下正弦波的數據點間隔和周期會不同。可以根據頻率計算出合適的數據點,并存入DataPtr指向的緩沖區。
考慮定時器精度和范圍限制:
定時器的計數范圍和預分頻等設置會限制能夠實現的最小和最大頻率。在這個例子中,已經設置了 8 分頻,需要檢查這種設置是否能夠滿足 0 - 20KHz 的頻率范圍要求。如果不能,可以考慮調整預分頻系數或者定時器的工作模式。
同時,要注意定時器計數的精度,例如,在計算time和設置TCNT1時,要確保計數值的準確性,避免頻率誤差過大。
具體修改示例(假設HzNeed可以從外部改變)
假設在主函數中有一個變量desiredHz表示期望的頻率,并且可以在運行過程中改變。
修改InitTime函數:
c
void InitTime(float desiredHz)
{
    SEI();
    TIMSK|=(1<<TOIE1);//允許T1 中斷
    TCCR1A = 0x00;
    TCCR1B = 0x02;//8 分頻
    time=(1000000)/(desiredHz*36);        //1000000 是1秒
    TCNT1H=(65536 - time+200)/256;
    TCNT1L=(65536 - time+200)%256;
}
在主函數中(或者其他合適的地方),可以根據需要調用InitTime函數來改變頻率:
c
int main()
{
    // 其他初始化代碼...
    float desiredHz = 10000; // 初始頻率為10KHz
    InitTime(desiredHz);
    // 主循環等其他代碼
    while(1)
    {
        // 假設通過某種方式(例如按鍵中斷等)改變desiredHz的值
        if (frequency_changed)
        {
            InitTime(desiredHz);
        }
    }
    return 0;
}
這樣,當desiredHz的值改變時,通過重新調用InitTime函數,可以調整定時器的設置,從而改變輸出信號的頻率。不過這只是一個簡單的示例,實際應用中還需要考慮更多的因素,如頻率切換的穩定性、波形的質量等。

作者: bbxyliyang    時間: 2024-12-9 15:44
飛云居士 發表于 2024-12-9 10:59
實現 0 - 20KHz 頻率控制的改進思路
變量HzNeed的調整:
要實現 0 - 20KHz 的頻率控制,需要在程序的某個 ...

您好,我幫晶振換成8MHZ,不分頻,頻率也只能達到400HZ,再大就不行了,不知道為啥
作者: 飛云居士    時間: 2024-12-9 16:08
bbxyliyang 發表于 2024-12-9 15:44
您好,我幫晶振換成8MHZ,不分頻,頻率也只能達到400HZ,再大就不行了,不知道為啥

定時器計數原理與頻率限制因素分析
當晶振為 8MHz 時,AVR 單片機的定時器時鐘頻率等于晶振頻率(不分頻的情況下),即定時器的時鐘頻率為 8MHz。對于 16 位定時器(如代碼中的定時器 1),其最大計數值是。
定時器的溢出周期(也就是中斷周期)的計算公式為:,其中是定時器的時鐘頻率。在晶振為 8MHz 且不分頻的情況下,,則。
這意味著在這種設置下,定時器最快的溢出頻率(也就是中斷頻率)約為。如果在中斷服務程序中更新輸出信號(比如通過DAC0832輸出波形),那么輸出信號的頻率就會受到這個中斷頻率的限制。
在你提供的代碼中,還有一個變量36參與了頻率計算(time=(1000000)/(HzNeed*36);),這個36可能與每個周期內的點數或者其他相關因素有關。假設它是每個周期的點數,那么實際能夠達到的最高頻率還會進一步降低,因為每個周期需要足夠的點數來完整地表示波形。
作者: bbxyliyang    時間: 2024-12-15 09:59
飛云居士 發表于 2024-12-9 16:08
定時器計數原理與頻率限制因素分析
當晶振為 8MHz 時,AVR 單片機的定時器時鐘頻率等于晶振頻率(不分頻 ...

我換了12MHZ,可以達到1KHZ,但是還是很難達到20KHZ




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品一区在线观看 | 一区二区伦理电影 | 国产精品二区三区 | 国产福利91精品 | 黄色一级片视频 | 成人午夜网站 | 在线观看www | 国产传媒在线观看 | 久久久久av| 欧美午夜影院 | 久久激情五月丁香伊人 | 久草在线 | 国产乱码精品一区二三赶尸艳谈 | 欧美v日韩 | av网站免费 | av福利网站| 亚洲精久久久 | 午夜免费福利影院 | 免费毛片网站在线观看 | 999精品网 | 天天天久久久 | 色婷婷国产精品 | 日韩中文字幕一区二区 | 久久久人成影片一区二区三区 | 日韩亚洲一区二区 | 亚洲先锋影音 | 日韩av中文 | 亚洲精品久久久久久久不卡四虎 | 成人免费视频 | 国产福利视频网站 | 国产精品视频在线观看 | aaa大片免费观看 | 国精产品一品二品国精在线观看 | 久久99精品久久久久久青青日本 | 国产精品一区二区三区99 | 欧美日韩不卡合集视频 | 五月槐花香 | 天堂视频中文在线 | 女同久久另类99精品国产 | 久草院线| 久久久久亚洲精品 |