AD程序匯總(20210326234812)_第1頁
AD程序匯總(20210326234812)_第2頁
AD程序匯總(20210326234812)_第3頁
AD程序匯總(20210326234812)_第4頁
AD程序匯總(20210326234812)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、* * AVR SPI 接口控制 AD9833 * 功能: M8 SPI 接口控制 AD9833 AD9833 為 DDS(Direct Digital Frequency Synthesis) 直接數(shù)字頻率合成器 可產(chǎn)生的正弦波、三角波、方波 作者: hb8421 編譯器: WINA VR 開始時(shí)間: 2007 年 7 月 3 日 10:33:26 結(jié)束時(shí)間: */ #include #include #include #include /時(shí)鐘定為內(nèi)部晶振 8MHz,F_CPU=8000000 #include #include #include int main(void) /上電默認(rèn) D

2、DRx=0 x00,PORTx=0 x00 輸入,無上拉電阻 /不用的管腳使能內(nèi)部上拉電阻。 PORTB=0 xFF; PORTC=0 xFF; PORTD=0 xFF; /設(shè)定 SPI 接口 PORTB=(1AD9833_CE)|(1AD9833_SDATA)|(1AD9833_SCLK); DDRB =(1AD9833_CE)|(1AD9833_SDATA)|(1AD9833_SCLK); init_ad9833(); while(1) ctr8421(); switch (ctr_v) case 6 :output(6);break; case 7 :output(7);break; c

3、ase 8 :output(10);break; case 9 :output(50);break; default :output(0);break; #ifndef _main_H_ #define _main_H_ 1 /PD0 /PD1 /控制位 #define ctr8 0 #define ctr4 1 #define ctr2 2 #define ctr1 3 #define pn 7 #define T1_OUT /全局變量聲明 /PD2 /PD3 /PD7 0/PC0 脈沖輸出 volatile unsigned char ctr_v;/ 撥碼開關(guān) 8421 的輸出 volat

4、ile unsigned char ctr_pn;/ 正負(fù)脈沖按鈕開關(guān)的輸出 volatile unsigned int T1_TOP;/ 設(shè)置 T1 的時(shí)間值 #endif /* _main_H_ */ /* 控制文件 對控制端口撥碼開關(guān) 8421 判斷和對正負(fù)脈沖按鈕開關(guān)的判斷 */ #include #include #include #include #include #include / /ctr8421 :對控制端口撥碼開關(guān) 8421 判斷 / /輸入:無 /輸出: ctr_v unsigned char / unsigned char ctr8421(void) /ctr=0 i

