Generator AD 9850

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Generator AD 9850

Post autor: Henryk » 01 cze 2021, 18:49

Witam .
Kupiłem ostatnio moduł generatora AD9850 do testów . Aby nie wymyślać koło ponownie zacząłem szperać w sieci , no i znalazłem taki kod który byłem w stanie zrozumieć co autor modyfikacji miał na myśli .
Link do źródła :arrow: KLIK.
Wyczyściłem wszystko co było zbędne , pozostawiając czysty kod do sterowania tym modułem .
Zmeniłem zakres kroku Hz , oraz zmodyfikowałem sposób wyświetlani częstotliwości na LCD .
Generator działa całkiem przyzwoicie w zakresie od 1MHz – 40 MHz z błędem +12Hz /1 MHz i rośnie do 78Hz przy 40 MHz . Od 1 MHz do 300 kHz +/- 1Hz , poniżej 200 kHz zaczyna podbijać częstotliwość do 400 Hz . Trudno mi powiedzieć czy moduł jest taki dup....ty , czy moja kalibracja mało dokładna .
Jeśli ma ktoś doświadczenie z tym modułem , chętnie przeczytam co mogę tu ulepszyć .
;)
  1. '      Sterownik Syntezera
  2. '      Copyright 2012 SQ9MDD <rlabus@luxmat.com>
  3. '
  4. '      This program is free software; you can redistribute it and/or modify
  5. '      it under the terms of the GNU General Public License as published by
  6. '      the Free Software Foundation; either version 2 of the License, or
  7. '      (at your option) any later version.
  8. '
  9. '      This program is distributed in the hope that it will be useful,
  10. '      but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. '      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. '      GNU General Public License for more details.
  13. '
  14. '      You should have received a copy of the GNU General Public License
  15. '      along with this program; if not, write to the Free Software
  16. '      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  17. '      MA 02110-1301, USA.
  18. '
  19. '
  20. '-----------------------------------------------------------------
  21.  
  22.       $regfile = "M8def.dat"
  23.       $crystal = 4000000
  24.       $hwstack = 64
  25.       $swstack = 10
  26.       $framesize = 40
  27.  
  28.    Config Lcd = 16 * 2
  29.    Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0 , E = Pinc.4 , Rs = Pinc.5
  30.    Config Portb.0 = Input       ' enkoder
  31.    Config Portb.1 = Input       ' enkoder
  32.    Config Portb.2 = Input       'zmiana kroku
  33.    Config Portb.3 = Output       'dds
  34.    Config Portb.4 = Output       'dds
  35.    Config Portb.5 = Output       'dds
  36.  
  37.    Portb.0 = 1 ' enkoder
  38.    Portb.1 = 1 ' enkoder
  39.    Portb.2 = 1 ' zmiana kroku
  40.    Portb.3 = 1 'dds
  41.    Portb.4 = 1 'dds
  42.    Portb.5 = 1 'dds
  43.  
  44.    Dds_w_clk Alias Portb.5       'dds
  45.    Dds_fq_ud Alias Portb.4       'dds
  46.    Dds_data Alias Portb.3       'dds
  47.  
  48.    Dim Freq As Long
  49.    dim il_znak as byte
  50.    dim tekst1 as string * 9
  51.    dim ftxt as string * 8
  52.    Dim Enc As Byte
  53.    Dim Krok As dword
  54.    Dim Kierunek As Bit
  55.    Dim Init As Byte
  56.    Dim Freqtodds As Single
  57.    Dim Freqtoddsready As Long
  58.  
  59.    Freq = 1000000
  60.    Krok = 10000
  61.  
  62.    Declare Sub Wyslij_f_do_dds
  63.    Cursor off
  64.    Echo Off
  65.  
  66.    Set Dds_w_clk : Waitus 10 : Reset Dds_w_clk : Waitus 10
  67.    Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  68.    Init = &H00
  69.    Wait 1
  70.    Gosub Wyswietlacz
  71. '================== Petla glowna ===================================
  72.     Do
  73.  
  74.    Debounce Pinb.2 , 0 , Zmianakroku , Sub
  75.    Enc = Encoder(pinb.0 , Pinb.1 , Prawo , Lewo , 0)
  76.  
  77.    Loop
  78.  
  79.     End
  80. '================== Enkoder w lewo =====================
  81.    Lewo:
  82.          waitms 10
  83.      If Kierunek = 1 Then
  84.         Kierunek = 0
  85.        Return
  86.      End If
  87.      If Enc = 2 Or Enc = 1 Then
  88.         Freq = Freq - Krok
  89.      End If
  90.        If Freq < 1000 Then
  91.           Freq = 40000000
  92.      End If
  93.   Gosub Freq_update
  94.   Return
  95. '================== Enkoder w prawo =====================
  96.    Prawo:
  97.         waitms 10
  98.      If Kierunek = 0 Then
  99.           Kierunek = 1
  100.             Return
  101.                End If       '
  102.     If Enc = 3 Or Enc = 0 Then
  103.          Freq = Freq + Krok
  104.                End If
  105.     If Freq > 40000000 Then
  106.           Freq = 1000
  107.                End If
  108.   Gosub Freq_update
  109.   Return
  110. '================== Zmiena kroku ==========================
  111.  
  112.   Zmianakroku:
  113.        waitms 600
  114.       If Krok = 1000000 Then
  115.          Krok = 100000
  116.   Elseif Krok = 100000 Then
  117.          Krok = 10000
  118.   Elseif Krok = 10000 Then
  119.          Krok = 1000
  120.   Elseif Krok = 1000 Then
  121.          Krok = 100
  122.   Elseif Krok = 100 Then
  123.          Krok = 10
  124.   Elseif Krok = 10 Then
  125.          Krok = 1
  126.   Elseif Krok = 1 Then
  127.          Krok = 1000000
  128.      End If
  129.    Gosub Wyswietlacz
  130.  Return
  131. '============= Wyswietlanie czestotliwosci ================================
  132.   Freq_update:
  133.        tekst1 = " 00000000"
  134.        ftxt = str(freq)
  135.        il_znak = len(ftxt)
  136.      if il_znak = 1 then
  137.         mid(tekst1 , 9 , il_znak) = ftxt
  138.            elseif il_znak = 2 then
  139.         mid(tekst1 , 8 , il_znak) = ftxt
  140.            elseif il_znak = 3 then
  141.         mid(tekst1 , 7 , il_znak) = ftxt
  142.            elseif il_znak = 4 then
  143.         mid(tekst1 , 6 , il_znak) = ftxt
  144.            elseif il_znak = 5 then
  145.         mid(tekst1 , 5 , il_znak) = ftxt
  146.            elseif il_znak = 6 then
  147.         mid(tekst1 , 4 , il_znak) = ftxt
  148.            elseif il_znak = 7 then
  149.         mid(tekst1 , 3 , il_znak) = ftxt
  150.            elseif il_znak = 8 then
  151.         mid(tekst1 , 2 , il_znak) = ftxt
  152.      end if
  153.         Locate 1 , 1
  154.       Lcd mid(tekst1 , 1 , 3)
  155.       Lcd "."
  156.       Lcd Mid(tekst1 , 4 , 3)
  157.       Lcd "."
  158.       Lcd mid(tekst1 , 7 , 3)
  159.       lcd " Hz "
  160.     Call Wyslij_f_do_dds
  161.   Return
  162. '================= Wyswietlanie kroku czestotliwosci ============================
  163.   Wyswietlacz:
  164.     Gosub Freq_update
  165.          Locate 2 , 2 : lcd "Krok "
  166.       If Krok = 1 Then
  167.          Lcd " 1  Hz"       '1 hz
  168.       Elseif Krok = 10 Then
  169.          Lcd " 10 Hz"       '10 hz
  170.       Elseif Krok = 100 Then
  171.          Lcd "100 Hz"       '100 hz
  172.       Elseif Krok = 1000 Then
  173.          Lcd " 1 kHz"       '1 khz
  174.       Elseif Krok = 10000 Then
  175.          Lcd "10 kHz"       '10 khz
  176.       Elseif Krok = 100000 Then
  177.          Lcd "100kHz"       '100 khZ
  178.       Elseif Krok = 1000000 Then
  179.          Lcd " 1 MHz"       '1 MHz
  180.       End If
  181.  
  182. '============== Wysylanie danych do DDS 9850 ================================
  183.   Return
  184.  
  185.   Sub Wyslij_f_do_dds
  186.      Freqtodds = Freq * 34.3598       ' 34.3598 kalibracja czestotliwosci
  187.      Freqtoddsready = Freqtodds
  188.      Shiftout Dds_data , Dds_w_clk , Freqtoddsready , 3 , 32 , 10
  189.      Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 , 10
  190.      Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  191.   End Sub
