平台:
树莓派、geany软件
C语言编程
程序源码:
#include <wiringPi.h>
#include <stdio.h>
#define Pin 21
//定义AD9850模块使用的GPIO口
#define FQ_UD 22
#define DATA 23
#define CLK 24
#define RESET 25
//设置1kHz方波的频率参数,并将其写入AD9850芯片
void set_frequency(unsigned char W0,unsigned long freq)
{
unsigned char i,wdata ;
unsigned long y ;
y=4294967296.0/125;
y*=(((float)freq)/1000000);
wdata = y>>0 ; //写w4
digitalWrite(CLK, LOW);
digitalWrite(FQ_UD, LOW);
digitalWrite(RESET, LOW);
digitalWrite(RESET, HIGH);
delay(3);
digitalWrite(RESET, LOW);
digitalWrite(CLK, LOW);
digitalWrite(CLK, HIGH);
delay(3);
digitalWrite(CLK, LOW);
digitalWrite(FQ_UD, LOW);
digitalWrite(FQ_UD, HIGH);
delay(3);
digitalWrite(FQ_UD, LOW);
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
digitalWrite(DATA, HIGH);
else
digitalWrite(DATA, LOW);
digitalWrite(CLK, HIGH);
wdata >>= 1;
digitalWrite(CLK, LOW);
}
wdata = y>>8 ; //写w3
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
digitalWrite(DATA, HIGH);
else
digitalWrite(DATA, LOW);
digitalWrite(CLK, HIGH);
wdata >>= 1;
digitalWrite(CLK, LOW);
}
wdata = y>>16 ; //写w2
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
digitalWrite(DATA, HIGH);
else
digitalWrite(DATA, LOW);
digitalWrite(CLK, HIGH);
wdata >>= 1;
digitalWrite(CLK, LOW);
}
wdata = y>>24 ; //写w1
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
digitalWrite(DATA, HIGH);
else
digitalWrite(DATA, LOW);
digitalWrite(CLK, HIGH);
wdata >>= 1;
digitalWrite(CLK, LOW);
}
wdata = W0 ; //写w0
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
digitalWrite(DATA, HIGH);
else
digitalWrite(DATA, LOW);
digitalWrite(CLK, HIGH);
wdata >>= 1;
digitalWrite(CLK, LOW);
}
digitalWrite(FQ_UD, HIGH);
digitalWrite(FQ_UD, LOW);
}
int main(){
unsigned long FREQ=100000;
//初始化WiringPi库和GPIO口
wiringPiSetup();
pinMode(FQ_UD, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(Pin,OUTPUT);
//调用函数设置AD9850输出信号
set_frequency(0x00,FREQ);
while(1)
{
digitalWrite(Pin,1);
delay(200);
digitalWrite(Pin,0);
delay(200);
}
}
实验结果:
补充:
根据set_frequency(0x00,FREQ);设置AD9850输出固定频率波形,AD9850两个引脚分别控制输出频率为FREQ的方波和正弦波,其中方波可通过电位器控制其占空比。