Google_links

воскресенье, 3 августа 2014 г.

DAC MCP4921 generation Sinus output + programm

DAC MCP4921 generation Sinus output. MCU dsPIC33FJ64GP706 Microchip.
Figure 3. top signal is pack size of 16 bits send MCP4921. Below this is the signal at the output of DAC MCP4921
Figure 1. MCP4921 Connect
Figure 2. MCP4921 CS and SCK




Figure 3. top signal is pack size of 16 bits which peredayutsya MCP4921. Below this is the signal at the output of DAC MCP4921

Soft

/*=======================================================================
prepare values ​​for sinus
=======================================================================*/
void Sinus_OUT(void)
{
RAD_STEP = 6.28/NUM_OUT;
RAD_ACCUM = 0;
for(i = 0; i < NUM_OUT; i++)
{
SIN_VALUE = sin(RAD_ACCUM);
if(SIN_VALUE >= 0)
{
VALUE_OUT[i] = (int)((SIN_VALUE * 2048) + 2047);
}
else
{
VALUE_OUT[i] = (int)(((SIN_VALUE * 2048) + 2048));
}
RAD_ACCUM = RAD_ACCUM + RAD_STEP;
}
}


/******************************************************************************
           Init  SPI
 ******************************************************************************/
void Init_SPI1(void)
{
    // setup the SPI peripheral
    SPI1STAT = 0x0000;          // disable the SPI module (just in case)
    SPI1CON1bits.MSTEN = 1;  // Master Mode
    SPI1CON1bits.MODE16 = 1; // 16 bit format
    SPI1CON1bits.SMP = 0;    
    SPI1CON1bits.SSEN = 0;
    SPI1CON1bits.SPRE = 6;   
    SPI1CON1bits.PPRE = 3;   
    SPI1CON1bits.CKE = 0x01; // Clock Edge Select bit  0x01
    SPI1CON1bits.CKP = 0x00; //  SCK

    SPI1STAT = 0x8000;// enable the SPI module

    IPC2bits.SPI1IP = 2;
    IFS0bits.SPI1IF = 0;
    //IEC0bits.SPI1IE = 1; 
}

/******************************************************************************
     Send command to MCP4921 SPI (16bit)
 ******************************************************************************/
void Write_SPI1(int command)
{
    int temp0;
    SPI1_CS = 0;                  // CS LOW
    SPI1BUF = command;            // write the data out to the SPI peripheral
    while(SPI1STATbits.SPITBF) ;  // Cheking FLAG
    while(!SPI1STATbits.SPIRBF) ; // Cheking FLAG
    temp0 = SPI1BUF;              // Warning! Need read SPI1BUF, else error Transmit
    SPI1_CS = 1;                  // CS HI
    Nop();  // total delay 50nS
    Nop();
    SPI1_LDAC = 0;                // Output data MCP4921
    Nop();  // total delay 100nS
    Nop();
    Nop();
    Nop();
    SPI1_LDAC = 1;                // Output data MCP4921
}


/***********************************************************************
 TIM2 interrupt,  DAC MCP4921 generation Sinus output  
 ***********************************************************************/
void __attribute__((interrupt, no_auto_psv)) _T2Interrupt(void)
{
 IFS0bits.T2IF = 0; // Clear Timer 2 interrupt
 DmaBuffer = (0x0001)&(~(DmaBuffer & 0x0001));
 LATBbits.LATB0 = DmaBuffer;
 if(i >= NUM_OUT)
{
     Nop();
i = 0;
}

 Write_SPI1(VALUE_OUT[i] | 0x3000); // Sin OUT MCP4921
 i = i + 1;

}

/*=============================================================================
Timer 2 time delay for output via the SPI port for external DAC MCP4921
=============================================================================*/
void Init_TMR2(void)
{
    TMR2 = 0x0000;
    PR2  = TIM2_PR2;        // Trigger 5 usec  (value 199)
    IFS0bits.T2IF = 0; // Clear Timer 2 interrupt
    IPC1bits.T2IP = 2;          // приоритет 2
    IEC0bits.T2IE = 1; // Enable Timer 2 interrupt
    T2CONbits.TON = 1; // Start Timer 3
}

