首页 > 芯片 > 半导体 > ad9833多少位,请问AD9833的频率控制字怎么写 希望能举一个实例要求详细解答过程

ad9833多少位,请问AD9833的频率控制字怎么写 希望能举一个实例要求详细解答过程

来源:整理 时间:2024-09-06 12:13:23 编辑:亚灵电子网 手机版

1,请问AD9833的频率控制字怎么写 希望能举一个实例要求详细解答过程

先计算十进制的控制字,转成28位的二进制数,然后再分成高低14位并补成16位,补的两位为频率寄存器的选择。

请问AD9833的频率控制字怎么写 希望能举一个实例要求详细解答过程

2,通过硬件SPI设置AD9833输出方波怎么弄延迟关键么SPI写函数已经被厂

第一步,查看芯片手册配置SPI工作方式,控制芯片的SPI工作方式必须和AD9833的一样。第二步,使用厂商做好的函数进行AD9833的设置。(我没有用过AD9833)但是带串行接口的芯片一般都需要设置一下,怎么设置需要看AD手册了。第三步,向AD发送你想要输出的数字量吧。

通过硬件SPI设置AD9833输出方波怎么弄延迟关键么SPI写函数已经被厂

3,AD9833产生三角波的问题

有可能是你的负载上有电容,你断开其他的电路,直接去测量AD9833的输出脚就可以了,下面是一个例程,工参考#include "head.h"#include "cpu.h"#include "AD9833.h"//定义延时变量,用于宏AD9833_Delay()()UNCHAR AD9833_delay_t;/******************AD9833 延时******************//*宏定义:AD9833_Delay() */#define AD9833_Delay()\AD9833_delay_t = (AD9833_Delay_Value);\while ( --AD9833_delay_t!= 0 );\}/************延迟N 个SCLK 节拍***************/void Delay_N_MCLK(UNCHAR N)UNCHAR i,t;for(i=0;i<=N;i++) AD9833_SCLK = 1; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK; for(t=0;t<20;t++); }}/******************向单个AD9833 写入一个16位的信息字节******************///AD9833_16 表示写入的信息,Which_AD9833 表示写入哪个AD9833;void Write_16bit_One(UNCHAR Char_1,UNCHAR Char_2, UNCHAR Which_AD9833_CS)UNCHAR i,t;AD9833_SCLK = 1; switch(Which_AD9833_CS) //确定片选 case 1: P1=~0x80; break; case 2: P1=~0x40; break; case 3: P1=~0x20; break; case 4: P1=~0x10; break; case 5: P1=~0x08; break; case 6: P1=~0x04; break; default: P1=~0x00; break; }for(i=0;i<8;i++) //对于确定次数的循环建议使用for()结构 if((Char_1<<i) &0x80)//确定SDATA上的数据 AD9833_SDATA = 1; } else AD9833_SDATA = 0; } AD9833_SCLK = 0; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK;//在下降沿写?AD9833_Delay(); //_nop_(); AD9833_Delay(); for(t=0;t<10;t++); }for(i=0;i<8;i++) //对于确定次数的循环建议使用for()结构 if((Char_2<<i) &0x80)//确定SDATA上的数据 AD9833_SDATA = 1; } else AD9833_SDATA = 0; } AD9833_SCLK = 0; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK;//在下降沿写?AD9833_Delay(); //_nop_(); AD9833_Delay(); for(t=0;t<10;t++); }P1 = 0xff;}/******************向所有AD9833 写入一个16位的信息字节******************/void Write_16bit_All(UNINT AD9833_16_Data)UNCHAR t,i;i = 8;AD9833_SCLK = 1; P1 = 0xff; //片选P1 = 0x03;for(i=0;i<16;i++) //对于确定次数的循环建议使用for()结构 if((AD9833_16_Data<<i) &0x8000)//确定SDATA上的数据 AD9833_SDATA = 1; } else AD9833_SDATA = 0; } AD9833_SCLK = 0; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK;//在下降沿写?AD9833_Delay(); //_nop_(); AD9833_Delay(); for(t=0;t<10;t++); while (--t != 0); }P1 = 0xff; //片选拉高Delay_N_MCLK(8);}/******************初始化AD9833 ******************///主要实现控制寄存器的D8位的RESET 置1,使得内部所有寄存器//初始化为频率为50,相位移为0void AD9833_Init(void) Write_16bit_All_Two(0x21,0x00); //RESET=1, //Write_28bit_One_FR(1, 0, 0x4000,0x0000 );//改FREG0 //AD9833_50HZ_0Ps_Init();//初始化为标准三相电源 Write_16bit_All_Two(0x00,0x00); //RESET=0, }/******************初始化为标准三相电源 ******************///初始化为频率为50,相位移为0void AD9833_50HZ_0Ps_Init(void) Write_28bit_One_FR(1, 0, 0x6a,0x40,0x40,0x13 );//改FREG0 Write_28bit_One_FR(1, 1, 0xaa,0x40,0x80,0x13);//改FREG1 Write_12bit_One_PR(1, 0, 0, 0,0);//改PREG0 Write_12bit_One_PR(1, 1, 0, 0,0);//改PREG1 }/****************** 向单个AD9833写入12位到某一相位寄存器 ******************///if_to_all 0:表示写向单个AD9833;--1:表示写向所有AD9833;//Phase_0_or_1 表示写向哪一个相位寄存器--0:表示写向pREQ0-- 1:表示写向pREQ1//Phase_12_Data: 表示相位信息;//Which_AD9833_CS: 若if_to_all=0, 则使用该变量表示写向哪个AD9833void Write_12bit_One_PR(bit If_to_all, bit Phase_0_or_1, UNCHAR Char_1,UNCHAR Char_2,UNCHAR Which_AD9833_CS)UNINT word_12;if (Phase_0_or_1 == 1)//确定写入的14位信息 word_12= Char_1 |0xE0; //写向PREQ1else word_12= Char_1 |0xC0; //写向PREQ0if (If_to_all == 1) //写动作 Write_16bit_All_Two(word_12,Char_2); }else //写向单个的AD9833 Write_16bit_One(word_12,Char_2,Which_AD9833_CS); }}/****************** 改变某个AD9833 频率寄存器的MSBs 或LSBs ******************///Msbs_or_Lsbs 0:表示写向单个AD9833的LSBs; 1:表示写向所有AD9833的MSBs; //If_to_All 0: 表示写向单个AD9833; 1: 表示写向所有AD9833;//FREQ0_or_1 0:表示写向FREQ0 1:表示写向FREQ1//Msbs_or_Lsbs_14_Data : 表示要写入的内容//Which_AD9833_CS : 如果If_to_All=0, 则使用该变量表示写向哪个AD9833void Write_14bit_One_FR( bit Msbs_or_Lsbs, bit If_to_All,UNCHAR FREQ0_or_1,UNCHAR Char_1,UNCHAR Char_2,UNCHAR Which_AD9833_CS) UNCHAR word_14_h,control_word_h,control_word_l; if (FREQ0_or_1 == 1) //确定写入的14位信息 word_14_h= Char_1 |0x80; } else //写向FREQ0 word_14_h= Char_2 |0x40; }if(Msbs_or_Lsbs == 1) //确定控制寄存器的内容 control_word_h= 0x10 ; control_word_l = 0x00; }else control_word_h= 0x00 ; control_word_l = 0x00; }if (If_to_All == 1) //写动作 Write_16bit_All_Two(0x20,0x00); Write_16bit_All_Two(word_14_h,Char_2); }else //写向单个的AD9833 Write_16bit_One(0x20,0x00, Which_AD9833_CS); Write_16bit_One(word_14_h,Char_2, Which_AD9833_CS); }}/****************** 向AD9833写入连续的28位到某一频率寄存器 ******************///if_to_all 0:表示写向单个AD9833; 1:表示写向所有AD9833;//FREQ0_or_1 0:表示写向FREQ0 1:表示写向FREQ1void Write_28bit_One_FR(bit If_to_all, UNCHAR FREQ0_or_1, UNCHAR low_14_h,UNCHAR low_14_l,UNCHAR high_14_h,UNCHAR high_14_l) if (If_to_all==1) //写动作 Write_16bit_All_Two(0x20,0x00); Write_16bit_All_Two(low_14_h,low_14_l); Write_16bit_All_Two(high_14_h,high_14_l); } else Write_16bit_One(0x20,0x00, FREQ0_or_1); Write_16bit_One(low_14_h,low_14_l, FREQ0_or_1); Write_16bit_One(high_14_h,high_14_l, FREQ0_or_1); }}////////////////////替代void Write_16bit_All(UNINT AD9833_16_Data),//,一下函数可以用void Write_16bit_All_Two(UNCHAR Char_1,UNCHAR Char_2) UNCHAR t,i; i = 8; AD9833_SCLK = 1; P1 = 0xff; //片选 P1 = 0x03; for(i=0;i<8;i++) //对于确定次数的循环建议使用for()结构 if((Char_1<<i) &0x80)//确定SDATA上的数据 AD9833_SDATA = 1; } else AD9833_SDATA = 0; } AD9833_SCLK = 0; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK;//在下降沿写?AD9833_Delay(); //_nop_(); AD9833_Delay(); for(t=0;t<10;t++); } for(i=0;i<8;i++) //对于确定次数的循环建议使用for()结构 if((Char_2<<i) &0x80)//确定SDATA上的数据 AD9833_SDATA = 1; } else AD9833_SDATA = 0; } AD9833_SCLK = 0; for(t=0;t<20;t++); AD9833_SCLK = ~AD9833_SCLK;//在下降沿写?AD9833_Delay(); //_nop_(); AD9833_Delay(); for(t=0;t<10;t++); } P1 = 0xff; //片选拉高 Delay_N_MCLK(8);}

