Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

DDS AD9850 Lpt avr asm

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

DDS AD9850 Lpt avr asm

Postautor: ACeK » 16 wrz 2013, o 22:48

Obrazek Od pracowitych elektronikow ze wschodu kupilem dwa moduly DDS na AD9850 w bardzo delikatnej dla kieszeni cenie :P
IMG_2323.png
Dwie rozne plytki z AD9850.
Na rozne sposoby mozna je podlaczyc. A dokladnie wgrac 5 bytow z czego pierwszy zawiera informacja o przesunieciu fazy, rodzaj transmijsji (szeregowa lub rownolegla) oraz wlaczenie. Pozostale cztery to zapis 32 bitowy czestotliwosci generatora max 40 MHz. Sam generator moze miec max czestotliwosc taktowania 125MHz :idea: Do wgrania tych 5 bytow uzylem:

1. ATmega8515
IMG_2355.png
Podlaczenie do Atmegi.
2. Komputera.
IMG_2356.png
Podlaczenie przez port drukarki.
osc.png
Ad1. W m8515 uzylem PortB B0 - B7 jako szyne danych D0 - D7 a PortC C0 - C2 jako sygnaly strerujace W_Clk, FQ_Up oraz Reset.

Tu program wpisujacy czestotliwosc 125kHz.

Kod: Zaznacz cały

;-------------------------------------------------------------------------------------------- ; Soft to setup frequency 125kHz in AD9850 by ACeK :) ;-------------------------------------------------------------------------------------------- .nolist ; .include "m8515def.inc" ; .list ; .listmac ; ;-------------------------------------------------------------------------------------------- ; Constants ;-------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------- ; Registers ;-------------------------------------------------------------------------------------------- .Def Acc = r16 ; R16 now is Acc .Def W0 = r20 ; R20 contorl byte .Def W1 = r21 ; R21 data byte Ms .Def W2 = r22 ; R22 data byte .Def W3 = r23 ; R23 data byte .Def W4 = r24 ; R24 data byte Ls ;-------------------------------------------------------------------------------------------- ;--------------------------------------- Code Segment) -------------------------------------- .cseg ; ;-------------------------------------------------------------------------------------------- .org 0x0000 ; ; ResetProcessor : ; Cli ;Clear Global Interrupt Flag Ldi Acc, Low(RamEnd) ;Init stack Out Spl, Acc ; Ldi Acc, High(RamEnd) ;Init stack Out Sph, Acc ; ; ldi Acc, 0b11111111 ;load to acc 255 (0xff) out DDRC, Acc ;control port for AD985 ;xxxxx1xx Reset ;xxxxxx1x Fq_up ;xxxxxxx1 W_Clk Out PortC, Acc ;PortA set as output out DDRB, Acc ;data port for AD9850 out PortB, Acc ;PortB set as output ; sei ;Set Global Interrupt Flag ;seting 125kHz at 125Mhz ldi W0, 0x00 ;5 bits cos, 1 On/Off and 2 reserve ldi W1, 0x00 ;byte 1 bits 31 to 24 ldi W2, 0x41 ;byte 2 bits 23 to 16 ldi W3, 0x89 ;byte 3 bits 15 to 8 ldi W4, 0x37 ;byte 4 bits 7 to 0 ;-------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------- Ldi Acc, 0b00000010 ;Begin Reset Out PortC, Acc ; Nop ; Nop ; ; Ldi Acc, 0b00000110 ;Reset_Up Out PortC, Acc ; Nop ; Nop ; ; Ldi Acc, 0b00000010 ;Reset_Down Out PortC, Acc ; Nop ; Nop ; ; Rcall ReLoad ; ; Loop: ; Nop ; Rjmp Loop ; ;-------------------------------------------------------------------------------------------- ReLoad: ; Ldi Acc, 0b00000000 ;Fq_Up Down Out PortC, Acc ; Nop ; ; Mov Acc, W0 ;Load W0 Out PortB, Acc ; Nop ; ; Rcall W_Clk ;W_Clk Up nad Down ; Mov Acc, W1 ;Load W1 Out PortB, Acc ; Nop ; ; Rcall W_Clk ;W_Clk Up nad Down ; Mov Acc, W2 ;Load W2 Out PortB, Acc ; Nop ; ; Rcall W_Clk ;W_Clk Up nad Down Mov Acc, W3 ;Load W3 Out PortB, Acc ; Nop ; ; Rcall W_Clk ;W_Clk Up nad Down Mov Acc, W4 ;Load W4 Out PortB, Acc ; Nop ; ; Rcall W_Clk ;W_Clk Up nad Down ; Ldi Acc, 0b01010101 ; Out PortB, Acc ; Nop ; ; Ldi Acc, 0b00000010 ; Out PortC, Acc ; ; Ret ; ;-------------------------------------------------------------------------------------------- W_Clk: ; Ldi Acc, 0b00000001 ;W_Clk Up Out PortC, Acc ; Nop ; Ldi Acc, 0b00000000 ;W_Clk Down Out PortC, Acc ; Nop ; Ret ; ;-------------------------------------------------------------------------------------------- .exit ; end ;--------------------------------------------------------------------------------------------

