Problemy z komunikacją z syntezatorem DDS AD9835 przy sterowaniu z portu LPT?

Sterowanie DDS-em - AD9835





Poprzedni Następny
Wiadomość
Spis treści
From: Dykus <dykus.grupy_at_nospam_SpAmYwp.pl>
Subject: Sterowanie DDS-em - AD9835
Date: Mon, 21 Feb 2005 18:52:11 +0100


Witam,

Czy ktoś sterował (np. poprzez komputer, uC) syntezerem DDS - AD9835?
Nie potrafię za nic sterować tym układem, poniżej opiszę dokładniej o
co chodzi:

Zbudowałem prosty układ (w oparciu o 'Evaluation Board' ze strony AD),
układ taktuje generatorem 50MHz, steruję za pośrednictwem portu LPT.
Oryginalny program AD do sterowania tym układem działa bezproblemowo,
układ natychmiast reaguje na każde polecenie (zmiana częstotliwości,
reset, itp.)
Napisałem w C program do sterowania tym układem, wykorzystując
identyczne połączenia co dla programu oryginalnego AD.

PDF układu:
http://boss.iele.polsl.gliwice.pl/pdf/Analog_Devices/ad9835_0.pdf
Evaluation Board:
http://www.analog.com/Analog_Root/static/techSupport/designTools/evaluationBoards/downloads/ad9835eb.pdf
(http://tinyurl.com/54scz)
I strona:
http://www.analog.com/Analog_Root/static/techSupport/designTools/interactiveTools/ad98325/ad9835.html
(http://tinyurl.com/376bo)
na której to można uzyskać bezpśrednio słowa, które trzeba wysłać do
układu.

Podłączyłem do portu LPT diody LED i w pracy krokowej sprawdzałem
wysyłane bity i sygnały na liniach - wszystko się zgadza. Mimo
wszystko układem nie da się sterować. Oryginalny program wysyła dane
ponad 10 krotnie szybciej niż mój (nawet po usunięciu delay-ów) - ale
powiedzmy, że póki co nie zależy mi na szybkości.

I tak np. przy zmianie częstotliwości robię tak:
(wcześniej oryginalnym programem inicjalizuje DDS (reset) - nie
blokuje to portu)
1. Wszystkie bity portu ustawiam na 1.
2. Zeruję bit FSYNC.
3. Przesyłam po SDATA: 0x3033, zatwierdzając każdy bit wyzerowaniem
SCLK (opadające zbocze...).
4. Ustawiam bit FSYNC.
I wg. mnie po tym układ powinien wytwarzać sygnał, a nic się nie
dzieje.
Podobnie, jak ustalę jaką częstotliwość programem z AD, po czym
próbuję moim programem układ resetować DDS wysyłając 0xF800.

Szukałem w Internecie, ale nie znalazłem żadnych innych opisów
sterowania, czy kodów źródłowych. Czy ktoś jest w stanie mi pomóc? Czy
ktoś pisał podobne program do sterowania tym układem?

Jeśli to istotne, to mogę zamieścić gdzieś źródła, ale tak jak pisałem
cyfrowego, by sprawdzić co wysyła oryginalny program.
Może da się jakiś wirtualny port zainstalować, gdzie dane będą
zapisywane do pliku? Teraz to wymyśliłem i poszukam...


--
Pozdrawiam,
Dykus.


Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_WIADOMO_PO_CO_TO.message.pl>
Subject: Re: Sterowanie DDS-em - AD9835
Date: Mon, 21 Feb 2005 19:16:08 +0100


Użytkownik "Dykus" <dykus.grupy_at_nospam_SpAmYwp.pl> napisał w wiadomości
news:cvd75k$gcq$1_at_nospam_news.onet.pl

Czy ktoś sterował (np. poprzez komputer, uC) syntezerem DDS - AD9835?

Zrobilem (działający ;) generator na AD9832. Prostszy, ale bodajże podobny w
sterowaniu do AD9835. Jesli chcesz, to mogę Ci podesłać kawałek kodu w C na
S8252.

--
Marek Dzwonnik, GG: #2061027 - zwykle jako 'niewidoczny'
(Uwaga Gadu-Gadulcowicze: Nie odpowiadam na anonimy.)



Poprzedni Następny
Wiadomość
Spis treści
From: Dykus <dykus.grupy_at_nospam_SpAmYwp.pl>
Subject: Re: Sterowanie DDS-em - AD9835
Date: Mon, 21 Feb 2005 19:43:21 +0100


Witam,

Dnia 21-02-05 (Monday) o 19:16, 'Marek Dzwonnik' napisał(a):

Czy ktoś sterował (np. poprzez komputer, uC) syntezerem DDS - AD9835?

Jesli chcesz, to mogę Ci podesłać kawałek kodu w C na S8252.

Będę wdzięczny. Pisałem na priv.

Oczywiście pomoc innych osób nadal bardzo mile widziana. :)


--
Pozdrawiam,
Dykus.



Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_WIADOMO_PO_CO_TO.message.pl>
Subject: Re: Sterowanie DDS-em - AD9835
Date: Mon, 21 Feb 2005 21:07:35 +0100


Użytkownik "Dykus" <dykus.grupy_at_nospam_SpAmYwp.pl> napisał w wiadomości
news:cvda5h$ifl$1_at_nospam_news.onet.pl

Jesli chcesz, to mogę Ci podesłać kawałek kodu w C na S8252.
Będę wdzięczny. Pisałem na priv.

Poszło na priv.


--
Marek Dzwonnik, GG: #2061027 - zwykle jako 'niewidoczny'
(Uwaga Gadu-Gadulcowicze: Nie odpowiadam na anonimy.)


Poprzedni Następny
Wiadomość
Spis treści
From: Michal Baszynski <mbaszyns_at_nospam_ga.ze.ta.pl.>
Subject: Re: Sterowanie DDS-em - AD9835
Date: Mon, 21 Feb 2005 21:04:22 +0100


On Mon, 21 Feb 2005 19:16:08 +0100, "Marek Dzwonnik"
<mdz_at_nospam_WIADOMO_PO_CO_TO.message.pl> wrote:

U=BFytkownik "Dykus" <dykus.grupy_at_nospam_SpAmYwp.pl> napisa=B3 w wiadomo=B6ci
news:cvd75k$gcq$1_at_nospam_news.onet.pl

Czy kto=B6 sterowa=B3 (np. poprzez komputer, uC) syntezerem DDS - =
AD9835?

Zrobilem (dzia=B3aj=B1cy ;) generator na AD9832.

tez zrobilem na 3x AD9832 i tez dzialajacy. Do zaprogramowania tego
sluzyl AT90S2313, kody wysylane byly zgodnie z tym, co napisano w
nocie aplikacyjnej i co wyrzucila mi aplikacja ze strony Analoga.=20

SCLK na PB4
SDATA na PB3
=46SYNC0, FSYNC2, FSYNC3 czyli wybor ukladu na PB2, PB1, PB0

funkcja wysylajaca dane do DDS:

void dds_serial( unsigned int data, char device)
{
char a;
=20
PORTB=3D0xFF;
=20
//wybieramy odpowiedni uklad CS czyli FSYNC;
if (device=3D=3D0) PORTB=3DPORTB&0xFB;
if (device=3D=3D1) PORTB=3DPORTB&0xFD;
if (device=3D=3D2) PORTB=3DPORTB&0xFE;

for(a=3D0;a<16;a++)
{
if (data&0x8000) PORTB=3DPORTB|0x08;
else PORTB=3DPORTB&0xF7;=20
data=3Ddata<<1;
//sygnal zegarowy
PORTB=3DPORTB&0xEF;
PORTB=3DPORTB|0x10;
};
=20
//przed wyjsciem ustawiamy wszystkie CS na niekatywne
PORTB=3D0xFF;
}

i potem przykladowo zaprogramowanie ukladu 0 na dwie przelaczane
czestotliwosci 9,9 kHz i 10,4 kHz:

dds_serial(0xF800,0); //reset
dds_serial(0x3034,0);
dds_serial(0x2111,0);
dds_serial(0x3236,0);
dds_serial(0x2300,0); //FREQ0 9.9KHZ
dds_serial(0x3441,0);
dds_serial(0x25CC,0);
dds_serial(0x3638,0);
dds_serial(0x2700,0); //FREQ1 10.4KHZ
dds_serial(0x1800,0);
dds_serial(0x0900,0); //PH0
dds_serial(0x1A00,0);
dds_serial(0x0B00,0); //PH1
dds_serial(0x1C00,0);
dds_serial(0x0D00,0); //PH2
dds_serial(0x1E00,0);
dds_serial(0x0F00,0); //PH3
dds_serial(0x8000,0); //SYNC/SELSRC
dds_serial(0xC000,0); //OUT OF RESET=20


--=20
Pozdr
Michal

Poprzedni Następny
Wiadomość
Spis treści
From: Dykus <dykus.grupy_at_nospam_SpAmYwp.pl>
Subject: Re: Sterowanie DDS-em - AD9835
Date: Thu, 24 Feb 2005 23:26:18 +0100


Witam,

Dziękuję wszystkim za pomoc!

Błąd był (jak to zwykle bywa:) po mojej stronie - źle sterowałem
sygnałem FSYNC (zerowany na czas wysyłania danych) przy wykonywaniu
funkcji (błąd w programie).


--
Pozdrawiam,
Dykus.