27-01-2013, 8:58
27-01-2013, 13:16
Witam,
patrzył kolega na ten wątek ? http://www.elektroda.pl/rtvforum/topic436241.html np.
na posty kolegi Jarka SP3SWJ.
73 Darek
patrzył kolega na ten wątek ? http://www.elektroda.pl/rtvforum/topic436241.html np.
na posty kolegi Jarka SP3SWJ.
73 Darek
16-03-2013, 2:19
Proszę bardzo:
Tak działa:
A tak jest napisane:
Kod nie jest oczyszczony ze śmieci z poprzedniego projektu niemniej jednak działa...
Tak działa:
A tak jest napisane:
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.
'
'
'-----------------------------------------------------------------
'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
Kod nie jest oczyszczony ze śmieci z poprzedniego projektu niemniej jednak działa...
20-03-2013, 7:02
Ryśku możesz wrzucić na forum schemat syntezy , jak rozwiązałeś przełączanie przekaźników pasm ?
15-04-2013, 10:46
Szczerze to nie mam czasu by posiedzieć i dokończyć konstrukcję, za dużo się w moim życiu prywatnym i zawodowym dzieje. Napisz na pw podrzucę Ci linka do wszystkich materiałów to zobaczysz czy można to rozwinąć.
16-04-2013, 23:39
Rysiek jeśli pozwolisz to ja się "dokleję" do Twojej konstrukcji Potrzebowałem syntezę DDS do świeżo zakupionej płytki Piligrim SMD z DW_Radio ( choć jeszcze do mnie nie dotarła ). Początkowo pomyślałem sobie, że zrobię to SI570 ale potem sobie pomyślałem, że wykorzystam jeszcze jeden wolny moduł DDS AD9850 plus mnożnik na ICS502. Synteza którą miałem z projektu Leszka SP6FRE już dawno siedzi w innym radiu to musiałem sobie sklecić coś sam i wtedy bardzo mi się przydał Twój projekt Ryśku.
Kolego free . Ten kod który podał Rysiek nie ma obsługi przełącznika pasm. Steruje tylko samym generatorem i resztą funkcji które widzisz na LCD. Ja właśnie potrzebowałem takie sterowanie to dopisałem kilka zdań do kodu. Sterowanie pasmami jest wykonane kodem BCD ( użyty w przełączniku pasm dekoder 4028 " dekoder BCD na 1 z 10 " ) . Prototyp jak na razie wygląda tak :
Pinologia użyta przez Ryśka w programie się całkowicie zmieniła ( piny indywidualnie ustawiasz sobie w programie ). Nawet sam wyświetlacz, u Ryśka jest 2 x 20 a u mnie 2 x 16. U siebie oczyściłem kod z funkcji s-metr. Tam gdzie był s-metr programowy u mnie jest napis RX lub TX. W moim Piligrim jako wskaźnik s-metr będzie zwykły wychyłowy ustrój .
Sterownik DDS w czasie normalnej pracy w czasie "odbioru" wygląda tak u mnie:
A w czasie nadawania tak:
Mój kod jeszcze nie jest całkowicie ukończony tak że nie przedstawię go teraz tutaj. Ale myślę, że do weekendu będzie już jako stabilny.
Co do samej elektroniki. projekt płytki, schemat umieszczę jak poprawię PCB. Już mam kilka błędów, które jeszcze muszę poprawić.
Powielanie jest wykonane wg. schematu Rafała SQ4AVS LINK . Generator DDS jak i powielanie jest u mnie wykonane jako osobny moduł wpinany w główne PBC.
Jeśli tylko Rysiek się zgodzi na publikację zmienionego przez moją osobę kodu do procesora to go tutaj umieszczę w wersji już dopracowanej.
Pozdrawiam Serdecznie. Andrzej SP611003
Kolego free . Ten kod który podał Rysiek nie ma obsługi przełącznika pasm. Steruje tylko samym generatorem i resztą funkcji które widzisz na LCD. Ja właśnie potrzebowałem takie sterowanie to dopisałem kilka zdań do kodu. Sterowanie pasmami jest wykonane kodem BCD ( użyty w przełączniku pasm dekoder 4028 " dekoder BCD na 1 z 10 " ) . Prototyp jak na razie wygląda tak :
Pinologia użyta przez Ryśka w programie się całkowicie zmieniła ( piny indywidualnie ustawiasz sobie w programie ). Nawet sam wyświetlacz, u Ryśka jest 2 x 20 a u mnie 2 x 16. U siebie oczyściłem kod z funkcji s-metr. Tam gdzie był s-metr programowy u mnie jest napis RX lub TX. W moim Piligrim jako wskaźnik s-metr będzie zwykły wychyłowy ustrój .
Sterownik DDS w czasie normalnej pracy w czasie "odbioru" wygląda tak u mnie:
A w czasie nadawania tak:
Mój kod jeszcze nie jest całkowicie ukończony tak że nie przedstawię go teraz tutaj. Ale myślę, że do weekendu będzie już jako stabilny.
Co do samej elektroniki. projekt płytki, schemat umieszczę jak poprawię PCB. Już mam kilka błędów, które jeszcze muszę poprawić.
Powielanie jest wykonane wg. schematu Rafała SQ4AVS LINK . Generator DDS jak i powielanie jest u mnie wykonane jako osobny moduł wpinany w główne PBC.
Jeśli tylko Rysiek się zgodzi na publikację zmienionego przez moją osobę kodu do procesora to go tutaj umieszczę w wersji już dopracowanej.
Pozdrawiam Serdecznie. Andrzej SP611003
17-04-2013, 1:46
(16-04-2013 23:39)SP6-11003 napisał(a): [ -> ]Jeśli tylko Rysiek się zgodzi na publikację zmienionego przez moją osobę kodu do procesora to go tutaj umieszczę w wersji już dopracowanej.
W sumie, to już się zgodził, jeśli zachowasz licencję, nie mniej zapytać/dać znać pewnie nie zawadzi.
(16-03-2013 2:19)SQ9MDD napisał(a): [ -> ]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.
'
'
'-----------------------------------------------------------------
17-04-2013, 19:44
Witam,
Ja do programu dorzuciłem funkcję scan i teraz pracuję nad przełączaniem pasm z us PCF 8574 a wyświetlacz graficzny 128x64 chce jeszcze dorzucić obsługę pamięci
Ja do programu dorzuciłem funkcję scan i teraz pracuję nad przełączaniem pasm z us PCF 8574 a wyświetlacz graficzny 128x64 chce jeszcze dorzucić obsługę pamięci
26-05-2013, 9:40
Cytat:Jeśli tylko Rysiek się zgodzi na publikację zmienionego przez moją osobę kodu do procesora to go tutaj umieszczę w wersji już dopracowanej.
Hej ja tutaj nie mam już nic do zgadzania się lub nie, wszystkie zmiany poprawki i kolejne wersje to twoja praca
Ja się tylko cieszę że tak może to funkcjonować jedna osoba coś zacznie ale niema czau projektu ukończyć. Wystawiając co ma daje szanse inym bo rozwijali własne wersje i by nie musieli odkrywać ameryki od nowa.
Świetna robota Andrzej, jak już skończysz wrzuć może jakiś film jak to działa.
05-06-2013, 18:41
Mam szybkie pytanie co mam zmienić w programie aby sterować AD9850 takie dostałem moduły ?