Ad2. Wgrywanie przez port Lpt pin 2 - pin 9 D0 - D7 (dane)
oraz sterowanie
pin 1 -> Reset,
pin 14 -> FQ_Up,
pin 31 -> W_Clk oraz soft od :arrow: Analog Devices :!: W pdf zalecany jest bufor pomiedzy Lpt a AD9850 ale do prob mam tylko wstawione oporniki 100R. Mozna tez zrobic zwore pomiedzy pin 1 oraz pin 32 drukarki. Wtedy jak sie sprawdza czy modul jest podpiety zostanie wykryty :wink: Sam program ma fajna opcje Sweep gdzie mozna ustawic czestotliwosc poczatkowa oraz koncowa plus skok. Ale jak sie ustawi output to czestotliwosc pojawia sie tylko na chwile :(
Evaluation_Soft.png
Kopia ekranu z programem.
Jest tez chinska wersja programu sterujacego dane sa takie same lecz sterowanie
pin 14 -> W_Clk
pin 16 -> FQ_Up
pin 36 -> Reset,
China.png

Wszystkie pins drukarki odnosza sie do zlacza typu Centronis Obrazek
Załączniki
ad9850demo.zip
Chinski program sterujacy.
(44.42 KiB) Pobrany 471 razy
Ostatnio zmieniony 17 wrz 2013, o 18:20 przez ACeK, łącznie zmieniany 1 raz.

Awatar użytkownika
Wojtek
-
-
Posty: 867
Rejestracja: 21 lut 2003, o 18:21

Re: DDS AD9850 Lpt avr asm

Postautor: Wojtek » 17 wrz 2013, o 07:14

Od pracowitych elektronikow ze wschodu kupilem dwa moduly DDS na AD9850 w bardzo delikatnej dla kieszeni cenie
Cena w jakich granicach, bo widzę że u nas na allegro można już za ok. 25 zł.

radzio
Moderator
Moderator
Posty: 965
Rejestracja: 13 maja 2003, o 10:33
Lokalizacja: Sosnowiec
Kontaktowanie:

Re: DDS AD9850 Lpt avr asm

Postautor: radzio » 17 wrz 2013, o 07:54

Na Eabyu są po około 5 dolarów, oczywiście łącznie z wysyłką.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: DDS AD9850 Lpt avr asm

Postautor: ACeK » 17 wrz 2013, o 12:41

Obrazek Plytki kupione na Ebay troche trzeba poczekac na przesylke z reguly 3 tygodnie. Ceny sa zachecajace bo teraz na topie jest AD9851 wiec stare sie wyprzedaje. Mozna tez kupic modul do podlaczania do Lpt ale moim zdaniem cena jest zaporowa :arrow: DDS Signal Controller tam na plytce sa dwa 245 oraz garstka opornikow 100R :idea: sterowanie tak jak w moim poscie wyzej Obrazek

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Re: DDS AD9850 Lpt avr asm

Postautor: pajaczek » 17 wrz 2013, o 16:40

Pozostale cztery to zapis 40 bitowy czestotliwosci generatora max 40 MHz.
Wszystko pięknie, ale jak Ci się udało upchnąć 40 bitową liczbę w 4 bajtach? Tego chyba jednego nie rozumiem.
Ps. Ładnie przedstawiony pomysł na eksperymenty.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: DDS AD9850 Lpt avr asm

Postautor: ACeK » 17 wrz 2013, o 18:29

[ ... ale jak Ci się udało upchnąć 40 bitową liczbę w 4 bajtach? ...

Obrazek Nie udalo bo powinno byc 32 :oops: Thx za korekte :idea:
... Ładnie przedstawiony pomysł na eksperymenty.
:P Jak znajde troche czasu postaram sie do 8515 podpiac LCD oraz klawisze by mozna bylo zmieniac czestotliwosc Obrazek

CELTOR
-
-
Posty: 12
Rejestracja: 25 wrz 2013, o 09:43
Lokalizacja: Toruń
Kontaktowanie:

Re: DDS AD9850 Lpt avr asm

Postautor: CELTOR » 25 wrz 2013, o 18:24

Witam

Od jakiej częstotliwości generujesz przebieg? U mnie układ działa od 0,03Hz-40MHz.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: DDS AD9850 Lpt avr asm

Postautor: ACeK » 25 wrz 2013, o 18:40

Obrazek Dokladnie nie sprawdzalem ale jesli nie zalezy Ci na najwiekszych to zmniejszajac rezonator kwarcowy mozna pewnie zjechac w dol :idea: idea ktorej nie sprawdzalem :P Jak sprawdze to dam znac Obrazek

CELTOR
-
-
Posty: 12
Rejestracja: 25 wrz 2013, o 09:43
Lokalizacja: Toruń
Kontaktowanie:

Re: DDS AD9850 Lpt avr asm

Postautor: CELTOR » 25 wrz 2013, o 18:46

Nie nie trzeba zmieniać kwarcu aby zejść do 0,03Hz. Wszystko robisz softem. Sterowanie zrobiłem z atmegi. Do AD można dołączyć tranzystor i będzie generator z modulacją AM.
Ostatnio zmieniony 25 wrz 2013, o 19:23 przez CELTOR, łącznie zmieniany 1 raz.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: DDS AD9850 Lpt avr asm

Postautor: ACeK » 25 wrz 2013, o 18:59

ObrazekTak wiem ze wszystko robisz programowo. Jesli podzielisz 125MHz przez 2^32 (4294967296) to wyjszie Ci 0.029104 czyli okolo 0.03 :idea: Jesli zmienisz 125MHz na inna wartosc (110 jest chyba limit przy zasilaniu 3.3V) to zmniejszy sie tez najnizsza czestotliwosc :idea:
...Sterowanie zrobiłem z atmegi.
To pochwal sie na forum Obrazek

CELTOR
-
-
Posty: 12
Rejestracja: 25 wrz 2013, o 09:43
Lokalizacja: Toruń
Kontaktowanie:

Re: DDS AD9850 Lpt avr asm

Postautor: CELTOR » 25 wrz 2013, o 19:13

Jutro zrobię zdjęcie PCB, generator jeszcze nie jest ukończony brakuje obudowy, wzmacniaczy wyjściowych i układu mnożącego.

Zgodnie z obietnicą wstawiam zdjęcia. Układ trochę pokrył się kurzem gdyż ostatnio nie mam zbyt wiele czasu aby go dokończyć.

Obrazek

Obrazek

Aby płynnie regulować wypełnienie zamiast potencjometru na PCB AD9850 będę miał wieloobrotowy.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: DDS AD9850 Lpt avr asm

Postautor: ACeK » 26 wrz 2013, o 19:47

Obrazek Jaki masz procek? Z plytki wynika ze programujesz AD9850 szeregow :idea: lepiej sterowac rownolegle bo jak bedziesz chcial uzyc opcji sweep wysylasz tylko 5 bajtow zamiast 40 bit szeregowo. Dzieki czemu zyskujesz na czasie. W czym pisales oprogramowanie? Zamiast potecjometru moze uzyj enkoder. Plytka niczego :P sobie pamietaj uzywac kondesatory na zasilaniu Obrazek

CELTOR
-
-
Posty: 12
Rejestracja: 25 wrz 2013, o 09:43
Lokalizacja: Toruń
Kontaktowanie:

Re: DDS AD9850 Lpt avr asm

Postautor: CELTOR » 26 wrz 2013, o 20:09

Mam kilka kondensatorów blokujących o różnych wartościach - SMD 0805 połączonych równolegle w torze zasilania w różnych miejscach + elektrolity. Programik standardowo w C. W miejsce zwykłego potencjometru na PCB generatora musiałbym użyć potencjometru cyfrowego do regulacji współczynnika wypełnienia. Zostanę jednak przy wieloobrotowym + odczyt współczynnika wypełnienia na LCD. W układzie siedzi ATmega644 (koncepcja na wyrost :) ) - program zajmuje ok 7kB.

Wróć do „DIY - Do It Yourself”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości