'SterowanieSyntezyMC145151_004

Bascom

Synteza częstotliwości w urządzeniu odbiorczym na pasmo 2m współpracująca z odbiornikiem CB-radio. Częstotliwość odbiorczą wpisujemy z klawiatury AT. Przyciskając przycisk P5 uruchamiamy skaner. Krok przeszukiwania 12,5KHz (nie 125KHz). Skaner przegląda całe pasmo 2-metrowe. Wszystkie czynności obserwowane są na wyświetlaczu Lcd.

'SterowanieSyntezyMC145151_004.bas

'Odbiornik na pasmo 2m.

'Wybieramy frekwencję co 12,5KHz, a skaner kroczy co 12,5KHz (nie 125KHz).

'Wybieranie kanału ręczne lub skaner.

'Przciśnij P5, a potem F2. Uruchomiłeś Skaner.

'Przyciśnij P4, wybierz z klawiatury częstotliwość, a potem naciśnij F1. Kanał został uruchomiony.

'Tutaj, synteza sterowana jest bezpośrednio z procesora bez liczników rewersyjnych.

'Częstotliwość wpisujemy z klawiatury AT.

'Patrz schemat blokowy SterowanieSyntezyMC145151.png.

'Patrz schemat, zeszyt 260607.

'Przykład: częstotliwość 144,0125 MHz wpisujemy jednym ciągiem: 1440125.

'Jeśli częstotliwość ma wynieść np. 144MHz, to wpisujemy:1440000. Zawsze trzeba wpisać siedem cyfr.

'W programie, celem uniknięcia przecinków w czasie liczenia, wszystkie wartości pomnożono przez 10000.

'Ze schematu blokowego wynika jaki musi być podział w syntezie dla uzyskania wpisanej częstotliwości.

'Wykonane zostanie działanie matematyczne celem uzyskania liczby podziału.

'Liczba podziału zostanie wpisana do zmiennej Wynik i do Bity.

'Po wciśnięciu F1 na wyjściach BCD pojawi się liczba podziału dla syntezy w kodzie binarnym.

'Liczba podziału zostanie wpisana do syntezy i otrzymamy wpisaną z klawiatury częstotliwość.

'Vco ustawi się na częstotliwość potrzebną do otrzymania f wprowadzonej z klawiatury.

'Krok syntezy 12,5KHz.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 66%.

'Procesor Atmega8.

'Zastosujemy oscylator RC wewnętrzny 8MHz, Fusebit ustawiony na 0100.

 

 $regfile = "m8def.dat"                                     'Dyrektyway dla kompilatora.

 $crystal = 8000000                                         'Zastosujemy generator wewnętrzny 8MHz.

Config Lcd = 16 * 2                                         'Konfigurujemy Lcd.

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

                                       'LCD dłączony do Port 2, 3, 4, 6, 1, 0.

                                       'Led wskazującą pracę urządzenia można dołączyć do Prtc.0.

Config Keyboard = Pinb.1 , Data = Pinb.2 , Keydata = Keydata       'Keyboard=klawiatura, podłączona do Pinc.2 i 3.

        '

 Display Off                                                'Wyłącz Lcd.

 Waitms 300                                                 'Czekaj 300mS.

 Display On                                                 'Załącz Lcd.

 Cls                                                        '

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Wyjścia BCD.

 Config Pind.0 = Output                                     'A

 Config Pind.1 = Output                                     'B

 Config Pind.2 = Output                                     'C

 Config Pind.3 = Output                                     'D

 Config Pind.4 = Output                                     'E

 Config Pinb.6 = Output                                     'F

 Config Pinb.7 = Output                                     'G

 Config Pind.5 = Output                                     'H

 Config Pind.6 = Output                                     'I

 Config Pind.7 = Output                                     'J

 Config Pinb.0 = Output                                     'K

 Config Pinb.3 = Output                                     'L

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Config Pinb.4 = Output                                     'Przycisk P4, gdy wybierzemy ręczne ustawianie kanału.

 Config Pinb.5 = Output                                     'Przycisk P5, gdy wybierzemy Skaner.

 Set Portb.5                                                '

 Set Portb.4                                                '

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Deflcdchar 0 , 32 , 16 , 20 , 24 , 16 , 16 , 30 , 32       'Narysowano ł. (Rysujemy tutaj: Ctrl+L i LCD Designer).

 Deflcdchar 1 , 32 , 32 , 28 , 2 , 30 , 18 , 30 , 1         'Narysowano ą.

 Deflcdchar 2 , 1 , 2 , 15 , 8 , 6 , 1 , 15 , 32            'Narysowano ś.

 Deflcdchar 3 , 2 , 4 , 30 , 18 , 16 , 16 , 30 , 32         'Narysowano ć.

 Deflcdchar 4 , 32 , 32 , 30 , 18 , 30 , 16 , 30 , 4        'Narysowano ę.

 

 

