Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Tuner FM na Attiny2313 - Wskazówki do napisania programu

PIONEER_FAN 22 Lip 2014 12:41 852 0
  • #1
    PIONEER_FAN
    Poziom 17  
    Witajcie. Problem powstał w związku z tematem https://www.elektroda.pl/rtvforum/topic2624943.html
    Mam napisany fragment programu sterujący syntezą PLL. Teraz muszę dorobić fragmenty odpowiadające za zmianę częstotliwości góra/dół oraz zapis i odczyt stacji z pamięci. Czy ktoś mógłby mi w tym pomóc?
    Oczywiście wszystko ma działać w Bascomie.
    EDIT:
    Załączam to, co do tej pory powstało. Zamiast wyświetlać np. 98.10 - wyświetla 9810. Tuning góra/dół nie za bardzo działa. Może ktoś zauważy jakiś błąd, coś poprawi.
    Cytat:

    $regfile = "attiny2313.dat" 'informuje kompilator o pliku dyrektyw mikrokontrolera
    $crystal = 4000000 'kwarc 4MHz

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2

    Config Pind.2 = Input 'strojenie w górę
    Config Pind.3 = Input 'strojenie w dół
    Config Portd.5 = Input 'czujnik mono/stereo
    Config Portd.0 = Output 'data pin5 lm7001
    Config Portd.1 = Output 'Clock pin4 lm7001
    Config Portd.4 = Output 'CE pin3 lm7001

    Reset Portd.0 'wstępne ustawienie stanów na portach
    Reset Portd.1
    Reset Portd.4
    Reset Portd.5
    Set Pind.2
    Set Pind.3

    Declare Sub Synteza
    Declare Sub Zegarek
    Declare Sub Wyswietlaj

    Dim A As Byte
    Dim Freq As Word
    Dim Sterowanie As Byte
    Dim Wynik As Long
    Dim Pcz As Word
    Dim Fpom As Word
    Dim Zmiana As Bit

    Freq = 1536 'odpowiada częstotliwości 87.5MHz
    Pcz = 214 'pośrednia częstotliwość 10,7MHZ
    Zmiana = 0
    Cursor Off
    Call Synteza
    Cls

    Lcd " TECHNICS"
    Wait 1
    Call Synteza

    '-------------------- główna pętla programowa ----------------------------------
    Do
    Set Pind.2
    Set Pind.3
    Call Synteza

    Loop
    End

    '-------------------- podprogram zegara ----------------------------------------
    Sub Zegarek
    Waitus 10
    Set Portd.1
    Waitus 10
    Reset Portd.1
    Waitus 10
    End Sub
    '-------------------- podprogram syntezy ---------------------------------------
    Sub Synteza
    Debounce Pind.2 , 0 , Up , Sub 'tuning w górę
    Debounce Pind.3 , 0 , Dn , Sub 'tuning w dół


    Sterowanie = &B11001001 'ustawia parametry LM7001
    If Freq < 1536 Then Freq = 1946 'jak jedziemy w dół, przy 87,5MHz przeskakuje na 108
    If Freq > 1946 Then Freq = 1536 'jak jedziemy w górę, przy 108MHz przeskakuje na 87,5





    Fpom = Freq

    Reset Portd.1 ' ustawienie lini CL=0
    Set Portd.4 ' ustawienie lini CE=1
    For A = 0 To 13 ' wysyłanie bitów częstotliwości D0 - D13
    If Fpom.a = 1 Then ' bit po bicie
    Set Portd.0
    Else
    Reset Portd.0
    End If
    Call Zegarek ' po każdym bicie takt zegara
    Next A '
    Reset Portd.0 ' wysłanie T0=0
    Call Zegarek ' takt zegara
    Reset Portd.0 ' wysłanie T1=0
    Call Zegarek ' takt zegara
    For A = 0 To 7 ' wysyłanie bitów sterujących LM7001
    If Sterowanie.a = 1 Then ' B0,B1,B2,TB,R0,R1,R2,S
    Set Portd.0
    Else
    Reset Portd.0
    End If
    Call Zegarek ' po każdym bicie takt zegara
    Next A '
    Reset Portd.4 ' koniec transmisji CE=0
    Call Wyswietlaj ' wyświetlenie nowej częstotliwości
    End Sub
    '-------------------------------------------------------------------------------
    Sub Wyswietlaj
    Cls
    Wynik = Freq + Pcz
    Wynik = Wynik * 5

    Lcd "FM " ; Wynik ; " MHz "
    Locate 1 , 15
    If Pind.5 = 0 Then
    Lcd "ST"
    Else
    Lcd "MO"
    End Sub
    '--------------------- polecenia tuningu ---------------------------------------
    Up:
    Do
    Incr Freq
    Loop
    Return
    Dn:
    Do
    Decr Freq
    Loop
    Return