/******************************************************************************
            Init Ports
 ******************************************************************************/
void Ports_Init (void)
{
//**********************************
    TRISB = 0x0000;
    TRISBbits.TRISB2 = 0; // SS1 SPI1
//**********************************
    TRISCbits.TRISC2 = 1; // RC2 AN17 - analog
//**********************************
    TRISD = 0x0000;
//**********************************
    TRISFbits.TRISF2 = 1; // SDI SPI вход
    Nop();
    TRISFbits.TRISF3 = 0; // MCP4921 SDO SPI
    Nop();
    TRISFbits.TRISF4 = 0; // MCP4921 LDAC SPI
    Nop();
    LATFbits.LATF4 = 1;   // MCP4921 set LDAC = 1
    Nop();
    TRISFbits.TRISF5 = 0; // MCP4921 CS SPI
    Nop();
    LATFbits.LATF5 = 1;   // MCP4921 set CS = 1
    Nop();
    TRISFbits.TRISF6 = 0; // MCP4921 SCK SPI
 //**********************************
    TRISG = 0x0000;
}


main.c 
#include <xc.h>
//#include "GlobalVars.h" // lib varibal
#define  FCY 40000000UL // определение тактовой частоты для макросов __delay_ms() и __delay_us()
#include <libpic30.h>   // __delay_ms() & __delay_us()
#include <limits.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#define NUM_OUT 40 // out point sinus
#define SPI1_CS     LATFbits.LATF5
#define SPI1_LDAC   LATFbits.LATF4

_FGS(GWRP_OFF & GCP_OFF);
_FOSCSEL(FNOSC_PRIPLL);
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF);

int VALUE_OUT[NUM_OUT]; // массив для выходного значения
float RAD_STEP;
float RAD_ACCUM;
float SIN_VALUE;
int   i; // cycle for

unsigned int DmaBuffer;

void Init_ADC1(void);
void Ports_Init(void);
void Init_TMR2(void);
void Init_TMR3(void);
void Init_DMA0(void);
void __attribute__((interrupt, no_auto_psv)) _DMA0Interrupt(void);
void __attribute__((interrupt, no_auto_psv)) _T2Interrupt(void);
void __attribute__((interrupt, auto_psv)) _SPI1Interrupt(void);
void ProcessADCSamples(int * AdcBuffer);
void Init_SPI1(void);
void Write_SPI1(int command);
void Sinus_OUT(void);



/******************************************************************************
            Основная программа
 ******************************************************************************/
int main(void)
{
  /* Configure Oscillator to operate the device at 80MHz.
     * Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
     * Fosc= 8MHz*40/(2*2)=80Mhz for 8MHz input clock */

  PLLFBD = 38; // M = PLLDIV + 2, умножить на 40, это биты CLKDIV
  CLKDIVbits.PLLPOST = 0; // N1=2 Деление входной частоты (если 0 то на 2) (если 1 то на 4)
  CLKDIVbits.PLLPRE = 0; // N2=2 Деление входной чаты на 2
  OSCTUN = 0;

  RCONbits.SWDTEN = 0; // Disable Watch Dog Timer
  
  __builtin_write_OSCCONH(0x03); /* Initiate Clock Switch to Primary Oscillator with PLL (NOSC=0b011)*/
  __builtin_write_OSCCONL(0x01);
  while (OSCCONbits.COSC != 0b011); /* Wait for Clock switch to occur */
  while (!OSCCONbits.LOCK);
//-----------------------------------------------------------------------------------------------------------

//   INTCON1bits.NSTDIS = 0; // запрет всех прерываний

  AD1PCFGL=0xFFFF;
  AD1PCFGH=0xFFFF;
  AD2PCFGL = 0xFFFF; // all digital

  Ports_Init(); 
  
  Init_SPI1();
  Sinus_OUT();
  Init_TMR2();
  
  while(1)
    {
     Nop();

    }
}


понедельник, 27 января 2014 г.

ASIC Avalon2 A3255-Q48 for BitCoin mining, Print wages PCB 16 chips, flash