Pozdrawiam Henryk .
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Generator AD 9850

Post autor: niveasoft » 01 cze 2021, 19:03

Znalazłem u siebie jakiś kod do tego i poniżej masz wycinek. Faktycznie jak Jedno podzielisz przez drugie to wychodzi ~34,35 tylko że z wieloma cyferkami po przecinku i może o te dokładność chodzi. Można z tego nawet zrobić Constans albo obliczyć raz na poczatku programu żeby tego Mega nie musiała co chwilę liczyć.
  1.                                     'valeur de la frequence modifiable
  2.      Calcul = 4294967296 / 125000000
  3.      Calcul = Calcul * Frequence
  4.  
  5.      Y0 = Calcul
  6.  
  7.     Reset Portb.3                                           'patte de validation data fq_ud
  8.  
  9.     '***debut serial load enable sequence
  10.     Reset Pinclock
  11.     Reset Portb.3
  12.  
  13.     Waitms 10
  14.     Set Pinclock
  15.     Waitms 10
  16.     Reset Pinclock
  17.     Set Portb.3
  18.     Waitms 20
  19.     Reset Portb.3
  20.  
  21.  
  22.  
  23.  
  24.     Reset _reset
  25.  
  26.     ' on envoi 40 bits en serie
  27.     Shiftout Pindata , Pinclock , Y0 , 3 , 32 , 100
  28.     Shiftout Pindata , Pinclock , Y5 , 3 , 8 , 100
  29.  
  30.     Set Portb.2                                             ' validation des data sur front montant
  31.  
  32.                               '
  33.     Reset Portb.2
  34.     Reset _reset
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Generator AD 9850

