| 
 RE: Synteza na AD9851 a Bascom AVR - SP6-11003 -  06-06-2013 8:17
 
 Kolego free , dokładnie nic. Program jest właśnie napisany pod układy AD9850.
 
 Poniżej jest kod, który aktualnie steruje moją syntezą w Piligrim.
 
 
 
Kod:
 '      Sterownik Syntezera'      Copyright 2012 SQ9MDD <rlabus@luxmat.com>
 '
 '      This program is free software; you can redistribute it and/or modify
 '      it under the terms of the GNU General Public License as published by
 '      the Free Software Foundation; either version 2 of the License, or
 '      (at your option) any later version.
 '
 '      This program is distributed in the hope that it will be useful,
 '      but WITHOUT ANY WARRANTY; without even the implied warranty of
 '      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 '      GNU General Public License for more details.
 '
 '      You should have received a copy of the GNU General Public License
 '      along with this program; if not, write to the Free Software
 '      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 '      MA 02110-1301, USA.
 '
 '
 '-----------------------------------------------------------------
 Const Firmwareversion = "mod 1.2"
 $regfile = "M8def.dat"
 $crystal = 4000000
 $hwstack = 64
 $swstack = 10
 $framesize = 40
 
 Config Lcd = 20 * 2
 Config Lcdpin = Pin , Db4 = Pind.1 , Db5 = Pind.2 , Db6 = Pind.0 , Db7 = Pind.3 , E = Pinc.4 , Rs = Pinc.5
 
 Cursor Off
 Cls
 Locate 1 , 1
 Lcd "Syntezer DDS  AD9850"
 Locate 2 , 5
 Lcd "Piligrim SMD"
 Wait 2
 
 Config Portb.0 = Input
 Config Portb.1 = Input
 Config Portb.2 = Input
 Config Portc.0 = Input
 Config Portc.1 = Input
 Config Portc.2 = Input
 Config Portc.3 = Input
 Config Portb.3 = Output
 Config Portb.4 = Output
 Config Portb.5 = Output
 Config Portb.6 = Output
 Config Portb.7 = Output
 Config Portd.4 = Output
 Config Portd.5 = Output
 Config Portd.6 = Output
 Config Portd.7 = Output
 
 Portb.0 = 1
 Portb.1 = 1
 Portb.2 = 1
 Portb.3 = 1
 Portb.4 = 1
 Portb.5 = 1
 Portb.6 = 1
 Portb.7 = 1
 Portc.0 = 1
 Portc.1 = 1
 Portc.2 = 1
 Portc.3 = 1
 Portd.4 = 1
 Portd.5 = 1
 Portd.6 = 1
 Portd.7 = 1
 
 Dds_fq_ud Alias Portb.4
 Dds_w_clk Alias Portb.5
 Dds_data Alias Portb.3
 
 Dim Freq 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 Antena As Byte
 Dim Licznik As Bit
 Dim Init As Byte
 Dim Freqtodds As Single
 Dim Freqtoddsready As Long
 
 Declare Sub Wyslij_f_do_dds
 
 Cursor Off
 Echo Off
 
 Set Dds_w_clk : Waitus 10 : Reset Dds_w_clk : Waitus 10
 Set Dds_fq_ud : Waitus 10 : Reset Dds_fq_ud : Waitus 10
 Init = &H00
 
 
 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
 Antena = 1
 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
 Antena = 1
 End If
 
 Wait 1
 Cls
 Gosub Wyswietlacz
 
 Do
 
 Debounce Pinc.1 , 0 , Modechange , Sub
 Debounce Pinc.3 , 0 , Gen , Sub
 Debounce Pinc.2 , 0 , Band , Sub
 Debounce Pinb.2 , 0 , Zmianakroku , Sub
 Debounce Pinc.0 , 0 , Ant , Sub
 Enc = Encoder(pinb.0 , Pinb.1 , Prawo , Lewo , 0)
 
 Loop
 
 End
 
 Lewo:
 If Kierunek = 1 Then
 Kierunek = 0
 Return
 End If
 If Enc = 2 Or Enc = 1 Then
 Freq = Freq - Krok
 End If
 If Freq < 100000 Then
 Freq = 3000000
 End If
 Gosub Freq_update
 Return
 
 Prawo:
 If Kierunek = 0 Then
 Kierunek = 1
 Return
 End If                                                      '
 If Enc = 3 Or Enc = 0 Then
 Freq = Freq + Krok
 End If
 If Freq > 3000000 Then
 Freq = 100000
 End If
 Gosub Freq_update
 Return
 
 Ant:
 
 If Antena = 1 Then
 Antena = 2
 Elseif Antena = 2 Then
 Antena = 1
 
 End If
 Gosub Wyswietlacz
 Return
 
 Zmianakroku:
 If Krok = 10000 Then
 Krok = 1000
 Elseif Krok = 1000 Then
 Krok = 100
 Elseif Krok = 100 Then
 Krok = 10
 Elseif Krok = 10 Then
 Krok = 1
 Elseif Krok = 1 Then
 Krok = 10000
 
 End If
 Gosub Wyswietlacz
 Return
 
 Modechange:
 If Modulacja = 1 Then
 Modulacja = 2
 Elseif Modulacja = 2 Then
 Modulacja = 3
 Elseif Modulacja = 3 Then
 Modulacja = 1
 End If
 Gosub Wyswietlacz
 Return
 
 Gen:
 If Vfo = 1 Then
 Freq_b = Freq
 Freq_beram = Freq_b
 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
 Gosub Wyswietlacz
 Return
 
 Band:
 If Freq < 370000 Then
 Freq = 370000
 Locate 2 , 7
 Lcd "80m "
 Portd.4 = 0
 Portb.6 = 0
 Portb.7 = 1
 Portd.5 = 0
 Modulacja = 2
 Elseif Freq < 700000 Then
 Freq = 700000
 Locate 2 , 7
 Lcd "40m "
 Portd.4 = 0
 Portb.6 = 0
 Portb.7 = 1
 Portd.5 = 1
 Modulacja = 2
 Elseif Freq < 1010000 Then
 Freq = 1010000
 Locate 2 , 7
 Lcd "30m "
 Portd.4 = 0
 Portb.6 = 1
 Portb.7 = 0
 Portd.5 = 0
 Modulacja = 1
 Elseif Freq < 1400000 Then
 Freq = 1400000
 Locate 2 , 7
 Lcd "20m "
 Portd.4 = 0
 Portb.6 = 1
 Portb.7 = 0
 Portd.5 = 1
 Modulacja = 3
 Elseif Freq < 1800000 Then
 Freq = 1806800
 Locate 2 , 7
 Lcd "17m "
 Portd.4 = 0
 Portb.6 = 1
 Portb.7 = 1
 Portd.5 = 0
 Modulacja = 3
 Elseif Freq < 2100000 Then
 Freq = 2100000
 Locate 2 , 7
 Lcd "15m "
 Portd.4 = 0
 Portb.6 = 1
 Portb.7 = 1
 Portd.5 = 1
 Modulacja = 3
 Elseif Freq < 2480000 Then
 Freq = 2489000
 Locate 2 , 7
 Lcd "12m "
 Portd.4 = 1
 Portb.6 = 0
 Portb.7 = 0
 Portd.5 = 0
 Modulacja = 3
 Elseif Freq < 2800000 Then
 Freq = 2800000
 Locate 2 , 7
 Lcd "10m "
 Portd.4 = 1
 Portb.6 = 0
 Portb.7 = 0
 Portd.5 = 1
 Modulacja = 3
 Elseif Freq >= 2800000 Then
 Freq = 181000
 Locate 2 , 7
 Lcd "160m"
 Portd.4 = 0
 Portb.6 = 0
 Portb.7 = 0
 Portd.5 = 1
 Modulacja = 2
 End If
 Gosub Wyswietlacz
 Return
 
 Freq_update:
 Locate 1 , 1
 Freqtolcd = Str(freq)
 If Len(freqtolcd) <= 6 Then
 Freqtolcd = " " + Freqtolcd
 End If
 Lcd Left(freqtolcd , 2)
 Lcd "."
 Lcd Mid(freqtolcd , 3 , 3)
 Lcd "."
 Lcd Right(freqtolcd , 2)
 Lcd "0 Hz"
 Call Wyslij_f_do_dds
 Return
 
 Wyswietlacz:
 Gosub Freq_update
 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"
 Elseif Krok = 10000 Then
 Lcd "100kHz"
 End If
 Locate 2 , 1
 Lcd "VFO-"
 If Vfo = 1 Then
 Lcd "B"
 Elseif Vfo = 0 Then
 Lcd "A"
 End If
 Locate 2 , 13
 If Modulacja = 1 Then
 Lcd "CW "
 Portd.7 = 0
 Elseif Modulacja = 2 Then
 Lcd "LSB"
 Portd.7 = 0
 Elseif Modulacja = 3 Then
 Lcd "USB"
 Portd.7 = 1
 End If
 Locate 2 , 18
 If Antena = 1 Then
 Lcd "A-1"
 Portd.6 = 0
 Elseif Antena = 2 Then
 Lcd "A-2"
 Portd.6 = 1
 End If
 
 Return
 
 Sub Wyslij_f_do_dds
 Freqtodds = Freq * 343.602
 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
 
 " Na stole " aktualnie jest dalej rozwijany ten wsad ale ma jeszcze dużo nie dociągnięć.
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9GAC -  06-06-2013 17:06
 
 mam jeszcze jedno pytanie czy moduły http://ja9ttt.blogspot.de/2012/01/ad985051-dds-control-part2.html będą pracować prawidłowo przy napięciu 3 V ?
 
 
 RE: Synteza na AD9851 a Bascom AVR - SP6-11003 -  06-06-2013 17:43
 
 Sam układ AD9850 powinien pracować przy 3,3V zasilania ale nie wiem jak wygląda sprawa z generatorem kwarcowym zawartym w tym module.
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9GAC -  06-06-2013 17:52
 
 program Ryśka trochę zmieniłem , ale nie wiem jak ustawić pośrednią odsłuchuje generator na odbiorniku i częstotliwość mam taką jaką ustawie na syntezie np. 28 Mhz
 włączam syntezę i słyszę sygnał
 
 
 RE: Synteza na AD9851 a Bascom AVR - SP6-11003 -  06-06-2013 18:12
 
 Ta moja modyfikacja nie obsługuje pośredniej.
 
 W kodzie którym zamieścił Rysiek "klawiszem" odpowiedzialnym za wejście do menu ustawień pośredniej jest ten kawałek kodu :
 
 
 