ASIC Avalon2 A3255-Q48 for mining BitCoin mining PCB PCB 16 chips 


Selling PCB printed circuit board ASIC Avalon2 A3255-Q48 16 chips 26Gh/s - BOARD IS AVAILABLE 
(Available there PTH12040WAH components, etc.) 
Price from 1 pc board. - $ 19 
                   from 10 pcs. - $ 17 
                   from 100 pcs. - Price negotiable 

There miners collected performance 26Gh / s (available 16 pcs.) 
                  1 pc. - $ 70 
                  10 pcs - price negotiable 

See how the miners 
http://www.youtube.com/watch?v=-QTctTFDGWQ 

pay through almost any payment system PayPal, BitCoin, WebMoney, VISA, MasterCard buy at this link 
http://asic-miner-buy.com/

Worldwide shipping, delivery time of 1-4 weeks, the price of shipping is $ 6. Possible delivery express delivery in 3 days DHL, FedEX, TNT, etc. 

Any questions, please contact us.



Photo 3. Example charges collected PCB A3255-Q48 16pcs. Attention is sold without payment details!  Who in the subject that has long known what BitCoin mining and mining that using this can make good money . More recently new chips ASIC A3255-Q48 of the second-generation Avalon impressive performance from 1 to 1,6 GH / s depending on the operating mode and supply voltage 0.8 - 1B that gives you the freedom to select the optimal mode performance per watt . NOW NOVYN ASIC A3255-Q48 from Avalon in UKRIANIE can buy at a bargain price and do not wait to wait long delivery from abroad. 80 UAH  For greater productivity - ASIC A3255-Q48 intended for incorporation into arrays of 10, 16, 32, 64, 80 , 160, 200 and more . For example, if you use the 160 chip ASIC A3255-Q48 can be a nominal capacity of 160 x 1.2 = 192 GH /s, or maximum possible 160 x 1.6 = 256 GH / s. And it's not just estimates - these figures are subject to actual test ! According to the current exchange rate is 6 * 256 = 1.536 UAH . a day! , and Rs 46,080 per month - 46 th. per month !  HOW YOU CAN ORDER 1 pcs and 200 pcs. Write - agree!  Key Features: The nominal capacity of the 1st chip : 1.2-1.4 GH / s at standard voltage 0.9V, power consumption of 2.05W 1 GHs. Power save: 1 GH / s at standard voltage 0.8V, power consumption 1,5 W at 1 GH / s. Overclocked mode : 1.5-1.6 GH / s at standard voltage 1V, power consumption 2.5W 1 GH / s.  Housing SMD: QFN48 - Step 0.5 mm Size 7.0 x block ro 7.0 mm
Picture 1. top of the board PCB A3255-Q48 16pcs

Photo 3. Example charges collected PCB A3255-Q48 16pcs. Attention is sold without payment details!  Who in the subject that has long known what BitCoin mining and mining that using this can make good money . More recently new chips ASIC A3255-Q48 of the second-generation Avalon impressive performance from 1 to 1,6 GH / s depending on the operating mode and supply voltage 0.8 - 1B that gives you the freedom to select the optimal mode performance per watt . NOW NOVYN ASIC A3255-Q48 from Avalon in UKRIANIE can buy at a bargain price and do not wait to wait long delivery from abroad. 80 UAH  For greater productivity - ASIC A3255-Q48 intended for incorporation into arrays of 10, 16, 32, 64, 80 , 160, 200 and more . For example, if you use the 160 chip ASIC A3255-Q48 can be a nominal capacity of 160 x 1.2 = 192 GH /s, or maximum possible 160 x 1.6 = 256 GH / s. And it's not just estimates - these figures are subject to actual test ! According to the current exchange rate is 6 * 256 = 1.536 UAH . a day! , and Rs 46,080 per month - 46 th. per month !  HOW YOU CAN ORDER 1 pcs and 200 pcs. Write - agree!  Key Features: The nominal capacity of the 1st chip : 1.2-1.4 GH / s at standard voltage 0.9V, power consumption of 2.05W 1 GHs. Power save: 1 GH / s at standard voltage 0.8V, power consumption 1,5 W at 1 GH / s. Overclocked mode : 1.5-1.6 GH / s at standard voltage 1V, power consumption 2.5W 1 GH / s.  Housing SMD: QFN48 - Step 0.5 mm Size 7.0 x block ro 7.0 mm
Photo 2. Bottom of the board PCB A3255-Q48 16pcs


