Вот так я представляю, что можно работать с переменной freq
Спойлер
Код: Выделить всё
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Соединение Меги с AD9850:
MOSI ---> D7
SCK ---> W_CLK
PB2 ---> FQ_UD
Date : 26.05.2013
Author : PerTic@n
Company : If You Like This Software,Buy It
Chip type : ATmega8
AVR Core Clock frequency: 8,000000 MHz
*****************************************************/
#include <mega8.h>
#include <spi.h>
#define FQ_UD PORTB.2 // подключен вывод FQ_UD AD9850
/*********** Переменные **************/
union un_dataword //5 Байт, объединение содержит данные для передачи AD9850
{
unsigned long dataword_freq; // 32 бит слово, для управления частотой
unsigned char dataword_byte[5]; // массив для побайтного доступа
}un;
unsigned long freq =0; // частота Гц
unsigned char i; // счетчик
float k = 34.359738368; // коэффициент 4294967296/F = 34.359738368 для 125MHz тактовой
void set_frq(void)
{
un.dataword_byte[4]=0b00000000; // два младших бита (0 и 1) Обязательно = 0.
// бит 2 устанавливает режим Power-Down
// пять старших бит управляют фазой.
un.dataword_freq = freq*k; // частота
FQ_UD =1;
FQ_UD =0;
for (i=0; i<5; i++)
{
spi(un.dataword_byte[i]);
}
FQ_UD =1;
FQ_UD =0;
}
void main(void)
{
PORTB=0x00;
DDRB=0x2D;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: LSB First
SPCR=0x70;
SPSR=0x00;
TWCR=0x00;
while (1)
{
set_frq();
freq = 500000;
}
}
Но эт пока теория, надо на практике проверить что будет если freq = 39999999;
bobr25 спасибо.