Kod:
 If Pind.6 = 0 ThenKonfig_bit = 1
 W czasie normalnej pracy programu temu klawiszowi przypisana jest funkcja "Band" :
 
 
 
Kod:
 Debounce Pind.6 , 0 , Band , Sub
 Samo wejście do Menu jest możliwe poprzez przytrzymanie klawisza w tym przypadku "Band" przy wyłączonej syntezie i trzymając go dalej należy ją włączyć aż do pojawienia się stosownego komunikatu " Setup " :
 
 
 
Kod:
 Locate 1 , 1Lcd "SETUP"
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9GAC -  08-06-2013 17:29
 
 Mój kawałek kodu scanera
 
 
 
Kod:
 Dim Scanstop As Long  Debounce Pind.5 , 0 , Scan , Sub
 
 Scan:
 If Pind.5 = 0 Then : Waitms 30
 Locate 1 , 7 : Lcd "Scan" :
 For Freq = Freq To Bandup Step Krok :
 If Krok = 1 Then Waitms 50                              '
 If Krok = 10 Then Waitms 100                            '
 If Krok = 100 Then Waitms 150                           '
 If Krok = 1000 Then Waitms 200                          '
 Gosub Freq_update :
 If Pind.5 = 0 Then : Waitms 30
 Scanstop = Freq :
 If Freq = Scanstop Then
 Exit For :
 End If : End If : End If :
 Next Freq :
 
 Locate 1 , 7 : Lcd "     "
 Return
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9MDD -  12-06-2013 18:26
 
 Wrzucam wszystkie pliki *.bas jakie miałem związane z tym tematem, są to kolejne etapy powstawania softu. Poza stricte syntezerami są tutaj jeszcze dwa pliki które generują Beacon RTTY, oczywiście łatwo można dodać odczyt parametrów z jakiegoś czujnika i i wstawiać wartość do strumienia danych (można sobie zrobić w radiu tryb beacon
  ). 
 Ciekawy jest ten plik: [attachment=7078] generuje przykładową ramkę jaką używają "baloniarze" w swoich projektach liczy sume kontrolną takiej ramki itd... (8bit N 1)
 
 Wszystko do dalszego wykorzystania, miłej zabawy...
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9GAC -  16-06-2013 8:33
 
 
 