5、f(PIND /ctr=1 else if(PIND /ctr=2 else if(PIND /ctr=3 else if(PIND /ctr=4 else if(PIND /ctr=5 else if(PIND /ctr=6 else if(PIND /ctr=7 else if(PIND /ctr=8 else if(!(PIND /ctr=9 else if(!(PIND return ctr_v; / /ctrpn :對正負(fù)脈沖按鈕開關(guān)的判斷 / /輸入:無 /輸出: ctr_p unsigned char / unsigned char ctrpn(void) if(!(PIND e

6、lse ctr_pn=1; return ctr_pn; #ifndef _control_H_ #define _control_H_ 1 unsigned char ctr8421(void); unsigned char ctrpn(void); #endif /* _control_H_ */ /* AD9833 功能 :可編程波形發(fā)生器,能夠產(chǎn)生正弦波、三角波、方波輸出。 特點(diǎn):主頻時(shí)鐘為 25MHz 時(shí),精度為,主頻時(shí)鐘為 1MHz 時(shí),精度可以達(dá)到。 輸出正弦波頻率fOUT = M (fMCLK/2A28 ) M為頻率控制字,由外部編程給定,其范圍為0 M 2人28 1。 fMC

7、LK 為外部輸入晶振。 FSYNC 引腳是使能引腳,電平觸發(fā)方式,低電平有效。進(jìn)行串行數(shù)據(jù)傳輸時(shí),F(xiàn)SYNC 引腳 必須置低, 要注意FSYNC有效到SCLK下降沿的建立時(shí)間t7的最小值。FSYNC置低后,在16個(gè)SCLK 的下降沿?cái)?shù)據(jù) 被送到 AD9833 的輸入移位寄存器,在第 16 個(gè) SCLK 的下降沿 FSYNC 可以被置高,但要 注意在 SCLK 下降 沿到 FSYNC 上升沿的數(shù)據(jù)保持時(shí)間 ts 的最小和最大值。當(dāng)然,也可以在 FSYNC 為低電平 的時(shí)候,連 續(xù)加載多個(gè) 16 位數(shù)據(jù),僅在最后一個(gè)數(shù)據(jù)的第 16 個(gè) SCLK 的下降沿的時(shí)將 FSYNC 置高, 最后需要注意 的

8、是,寫數(shù)據(jù)時(shí) SCLK 時(shí)鐘為高低電平脈沖信號,但是,在 FSYNC 剛開始變?yōu)榈蜁r(shí)(即將 開始寫數(shù) 據(jù)時(shí)),SCLK必須為高電平(注意t11這個(gè)參數(shù))。 當(dāng) AD9833 初始化時(shí), 為了避免 DAC 產(chǎn)生虛假輸出, RESET 必須置為 1( RESET 不會復(fù)位 頻率、相位和 控制寄存器) ,直到配置完畢,需要輸出時(shí)才將 RESET 置為 0;RESET 為 0后的 89 個(gè) MCLK 時(shí)鐘周期 可在 DAC 的輸出端觀察到波形。 AD9833 數(shù)據(jù)傳輸格式: 對于單個(gè) 16 位數(shù)據(jù)來說,高位在前,低位在后。 對于頻率寄存器和相位寄存器來說, 先是控制字, 再是數(shù)據(jù)低字節(jié), 最后是數(shù)據(jù)高

9、字節(jié)。 */ #include #include #include #include #include #include /* delay_nus:長延時(shí)函數(shù) (GCC 內(nèi)部延時(shí)函數(shù)的延時(shí)過短 ) 輸入?yún)?shù) : t:延時(shí)時(shí)間 us */ void delay_nus(unsigned int t) while (t-) _delay_us(1); /* delay_nms:長延時(shí)函數(shù) (GCC 內(nèi)部延時(shí)函數(shù)的延時(shí)過短 ) 輸入?yún)?shù) : t:延時(shí)時(shí)間 ms */ void delay_nms(unsigned int t) while (t-) _delay_ms(1); / /Write_wo

10、rd : 寫 16 位數(shù)據(jù)到 SPI 接口,軟件 SPI 方式 /輸入?yún)?shù): data: 數(shù)據(jù)(16 位 ) / void Write_word(unsigned int data) unsigned char i; SCL_H; SDA_H; FSYNC_H; delay_nus(200); FSYNC_L; for(i=0;i16;i+) if(data else SDA_L; SCL_L; delay_nus(5); SCL_H; data=data1; delay_nus(2); FSYNC_H; SCL_L; delay_nus(200); void init_ad9833(void

11、) Write_word(0 x2100); /28 位連續(xù),選擇頻率 0, 相位 0, RESET=1 Write_word(0 x4000); /寫頻率 0 寄存器的低字節(jié) LSB Write_word(0 x4000); /寫頻率 0 寄存器的高字節(jié) MSB Write_word(0 x2900); /28 位連續(xù),選擇頻率 0, 相位 0, RESET=1 Write_word(0 x8000); /寫頻率 0 寄存器的低字節(jié) LSB Write_word(0 x8000); /寫頻率 0 寄存器的高字節(jié) MSB Write_word(0 xC000); /寫頻率 0 寄存器的低字節(jié)

12、LSB Write_word(0 xF000); /寫頻率 0 寄存器的高字節(jié) MSB Write_word(0 x2000); /28 位連續(xù),選擇頻率 0, 相位 0, RESET=0 / /output :AD9833 輸出指定頻率的正弦波 / /輸入?yún)?shù): freq_value 類型: unsigned long /輸出參數(shù):無 / void output(unsigned long freq_value) unsigned long dds; unsigned int dds_l,dds_h; dds= freq_value *; /6/ FMCLK dds=dds16; /高字節(jié)

13、dds_l=dds_l2; dds_l=dds_l dds_l=dds_l | 0 x4000; dds_h=dds_h dds_h=dds_h | 0 x4000; Write_word(0 x2000); /28 位連續(xù),選擇頻率 0,相位 0, RESET=0 Write_word(dds_l); Write_word(dds_h); /AD9833 頭文件 #ifndef _AD9833_H_ #define _AD9833_H_ 1 /定義 AD9833 的時(shí)鐘 #define FMCLK 1000000 /M8 管腳定義 #define AD9833_CE #define AD9833_SDA TA #define AD9833_SCLK /宏定義 /AD9833 的主晶振為 1MHz 2/PB2 SS 3/PB3 MOSI 5/PB5 SCK /置 CE 為低電平,使能 SPI 接口, /置 CE 為高電平,關(guān)閉 SPI 接口, /SPI 總線時(shí)鐘線 /SPI 總線數(shù)據(jù)線 #define FSY

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論