欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
AD9833資料與單片機驅動程序
[打印本頁]
作者:
lllltttt
時間:
2019-8-10 10:14
標題:
AD9833資料與單片機驅動程序
51單片機驅動AD9833
0.png
(11.33 KB, 下載次數: 84)
下載附件
2019-8-10 16:54 上傳
單片機源程序如下:
#include "ad9833.h"
#include "common.h"
//***************************
// Pin assign
// STM32 AD9833
// GPIOB_Pin_15 ---> FSYNC
// GPIOB_Pin_14 ---> SCK
// GPIOB_Pin_13 ---> DAT
// GPIOB_Pin_12 ---> CS
//***************************
/*端口定義 */
#define PORT_FSYNC GPIOB
#define PIN_FSYNC GPIO_Pin_15
#define PORT_SCK GPIOB
#define PIN_SCK GPIO_Pin_14
#define PORT_DAT GPIOB
#define PIN_DAT GPIO_Pin_13
#define PORT_CS GPIOB
#define PIN_CS GPIO_Pin_12 //數字電位器片選
//****************************************************************
#define FSYNC_0() GPIO_ResetBits(PORT_FSYNC, PIN_FSYNC)
#define FSYNC_1() GPIO_SetBits(PORT_FSYNC, PIN_FSYNC)
#define SCK_0() GPIO_ResetBits(PORT_SCK, PIN_SCK)
#define SCK_1() GPIO_SetBits(PORT_SCK, PIN_SCK)
#define DAT_0() GPIO_ResetBits(PORT_DAT, PIN_DAT)
#define DAT_1() GPIO_SetBits(PORT_DAT, PIN_DAT)
#define CS_0() GPIO_ResetBits(PORT_DAT, PIN_CS)
#define CS_1() GPIO_SetBits(PORT_DAT, PIN_CS)
//初始化AD9833 GPIO
void AD9833_Init_GPIO()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = PIN_FSYNC|PIN_SCK|PIN_DAT|PIN_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(PORT_SCK, &GPIO_InitStructure);
}
/*
*********************************************************************************************************
* 函 數 名: AD9833_Delay
* 功能說明: 時鐘延時
* 形 參: 無
* 返 回 值: 無
*********************************************************************************************************
*/
static void AD9833_Delay(void)
{
uint16_t i;
for (i = 0; i < 1; i++);
}
/*
*********************************************************************************************************
* 函 數 名: AD9833_Write
* 功能說明: 向SPI總線發送16個bit數據
* 形 參: TxData : 數據
* 返 回 值: 無
*********************************************************************************************************
*/
void AD9833_Write(unsigned int TxData)
{
unsigned char i;
SCK_1();
//AD9833_Delay();
FSYNC_1();
//AD9833_Delay();
FSYNC_0();
//AD9833_Delay();
for(i = 0; i < 16; i++)
{
if (TxData & 0x8000)
DAT_1();
else
DAT_0();
AD9833_Delay();
SCK_0();
AD9833_Delay();
SCK_1();
TxData <<= 1;
}
FSYNC_1();
}
/*
*********************************************************************************************************
* 函 數 名: AD9833_AmpSet
* 功能說明: 改變輸出信號幅度值
* 形 參: 1.amp :幅度值 0- 255
* 返 回 值: 無
*********************************************************************************************************
*/
void AD9833_AmpSet(unsigned char amp)
{
unsigned char i;
unsigned int temp;
CS_0();
temp =0x1100|amp;
for(i=0;i<16;i++)
{
SCK_0();
if(temp&0x8000)
DAT_1();
else
DAT_0();
temp<<=1;
SCK_1();
AD9833_Delay();
}
CS_1();
}
/*
*********************************************************************************************************
* 函 數 名: AD9833_WaveSeting
* 功能說明: 向SPI總線發送16個bit數據
* 形 參: 1.Freq: 頻率值, 0.1 hz - 12Mhz
2.Freq_SFR: 0 或 1
3.WaveMode: TRI_WAVE(三角波),SIN_WAVE(正弦波),SQU_WAVE(方波)
4.Phase : 波形的初相位
* 返 回 值: 無
*********************************************************************************************************
*/
void AD9833_WaveSeting(double Freq,unsigned int Freq_SFR,unsigned int WaveMode,unsigned int Phase )
{
int frequence_LSB,frequence_MSB,Phs_data;
double frequence_mid,frequence_DATA;
long int frequence_hex;
/*********************************計算頻率的16進制值***********************************/
frequence_mid=268435456/25;//適合25M晶振
//如果時鐘頻率不為25MHZ,修改該處的頻率值,單位MHz ,AD9833最大支持25MHz
frequence_DATA=Freq;
frequence_DATA=frequence_DATA/1000000;
frequence_DATA=frequence_DATA*frequence_mid;
frequence_hex=frequence_DATA; //這個frequence_hex的值是32位的一個很大的數字,需要拆分成兩個14位進行處理;
frequence_LSB=frequence_hex; //frequence_hex低16位送給frequence_LSB
frequence_LSB=frequence_LSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
frequence_MSB=frequence_hex>>14; //frequence_hex高16位送給frequence_HSB
frequence_MSB=frequence_MSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
Phs_data=Phase|0xC000; //相位值
AD9833_Write(0x0100); //復位AD9833,即RESET位為1
AD9833_Write(0x2100); //選擇數據一次寫入,B28位和RESET位為1
if(Freq_SFR==0) //把數據設置到設置頻率寄存器0
{
frequence_LSB=frequence_LSB|0x4000;
frequence_MSB=frequence_MSB|0x4000;
//使用頻率寄存器0輸出波形
AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器0的低14位數據輸入
AD9833_Write(frequence_MSB); //H14 頻率寄存器的高14位數據輸入
AD9833_Write(Phs_data); //設置相位
//AD9833_Write(0x2000); /**設置FSELECT位為0,芯片進入工作狀態,頻率寄存器0輸出波形**/
}
if(Freq_SFR==1) //把數據設置到設置頻率寄存器1
{
frequence_LSB=frequence_LSB|0x8000;
frequence_MSB=frequence_MSB|0x8000;
//使用頻率寄存器1輸出波形
AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器1的低14位輸入
AD9833_Write(frequence_MSB); //H14 頻率寄存器1為
AD9833_Write(Phs_data); //設置相位
//AD9833_Write(0x2800); /**設置FSELECT位為0,設置FSELECT位為1,即使用頻率寄存器1的值,芯片進入工作狀態,頻率寄存器1輸出波形**/
}
if(WaveMode==TRI_WAVE) //輸出三角波波形
AD9833_Write(0x2002);
if(WaveMode==SQU_WAVE) //輸出方波波形
AD9833_Write(0x2028);
if(WaveMode==SIN_WAVE) //輸出正弦波形
AD9833_Write(0x2000);
}
復制代碼
所有資料51hei提供下載:
AD9833模塊配套資料(帶ad8051 mcp41010).zip
(4.93 MB, 下載次數: 254)
2019-8-10 10:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
a25575703
時間:
2019-8-19 20:58
感謝樓主的分享。
作者:
kyqhdf0583
時間:
2020-4-20 10:26
學習一下,感謝樓主分享
作者:
爹爹
時間:
2020-6-16 07:14
樓主問您一下,您這個AD9833和51連接時,AD9833的VCC和GND應該和單片機哪個引腳連接
作者:
陪襯者
時間:
2021-3-16 21:09
叼爆了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1