'**************************************************************** '* Name : SA818.BAS * '* Author : Recep Aydın Güleç - TA2EI * '* Notice : Copyright (c) 2018 * '* : All Rights Reserved * '* Date : 9.03.2018 * '* Version : 1.2 * '* Notes : * '* : * '**************************************************************** '**************************************************************** ; ___ ___ * ; | oo | * ; LCD E A2|1 18|A1 LCD D6 * ; LCD RS A3|2 17|A0 LCD D4 * ; TUS A4|3 16|A7 "ARTTIR" TUŞU * ; A5|4 15|A6 "AZALT" TUŞU * ; 0V----|5 14|++ 5V * ; LCD D5 B0|6 13|B7 Simplex /duplex anahtarı * ; LCD D7 B1|7 12|B6 SQ potu * ; PIC'den TX B2|8 11|B5 "SEÇ" TUŞU * ; PIC'e RX B3|9 10|B4 "TAMAM" TUŞU * ; |________| * ; 16F628A * ; Ekran bilgileri, 2x20 LCD'ye göre âyarlanmıştır. * ; * '***************************************************************** '### TEMEL BİLDİRİMLER ######################################### Device 16F628A Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF All_Digital TRUE ' Bütün girişler dijital Declare Xtal = 4 ' Osc. frekansı 4 MHz (dahili osilatör) ' LCD BİLDİRİMLERİ Declare LCD_Lines 2 ' 2 satırlı LCD kullanılacak Declare LCD_Interface 4 ' LCD'nin sadece 4 data bacağı (d4 ilâ d7) kullanılacak Declare LCD_Data4_Pin PORTA.0 'd4 A5'e Declare LCD_Data5_Pin PORTB.0 'd5 B0'a Declare LCD_Data6_Pin PORTA.1 'd6 A1'e Declare LCD_Data7_Pin PORTB.1 'd7 B1'e Declare LCD_RSPin PORTA.3 'RS A3'e Declare LCD_ENPin PORTA.2 'E A2'ye bağlanacak Declare RsOut_Pin PORTB.3 ' PIC'den çıkış (TX) SA818'in RX'ine bağlanacak Declare RsIn_Pin PORTB.2 ' PIC'e SA818'den veri girişi, SA818'in TX'ine bağlanacak. Declare Serial_Terminator CRLF ' işe yarayıp yaramadığına emin değilim. Declare Serial_Baud 9600 ' Asenkron seri haberleşme hızı 'Declare Serial_Data 8 ' asenkron seri haberleşme DATA biti sayısı Declare RsOut_Mode 0 Declare RsOut_Pace 10 Symbol DUPLEX=PORTB.7 'Simpleks / dupleks kontrolü B7 portundan yapılacak. Symbol SEC=PORTB.5 'B5 SEÇ tuşu Symbol TAMAM=PORTB.4 'A6 TAMAM tuşu Symbol AZALT=PORTA.6 'AZALT tuşu A6'ya Symbol ARTIR=PORTA.7 'ARTIR tuşu A7'ye Symbol SQE=PORTB.6 'SQ potu Dim BW As Byte ' Adım Dim RX_F As Dword ' Alış frekansı Dim TX_F As Dword ' Gönderme frekansı Dim RX_SA As Word ' Alma sub-audio Dim TX_SA As Word ' Gönderme sub-audio Dim SQ As Byte ' Squelch Dim VOL As Byte ' Ses seviyesi Dim TAIL As Byte ' Kuyruk sesi Dim VLPF As Byte ' Ses alçak geçiren filtre Dim VHPF As Byte ' Ses yüksek geçiren filtre Dim DEMP As Byte ' De-emphasis Dim RSSI As Byte ' Alan şiddeti Dim adm As Byte ' SA818'in frekans adımları Dim rmhz As Word ' Alış frekansının MHz kısmı Dim rkhz As Word ' Alış frekansının kHz kısmı Dim rkalan As Byte ' Alış frekansının buçuk kısmı Dim tmhz As Word ' Gönderme frekansının MHz kısmı Dim tkhz As Word ' Gönderme frekansının kHz kısmı Dim tkalan As Byte ' Gönderme frekansının buçuk kısmı Dim rgecici As Dword Dim tgecici As Dword Dim sqgecici As Byte Dim ta As Byte Dim ra As Byte Dim tb As Word Dim rb As Word Dim tt As Word Dim rt As Word Dim KANAL As Byte DelayMS 200 ' Devre kendine gelsin Cls ' Ekranı temizle Print At 1,5,"T A 2 E I" Print At 2,3,"SA818 VHF RX/TX" DelayMS 2000 Cls ' ### İLK DEĞERLER ############################################ 'Bu değerler, AYARLAR alt yordamında değiştirilmedikçe sâbit kalacaktır. BW=0 ' Frekans adımları 12.5 kHz TAIL=0 ' Kuyruk sesi kapalı RX_F=1455000 TX_F=1455000 SQ=0 VLPF=0 VHPF=0 DEMP=0 adm=0 KANAL=0 ' rxf '### AYARLAR KONTROLÜ ######################################### ' Eğer SEÇ tuşuna basılmışsa AYARLAR bölümüne gönderme kısmı ' Eğer SEÇ tuşu basılı değilse devam. ILK: ' a=100 ' Frekans ayarında tuş bekleme süresi If SEC=0 Then GoSub AYARLAR 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo RsOut 0 RsOut "AT+DMOCONNECT\r\n" ' \r: CR, \n: NL RsOut "AT+DMOSETGROUP=",Dec BW,",145.5000,145.5000,0000,0,0000\r\n" ' ANA BÖLÜM ########################################################################################################### FREKANS: rgecici=RX_F tgecici=TX_F sqgecici=SQ If BW=0 Then adm=125 ' Adım 12,5 kHz If BW=1 Then adm=250 ' Adım 25 kHz If ARTIR=0 Then RX_F=RX_F + adm If RX_F > 1740000 Then RX_F=1740000 ' Alış frekansı 174 MHz'den büyük olamaz DelayMS 50 If AZALT=0 Then RX_F=RX_F -adm If RX_F < 1340000 Then RX_F=1340000 ' Alış frekansı 134 MHz'den küçük olamaz. DelayMS 50 rmhz= RX_F/10000 ' Gösterme ve modüle gönderme için RX frekansının MHz kısmı alınıyor rkhz= ((RX_F//10000)/10) ' Gösterme ve modüle gönderme için RX FREKANSının kHz kısmı alınıyor rkalan= Dig (RX_F//10000),0 ' Gösterme ve modüle gönderme için RX FREKANSının buçuk kısmı alınıyor If DUPLEX=1 Then ' Simplex ise alış ve gönderme frekansları eşitleniyor tmhz=rmhz : tkhz=rkhz : tkalan=rkalan Else ' Simpleks değilse gönderme frekansı ayrıca işleniyor tmhz= TX_F/10000 ' Gösterme ve modüle gönderme için TX frekansının MHz kısmı alınıyor tkhz= ((TX_F//10000)/10) ' Gösterme ve modüle gönderme için TX frekansının kHz kısmı alınıyor tkalan= Dig (TX_F//10000),0 ' Gösterme ve modüle gönderme için TX frekansınıb buçuk kısmı alınıyor EndIf SQ=Pot SQE,8 If SQ >8 Then SQ=8 Print At 1,1,Dec rmhz,At 1,4,".",At 1,5, Dec rkhz, At 1,8,",", At 1,9,Dec rkalan,At 1,11,"MHz" Print At 2,1,"SQ:",Dec SQ If DUPLEX=0 Then Print At 2,6,"Rpt." Else Print At 2,6," " EndIf 'Print At 2,1,"S",Dec SQ, At 2,4,"H",Dec VHPF, At 2,7,"L", Dec VLPF, At 2,10, "D", Dec DEMP, At 2,13,"T", Dec TAIL, At 2,16,"C0", At 2,19,"D",Dec DUPLEX If rgecici < > RX_F Or tgecici < > TX_F Or sqgecici < > SQ Then GoSub FRGONDER ' Eğer frekans veya SQ değişmiş ise yeni değeri SA818 modülüne gönder If SEC=0 Then GoSub AYARLAR ' Eğer SEÇ tuşu basılı ise ayarlar altrutinine gönderir If TAMAM=0 Then GoSub GOR GoTo FREKANS ' Döngü '###################################################################################################################### FRGONDER: RsOut "AT+DMOSETGROUP=",Dec BW,",",Dec tmhz,".",Dec tkhz, Dec tkalan,",", Dec rmhz,".",Dec rkhz,Dec rkalan,",0000,", Dec SQ, ",0000\r\n" Return ' ### AYARLAR ALTYORDAMI ######################################################### AYARLAR: Cls Print At 1,1,"** AYARLAR MENUSU **" DelayMS 2000 Cls ADIM: Cls While TAMAM=1 If ARTIR=0 Then BW=1 ElseIf AZALT=0 Then BW=0 DelayMS 40 EndIf Print At 1,1,"FREK. ADIMLARI (AD):" If BW=1 Then Print At 2,1,"25 kHz " Else Print At 2,1,"12.5 kHz" EndIf Wend DelayMS 1000 KUYRUK: Cls DelayMS 50 While TAMAM=1 If ARTIR=0 Then TAIL=1 ElseIf AZALT=0 Then TAIL=0 DelayMS 40 EndIf Print At 1,1,"KUYRUK SESi(KS) :" If TAIL=1 Then Print At 2,1,"ACIK " Else Print At 2,1,"KAPALI" EndIf Wend DelayMS 300 AGF: Cls DelayMS 50 While TAMAM=1 If ARTIR=0 Then VLPF=1 ElseIf AZALT=0 Then VLPF=0 DelayMS 40 EndIf Print At 1,1,"ALCAK GEC. FiL.(AF):" If VLPF=1 Then Print At 2,1,"ACIK " Else Print At 2,1,"KAPALI" EndIf Wend DelayMS 300 YGF: DelayMS 50 While TAMAM=1 If ARTIR=0 Then VHPF=1 ElseIf AZALT=0 Then VHPF=0 DelayMS 40 EndIf Print At 1,1,"YUKSEK GEC. FiL.(YF):" If VHPF=1 Then Print At 2,1,"ACIK " Else Print At 2,1,"KAPALI" EndIf Wend DelayMS 300 DEM: DelayMS 50 While TAMAM=1 If ARTIR=0 Then DEMP=1 ElseIf AZALT=0 Then DEMP=0 DelayMS 40 EndIf Print At 1,1,"DE-EMPHASIS (DE) :" If DEMP=1 Then Print At 2,1,"ACIK " Else Print At 2,1,"KAPALI " EndIf Wend DelayMS 300 GOR: Cls Print At 1,1,"AD",At 1,4,"AF",At 1,7,"YF", At 1,10,"KS", At 1,13,"DE", At 1,16,"DP" Print At 2,1,Dec BW, At 2,4, Dec VLPF, At 2,7, Dec VHPF, At 2,10, Dec TAIL, At 2,13, Dec DEMP, At 2,16, Dec DUPLEX DelayMS 3000 Cls Return '### KANALLAR #################################################################### Cls Print At 1,1,"* KANALLI KULLANIM *" Print At 2,1," TAMAM ->VFO'YA CIK " DelayMS 3000 KANALLAR: If ARTIR=0 Then KANAL=KANAL + 1 'if kanal > then 16 then kanal =16 RsOut "AT+DMOSETGROUP=1",Dec adm,",",Dec ta,".",Dec tb,",",Dec ra,".",Dec rb,",",Dec tt,",",Dec SQ,",",Dec rt,"\r\n"