Dim Kodklaw As Byte                                         'Deklarujemy zmienną Kodklaw, tu będzie umieszczany kod naciśniętego klawisza.

Dim Bity As Long                                            'Deklaracja zmiennej, zawierającej bity portów BCD.

Dim Wynik As Long                                           'Wynik zawiera liczbę podziału w syntezie.

Dim Policzlcd As Byte                                       'Deklaracja zmiennej zawierającej ilość naciśniętych klawiszów.

Dim Zapis As String * 9                                     'Tu będzie słowo z siedmiu przyciśnięć klawisza AT.

Dim Kanal As String * 9                                     'Deklarujemy 2 Bajty pamięci dla zmiennej.

Dim Cb As Long                                              'Tu będzie częstotliwość kanału CB-radia jako pośredniej.

Dim Mix As Long                                             'Deklarujemy 2 Bajty pamięci dla zmiennej.

Dim Vco As Long                                             'Deklarujemy 2 Bajty pamięci dla zmiennej.

Dim Kwarc As Long                                           'Deklarujemy 4 Bajty pamięci dla zmiennej.

Dim Frekw As Single                                         'Tu będzie słowo z Zapis zamienione na cyfrę.

Dim A1 As String * 1                                        'A1 jako zmienna tekstowa z jedną komórką pamięci (1 klawisz).

Dim A2 As String * 2                                        'Drugi, naciśnięty klawisz.

Dim A3 As String * 3                                        'Trzy pierwsze klawisze.

Dim A4 As String * 1                                        'Przecinek.

Dim A5 As String * 1                                        '4 klaw.

Dim A6 As String * 2                                        '5 klaw.

Dim A7 As String * 3                                        '6 klaw.

Dim A8 As String * 4                                        'Cztery ostatnie klawisze

 

   Kwarc = 887000                                           'Kwarc 17.734 x 5 = 88.7MHz x 10000 (wpisujemy 887000).

   Cb = 270500                                              'CB jako pośrednia na kanale 27.05MHz (wpisujemy 270500).

   Bity = 2260                                              'Cyfra podziału dla syntezy, początek pasma.

 

 Locate 1 , 1                                               'Pierwsza linia Lcd, od początku.

 Lcd "Nacisnij P4"                                          'Komunikat na Lcd.

 Lowerline                                                  'W drugiej linii Lcd.

 Lcd "  lub P5   "                                          'Komunikat na Lcd.

 Wait 2                                                     'Trzymaj komunikat 2 sek.

 Cls                                                        'Czść Lcd.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Pierwsza pętla do ustalenia ręcznego wybierania f lub skanera.

'Przycisk P5 = skaner.

'Przycisk P4 = ręczne wybieranie.

    Do                                                      'Pierwsza pętla. Sprawdza, który przycisk wybraliśmy.

    If Pinb.5 = 0 Then                                      'Jeśli P5, to...

    Lcd "Skaner"                                            'Komunikat.

    Lowerline                                               '

    Lcd "F2"                                                '

    Wait 1                                                  'Trzymaj komunikat 1 sek.

    Cls                                                     'Następnie usuń go.

    Gosub B                                                 'Skocz do pdprogramu B (skanowanie).

    End If                                                  'Koniec warunku, gdy naciśnięto P5.

 

    If Pinb.4 = 0 Then                                      'Jeśli P4, to...

    Lcd "R" ; Chr(4) ; "czne"                               'Komunikat.

    Lowerline                                               '

    Lcd "wybieranie f "                                     '

    Wait 1                                                  'Trzymaj komunikat 1 sek.

    Cls                                                     'Następnie usuń go.

     Gosub A                                                'Skocz do pdprogramu A (ręczne wybieranie).

    End If                                                  'Koniec warunku, gdy naciśnięto P4.

    Loop                                                    'Powtarzaj pętlę.

    End                                                     'Koniec tej pętli.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Podprogram A.