Photo 3. Example charges collected PCB A3255-Q48 16pcs. Attention is sold without payment details!  Who in the subject that has long known what BitCoin mining and mining that using this can make good money . More recently new chips ASIC A3255-Q48 of the second-generation Avalon impressive performance from 1 to 1,6 GH / s depending on the operating mode and supply voltage 0.8 - 1B that gives you the freedom to select the optimal mode performance per watt . NOW NOVYN ASIC A3255-Q48 from Avalon in UKRIANIE can buy at a bargain price and do not wait to wait long delivery from abroad. 80 UAH  For greater productivity - ASIC A3255-Q48 intended for incorporation into arrays of 10, 16, 32, 64, 80 , 160, 200 and more . For example, if you use the 160 chip ASIC A3255-Q48 can be a nominal capacity of 160 x 1.2 = 192 GH /s, or maximum possible 160 x 1.6 = 256 GH / s. And it's not just estimates - these figures are subject to actual test ! According to the current exchange rate is 6 * 256 = 1.536 UAH . a day! , and Rs 46,080 per month - 46 th. per month !  HOW YOU CAN ORDER 1 pcs and 200 pcs. Write - agree!  Key Features: The nominal capacity of the 1st chip : 1.2-1.4 GH / s at standard voltage 0.9V, power consumption of 2.05W 1 GHs. Power save: 1 GH / s at standard voltage 0.8V, power consumption 1,5 W at 1 GH / s. Overclocked mode : 1.5-1.6 GH / s at standard voltage 1V, power consumption 2.5W 1 GH / s.  Housing SMD: QFN48 - Step 0.5 mm Size 7.0 x block ro 7.0 mm
Photo 3. Example charges collected PCB A3255-Q48 16pcs. Attention is sold without payment details!

Who in the subject that has long known what BitCoin mining and mining that using this can make good money .
More recently new chips ASIC A3255-Q48 of the second-generation Avalon impressive performance from 1 to 1,6 GH / s depending on the operating mode and supply voltage 0.8 - 1B that gives you the freedom to select the optimal mode performance per watt .
NOW NOVYN ASIC A3255-Q48 from Avalon in UKRIANIE can buy at a bargain price and do not wait to wait long delivery from abroad. 80 UAH

For greater productivity - ASIC A3255-Q48 intended for incorporation into arrays of 10, 16, 32, 64, 80 , 160, 200 and more .
For example, if you use the 160 chip ASIC A3255-Q48 can be a nominal capacity of 160 x 1.2 = 192 GH /s, or maximum possible 160 x 1.6 = 256 GH / s. And it's not just estimates - these figures are subject to actual test ! According to the current exchange rate is 6 * 256 = 1.536 UAH . a day! , and Rs 46,080 per month - 46 th. per month !

HOW YOU CAN ORDER 1 pcs and 200 pcs. Write - agree!

Key Features:
The nominal capacity of the 1st chip : 1.2-1.4 GH / s at standard voltage 0.9V, power consumption of 2.05W 1 GHs.
Power save: 1 GH / s at standard voltage 0.8V, power consumption 1,5 W at 1 GH / s.
Overclocked mode : 1.5-1.6 GH / s at standard voltage 1V, power consumption 2.5W 1 GH / s.

Housing SMD: QFN48 - Step 0.5 mm
Size 7.0 x block ro 7.0 mm

суббота, 25 января 2014 г.

Синтез прямой частоты DDS AD9850 0-40Mhz запуск отладочной платы (HC+SR08) + программа PIC, dsPIC,AVR, STM8, STM32.

Синтез прямой частоты DDS AD9850 0-40Mhz запуск отладочной платы (HC+SR08) + программа PIC, dsPIC,AVR, STM8, STM32.
Эту отладочную платку можно купить на Ebay.com или Aliaxpress.com. Предлагаю рассмотреть схему подключения и программу. Рассмотреть работу в последовательном и параллельном интерфейсе.
Фото 1. DDS AD9850 0-40Mhz
Привожу схему которую принципе легко найти в интернете, теперь обратим внимание на основные моменты! 

