Było już trochę powiedziane o układach syntezerów DDS z rodziny AD9850/51.
Przyznam że jestem urzeczony tymi układami i ostatni rok czasu spędziłem z nimi wiele fajnych godzin.
Na początku na bazie AD9850 chciałem stworzyć sobie swoją własną autorską przystawkę do oscyloskopu, która poszerzała by jego możliwości o coś w rodzaju wobuloskopu pracującego w zakresie od 100KHz do 50MHz. Jako miłośnik raczej wysokich częstotliwości, takie urządzenie mogło by pomóc mi w badaniu filtrów W.CZ oraz P.CZ i tym podobnych czynności.
Porzuciłem jednak myśl o budowie przystawi do oscyloskopu i postanowiłem zbudować samodzielne taki właśnie analizator obwodów i filtrów W.CZ. W jednym z wątków przedstawiłem fragmenty moich zmagań z wyświetlaczem graficznym ST7920 który ma posłużyć do obrazowania wykresów pomiarowych w tym urządzeniu. Tutaj chcę przedstawić bibliotekę do właśnie układów DDS AD9850/AD9851.
Może to głupie tworzyć bibliotekę do tak prostego układu, i ktoś z bardziej zaawansowanych powie że to przerost formy nad treścią.. Jednak dla mnie to są bardzo fajne informacje których rok temu nie mogłem znaleźć w internecie a przynajmniej podanych w prostej formie zrozumiałej dla takiego elmera jak ja.
Układy AD985x to bezpośrednie syntezery częstotliwości które można sterować przez SPI. Można z nich zbudować dokładne generatory sinus i prostokąt z możliwością kontrolowania częstotliwości z dokładnością 1Hz. Prostota ich budowy jest wręcz niebywała. Jeżeli więc ktoś potrzebuje takiego generatora w którym będzie można płynnie zmieniać częstotliwość od niemal zera do 70MHz to zachęcam do sięgnięcia po nie, szczególnie że dostępne są w postaci modułów za śmieszne pieniądze.
AD9850 i AD9851 to prawie takie same układy z tą różnicą że AD9850 generuje poprawnego sinusa do 50MHz natomiast AD9851 do 70MHz. Steruje się tymi układami w taki sam sposób, z małą różnicą. Otóż AD9851 wymaga nieco zmienionego bajtu konfiguracyjnego o którym jak zauważyłem bardzo wielu zapomina. W internecie jest sporo narzekających ludzi na rzekomo skopane układy które generują poprawny sinus tylko do 5MHz a powyżej produkują sieczkę.
Problem tkwi właśnie w inicjacji tych układów. Reszta to już tylko przyjemna zabawa.
Przedstawiam zatem moją elmerską bibliotekę, wypociny lamusa... czy co tam chcecie powiedzieć
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
UWAGA ostatni bajt w funkcji SendSpi dla AD9850 powinien być 0x00 natomiast dla AD9851 0x01. Różnica ta wynika z tego że AD9851 sterowany jest zegarem 30MHz i ustawienie tego bitu powoduje włączenie mnożnika tej częstotliwości razy 6 co daje w efekcie 180MHz. Jeżeli o tym zapomnimy i to układ będzie taktowany 30MHz i generowany sinus przestanie praktycznie istnieć powyżej 5MHz.
plik SP_AD9851.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Plik SP_AD9851.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
w powyższej bibliotece brakuje definicji zegara której z pewnych względów nie chciałem tam umieszczać. Jednak poniżej prezentuję komendy za pomocą których można wysłać żądaną nastawę do DDSa.
Zegar w należy zdefiniować zależności od układu
AD9850 125MHz (125000000)
AD9851 180MHz (180000000)
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
komenda ustawiania częstotliwości
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
data to właśnie nastawa częstotliwości podana w Hz czyli
1MHz / data=1000000
30MHz / data=30000000
40,261 853MHz / data=40261853
itd
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Może prostackie ale ja nie znalazłem nigdzie w necie prostego (dla lamusa) opisu tych układów dla tego przedstawiłem to w ten sposób.
Podane ustawienia sprzętowego SPI są dla Atmega32. bardzo ważne jest to że wysyłać dane trzeba LSB first. (DORD na LSB first)
Powodzenia w zabawie z generatorkami.