A:                                                          'Podprogram, pętla ręcznego wybierania f.

 Do                                                         'Start pętli.

  Kodklaw = Getatkbd()                                      'Odczytywanie kodu klawiatury do zmiennej Kodklaw.

  If Kodklaw > 0 And Kodklaw < 127 Then                     'Jeśli naciśnięto klawisz, a liczba ASCI jest od 0 do 127...

  Incr Policzlcd                                            'Po naciśnięciu klawisza powiększaj Policzlcd o jeden.

 

Select Case Policzlcd                                       'Sprawdzaj zawartość Policzlcd...

  Case 1 : Locate 2 , 1                                     'Jeśli naciśnięto klawisz ustaw kursor w drugiej linii, pozycja 1.

  Lcd Chr(kodklaw)                                          'Zamień numer ASCI klawisza na kod klawisza i pokaż.

   Zapis = Chr(kodklaw)                                     'Kod klawisza zapisz do zmiennej Zapis.

   A1 = Chr(kodklaw)                                        'Ten sam kod klawisza zapisz do zmiennej A1.

 

  Case 2 : Locate 2 , 2                                     '2 klaw.

  Lcd Chr(kodklaw)                                          '

   Zapis = Zapis + Chr(kodklaw)                             'Do zmiennej Zapis zapisz to co już miała i dodaj następny kod klwisza.

   A2 = A1 + Chr(kodklaw)                                   '

 

  Case 3 : Locate 2 , 3                                     '

  Lcd Chr(kodklaw) ; ","                                    '3 klaw.

   Zapis = Zapis + Chr(kodklaw)                             '

   A3 = A2 + Chr(kodklaw)                                   '

   Writeeeprom A3 , 1                                       'Zapisz do Eprom zmienną A3, adres 1 (pierwsze 3 klawisze).

                                                            '

 

  Case 4 : Locate 2 , 5                                     '4 klaw.

  Lcd Chr(kodklaw)                                          '

   Zapis = Zapis + Chr(kodklaw)                             '

   A5 = Chr(kodklaw)                                        '

 

  Case 5 : Locate 2 , 6                                     '5 klaw.

  Lcd Chr(kodklaw)                                          '

   Zapis = Zapis + Chr(kodklaw)                             '

   A6 = A5 + Chr(kodklaw)                                   '

 

  Case 6 : Locate 2 , 7                                     '6 klaw.

  Lcd Chr(kodklaw)                                          '

   Zapis = Zapis + Chr(kodklaw)                             '

   A7 = A6 + Chr(kodklaw)                                   '

 

   Case 7 : Locate 2 , 8                                    '7 klaw.

  Lcd Chr(kodklaw) ; "  (i F1)"                             '

   Zapis = Zapis + Chr(kodklaw)                             '

   A8 = A7 + Chr(kodklaw)                                   '

 

   Writeeeprom A8 , 8                                       'Zapisz do Eprom ostatnie cztery klawisze.

  Policzlcd = 0                                             '

   Frekw = Val(zapis)                                       'Zawartość zmiennej słownej zamień na cyfrową i zapisz do Frekw.

  End Select                                                'Koniec sprawdzania Policzlcd.

  Locate 1 , 1                                              'W pierwszej linii Lcd, pozycja 1...

  Lcd "Wybierasz f(MHz)"                                    'Pokaż komunikat.

'''''''''''''''''''''''''''''''''''''''''''''''

'Działanie matematyczne (patrz sch. blok.):

  Mix = Frekw - Cb                                          'Częstotliwość wprowadzona z klawiatury(Frekw) - pośrednia(CB) = Mix.

  Vco = Mix - Kwarc                                         'Mix - częstotliwość kwarcowa (88.7MHz) = VCO.

  Wynik = Vco / 125                                         'VCO / 125 (czyli przez 12.5KHz, skok kanałowy) = Wynik (cyfra podziału w syntezie).

  Bity = Wynik                                              'Zmienna Bity przyjmuje wartość zmiennej Wynik.

''''''''''''''''''''''''''''''''''''''''''''''

 If Kodklaw = 5 Then                                        'Jeli naciśnięto F1...

   Cls                                                      'Czyść Lcd.

   Readeeprom A3 , 1                                        'Odczytaj zmienną A3 z Eprom, adres 1.

   Readeeprom A8 , 8                                        'Odczytaj zmienną A8 z Eprom, adres 8

   Lcd "Frekw.: "                                           'Pokaż komunikat i zawartość A8, A4, A9.

   Locate 1 , 9

   Lcd A3

   Locate 1 , 12

   Lcd ","

   Locate 1 , 13

   Lcd A8

   Lowerline                                                'Druga linia Lcd.

   Lcd "Podzia" ; Chr(0) ; ": " ; Wynik                     'Pokaż komunikat i zawartość Wynik.

 

