AD9833 DDS
Šula Miloš
sula@rps.cz
Pondělí Leden 21 08:30:16 CET 2008
Ahoj,
postavil jsem si DDSku s Ad9833, bohužel se mi nedaří měnit frekvenci. Vždy mi to po zavolání AD9833_reset() a nastavení frekvence sice začne nějakou frekvenci generovat, ale ta se po dalším volání SetDDSFrequency vůbec nezmění. Můžete mi poradit co s tím ? Driver jsem si psal víceméně sám podle dokumentace a příkladů co jsem našel na internetu, takže pravděpodobná chyba je více, než jistá.
díky
Miloš
#define FREQ0 0x4000
#define B28 (1<<13)
#define HLB (1<<12)
#define FSELECT (1<<11)
#define PSELECT (1<<10)
#define ADRESET (1<<8)
#define SLEEP1 (1<<7)
#define SLEEP12 (1<<6)
#define OPBITEN (1<<5)
#define DIV2 (1<<3)
#define ADMODE (1)
#define FSYNC PIN_B3 //select chip
void AD9833_Write(unsigned int16 value)
{
int8 clsb, cmsb;
clsb = (int8)value;
cmsb = value >> 8;
output_low(FSYNC);
delay_us(5);
spi_write(cmsb);
spi_write(clsb);
delay_us(5);
output_high (FSYNC);
}
void AD9833_reset()
{
AD9833_Write(B28|ADRESET|OPBITEN|DIV2); //reset
AD9833_Write(B28|OPBITEN|DIV2); // square wave
}
void SetDDSFrequency(float Freq)
{
unsigned long i,lsb,msb;
Freq = Freq / 0.093132258; // for 25Mhz osc
i = (unsigned long)Freq;
lsb = (i & 0x3fff) + FREQ0;
msb = ((i>>14) & 0x3fff) + FREQ0;
AD9833_Write(lsb);
AD9833_Write(msb);
}
************************************Hlavni program*****************************
#include <16F819.h>
#device PASS_STRINGS = IN_RAM
#fuses NOWDT, INTRC_IO, NOPROTECT,NOBROWNOUT,NOMCLR,NODEBUG
#use delay(clock=8M)
#use fast_io(b)
void main (){
SET_TRIS_B(195);
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_XMIT_L_TO_H |SPI_SS_DISABLED | SPI_CLK_DIV_4 );
AD9833_reset();
SetDDSFrequency(10000);
delay_ms(2000);
SetDDSFrequency(2000);
}
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20080121/a717061d/attachment-0002.htm
Další informace o konferenci Hw-list