Рис 1. Схема платы  DDS AD9850
Для параллельного интерфейса нужно использовать линии данных D0 - D7, линии синхронизации W_CLK и обновление памяти FQ_UD. Для задания частоты нужно передать 5 раз по 8 бит через последовательный интерфейс D0 - D7, заканчивается все импульсом на ножку FQ_UD для того, что бы новые данные обновились во внутренней памяти AD9850 и после этого на выходе DDS (PIN 20 и PIN 21) вступит в силу новая частота.  Основное преимущество параллельного интерфейса быстрая работа, недостаток большое кол-во ножек управления.
Частота задается по формуле Freq = Frequency * (4294967296/XTAL_MHZ) 
Где, 
-Freq - это то значение которое нужно загрузить в DDS AD9850 в биты Freq-b0 ... Freq-b0
-Frequency - нужная нам частота в Гц. 
-XTAL_MHZ  это частота генератора, обычно 125 Mhz (нужно в формулу подставлять 125000000 Гц)
Рис. 2. Диаграмма для параллельного интерфейса AD9850

Для последовательно интерфейса нужно использовать линии данных D7 , линии синхронизации W_CLK и обновление памяти FQ_UD. Если управление DDS AD9850 будет через последовательный порт (SPI) ОБЯЗАТЕЛЬНО НУЖНО ВЫХОДЫ D0 и D1 соединить с VCC(+питание), D2 нужно подключить на землю (-питание). Все начинается с инициализации нужно передать команду b00000011 и подать короткий импульс на FQ_UD. Для задания частоты нужно передать последовательно 40 бит (W0 ... W31), биты W32 и W33 всегда 0, бит W34 в моем случае также 0, Биты W35...W39  для изменения фазы сигнала в моем случает также раны 00000, заканчивается все импульсом на ножке FQ_UD для того, что бы новые данные вступит в силу, новая частота появиться на выходе DDS (PIN 20 и PIN 21).
Фото 2. Подключение платы DDS AD9850 - для последовательного интерфейса

Рис. 3. Диаграмма для последовательного интерфейса AD9850

Пример кода для dsPIC33FJ64GP706, код легко адаптировать под другие микроконтроллеры PIC, dsPIC,AVR, STM8, STM32.
Файл MAIN
#include <xc.h> 
#include "CCSPIC_AD9850.h"
#define FCY 40000000UL // определение тактовой частоты для макросов __delay_ms() и __delay_us()
#include <libpic30.h>

_FGS(GWRP_OFF & GCP_OFF);
_FOSCSEL(FNOSC_PRIPLL);
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF);

int main(void)
{
   /* Configure Oscillator to operate the device at 80MHz dsPIC33FJ64GP706
    * Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
    * Fosc= 8MHz*40/(2*2)=80Mhz for 8MHz input clock */

   PLLFBD=38; // M = PLLDIV + 2, умножить на 40, это биты CLKDIV
   CLKDIVbits.PLLPOST=0; // N1=2 Деление входной чаты на 2, (если 1 то на 4)
   CLKDIVbits.PLLPRE=0; // N2=2 Деление входной чаты на 2

   OSCTUN=0;

   __builtin_write_OSCCONH(0x03); /* Initiate Clock Switch to Primary Oscillator with PLL (NOSC=0b011)*/
   __builtin_write_OSCCONL(0x01);
   while (OSCCONbits.COSC != 0b011); /* Wait for Clock switch to occur */
   while(!OSCCONbits.LOCK);


   AD9850_Init();
   AD9850_Reset();
   AD9850_Osc(233000, 0);
   while(1)
   {
    //AD9850_Osc(1234, 0); // Тут меняем частоту в Гц
   }
}


Файл *.c
#include <xc.h>
#include "CCSPIC_AD9850.h"
#define FCY 40000000UL // определение тактовой частоты для макросов __delay_ms() и __delay_us()
#include <libpic30.h>

