ad9850.h

来自「共享几个AVR单片机的常用代码」· C头文件 代码 · 共 75 行

H
75
字号
#include <avr/io.h>
#include <inttypes.h>
#define sbi(port, bit) (port) |= (1 << (bit))
#define cbi(port, bit) (port) &= ~(1 << (bit))

#define RESET_H	sbi(PORTB,4)
#define RESET_L	cbi(PORTB,4)
#define DATA_H	sbi(PORTB,5)
#define DATA_L	cbi(PORTB,5)
#define WCLK_H	sbi(PORTB,6)
#define WCLK_L	cbi(PORTB,6)
#define FQUD_H	sbi(PORTB,7)
#define FQUD_L	cbi(PORTB,7)
#define FREF 125000//the reference clock frequency of ad9850

void initialize_ad9850(void)
{
	DDRB |= 0xf0;
	WCLK_L;
	FQUD_L;
	WCLK_H;
	WCLK_L;
	FQUD_H;
	FQUD_L;
}

void send_bit_ad9850(uint8_t bit)
{
	if(bit)DATA_H;
	else DATA_L;
	WCLK_H;
	WCLK_L;
}

void send_cmd_ad9850(uint32_t freq_word)
{
	uint8_t i;
	for(i=0;i<32;i++)
		send_bit_ad9850((freq_word>>i)&1);
	for(i=0;i<8;i++)
		send_bit_ad9850(0);
	FQUD_H;
	FQUD_L;
}

uint32_t freq_word_ad9850(float freq)
{
	uint32_t freq_word;
	double devision=freq/FREF;
	freq_word=devision*0xffffffff;
	return freq_word;
}

void update_freq_ad9850(uint16_t freq)
{
	send_cmd_ad9850(freq_word_ad9850(freq));
}

void power_down_ad9850(void)
{
	uint8_t i;
	for(i=0;i<34;i++)
		send_bit_ad9850(0);
	for(i=0;i<40;i++)
		send_bit_ad9850(1);
}

void reset_ad9850(void)
{
	uint8_t i;
	RESET_H;
	for(i=0;i<5;i++);//delay at least 5 clock cycles(ref clock of ad9850,here we delay 5 cycles of MCU clock)
	RESET_L;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?