''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Portb.3 przyjmie poziom bitu 11 zmiennej Bity, itd.

 Portb.3 = Bity.11                                          'L. Dwunasta wartość binarnej zmiennej Bity.

 Portb.0 = Bity.10                                          'K. Jedenasta wartość binarnej zmiennej Bity.

 Portd.7 = Bity.9                                           'J. Dziesiąta wartość binarnej zmiennej Bity.

 Portd.6 = Bity.8                                           'I. Dziewiąta wartość binarnej zmiennej Bity.

 Portd.5 = Bity.7                                           'H. Ósma wartość binarnej zmiennej Bity.

 Portb.7 = Bity.6                                           'G. Siódma wartość binarnej zmiennej Bity.

 Portb.6 = Bity.5                                           'F. Szósta wartość binarnej zmiennej Bity.

 Portd.4 = Bity.4                                           'E. Piąta wartość binarnej zmiennej Bity.

 Portd.3 = Bity.3                                           'D. Czwarta wartość binarnej zmiennej Bity.

 Portd.2 = Bity.2                                           'C. Trzecia wartość binarnej zmiennej Bity.

 Portd.1 = Bity.1                                           'B. Druga wartość binarnej zmiennej Bity.

 Portd.0 = Bity.0                                           'A. Pierwsza wartość binarnej zmiennej Bity.

 

 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''

   End If                                                   'Koniec warunku gdy naciśnięto klawisz.

   End If                                                   'Koniec warunku gdy naciśnięto F1.

 Loop                                                       'Powtarzaj pętlę.

 End                                                        'Koniec pętli.

 Return                                                     'Wróć do programu (do pierwszej pętli).

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Podprogram B.

B:                                                          'Podprogram skanowania.

 Kodklaw = Getatkbd()                                       'Odczytywanie kodu klawiatury do zmiennej Kodklaw.

 Do                                                         'Pętla.

  If Kodklaw < 6 Then                                       'Jeśli naciśnięto klawisz < F2...

  Lcd "B" ; Chr(0) ; Chr(4) ; "dny klawisz"                 'Pokaż komunikat.

  Locate 2 , 1                                              '

  Lcd "Reset"                                               '

 Else                                                       'W przeciwnym razie...

  If Kodklaw > 6 Then                                       'Jeśli naciśnięto klawisz > F2...

  Lcd "B" ; Chr(0) ; Chr(4) ; "dny klawisz"                 'Pokaż komunikat.

  Locate 2 , 1                                              '

  Lcd "Reset"                                               '

End If                                                      'Koniec warunku.

End If                                                      '

 Waitms 200                                                 'Powtarzaj komunikat co 200mS.

 Cls                                                        'Czyść.

''''''''''''''''''''''''''''''''

'Rozpocznij skanowanie.

    If Kodklaw = 6 Then                                     'Jeśli naciśnięto klawisz F2.

    Locate 1 , 1                                            '

    Lcd "Skaner: "                                          'Komunikat.

 

'Porty, z których otrzymujemy liczbę podziału dla syntezy w postaci kodu BCD.

   Portd.0 = Bity.0                                         'A. Pierwsza wartość binarnej zmiennej Bity.

   Portd.1 = Bity.1                                         'B. Druga wartość binarnej zmiennej Bity.

   Portd.2 = Bity.2                                         'C. Trzecia wartość binarnej zmiennej Bity.

   Portd.3 = Bity.3                                         'D. Czwarta wartość binarnej zmiennej Bity.

   Portd.4 = Bity.4                                         'D. Piąta wartość binarnej zmiennej Bity.

   Portb.6 = Bity.5                                         'F. Szósta wartość binarnej zmiennej Bity.

   Portb.7 = Bity.6                                         'G. Siódma wartość binarnej zmiennej Bity.

   Portd.5 = Bity.7                                         'H. Ósma wartość binarnej zmiennej Bity.

   Portd.6 = Bity.8                                         'I. Dziewiąta wartość binarnej zmiennej Bity.

   Portd.7 = Bity.9                                         'J. Dziesiąta wartość binarnej zmiennej Bity.

   Portb.0 = Bity.10                                        'K. Jedenasta wartość binarnej zmiennej Bity.

   Portb.3 = Bity.11                                        'L. Dwunasta wartość binarnej zmiennej Bity.

                                                                                    '