void AD9850_Init(void)
{
/*** Устновкой цифровых и аналоговых выходов */
AD1PCFGL = 0x7FFF; // все выводы цифровые - аналоговый ВНИМАНИЕ ИЗМЕНИ AN15!!
AD1PCFGH = 0xFFFE; // все выводы цифровые, кроме RC1/AN16 
AD2PCFGL = 0xFFFF; // все выводы цифровые
CONTROL_DIR &= ~(W_CLK|FQ_UD|DATA|RESET); // настроить на выход
CONTROL_PORT &= ~(W_CLK|FQ_UD|DATA|RESET); // сбросить
}

void AD9850_Reset(void)
{
   CONTROL_PORT &= ~DATA; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль

   CONTROL_PORT |= DATA; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   CONTROL_PORT &= ~DATA; // Ноль
   __delay_us(1);

   AD9850_Osc(0,0);
}

/* Sets the DDS sine and square oscillator to the detailed "frequency" and "phase" variables.
 * "frequency" will be turned into a 32 bit word, so the frequency resolution of 0.0291 Hz
 * with a 125 MHz reference clock. "phase" will be a 5 bit word instead so the resolution is
 * 11.5 degrees, or pi/32 radians.
 */
void AD9850_Osc(double frequency, double phase){
   static int i;                   // Для циклов
   static unsigned long  y;        // Буфер для передачи
   static unsigned long z;
   //y = (int)(frequency * FREQ_FACTOR/XTAL_MHZ); // поменял
   y = frequency * (FREQ_FACTOR/XTAL_MHZ); // поменял

   while(phase>360) phase-=360;
   
   z =(int)phase/11.5; // поменял

   //Frequency 32-bit word
   for (i=31;i>=0;i--)
   {
      PORTBbits.RB2 = ((y >> (31-i)) & 0x01); // DATA
      __delay_us(1);
      CONTROL_PORT |=  W_CLK; // Установить
      __delay_us(1);
      CONTROL_PORT &= ~W_CLK; // Ноль
      __delay_us(1);
   }
   //control bit #1, control bit #2 and Power off, all to low

   CONTROL_PORT &= ~DATA; // Ноль
   __delay_us(1);
   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);
   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);
   CONTROL_PORT |=  W_CLK; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~W_CLK; // Ноль
   __delay_us(1);

   //phase 5-bit word
   for (i=4;i>=0;i--)
   {
      PORTBbits.RB2 = ((z >> (4-i)) & 0x01); // DATA
      __delay_us(1);
      CONTROL_PORT |=  W_CLK; // Установить
      __delay_us(1);
      CONTROL_PORT &= ~W_CLK; // Ноль
      __delay_us(1);
   }
   CONTROL_PORT |=  FQ_UD; // Установить
   __delay_us(1);
   CONTROL_PORT &= ~FQ_UD; // Ноль
   __delay_us(1);
}


Файл *.h
#ifndef CCSPIC_AD9850_H
#define CCSPIC_AD9850_H
//Interchangeable pins
#define CONTROL_PORT PORTB
#define CONTROL_DIR  TRISB

#define W_CLK  (1 << 0)  // RB0
#define FQ_UD  (1 << 1)  // RB1
#define DATA   (1 << 2)  // RB2
#define RESET  (1 << 3)  // RB3

//Frequency of your crystal oscillator (CLKIN input pin 9 in datasheet), measured in MHz
// This reference frequency must be higher than 1MHz.
#define XTAL_MHZ 125.00

//Relationship value between actual frequency and 32-bit word sent in the serial streaming
#define FREQ_FACTOR 4294.967295

//function prototypes
void AD9850_Init(void);
void AD9850_Reset(void);
void AD9850_Osc(double  frequency, double phase);
void AD9850_Sweep_Up(double minFreq, double maxFreq, double inc, int cyclesPerDelay);
void AD9850_Sweep_Down(double minFreq, double maxFreq, double inc, int cyclesPerDelay);
void AD9850_Sweep_Loop(double minFreq, double maxFreq, double inc, int cyclesPerDelay);
void AD9850_PowerDown(void);

#endif