AD9833产生三角波的问题

文章TAG:多少ad9833多少位请问AD9833的频率控制字怎么写希望能举一个实例要求详细解答过程

最近更新

  • 发电机没电压输出故障,小发电机启动后无输出电压发电机没电压输出故障,小发电机启动后无输出电压

    发电机的电压调节器有故障。汽油发电机产生的电压达不到,发电机的励磁电流主要由调压器提供,此时调压器没有输出,拆下它,直到看到发电机电压上升,维修后,它只能产生电压超过100伏的电力,机组.....

    半导体 日期:2024-09-06

  • 如何测宿舍电压,宿舍电压怎么测?如何测宿舍电压,宿舍电压怎么测?

    宿舍电压不好!我想在宿舍做饭,但是宿舍电压小,所以我找到了这个多功能电饭煲。宿舍限电问题?宿舍变压器神器可以轻松解决电力不足,你有没有想过如何在宿舍里享受自由用电的快乐,而不用担心突.....

    半导体 日期:2024-09-06

  • 甲类功率放大电路的,什么是甲类功放?甲类功率放大电路的,什么是甲类功放?

    甲类功率放大器是工作在甲类(A类)工作状态的功率放大器。A类功率放大器消耗高功率,甲类功率放大器电路,晶体管的导通角为,甲类功率放大器的特点如下:甲类功率放大器的线性度最好,各输出晶体.....

    半导体 日期:2024-09-06

  • 控制电路的连接方法,电路连接的基本方式控制电路的连接方法,电路连接的基本方式

    开关与导线连接,使电路处于集成状态,开关可用于控制电路的平滑度。接入电路并不容易,现在我将向你解释如何连接开关,第一种方法:双控开关电路的交替接线法双控开关电路的交替接线法是指两.....

    半导体 日期:2024-09-06

  • 变压器电焊机次级电压,焊接变压器的输出电压变压器电焊机次级电压,焊接变压器的输出电压

    点焊机的二次电压为0左右,焊机的二次电压为低压大电流。虽然电焊机和变压器都是绕在铁芯上的线圈,但电焊机和变压器的特性完全不同:电焊机的空载电压高(大约,二次电流与二次电压无关,只与二.....

    半导体 日期:2024-09-06

  • 隔离dcdc芯片厂商,dc-dc隔离电源芯片隔离dcdc芯片厂商,dc-dc隔离电源芯片

    芯片。在模拟芯片领域,国产芯片有XL,国产厂商可以在技术指标、性能和价格上与国际厂商竞争,你可以使用TI的webench工具找到它,就博达产品而言,两家供应商的外观尺寸和输出引脚设计均可与各.....

    半导体 日期:2024-09-05

  • 上电的瞬间大电压,为什么通电瞬间电压高?上电的瞬间大电压,为什么通电瞬间电压高?

    充电时电容低于输出电压。另一种方法是将其更换为高倍率电池,例如飞机模型电池,可以瞬间放电几十C,并增加电池的容量,这可以减少启动电流过大导致的电压下降,然而,大多数操作中的过电压不会.....

    半导体 日期:2024-09-05

  • th22671电路图,tb2926hq电路图th22671电路图,tb2926hq电路图

    电路原理图、部分时钟电路图、MOS外部时钟电路图、部分时钟电路、案例1校正电路图方案二:校准电路由基本RS触发器和与门组成,复位电路和复位状态MCS-单片机的复位由外部电路实现。j-;}if.....

    半导体 日期:2024-09-05