Post autor: Henryk » 01 cze 2021, 19:11

Witaj Bartek :) .
No jest to pomysł , o tym nie pomyślałem .
Cały kłopot w tym , że te moduły mają odchyłki jeśli idzie o oscylator . Mój daje Hz 124,99988 , i tu należy brać poprawki do tych obliczeń .
Pierwsze co zrobię , to zamknę generator w metalowym pudełku by miał w miarę stałe warunki pracy .
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Generator AD 9850

Post autor: Henryk » 02 cze 2021, 20:24

Koniec zabawy z modułem ;)
Ostatecznie udało się osiągnąć w miarę przyzwoite parametry z takim przydługaśnym łańcuszkiem kalibracyjnym .
  1. Sub Wyslij_f_do_dds
  2.  
  3.      Freqtodds = Freq * 34.359733938352968764260012776971       ' kalibracja czestotliwosci
  4.      Freqtoddsready = Freqtodds
  5.      Shiftout Dds_data , Dds_w_clk , Freqtoddsready , 3 , 32 , 10
  6.      Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 , 10
  7.      Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  8.   End Sub
Przy 40MHz błąd + 6 do 8 Hz , 30MHz + 3 do 5 Hz , 20MHz 1 do 2 Hz , 10MHz +/- 1Hz i tak trzyma do 40kHz .
Poniżej 10kHz szkoda gadać , błąd rośnie do 500Hz przy 1kHz .
IMG_20210602_195510.jpg
Aby osiągnąć takie parametry musiałem do oscylatora "przykleić " mały radiator , idealnie nadał się uszkodzony tranzystor wcz. :)
IMG_20210602_195533.jpg
To jednak nie koniec zabawy z modułami , dzisiaj dotarł Si5351A 160MHz .
Jeszcze nie wiem jak go ugryźć , ale pracuje nad tym .
Pozdrawiam Henryk .
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Generator AD 9850

