Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
ad9854驱动_a4988驱动最佳电流,希望能够帮助你!!!。
CSDN话题挑战赛第2期
参赛话题:学习笔记
AD9850/AD9851
AD9850/AD9851 模块是采用ADI 应用最广泛的DDS(AD9850 和 AD9851)制作的模块。
ADI 的性能就不用多说了。模块主要参考 AD9850 和 AD9851 的资料做的。
主要功能特点:
功能框图============================================================
1:下载对应的驱动 程序
//***************************************************// //函数1: ad9850_reset() // //函数2: ad9850_reset_serial() // //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)// //函数4: ad9850_wr_serial(unsigned char w0,double frequence)// //***************************************************// // 子程序说明 // //***************************************************// //函数1: ad9850_reset() // 复位ad9850,之后为并口写入模式 //函数2: ad9850_reset_serial() // 复位ad9850,之后为串口写入模式 //函数3: ad9850_wr_parrel(unsigned char w0,double frequence) // 并口写ad9850数据,w0为ad9850中w0的数据,frequence // 为写入的频率 //函数4: ad9850_wr_serial(unsigned char w0,double frequence) // 串口写ad9850数据,w0为ad9850中w0的数据,frequence // 为写入的频率 //需定义的位: //ad9850_w_clk ; //ad9850_fq_up ; //ad9850_rest ; //ad9850_bit_data ; //例: //sbit ad9850_w_clk =P2^2; //sbit ad9850_fq_up =P2^1; //sbit ad9850_rest =P2^0; //sbit ad9850_bit_data =P1^7; //***************************************************// // 写数据说明 // //***************************************************// //写数据例: // ad9850_reset() // wr_lcd02_data(unsigned char x) // ad9850_wr_parrel(0x01,1000) // ad9850_wr_serial(0x01,1000) //***************************************************// //---------------------------------------------------// // 程序 // //---------------------------------------------------// # include <reg51.h> # include <stdio.h> # include <intrins.h> sbit ad9850_w_clk =P2^2; //P2.2口接ad9850的w_clk脚/PIN7 sbit ad9850_fq_up =P2^1; //P2.1口接ad9850的fq_up脚/PIN8 sbit ad9850_rest =P2^0; //P2.0口接ad9850的rest脚/PIN12 sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25 //P1为8位数据口 //***************************************************// // ad9850复位(并口模式) // //---------------------------------------------------// void ad9850_reset() {
ad9850_w_clk=0; ad9850_fq_up=0; //rest信号 ad9850_rest=0; ad9850_rest=1; ad9850_rest=0; } //***************************************************// // ad9850复位(并口模式) // //---------------------------------------------------// void ad9850_reset_serial() {
ad9850_w_clk=0; ad9850_fq_up=0; //rest信号 ad9850_rest=0; ad9850_rest=1; ad9850_rest=0; //w_clk信号 ad9850_w_clk=0; ad9850_w_clk=1; ad9850_w_clk=0; //fq_up信号 ad9850_fq_up=0; ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 向ad9850中写命令与数据(并口) // //---------------------------------------------------// void ad9850_wr_parrel(unsigned char w0,double frequence) {
unsigned char w; long int y; double x; //计算频率的HEX值 x=/125;//适合125M晶振 //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!! frequence=frequence/; frequence=frequence*x; y=frequence; //写w0数据 w=w0; P1=w; //w0 ad9850_w_clk=1; ad9850_w_clk=0; //写w1数据 w=(y>>24); P1=w; //w1 ad9850_w_clk=1; ad9850_w_clk=0; //写w2数据 w=(y>>16); P1=w; //w2 ad9850_w_clk=1; ad9850_w_clk=0; //写w3数据 w=(y>>8); P1=w; //w3 ad9850_w_clk=1; ad9850_w_clk=0; //写w4数据 w=(y>>=0); P1=w; //w4 ad9850_w_clk=1; ad9850_w_clk=0; //移入始能 ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 向ad9850中写命令与数据(串口) // //---------------------------------------------------// void ad9850_wr_serial(unsigned char w0,double frequence) {
unsigned char i,w; long int y; double x; //计算频率的HEX值 x=/125;//适合125M晶振 //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!! frequence=frequence/; frequence=frequence*x; y=frequence; //写w4数据 w=(y>>=0); for(i=0;i<8;i++) {
ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w3数据 w=(y>>8); for(i=0;i<8;i++) {
ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w2数据 w=(y>>16); for(i=0;i<8;i++) {
ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w1数据 w=(y>>24); for(i=0;i<8;i++) {
ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w0数据 w=w0; for(i=0;i<8;i++) {
ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //移入始能 ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 测试程序1000Hz // //---------------------------------------------------// main() {
P0=0x00; P1=0x00; P2=0x00; P3=0x00; //---------------------------------------------------// //---------------------------------------------------// //串行写1000Hz程序 ad9850_reset_serial(); ad9850_wr_serial(0x00,1000); //---------------------------------------------------// while(1) {
} }
OUT1 和OUT2 端能测试到对应输出 1KHz 信号。如需测试方波,调节可变电位器, 可在方波 1 和方波 2 端测试到方波。
原理图:
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章