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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 954|回復: 4
收起左側

求教 AVR16單片機控制DAC0832頻率怎么能達到0-20KHZ

[復制鏈接]
ID:190577 發表于 2024-12-5 17:41 | 顯示全部樓層 |閱讀模式
//定時器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;

}

回復

使用道具 舉報

ID:404160 發表于 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函數,可以調整定時器的設置,從而改變輸出信號的頻率。不過這只是一個簡單的示例,實際應用中還需要考慮更多的因素,如頻率切換的穩定性、波形的質量等。
回復

使用道具 舉報

ID:190577 發表于 2024-12-9 15:44 | 顯示全部樓層
飛云居士 發表于 2024-12-9 10:59
實現 0 - 20KHz 頻率控制的改進思路
變量HzNeed的調整:
要實現 0 - 20KHz 的頻率控制,需要在程序的某個 ...

您好,我幫晶振換成8MHZ,不分頻,頻率也只能達到400HZ,再大就不行了,不知道為啥
回復

使用道具 舉報

ID:404160 發表于 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可能與每個周期內的點數或者其他相關因素有關。假設它是每個周期的點數,那么實際能夠達到的最高頻率還會進一步降低,因為每個周期需要足夠的點數來完整地表示波形。
回復

使用道具 舉報

ID:190577 發表于 2024-12-15 09:59 | 顯示全部樓層
飛云居士 發表于 2024-12-9 16:08
定時器計數原理與頻率限制因素分析
當晶振為 8MHz 時,AVR 單片機的定時器時鐘頻率等于晶振頻率(不分頻 ...

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 911网站大全在线观看 | 久久久久久精 | 九九在线精品视频 | 在线中文字幕日韩 | 久久国产综合 | 91xxx在线观看 | 日日夜夜天天 | 国产成人精品久久二区二区91 | 日韩精品在线免费观看 | 成人在线视频免费观看 | 久久精品视频12 | 又黄又爽的网站 | 欧美黑人一级爽快片淫片高清 | 成人福利视频网站 | 欧美久久国产精品 | 国产精品久久精品 | 久久国产福利 | 国产一区二区三区在线 | 中文字幕一区二区三区日韩精品 | 国产精品久久一区二区三区 | 色网站入口 | 韩日一区二区 | 精品二三区 | 国产免费一区二区 | 欧美成人精品 | 中文字幕在线播放不卡 | 91精品国产欧美一区二区 | 在线视频一区二区三区 | 日本超碰 | 伊人看片 | 亚洲中国字幕 | 天天操操操操操 | 九九热免费观看 | www国产成人免费观看视频,深夜成人网 | 欧美亚洲视频 | 欧美成人一级视频 | 999精品视频 | 日韩不卡视频在线观看 | www一级片 | 欧美在线视频二区 | 在线播放91 |