Post autor: Henryk » 03 cze 2021, 15:54

Dodałem do kodu obsługę przesunięcia fazowego i bitów control , power down olałem .
Bity control.0 i control.1 odłączają sygnał od wyjść , hmmm bez znaczenia który ustawię w stan 1 wszystkie wyjścia są odłączone , czy tak powinno być ? nie wiem ;)
Przesunięcie fazowe niby działa ( mój biedny stary oscyloskopek ledwo coś tam wyświetla ) .
  1. '      Sterownik Syntezera
  2. '      Copyright 2012 SQ9MDD <rlabus@luxmat.com>
  3. '
  4. '      This program is free software; you can redistribute it and/or modify
  5. '      it under the terms of the GNU General Public License as published by
  6. '      the Free Software Foundation; either version 2 of the License, or
  7. '      (at your option) any later version.
  8. '
  9. '      This program is distributed in the hope that it will be useful,
  10. '      but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. '      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. '      GNU General Public License for more details.
  13. '
  14. '      You should have received a copy of the GNU General Public License
  15. '      along with this program; if not, write to the Free Software
  16. '      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  17. '      MA 02110-1301, USA.
  18. '
  19. '
  20. '-----------------------------------------------------------------
  21.  
  22.       $regfile = "M8def.dat"
  23.       $crystal = 4000000
  24.       $hwstack = 64
  25.       $swstack = 10
  26.       $framesize = 40
  27.  
  28.    Config Lcd = 16 * 2
  29.    Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0 , E = Pinc.4 , Rs = Pinc.5
  30.    Config Portb.0 = Input       ' enkoder
  31.    Config Portb.1 = Input       ' enkoder
  32.    Config Portb.2 = Input       'zmiana kroku
  33.    Config Portb.3 = Output       'dds
  34.    Config Portb.4 = Output       'dds
  35.    Config Portb.5 = Output       'dds
  36.    Config Portb.6 = input       'faza
  37.    Config Portb.7 = input       'control
  38.  
  39.    Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32       ' replace [x] with number (0-7)
  40.    Deflcdchar 1 , 28 , 16 , 16 , 28 , 32 , 7 , 5 , 7       ' replace [x] with number (0-7)
  41.    Deflcdchar 2 , 28 , 16 , 16 , 28 , 1 , 3 , 1 , 1       ' replace [x] with number (0-7)
  42.  
  43.    Portb.0 = 1 ' enkoder
  44.    Portb.1 = 1 ' enkoder
  45.    Portb.2 = 1 ' zmiana kroku
  46.    Portb.3 = 1 'dds
  47.    Portb.4 = 1 'dds
  48.    Portb.5 = 1 'dds
  49.    Portb.6 = 1 'faza
  50.    Portb.7 = 1 'control
  51.  
  52.    Dds_w_clk Alias Portb.5       'dds
  53.    Dds_fq_ud Alias Portb.4       'dds
  54.    Dds_data Alias Portb.3       'dds
  55.  
  56.    Dim Freq As Long
  57.    dim il_znak as byte
  58.    dim temp1 as byte
  59.    dim temp2 as byte
  60.    dim tekst1 as string * 9
  61.    dim ftxt as string * 8
  62.    Dim Enc As Byte
  63.    Dim Krok As dword
  64.    Dim Kierunek As Bit
  65.    Dim Init As Byte
  66.    Dim Freqtodds As Single
  67.    Dim Freqtoddsready As Long
  68.  
  69.    Freq = 40000
  70.    Krok = 1000
  71.    temp1 = 10
  72.    temp2 = 10
  73.    Declare Sub Wyslij_f_do_dds
  74.    Cursor off
  75.    Echo Off
  76.    cls
  77.    Set Dds_w_clk : Waitus 10 : Reset Dds_w_clk : Waitus 10
  78.    Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  79.    Init = &H00
  80.    Wait 1
  81.    Gosub Wyswietlacz
  82. '================== Petla glowna ===================================
  83.     Do
  84.  
  85.    Debounce Pinb.2 , 0 , Zmianakroku , Sub
  86.    Debounce Pinb.6 , 0 , faza , Sub
  87.    Debounce Pinb.7 , 0 , control , Sub
  88.    Enc = Encoder(pinb.0 , Pinb.1 , Prawo , Lewo , 0)
  89.  
  90.    Loop
  91.  
  92.     End
  93. '================== Enkoder w lewo =====================
  94.    Lewo:
  95.          waitms 10
  96.      If Kierunek = 1 Then
  97.         Kierunek = 0
  98.        Return
  99.      End If
  100.      If Enc = 2 Or Enc = 1 Then
  101.         Freq = Freq - Krok
  102.      End If
  103.        If Freq < 1000 Then
  104.           Freq = 40000000
  105.      End If
  106.   Gosub Freq_update
  107.   Return
  108. '================== Enkoder w prawo =====================
  109.    Prawo:
  110.         waitms 10
  111.      If Kierunek = 0 Then
  112.           Kierunek = 1
  113.             Return
  114.                End If       '
  115.     If Enc = 3 Or Enc = 0 Then
  116.          Freq = Freq + Krok
  117.                End If
  118.     If Freq > 40000000 Then
  119.           Freq = 1000
  120.                End If
  121.   Gosub Freq_update
  122.   Return
  123. '================== Zmiena kroku ==========================
  124.  
  125.   Zmianakroku:
  126.        waitms 600
  127.       If Krok = 1000000 Then
  128.          Krok = 100000
  129.   Elseif Krok = 100000 Then
  130.          Krok = 10000
  131.   Elseif Krok = 10000 Then
  132.          Krok = 1000
  133.   Elseif Krok = 1000 Then
  134.          Krok = 100
  135.   Elseif Krok = 100 Then
  136.          Krok = 10
  137.   Elseif Krok = 10 Then
  138.          Krok = 1
  139.   Elseif Krok = 1 Then
  140.          Krok = 1000000
  141.      End If
  142.    Gosub Wyswietlacz
  143.  Return
  144. '================= control ===================================
  145. control:
  146.       waitms 600       ' znak C0 , C1 odlacza wyjscia sygnalowe
  147.       if temp2 = 10 then
  148.        set init.0
  149.        temp2 = 20
  150.       locate 2 , 16 : lcd chr(1)
  151.     elseif temp2 = 20 then
  152.        reset init.0
  153.        set init.1
  154.        temp2 = 30
  155.       locate 2 , 16 : lcd chr(2)
  156.     elseif temp2 = 30 then
  157.        reset init.0
  158.        reset init.1
  159.        temp2 = 10
  160.       locate 2 , 16 : lcd " "
  161.     end if
  162.     Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 , 10
  163.    Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  164.  return
  165.  
  166.  '============== przesuniecie fazowe ================================
  167.  faza:
  168.       waitms 600       ' litera "F" na lcd  oznacza przesuniecie fazowe
  169.     if temp1 = 10 then
  170.        set init.7
  171.        temp1 = 20
  172.       locate 2 , 9 : lcd "180" ; chr(0) ; "  "       ' 180 stopni
  173.     elseif temp1 = 20 then
  174.        reset init.7
  175.        set init.6
  176.        temp1 = 30
  177.       locate 2 , 9 : lcd "90" ; chr(0) ; " "       ' 90 stopni
  178.     elseif temp1 = 30 then
  179.        reset init.6
  180.        set init.5
  181.        temp1 = 40
  182.       locate 2 , 9 : lcd "45" ; chr(0) ; " "       ' 45 stopni
  183.     elseif temp1 = 40 then
  184.        reset init.5
  185.        set init.4
  186.        temp1 = 50
  187.       locate 2 , 9 : lcd "22,5" ; chr(0) ; " "       ' 22,5 stopnia
  188.    elseif temp1 = 50 then
  189.        reset init.4
  190.        set init.3
  191.        temp1 = 60
  192.       locate 2 , 9 : lcd "11,25" ; chr(0)       ' 11,25 stopnia
  193.    elseif temp1 = 60 then
  194.        reset init.3
  195.        temp1 = 10
  196.       locate 2 , 9 : lcd "      "       ' zero
  197.      end if
  198.      waitms 200
  199.      Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 , 10
  200.      Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  201.    return
  202.  
  203. '============= Wyswietlanie czestotliwosci ================================
  204.   Freq_update:
  205.        tekst1 = " 00000000"
  206.        ftxt = str(freq)
  207.        il_znak = len(ftxt)
  208.      if il_znak = 1 then
  209.         mid(tekst1 , 9 , il_znak) = ftxt
  210.            elseif il_znak = 2 then
  211.         mid(tekst1 , 8 , il_znak) = ftxt
  212.            elseif il_znak = 3 then
  213.         mid(tekst1 , 7 , il_znak) = ftxt
  214.            elseif il_znak = 4 then
  215.         mid(tekst1 , 6 , il_znak) = ftxt
  216.            elseif il_znak = 5 then
  217.         mid(tekst1 , 5 , il_znak) = ftxt
  218.            elseif il_znak = 6 then
  219.         mid(tekst1 , 4 , il_znak) = ftxt
  220.            elseif il_znak = 7 then
  221.         mid(tekst1 , 3 , il_znak) = ftxt
  222.            elseif il_znak = 8 then
  223.         mid(tekst1 , 2 , il_znak) = ftxt
  224.      end if
  225.         Locate 1 , 1
  226.       Lcd mid(tekst1 , 1 , 3)
  227.       Lcd "."
  228.       Lcd Mid(tekst1 , 4 , 3)
  229.       Lcd "."
  230.       Lcd mid(tekst1 , 7 , 3)
  231.       lcd " Hz"
  232.  
  233.     Call Wyslij_f_do_dds
  234.   Return
  235. '================= Wyswietlanie kroku czestotliwosci ============================
  236.   Wyswietlacz:
  237.     Gosub Freq_update
  238.  
  239.          Locate 2 , 1 : lcd "K"       ' litera "K" na lcd krok czestotliwosci
  240.       If Krok = 1 Then
  241.          Lcd " 1 Hz F"       '1 hz
  242.       Elseif Krok = 10 Then
  243.          Lcd " 10Hz F"       '10 hz
  244.       Elseif Krok = 100 Then
  245.          Lcd "100Hz F"       '100 hz
  246.       Elseif Krok = 1000 Then
  247.          Lcd " 1kHz F"       '1 khz
  248.       Elseif Krok = 10000 Then
  249.          Lcd "10kHz F"       '10 khz
  250.       Elseif Krok = 100000 Then
  251.          Lcd "100kH F"       '100 khZ
  252.       Elseif Krok = 1000000 Then
  253.          Lcd "1 MHz F"       '1 MHz
  254.       End If
  255.  
  256. '============== Wysylanie danych do DDS 9850 ================================
  257.   Return       ' 34.359768938352968764260012776971 oryginal
  258.                 ' 34.359733938352968764260012776971
  259.   Sub Wyslij_f_do_dds
  260.  
  261.      Freqtodds = Freq * 34.359733938352968764260012776971       ' kalibracja czestotliwosci
  262.      Freqtoddsready = Freqtodds
  263.      Shiftout Dds_data , Dds_w_clk , Freqtoddsready , 3 , 32 , 10
  264.      Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 , 10
  265.      Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
  266.   End Sub
Bawił się kto tymi przesunięciami fazowymi ? napiszcie , pozdrawiam Henryk :)
smatjaz
Posty: 0
Rejestracja: 09 paź 2020, 22:36

Re: Generator AD 9850

Post autor: smatjaz » 09 cze 2021, 16:25

Hello.

There is interesting DDS generator AD9833 on Arduino platform and unversal Android application GUI-O.
https://www.mcselec.com/index2.php?opti ... c&t=14568

https://www.youtube.com/watch?v=8iPABwZyiAc
www.gui-o.com
ODPOWIEDZ