Witam , znalazłem taki kod syntezy DDS w necie chce dopisać parę linijek kodu tak aby uzyskać dodatkową funkcję skanowania częstotliwości po kliknięciu na klawisz , o to kod źródłowy inicjalizacja procesora wstępna konfiguracja Const Firmwareversion = "1.4.2" $regfile = M8def.dat $crystal = 4000000 '$baud = 9600 $hwstack = 64 $swstack = 10 $framesize = 40 '----------------------------------------------------------------- 'konfiguracja wyświetlacza Config Lcd = 20 * 2 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portc.0 , Db6 = Portc.1 , Db7 = Portc.2 , E = Portd.1 , Rs = Portd.2 '----------------------------------------------------------------- 'konfiguracja pozostałych portów Config Portc = Output Config Portb.0 = Input Config Portb.1 = Input Config Portb.2 = Input Config Portb.3 = Input Config Portb.4 = Input Config Portd.7 = Input Portb = &B00111111 Portd = &B11111111 '----------------------------------------------------------------- 'konfiguracja ADC dla s-metra 'Config Adc = Single , Prescaler = Auto '----------------------------------------------------------------- 'aliasy dla portow 'Dds_reset Alias Portd.5 Dds_fq_ud Alias Portc.4 Dds_w_clk Alias Portc.5 Dds_data Alias Portc.3 '----------------------------------------------------------------- 'konfiguracja portu szeregowego 'Config Serialin = Buffered , Size = 24 'bufor ma być na tyle duży by nie było błedów w odbiorze ramek. 'Config Input = Crlf , Echo = Crlf '----------------------------------------------------------------- 'definicje zmiennych Dim Freq As Long Dim Freq_z_posrednia As Long Dim Freq_a As Long Dim Freq_b As Long Dim Freqtolcd As String * 7 Dim Enc As Byte Dim Vfo As Bit Dim Krok As Integer Dim Krok_a As Integer Dim Krok_b As Integer Dim Kierunek As Bit Dim Modulacja As Byte Dim Modulacja_a As Byte Dim Modulacja_b As Byte Dim Freq_beram As Eram Long Dim Freq_aeram As Eram Long Dim Krok_aeram As Eram Integer Dim Krok_beram As Eram Integer Dim Modulacja_aeram As Eram Byte Dim Modulacja_beram As Eram Byte Dim Lock_bit As Bit Dim Ptt As Bit Dim Konfig_bit As Bit 'zmienne dla posredniej Dim Posrednia As Long Dim Posredniaeram As Eram Long Dim Posrednia_kierunek As Byte Dim Posrednia_kierunekeram As Eram Byte 'zmienne dla ddsa Dim Init As Byte Dim Freqtodds As Single Dim Freqtoddsready As Long Dim Przelicznik As Single Dim Przelicznik_eram As Eram Single '----------------------------------------------------------------- 'trzeba pomyslec o s-metrze Deflcdchar 0 , 32 , 32 , 32 , 4 , 4 , 32 , 32 , 32 ' replace ? with number (0-7) Deflcdchar 0 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 31 ' replace ? with number (0-7) Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 3 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 4 , 32 , 32 , 32 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 5 , 32 , 32 , 31 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 6 , 32 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 7 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7) '----------------------------------------------------------------- ' Declare Sub Wyslij_f_do_dds '----------------------------------------------------------------- 'ustawienia poczatkowe, uruchamiamy procesor 'Enable Interrupts 'Start Adc Cursor Off Echo Off '----------------------------------------------------------------- 'w zasadzie juz mozemy pracowac, ale wyswietlmy reklamy Cls Lcd Firmwareversion Locate 2 , 1 Lcd "booting " Wait 1 Lcd "." Wait 1 Lcd "." Wait 1 Lcd "." '----------------------------------------------------------------- ' AD9850 Initialize 'Set Dds_reset : Waitus 10 : Reset Dds_reset : Waitus 10 ' Reset Set Dds_w_clk : Waitus 10 : Reset Dds_w_clk : Waitus 10 ' W_CLK Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10 ' FQ_UD Init = &H00 'ladujemy ustawienia domyslne lub jesli sa to zapisane nastawy If Freq_aeram > 1000 Then Freq = Freq_aeram Freq_a = Freq_aeram Freq_b = Freq_beram Krok = Krok_aeram Krok_a = Krok_aeram Krok_b = Krok_beram Modulacja = Modulacja_aeram Modulacja_a = Modulacja_aeram Modulacja_b = Modulacja_beram Posrednia = Posredniaeram Posrednia_kierunek = Posrednia_kierunekeram 'posrednia kierunek 0-minus, 1-plus, 2-nic Przelicznik = Przelicznik_eram Else Freq = 371500 Freq_a = 371500 Freq_b = 371500 Krok = 100 Krok_a = 100 Krok_b = 100 Modulacja = 2 Modulacja_a = 2 Modulacja_b = 2 Posrednia = 800000 Posrednia_kierunek = 2 Przelicznik = 343.603 'wymagana delikatna korekta w zależności od egzemplarza syntezy End If If Pind.6 = 0 Then Konfig_bit = 1 End If Wait 1 Cls Gosub Wyswietlacz If Konfig_bit = 0 Then '----------------------------------------------------------------- 'pętla główna Do If Lock_bit <> 1 Then Debounce Pinb.2 , 0 , Modechange , Sub Debounce Pind.7 , 0 , Vfo , Sub Debounce Pind.6 , 0 , Band , Sub Debounce Pinb.5 , 0 , Zmianakroku , Sub 'Debounce Pinb.3 , 0 , Splitfunc , Sub If Pinb.3 = 0 Then Ptt = 1 Gosub Slupek_ptt Else Ptt = 0 Gosub Slupek_ptt End If Enc = Encoder(pinb.0 , Pinb.1 , Lewo , Prawo , 0) End If Debounce Pinb.4 , 0 , Lock , Sub Loop Else Locate 1 , 1 Lcd "SETUP" Do Enc = Encoder(pinb.0 , Pinb.1 , Lewo , Prawo , 0) Debounce Pinb.5 , 0 , Zmianakroku , Sub Debounce Pind.7 , 0 , Zapis , Sub Debounce Pinb.4 , 0 , Offset , Sub Debounce Pinb.3 , 0 , Plus_przelicznik , Sub Debounce Pinb.2 , 0 , Minus_przelicznik , Sub Loop End If '------------------------------------------------------------------------------- 'koniec programu End '------------------------------------------------------------------------------- ' wszystkie sub-programs tutaj Plus_przelicznik: Przelicznik = Przelicznik + 0.0001 Gosub Wyswietlacz Return Minus_przelicznik: Przelicznik = Przelicznik - 0.0001 Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'offset posredniej Offset: If Posrednia_kierunek = 0 Then Posrednia_kierunek = 1 Elseif Posrednia_kierunek = 1 Then Posrednia_kierunek = 2 Elseif Posrednia_kierunek = 2 Then Posrednia_kierunek = 0 End If Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'zapis Zapis: Locate 1 , 1 Lcd "SAVE " Posredniaeram = Posrednia Posrednia_kierunekeram = Posrednia_kierunek Freq_aeram = Freq_a Freq_beram = Freq_b Krok_beram = Krok_b Krok_aeram = Krok_a Modulacja_beram = Modulacja_b Modulacja_aeram = Modulacja_a Przelicznik_eram = Przelicznik Wait 1 Goto _reset Return '------------------------------------------------------------------------------- 'blokowanie syntezy Lock: If Lock_bit = 0 Then Lock_bit = 1 Else Lock_bit = 0 End If Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'galka w lewo Lewo: If Kierunek = 1 Then 'zabezpieczenie przeciwko przeskakiwaniu o dwa przy zmianie kierunku Kierunek = 0 Return End If 'galka w lewo If Enc = 2 Or Enc = 1 Then If Konfig_bit = 0 Then Freq = Freq - Krok Else Posrednia = Posrednia - Krok End If End If If Freq < 100000 And Konfig_bit = 0 Then Freq = 3000000 End If Gosub Freq_update Return '------------------------------------------------------------------------------- 'galka w prawo Prawo: If Kierunek = 0 Then Kierunek = 1 Return End If 'galka w prawo If Enc = 3 Or Enc = 0 Then If Konfig_bit = 0 Then Freq = Freq + Krok Else Posrednia = Posrednia + Krok End If End If If Freq > 3000000 And Konfig_bit = 0 Then Freq = 100000 End If Gosub Freq_update Return 'split Splitfunc: Return '------------------------------------------------------------------------------- 'zmiana kroku syntezy Zmianakroku: 'zmiana kroku syntezy If Krok = 1000 Then Krok = 100 Elseif Krok = 100 Then Krok = 10 Elseif Krok = 10 Then Krok = 1 Elseif Krok = 1 Then Krok = 1000 ' Freq = Freq / 100 'kasowanie reszty przy zmianie kroku wycofalem ' Freq = Freq * 100 End If Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'zmiana modulacji (dodac sterowanie pilotami) Modechange: If Modulacja = 1 Then Modulacja = 2 Elseif Modulacja = 2 Then Modulacja = 3 Elseif Modulacja = 3 Then Modulacja = 1 End If Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'sterowanie VFO Vfo: 'zmiana vfo z A na B i modulacji If Vfo = 1 Then Freq_b = Freq Freq_beram = Freq_b 'zapis ustawien do eram przeniesc do osobnej funkcji przy poweroff !!!!!!!!!!!!!!!!!!!!!!!!!!! Freq = Freq_a Modulacja_b = Modulacja Modulacja_beram = Modulacja_b Modulacja = Modulacja_a Krok_b = Krok Krok_beram = Krok_b Krok = Krok_a Vfo = 0 Elseif Vfo = 0 Then Freq_a = Freq Freq_aeram = Freq_a Freq = Freq_b Modulacja_a = Modulacja Modulacja_aeram = Modulacja_a Modulacja = Modulacja_b Krok_a = Krok Krok_aeram = Krok_a Krok = Krok_b Vfo = 1 End If Posredniaeram = Posrednia Posrednia_kierunekeram = Posrednia_kierunek Przelicznik_eram = Przelicznik Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'zmiana pasm klawiszem band 'pasma ogarniete 15.11.2012 Band: If Freq < 370000 Then Freq = 370000 Modulacja = 2 Elseif Freq < 700000 Then Freq = 700000 Modulacja = 2 Elseif Freq < 1010000 Then Freq = 1010000 Modulacja = 1 Elseif Freq < 1400000 Then Freq = 1400000 Modulacja = 3 Elseif Freq < 1800000 Then Freq = 1806800 Modulacja = 3 Elseif Freq < 2100000 Then Freq = 2100000 Modulacja = 3 Elseif Freq < 2480000 Then Freq = 2489000 Modulacja = 3 Elseif Freq < 2800000 Then Freq = 2800000 Modulacja = 3 Elseif Freq >= 2800000 Then Freq = 181000 Modulacja = 2 End If Gosub Wyswietlacz Return '------------------------------------------------------------------------------- 'obsluga zmiany czestotliwosci na wyswietlaczu 'zmienilem z przeliczania f na rzecz wyswietlania ze stringu oszczednosc kodu okolo 5% Freq_update: Locate 2 , 6 If Konfig_bit = 0 Then Freqtolcd = Str(freq) Else Freqtolcd = Str(posrednia) End If If Len(freqtolcd) <= 6 Then Freqtolcd = " " + Freqtolcd End If Lcd Left(freqtolcd , 2) Lcd "." Lcd Mid(freqtolcd , 3 , 3) Lcd "." Lcd Right(freqtolcd , 2) Call Wyslij_f_do_dds 'po kazdej zmianie czestotliwosci wysylamy komende do DDS'a Return '------------------------------------------------------------------------------- 'obsluga zmiany wszystkiego innego na wyswietlaczu Wyswietlacz: Gosub Freq_update If Konfig_bit = 0 Then Locate 1 , 1 Lcd "VFO-" If Vfo = 1 Then Lcd "B" Elseif Vfo = 0 Then Lcd "A" End If Locate 2 , 1 If Modulacja = 1 Then Lcd "CW " Elseif Modulacja = 2 Then Lcd "LSB" Elseif Modulacja = 3 Then Lcd "USB" End If Locate 2 , 17 If Lock_bit = 1 Then Lcd "Lock" Else Lcd " " End If Else Locate 2 , 1 If Posrednia_kierunek = 0 Then 'posrednia kierunek 0-minus, 1-plus, 2-nic Lcd "MINUS" Elseif Posrednia_kierunek = 1 Then Lcd "PLUS " Elseif Posrednia_kierunek = 2 Then Lcd "NONE " End If Locate 1 , 7 Lcd Przelicznik End If Locate 1 , 15 If Krok = 1 Then Lcd " 10Hz" Elseif Krok = 10 Then Lcd " 100Hz" Elseif Krok = 100 Then Lcd " 1kHz" Elseif Krok = 1000 Then Lcd " 10kHz" End If Return '------------------------------------------------------------------------------- Slupek_ptt: If Ptt = 1 Then 'a tutaj bedzie smetr z ładnymi słupkami Locate 1 , 6 Lcd Chr(0) Lcd Chr(0) Lcd Chr(1) Lcd Chr(2) Lcd Chr(3) Lcd Chr(4) Lcd Chr(5) Lcd Chr(6) Lcd Chr(7) Locate 2 , 19 Lcd "TX" Else Locate 1 , 6 Lcd " " Locate 2 , 19 Lcd "RX" End If Return '------------------------------------------------------------------------------- 'sterowanie DDS-em Sub Wyslij_f_do_dds 'posrednia kierunek 0-minus, 1-plus, 2-nic If Posrednia_kierunek = 0 Then Freq_z_posrednia = Posrednia - Freq Elseif Posrednia_kierunek = 1 Then Freq_z_posrednia = Posrednia + Freq Elseif Posrednia_kierunek = 2 Then Freq_z_posrednia = Freq End If Freqtodds = Freq_z_posrednia * Przelicznik 'przelicznik ze zmiennej ladowanej z eepromu dla roznych syntez Freqtoddsready = Freqtodds Shiftout Dds_data , Dds_w_clk , Freqtoddsready , 3 , 32 Shiftout Dds_data , Dds_w_clk , Init , 3 , 8 Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10 End Sub
|
|||