📄 ad9850.h
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -