Program na Atmega8

'SDR_3,5i7MHzS.bas

'Synteza (mini DDS) do radia cyfrowego na 3,5 i 7MHz z krokiem 1953,14Hz w syntezie.

'Ostatecznie na wyjściu otrzymujemy kroki ok. 5KHz na paśmie 7MHz i 2,5KHz na paśmie 3,5MHz.

'Otrzymuje się częstotliwość 4X wyższą od odbieranego pasma 7MHz i 3,5MHz, czyli 28,XX i 14,XXMHz.

'Urządzenie służy do odbioru pasma 3,5MHz i 7MHz.

'Schemat: SDR_3,5i7MHzS.png.

'Działanie: przyciskamy P1 lub P2 i dostrajamy się zgrubsza do kanału, dokładne dostrojenie w komputerze.

'Na Lcd obserwujemy częstotliwość, którą będziemy odbierać..

'Synteza synchronizuje w zakresie 200KHz.

'Patrz też uwagi pod programem.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 38%.

'Procesor Atmega8.

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

 

 $regfile = "m8def.dat"                                     'Dyrektywy 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

 

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

'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.2 = Input                                      'Przycisk P2 (w dół).

 Config Pinb.1 = Input                                      'Przycisk P1 (w górę).

 Set Portb.2                                                '

 Set Portb.1                                                '

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

 '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 Bity As Long                                            'Bity zawiera Porty jako wyjścia BCD.

Dim Kanal As String * 8                                     'Zmienna zawierająca cęstotliwość odbieraną w postaci słownej..

Dim Vco As Single                                           'Zmienna zawiera liczbę podziału w syntezie razy krok (1953Hz)..

 

 Lcd " SDR radio"                                           'Komunikat po włączeniu.

 Lowerline                                                  '

 Lcd "Pasmo 3,5 i 7MHz"                                     '

 

Declare Sub A

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

'Kroki w górę częstotliwości.

Gora:                                                       'Podprogram

Do                                                          'Pętla.

   Bitwait Pinb.1 , Reset                                   'Czekaj na P1.

    Readeeprom Bity , 1                                     'Odczytaj wartość kodu BCD.

    For Bity = Bity To 2853                                 'Krocz od wartości ustawionego kodu BCD do 2853, bo:

                                                            '2853*0.001953140+24/4=7,39MHz=max górny zakres.

    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.

 

   Writeeeprom Bity , 1                                     'Zapisz kod BCD.

   Home                                                     '

   Vco = Bity * 0.001953140                                 'Do wyniku VCO dodaj 24MHz.

   Vco = Vco + 24                                           '

   Vco = Vco / 4                                            'Wynik 28...MHz podziel przez 4.

   Kanal = Fusing(vco , "##.####")                          'Wynik zamieniamy na słowny.

   Lcd Kanal ; " MHz            "                           'Pokaż to w pierwszej linii Lcd.

   Vco = Vco / 2                                            'Teraz wynik podziel jeszcze przez 2.

   Kanal = Fusing(vco , "##.####")                          'Wynik zamień na słowny.

   Lowerline                                                'W drugiej linii...

   Lcd Kanal ; " MHz            "                           'Pokaż ten wynik.

 

   'Waitms 300                                               '300mS, szybkość kroków syntezy.

 

   If Pinb.1 = 1 Then                                       'Jeśli puścimy przycisk P1...

   Call A                                                   'Wróć do A, czyli sprawdzaj który przycisk przyciśniemy.

   End If

 

   Next Bity                                                '

   Loop                                                     '

End                                                         '

Return                                                      '

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

'Kroki w dół częstotliwości.

Dol:                                                        'Podprogram.

Do                                                          'Pętla.

   Bitwait Pinb.2 , Reset                                   'P2.

    Readeeprom Bity , 1                                     'Odczytaj wartość kodu BCD.

    For Bity = Bity To - 6000 Step - 1                      'Krocz od wartości ustawionego kodu BCD do -6000.

    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.

 

   Writeeeprom Bity , 1                                     'Zapisz kod BCD.

   Home                                                     '

   Vco = Bity * 0.001953140                                 'Do wyniku VCO dodaj 24MHz.

   Vco = Vco + 24                                           '

   Vco = Vco / 4                                            'Wynik 28...MHz podziel przez 4.

   Kanal = Fusing(vco , "##.####")                          'Wynik zamieniamy na słowny.

   Lcd Kanal ; " MHz            "                           'Pokaż to w pierwszej linii Lcd.

   Vco = Vco / 2                                            'Teraz wynik podziel jeszcze przez 2..

   Kanal = Fusing(vco , "##.####")                          'Wynik zamień na słowny..

   Lowerline                                                'W drugiej linii...

   Lcd Kanal ; " MHz            "                           'Pokaż ten wynik.

 

   'Waitms 300                                               '300mS, szybkość kroków syntezy.

 

   If Pinb.2 = 1 Then                                       'Jeśli puścimy przycisk P1...

   Call A                                                   'Wróć do A, czyli sprawdzaj który przycisk przyciśniemy.

   End If                                                   '

 

   Next Bity                                                '

   Loop                                                     '

End                                                         '

Return                                                      'Wróć.

 

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

'Pętla wybierająca: w dół, albo w górę częstotliwości.

Sub A                                                       'Pętla jako podprogram A.

Do                                                          'Pętla sprawdza, który przycisk wybraliśmy.

 If Pinb.1 = 0 Then                                         'Jeśli naciśnięto P1...

 Gosub Gora                                                 'Skocz do podprogramu Gora.

 Else                                                       'W przeciwnym razie...

 If Pinb.2 = 0 Then                                         'Jeśli naciśnięto P2...

 Gosub Dol                                                  'Skocz do podprogramu Dol.

 End If                                                     '

 End If                                                     '

Loop                                                        '

End                                                         '

End Sub

 

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

'Uwaga!:

'Po wpisawniu programu do procesora musimy jednorazowo wykonać następującą czynność:

'przyciskamy lub zwieramy styki przycisku P1 np. krokodylkiem pomiarowym, włączamy urządzenie i czekamy

'aż na wyświetlaczu,w drugiej linii pojawi się pasmo 3,5MHz.

'Może to trwać około 15 minut.

'Jest to czynność jednorazowa, konieczna do zapisania w pamięci Eprom częstotliwości,

'której będziemy słuchać.

'Od tego momentu, po każdym włączeniu syntezy, na wyświetlaczu pojawi się częstotliwość,

'którą pozostawiliśmy podczas ostatniego włączenia.

'Nie trzeba będzie za każdym razem dostrajać syntezy do wybranego kanału,

'kanał będzie taki, jaki pozostawiliśmy poprzednio.

 

'Jeśli przyciskiem P1 kroczymy w górę (i odwrotnie) i chcemy nacisnąć przycisk P2, czyli w dół,

'musimy nacisnąć RESET .

'Lcd pokazuje dwie częstotliwości odbioru. Jęśli będziemy używać odbiornika 7MHz, to częstotliwość odbieraną odczytamy w pierwszej linii Lcd,

'jeśli będziemy odbierać 3,5MHz, to częstotliwość odbioru odczytamy w drugiej lini Lcd.

 

'Skąd się wzięła liczba 24 (Vco = Vco + 24). W syntezie na stałe dołączono do + wyprowadzenia 22 i 23.

'Wprowadzają one stałe liczby podziału 4096 i 8192. Suma tych liczb pomnożona przez częstotliwość kroku (1953Hz) daje wynik 24MHz.

'Ten wynik należy dodać do bitów ustawianych przyciskami P1 i P2.