'**************************************************************** '* Name : MD59_kumanda.BAS * '* Author : Recep Aydın GÜLEÇ * '* Notice : Copyright (c) 2018 * '* : All Rights Reserved * '* Date : 21.03.2018 * '* Version : 1.5 * '* Notes : MD59 model NMT telefonu 70cm. amatör bandında * '* : çalıştırmak için yazılım * '**************************************************************** ''*************************************************************** ; ___ ___ * ; | oo | * ; LCD E A2|1 18|A1 LCD D6 * ; LCD RS A3|2 17|A0 LCD D4 * ; RTROLE A4|3 16|A7 ARTTIR TUŞU * ; SECOK A5|4 15|A6 AZALT TUŞU * ; 0V----|5 14|++ 5V * ; LCD D5 B0|6 13|B7 RTROLE * ; LCD D7 u B1|7 12|B6 CTCSS C * ; PLL DATA B2|8 11|B5 CTCSS D * ; PLL CLK B3|9 10|B4 PLL EN * ; |________| * ; 16F628A * ' ### MC145156'ya FREKANS BİLGİSİ NASIL GÖNDERİLİR? ######################################### ' Ntot=Fvco/Fadım # ' N=int(Ntot/Poran) # ' A=Ntot-(N x P) # ' Burada: # ' Ntot: Total bölme oranıdır. # ' Fvco: VCO'nun frekansı (üretilecek, istenilen frekans) # ' Fadım: PLL'in bir bölme oranında azaltıp çoğaltabileceği frekanstır. Bu frekanstan daha # ' küçük adımlarla PLL frekans sentezleyemez. # ' Poran: Dual modulus bölücünün xx/yy bölme oranlarındna ilki. (64/65 bölücüde 64 gibi) # ' N: PLL'in N bölücüsünün bölme oranı # ' A: PLL'in A bölücüsünün bölme oranı. # ' MC145156, 17 bit ile kontrol ediliyor. İlk 2 bit, SW1 ve SW2 pinlerini kontrol için. # ' Sonra 10 bit N bölücüsünün değeri için ve 7 bit de A bölücüsünün değeri içindir. # ' EN H iken bitler MSB'den başlamak üzere gönderilir. # ' ### UHF AMATÖR FREKANSLARI ################################################################ 'Röle Kanalları # ' 7,6 MHz Shift # ' TX Fr. RX Fr. Kanal nu. # '431,550 – 439,150 MHz R90 # '431,575 – 439,175 MHz R91 # '431,600 – 439,200 MHz R92 # '431,625 – 439,225 MHz R93 # '431,650 – 439,250 MHz R94 # '431,675 – 439,275 MHz R95 # '431,700 – 439,300 MHz R96 # '431,725 – 439,325 MHz R97 # '431,750 – 439,350 MHz R98 # '431,775 – 439,375 MHz R99 # '431,800 – 439,400 MHz R100 # '431,825 – 439,425 MHz R101 # ' # ' Simpleks Kanallar # '433,400 MHz SU16 # '433,425 MHz SU17 # '433,450 MHz SU18 SSTV (FM/AFSK) özel kull.tahsis # '433,475 MHz SU19 # '433,500 MHz SU20 FM Mobil Çağrı # '433,525 MHz SU21 # '433,550 MHz SU22 # '433,575 MHz SU23 # ' # '### GİRİŞ BİLDİRGELERİ ################################################################### ' # Device 16F628A ' Kullanılacak PIC işlemci # Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF ' # All_Digital TRUE ' Bütün girişler dijital olarak âyarlandı. # Declare Xtal = 4 ' Dâhili osilatör 4 MHz'de çalışacak. # '# '### LCD BİLDİRİMLERİ ##################################################################### Declare LCD_Lines 2 ' 2 satırlık LCD kullanılacak. # Declare LCD_Interface 4 ' LCD 4 bit modunda çalışacak. # Declare LCD_Data4_Pin PORTA.0 ' LCD D4 A0'a bağlanacak. # Declare LCD_Data5_Pin PORTB.0 ' LCD D5 B0'a bağlanacak. # Declare LCD_Data6_Pin PORTA.1 ' LCD D6 A1'e bağlanacak. # Declare LCD_Data7_Pin PORTB.1 ' LCD D7 B1'e bağlanacak. # Declare LCD_RSPin PORTA.3 ' LCD RS A3'e bağlanacak. '# Declare LCD_ENPin PORTA.2 ' LCD EN A2'ye bağlanacak. '# '# Declare Shift_DelayUs 100 '# TRISA=%11110000 '# TRISB=%00000000 '# '### SEMBOLLER ############################################################################ Symbol DTA=PORTB.2 ' PLL'in DATA hattı B2'ye bağlanacak. (PLL) # Symbol CLK=PORTB.3 ' PLL'in CLOCK hattı B3'e bağlanacak. (PLL) # Symbol EN=PORTB.4 ' PLL'in EN hattı B4'e bağlanacak. (PLL) # Symbol RXTX=PORTA.4 ' PTT anahtarı A4'e bağlanacak. # Symbol TOND=PORTB.5 ' CTCSS üretecek PIC'e seri data # Symbol TONC=PORTB.6 ' CTCSS üretecek PIC'e seri clock # Symbol RTROLE=PORTB.7 ' RX_TX rölesi # Symbol SECOK=PORTA.5 ' Seçim tuşu # '### DEĞİŞKENLER ########################################################################## Dim Ntot As Dword ' Toplam bölme oranı Dim N As Word ' PLL'in N bölücüsü Dim A As Byte ' PLL'ni A bölücüsü Dim FR As Dword ' PLL'in üreteceği Rx frekansı - Alış fr +21.4 MHz IF Dim GFR As Dword ' Geçici RX frekansı Dim GERFR As Dword ' Gerçek band frekansı Dim VCOFR As Dword ' VCO'nun frekansı Dim P As Byte ' Dual Mod. bölücünün ilk bölme oranı Dim R As Word ' MC145156'nın REF bölme oranı Dim XT As Dword ' PLL XTAL osilatör frekansı (MC145156'ya giren OSC.) Dim Fref As Dword ' PLL'in adım frekansı Dim MHz As Word ' Frekansın gösterilecek MHz kısmı Dim KANAL As Byte ' Kanal değişkeni Dim h5 As Byte ' 100 kHz'ler hâanesi Dim h4 As Byte ' 10 kHz'ler hânesi Dim h3 As Byte ' 1 kHz'ler hânesi Dim TON As Word Dim RAKAM As Byte Dim sayac As Byte Dim gsayac As Byte Dim tontam As Byte Dim tonksr As Byte Dim yer As Byte '### SABİT DEĞERLER ########################################################################### XT=3200000 ' 12.8 MHZ'lik TCO 4'e bölünmüş, (3.2 MHz) # P=80 ' SP8919 80/81 bölme oranına sâhip # R=128 ' MC145156'nın, R0:1, R1:0, R2:0 olunca bölme oranı # FR = ERead 0 ' Başlangıç frekansı - R90 alış frekansı # Fref = XT / R ' PLL adımları hesaplanıyor. PLL 25 kHz'lik adımlara sâhip. # GFR=0 ' Geçici fr. sıfırlanıyor # KANAL=ERead 48 ' İlk kanal numarası # sayac = ERead 33 ' # 'low rtrole # ' ### İşlemci işe başlıyor #################################################################### DelayMS 300 ' Devre bir kendine gelsin ;-) Cls ' LCD'yi temizle Print At 1,1," * * T A 2 E I * * " ' Başlangıç iletisi Print At 2,1,"70cm. ALICI - VERiCi" ' Başlangıç iletisi DelayMS 1000 ' 1 sn. ekranda tut Cls ' LCD'yi temizle '### ANA DÖNGÜ ###################################################################################### '##################################################################################################### ANA: '## If SECOK=0 Then GoSub CTCSS ' Ton ayarlama alt rutinine git ## If RXTX=0 Then ' Eğer PTT tuşu basılı ise ## High RTROLE ' RTROLE çıkışını H yap ## Else ' Değilse ## Low RTROLE ' RTROLE çıkışını L'de tut ## EndIf '## If PORTA.6=0 Then ' AŞAĞI tuşuna basılı ise ## FR = FR - 25000 ' FR'ı 25 kHz azalt ## If FR < 439150000 Then FR = 439150000 ' En küçük frekansı belirle ## KANAL = KANAL -1 ' Kanal sayısı da bir düşür ## If KANAL <90 Then KANAL =90 ' Kanal sayısı 90'dan küçük olamaz. ## DelayMS 100 ' Tuş debounce. ## EndIf '## If PORTA.7=0 Then ' YUKARI tuşuna basılı ise ## FR = FR + 25000 ' FR'ı 25 kHz arttır. ## If FR > 439425000 Then FR = 439425000 ' En büyük frekansı belirle ## KANAL = KANAL +1 ' Kanal sayısını da bir arttır ## If KANAL > 101 Then KANAL = 101 ' Kanal sayısı 101'den büyük olamaz. ## DelayMS 100 ' Tuş debounce. ## EndIf '## EWrite 48,[KANAL] ' KANAL bilgisini EEPROM'a yaz ## If RXTX=1 Then ' Eğer PTT tuşuna basılı değilse ## VCOFR = FR + 21400000 ' Fr. değerine 21.4 MHz ilave et ## Else ' PTT tuşuna basılı ise '## VCOFR = FR + 23800000 ' Fr. değerine 23.8 MHz ilâve et ## EndIf '## If GFR = VCOFR Then GoTo ANA ' Frekansta değişiklik yoksa başa dön. ## '##################################################################################################### '##################################################################################################### '### ALT RUTİNLER ################################################################################### ' *** Hesaplama alt rutini *************************************************************************** HESAP: '* GFR = VCOFR ' VCOFR değerini GFR değişkenine aktar '* Ntot = VCOFR / Fref ' Ntot'u hesapla '* N = Ntot / P ' N bölücüsünün değerini hesapla '* A = Ntot - (N * P) ' A bölücüsüNüN değerini hesapla '* If RXTX=1 Then ' Eğer PTT tuşuna basılı değil ise '* GERFR = FR ' FR değeri GFR olacak '* Else GERFR = VCOFR - 31400000 ' PTT '* EndIf '* MHz = GERFR/1000000 ' Frekansın MHz kısmını al '* h5=Dig GERFR,5 ' Frekansın kHz kısmının yüzler hânesini al '* h4=Dig GERFR,4 ' Frekansın kHz kısmının yüzler hânesini al '* h3=Dig GERFR,3 ' Frekansın kHz kısmının yüzler hânesini al '* GoSub GOSTER ' LCD gösterme alt rutinine git '* GoSub FGONDER ' Değerleri PLL'e gönderme alt rutinine git '* EWrite 0, [FR] '* GoTo ANA '* ' *** Değerleri LCD'de gösterme alt rutini *********************************************************** GOSTER: '* Cls '* Print At 1,1,"KANAL: R",Dec KANAL '* Print At 2,1,"Fr. :", Dec MHz,".",Dec h5, Dec h4, Dec h3, " MHz" '* Print At 3,1, "VCO : ", Dec VCOFR '* Print At 4,1,"FR", Dec FR '* Return '* ' *** Fr. bilgilerini PLL'e gönderme alt rutini ****************************************************** FGONDER: '* High EN '145156'nın EN girişini H seviyesine çek. '* DelayUS 10 ' 10 us bekle '* SHOut DTA, CLK, MsbFirst, [0\1, 0\1, N\10, A\7] '* DelayUS 10 ' 10 us bekle '* Low EN '145156'nın EN girişini L seviyesine indir. '* Return '* ' *** CTCSS ayarlama ve veri gönderme altrutini ****************************************************** CTCSS: '* Cls '* Print At 1,1,"CTCSS Ayarlama" '* DelayMS 1000 '* Cls '* Print At 1,1,"TON :", At 1,6,Dec tontam,".",Dec tonksr, At 1,12,"Hz" '* Print At 2,1," 'OK' iLE SEC" '* '* '* TEKRAR: '* While SECOK=1 '* If PORTA.6=0 Then sayac=sayac - 1 ' AŞAĞI tuşuna basılıysa ton numarasını bir düşür '* If sayac < 1 Then sayac=1 ' Ton numarası 1'den küçük olamaz. '* DelayMS 100 ' Tuş debounce. '* If PORTA.7=0 Then sayac=sayac + 1 ' YUKARI tuşuna basılıysa ton numarasını bir arttır.'* If sayac > 25 Then sayac = 25 ' TON numarası 51'den büyük olamaz. '* DelayMS 100 ' Tuş debounce. '* If sayac =1 Then TON=670 '* If sayac =2 Then TON=694 '* If sayac =3 Then TON=719 '* If sayac =4 Then TON=744 '* If sayac =5 Then TON=770 '* If sayac =6 Then TON=797 '* If sayac =7 Then TON=825 '* If sayac =8 Then TON=854 '* If sayac =9 Then TON=885 '* If sayac =10 Then TON=915 '* If sayac =11 Then TON=948 '* If sayac =12 Then TON=974 '* If sayac =13 Then TON=1000 '* If sayac =14 Then TON=1035 '* If sayac =15 Then TON=1072 '* If sayac =16 Then TON=1109 '* If sayac =17 Then TON=1148 '* If sayac =18 Then TON=1188 '* If sayac =19 Then TON=1230 '* If sayac =20 Then TON=1273 '* If sayac =21 Then TON=1318 '* If sayac =22 Then TON=1365 '* If sayac =23 Then TON=1413 '* If sayac =24 Then TON=1462 '* If sayac =25 Then TON=1514 '* '* If sayac=gsayac Then GoTo TEKRAR '* tontam=TON/10 ' CTCSS tonunun tamsayı kısmını al '* tonksr=TON//10 ' CTCSS tonunun ondalık kısmını al '* Cls '* Print At 1,1,"TON :", At 1,6,Dec tontam,".",Dec tonksr, At 1,12,"Hz" '* Print At 2,1," 'OK' iLE SEC" '* gsayac=sayac ' sayaç muhteviyatını gsayac değişkenine yükle '* Wend '* Cls '* Print At 1,1,"CTSS TONU: ",Dec tontam,".",Dec tonksr," Hz" '* Print At 2,1,"OLARAK SECiLDi" '* EWrite 33,[sayac] ' Seçilen CTCSS tonu PIC'in eepromuna yazılıyor '* DelayMS 1000 ' 1 sn. bekle '* SHOut TOND, TONC, MsbFirst, [0\2,~sayac\6] ' CTCSS verisi 74HC164'e gönderiliyor. '* '* Cls '* Print At 1,1,"KANAL: R",Dec KANAL '* Print At 2,1,"Fr. :", Dec MHz,".",Dec h5, Dec h4, Dec h3, " MHz" '* Print At 3,1, "VCO : ", Dec VCOFR '* Print At 4,1,"RXTX", Dec RXTX '* Return '* ' #################################################################################################### ' ####################################################################################################