'Sposób wyliczania cyfry do wyświetlenia na Lcd, w zależności od liczby podziału w syntezie.

'Pierwsza liczba podziału, to 2260 dająca Frekw = 144MHz.

  For Bity = 2260 To 2421                                   'W pętli For ładuj do zmiennej Bity wartość od...do.

  Wait 2                                                    'Krok skanera co 2sek.

  Vco = Bity * 125                                          '

  Mix = Vco + Kwarc                                         '

  Frekw = Cb + Mix                                          'Wykonaj działanie.

  Frekw = Frekw \ 10000                                     'Frekw zawiera Frekw przez 10000.

  Kanal = Fusing(frekw , "###.####")                        'Formatowanie wartości cyfrowej (w Frekw) do zm. Kanal z zaokrągleniem.

  Lowerline                                                 'W drugiej linii Lcd.

  Lcd Kanal                                                 'Pokaż zawartość Kanal.

  Next Bity                                                 'Wykonuj kroki w zmiennej Bity.

     If Bity = 2421 Then                                    'Jeśli dokroczysz do wartości 2421, to...

     Bity = 2260                                            'Zapisz do zmiennej Bity wartość 2260 (wróć do początku).

     End If                                                 '2260 to podział w syntezie, początek pasma.

 

 End If                                                     'Koniec warunku - gdy naciśnięto F2.

 Loop                                                       'Powtażaj pętlę.

 End                                                        'Koniec tej pętli.

 Return                                                     'Wracaj do programu.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  'Tablica numerów przycisków klawiatury AT w kodzie ASCI:

Keydata:                                                    'Podprogram tablicy.

     'Małe litery

   Data 0 , 5 , 0 , 3 , 4 , 5 , 6 , &H07 , 5 , 5 , 5 , &H0B , &H0C , 0,       ''''''''''''A

   Data 63 , 63 , 63 , 63 , 63 , 63 , 63 , 113 , 49 , 63 , 63 , 63 , 122,       ''''''''''B

   Data 115 , 97 , 119 , 50 , 63 , 63 , 99 , 120 , 100 , 101 , 52 ,       ''''''''''''''''C

   Data 51 , 63 , 63 , 32 , 118 , 102 , 116 , 114 , 53 , 63 , 63 , 110 ,       '''''''''''D

   Data 98 , 104 , 103 , 121 , 54 , 63 , 63 , 63 , 109 , 106 , 117 , 55 ,       ''''''''''E

   Data 56 , 63 , 63 , 44 , 107 , 105 , 111 , 48 , 57 , 63 , 63 , 46 , 47 ,       ''''''''F

   Data 108 , 59 , 112 , 95 , 63 , 63 , 63 , 63 , 63 , 63 , 61 , 63 , 63 , 63 ,       ''''G

   Data 63 , 13 , 63 , 63 , 124 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63,       'H

   Data 63 , 49 , 63 , 52 , 55 , 63 , 63 , 63 , 48 , 127 , 50 , 53 , 54 , 56,       ''''''I

   Data 1 , 63 , 5 , 43 , 51 , 45 , 42 , 57 , 63 , 63       ''''''''''''''''''''''''''''''J

 

    'Duże litery

  Data 0 , 0 , 0 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,       ''''''''''K

  Data 0 , 0 , 0 , 0 , 0 , 0 , 81 , 33 , 03 , 0 , 0 , 90 , 83 , 65,       ''''''''L

  Data 87 , 64 , 0 , 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 0 , 86,       '''''M

  Data 70 , 84 , 82 , 37 , 0 , 0 , 78 , 66 , 72 , 71 , 89 , 94 , 0,       ''''''''N

  Data 0 , 0 , 77 , 74 , 85 , 38 , 42 , 0 , 0 , 60 , 75 , 73 , 79,       '''''''''O

  Data 41 , 40 , 0 , 0 , 62 , 63 , 76 , 58 , 80 , 0 , 0 , 0 , 0 , 0,       '''''''P

  Data 0 , 123 , 43 , 0 , 0 , 0 , 0 , 0 , 125 , 0 , 0 , 0 , 0 , 0 , 0,       '''''Q

  Data 0 , 0 , 0 , 0 , 0 , 0 , 49 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 48,       '''''R

  Data 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0       'S