Mam pytanie w jakiej części programu muszę umieścić kod do odczytywania freq z pamięci procka , na razie napisałem sam zapis .Odczytywanie też będzie sterowane przez przyciskKod:
 Readeeprom Adres_memory , 255If Pinb.6 = 0 Then
 
 Adres_memory = Adres_memory + 1
 Writeeeprom Freq , Adres_memory
 Writeeeprom Adres_memory , 255
 Wait 1 : Locate 1 , 8 : Lcd "M+" ; Adres_memory
 End If
 
 
 RE: Synteza na AD9851 a Bascom AVR - SQ9MDD -  16-06-2013 23:34
 
 Odczytywanie, ja robię po starcie procesora, zanim wejdę do pętli głównej (ładują się wtedy ustawienia z przed wyłączenia radia). Natomiast z zapisami to musisz uważać, ja testowo robię to po zmianie VFO z A na B i odwrotnie. Tyle ze trzeba pamiętać ze eeprom nie lubi jak się do niego często pisze. Najlepiej było by opracować jakiś patent by zapis był robiony przy wyłaczeniu sprzętu.
 
 
 RE: Synteza na AD9851 a Bascom AVR - SP9MRN -  17-06-2013 0:19
 
 Była taka awaryjna sztuczka, że się czytało napięcie przed stabilizatorem a zapis robiło po zaniku tego napięcia na resztkach z kondensatora po stabilizatorze. Czasu wystarcza.
 
 73
 MAc
 
 PS
 nie pamiętam czy ktoś tego nie użył w pokazanym tu na forum sterowniku rotora. Ale może mi się zdaje...
 
 
 
 |