Witam,
Przymierzam sie do budowy małego sendera UKF i koderem rds i stereo w celach dydaktycznych.
Znalazłem program do obsługi syntezera na saa1057 na ATMEGA8 i mam małe pytanie.
Jak zmienić program żeby na wyświetlaczu wyświetlał mi częstotliwość w podanym formacie XX,XX MHZ w tej chwili wyświetla XX,XXX,X MHZ, jak ograniczyć pasmo działania syntezy od 87,50 MHZ do 108,00 MHZ, Jak zrealizować Wyświetlenie na ekranie napisu (LOCKED) po podaniu logicznego 1 np na port d.1 (sygnał mam już wyprowadzony z syntezy), kolejna sprawa jak polaczyc dwa programy w jeden czyli syntezer i dekoder rds, Chciałbym aby na przemian na wyświetlaczy pojawiał sie tekst zdekodowany z RDS oraz ustawiona czestotliwość.
Załączam listingi obu programów
synteza
dekoder RDS
Przymierzam sie do budowy małego sendera UKF i koderem rds i stereo w celach dydaktycznych.
Znalazłem program do obsługi syntezera na saa1057 na ATMEGA8 i mam małe pytanie.
Jak zmienić program żeby na wyświetlaczu wyświetlał mi częstotliwość w podanym formacie XX,XX MHZ w tej chwili wyświetla XX,XXX,X MHZ, jak ograniczyć pasmo działania syntezy od 87,50 MHZ do 108,00 MHZ, Jak zrealizować Wyświetlenie na ekranie napisu (LOCKED) po podaniu logicznego 1 np na port d.1 (sygnał mam już wyprowadzony z syntezy), kolejna sprawa jak polaczyc dwa programy w jeden czyli syntezer i dekoder rds, Chciałbym aby na przemian na wyświetlaczy pojawiał sie tekst zdekodowany z RDS oraz ustawiona czestotliwość.
Załączam listingi obu programów
synteza
'*******************************************************************************
' STEROWNIK SYNTEZY CZESTOTLIWOSCI Z UKLADEM SAA1057
'*******************************************************************************
'Autor : Michał Wojtków
'Data : 16.01.2005
'e-mail: michallo4@wp.pl
'www : www.michallo.ll.pl
'GG# : 714371
'uwagi : program ustepniony dla www.easy-soft.prv.pl
'*******************************************************************************
' KONFIGURACJA PODSTAWOWA
'*******************************************************************************
$crystal = 8000000 'deklaracja rezonatora
$regfile = "m8def.dat" 'wybór procesora
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , Rs = Portd.2 , E = Portd.3
Cursor Off 'wyłączenie kursora
Config Debounce = 30 'ustawienie zwłoki dla drgań styków klawiatury
Config Pinc.3 = Output ' SPI
Config Pinc.4 = Output ' SPI
Config Pinc.5 = Output ' SPI
Config Pinb.2 = Output ' wyjscie podswietlania
Config Pind.1 = Input ' wyjscie bistabilne
Config Pinb.3 = Input ' key 1
Config Pinb.4 = Input ' key 2
Config Pinb.5 = Input ' key 3
Config Pinc.2 = Input ' key 4
Dim Czestot1 As Word 'zmienna danych dla SAA1057
Dim Czestot2 As Word 'zmienna pomicnicza
Dim A As Byte
Dim B As Bit ' zmienna pomocnicza
Dim Key As Byte '
Dim _eep(4) As Byte ' dane odczytane z eeprom
Dim Frequency As Word ' zmienna dla czestotliwosci
Dim Setup As Word ' zmienna dla ustawien
Dim Mnoznik As Byte ' zmienna dla mnoznika 100 i 125
Dim Pokazanaf As Long ' zmienna obliczen czestotliwosci
Dim Pokazanaff As String * 10 '
Dim Pokazanafstr As String * 10
Config Pind.1 = 1 : Portd.1 = 0
Config Pinb.3 = 0 : Portb.3 = 1
Config Pinb.4 = 0 : Portb.4 = 1
Config Pinb.5 = 0 : Portb.5 = 1
Config Pinc.2 = 0 : Portc.2 = 1
'
'włączenie poświetlania
Dat Alias Portc.4 'aliasy dla SPI
Enalbe_ Alias Portc.3 '
Clok Alias Portc.5 '
'*******************************************************************************
' poczatek programu
'*******************************************************************************
Gosub Odczyt_ustawien ' sprawdz ostanie nastawy
Cls
Locate 1 , 1
Lcd "test" 'powitanie
Locate 2 , 7
Lcd "test"
Wait 2
Cls
Locate 1 , 4
Lcd "PLL"
Locate 2 , 3
Lcd "loading"
Wait 2
'*******************************************************************************
' Petla glowna
'*******************************************************************************
Do
Waitms 250
Petla_glowna:
B = 0
Cls
Locate 1 , 5
Pokazanaf = Frequency * Mnoznik
Pokazanaff = Str(pokazanaf)
Pokazanafstr = Format(pokazanaff , "00.0000")
Pokazanaff = Format(pokazanafstr , "000.0")
Lcd Pokazanaff : Lcd "MHz"
Gosub Klawisz
If Key = 1 Then : Gosub Menu : End If
Loop
'*******************************************************************************
' Obsluga syntezy SAA1057
'podprogram do komunikacji z SAA1057, dane (16 bitow) do wyslania
'musza byc podstawione pod zmienna czestot1 ktora jest zdeklarowana jako
'zmienna word, zmienna czestot2 jest zmienna pomocnicza,
'ktorej nie uzywamy bezposrednio czyli nic pod nie podstawiamy,
'Ot cala filozofia sterowania układem SAA1057
'dane jakie maja zostac wysłane mozna sobie odczytac w pdf lub w moich
'podprogramach.
'*******************************************************************************
Saa: 'wyslanie wartości f/u do syntezy
Dat = 0
Enalbe_ = 0
Clok = 0
Waitms 5
Enalbe_ = 1
Waitms 5
Clok = 1
Waitms 5
Clok = 0
Waitms 5
For A = 0 To 15 'szesnaście danych do wysłania
Rotate Czestot1 , Left , 1
Czestot2 = Czestot1 And 1
If Czestot2 = 0 Then
Dat = 0
Else
Dat = 1
End If
Waitms 5
Clok = 1
Waitms 5
Clok = 0
Waitms 5
Next A
Enalbe_ = 0
Waitms 5
Clok = 1
Waitms 5
Clok = 0
Waitms 5
Enalbe_ = 1
Dat = 1
Clok = 1
Waitms 100
Return
'*******************************************************************************
' OBSLUGA KLAWIATURY
'*******************************************************************************
Klawisz:
Key = 0
Debounce Pinb.3 , 0 , Przypisanie , Sub
Debounce Pinb.4 , 0 , Przypisanie , Sub
Debounce Pinb.5 , 0 , Przypisanie , Sub
Debounce Pinc.2 , 0 , Przypisanie , Sub
Return
Przypisanie:
If Pinb.3 = 0 Then : Key = 1 : End If
If Pinb.4 = 0 Then : Key = 2 : End If
If Pinb.5 = 0 Then : Key = 4 : End If
If Pinc.2 = 0 Then : Key = 3 : End If
Return
'*******************************************************************************
' menu
'*******************************************************************************
Menu:
Reset Podswietlanie
Cls
Locate 1 , 1
Lcd "1-Setup 2-freq"
Locate 2 , 1
Lcd "3-format 4-ESC"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Setup : End If
If Key = 2 Then : Goto Frequency : End If
If Key = 3 Then : Goto Formatt : End If
If Key = 4 Then : Goto Petla_glowna : End If
Loop
'*******************************************************************************
' setup
'*******************************************************************************
Setup:
Cls
Locate 1 , 1
Lcd "1-det 2-Prad"
Locate 2 , 1
Lcd "3-Test 4-ESC"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Detector : End If
If Key = 2 Then : Goto Prad : End If
If Key = 3 Then : Goto Test : End If
If Key = 4 Then : Goto Menu : End If
Loop
'*******************************************************************************
' PRAD
'*******************************************************************************
Prad:
Cls
Locate 1 , 1
Lcd "1-0,023 2-0,07"
Locate 2 , 1
Lcd "3-0,23 4-ESC "
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Current1 : End If
If Key = 2 Then : Goto Current3 : End If
If Key = 3 Then : Goto Current4 : End If
If Key = 4 Then : Goto Menu : End If
Loop
'*******************************************************************************
' TEST
'*******************************************************************************
Test:
Cls
Locate 1 , 1
Lcd "1-log.1 2-F.ref"
Locate 2 , 1
Lcd "3-cnt. 4-ESC"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Log1 : End If
If Key = 2 Then : Goto F_ref : End If
If Key = 3 Then : Goto Count : End If
If Key = 4 Then : Goto Menu : End If
Loop
'*******************************************************************************
' detector
'*******************************************************************************
Detector:
Cls
Locate 1 , 1
Lcd "1-AUTO 2-ON"
Locate 2 , 1
Lcd "3-OFF 4-ESC"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Auto : End If
If Key = 2 Then : Goto _on : End If
If Key = 3 Then : Goto _off : End If
If Key = 4 Then : Goto Setup : End If
Loop
'*******************************************************************************
' Current1:
'*******************************************************************************
Current1:
Setup.9 = 0
Setup.10 = 0
Setup.11 = 0
Setup.12 = 0
Gosub Ustaw
Goto Setup
'*******************************************************************************
' Current2:
'*******************************************************************************
Current2:
Setup.9 = 1
Setup.10 = 0
Setup.11 = 0
Setup.12 = 0
Gosub Ustaw
Goto Setup
'*******************************************************************************
' Current3:
'*******************************************************************************
Current3:
Setup.9 = 0
Setup.10 = 1
Setup.11 = 0
Setup.12 = 0
Gosub Ustaw
Goto Setup
'*******************************************************************************
' Current4:
'*******************************************************************************
Current4:
Setup.9 = 0
Setup.10 = 1
Setup.11 = 1
Setup.12 = 0
Gosub Ustaw
Goto Setup
'*******************************************************************************
' Current5:
'*******************************************************************************
Current5:
Setup.9 = 0
Setup.10 = 1
Setup.11 = 1
Setup.12 = 1
Gosub Ustaw
Goto Setup
'*******************************************************************************
' Log1
'*******************************************************************************
Log1:
Setup.0 = 0
Setup.1 = 0
Setup.2 = 0
Setup.3 = 0
Gosub Ustaw
Goto Test
'*******************************************************************************
' F_ref
'*******************************************************************************
F_ref:
Setup.0 = 0
Setup.1 = 0
Setup.2 = 1
Setup.3 = 0
Gosub Ustaw
Goto Test
'*******************************************************************************
' count
'*******************************************************************************
Count:
Setup.0 = 1
Setup.1 = 0
Setup.2 = 0
Setup.3 = 0
Gosub Ustaw
Goto Test
'*******************************************************************************
' synch
'*******************************************************************************
Synch:
Setup.0 = 1
Setup.1 = 0
Setup.2 = 1
Setup.3 = 0
Gosub Ustaw
Goto Test
'*******************************************************************************
' auto
'*******************************************************************************
Auto:
Setup.5 = 0
Setup.6 = 0
Gosub Ustaw
Goto Detector
'*******************************************************************************
' on
'*******************************************************************************
_on:
Setup.5 = 0
Setup.6 = 1
Gosub Ustaw
Goto Detector
'*******************************************************************************
' off
'*******************************************************************************
_off:
Setup.5 = 1
Setup.6 = 1
Gosub Ustaw
Goto Detector
'*******************************************************************************
' frequency
' podprogram zmiany czestotliwosci
'*******************************************************************************
Frequency:
Reset Podswietlanie
Cls
Locate 1 , 5
Pokazanaf = Frequency * Mnoznik
Pokazanaff = Str(pokazanaf) 'Frequency * Mnoznik
Pokazanafstr = Format(pokazanaff , "00.0000")
Pokazanaff = Format(pokazanafstr , "000.0")
Lcd Pokazanaff : Lcd "MHz"
Locate 2 , 1
Lcd "1-UP DOWN-2"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Gosub Up : End If
If Key = 2 Then : Gosub Down : End If
If Key = 3 Then : Gosub Ustaw1 : End If
If Key = 4 Then : Gosub Ustaw1 : Goto Menu : End If
Loop
'*******************************************************************************
' UP
' zmiana o jeden krok czestotliwosci w górę
'*******************************************************************************
Up:
Frequency = Frequency + 1
Pokazanaf = Frequency * Mnoznik
Pokazanaff = Str(pokazanaf) 'Frequency * Mnoznik
Pokazanafstr = Format(pokazanaff , "00.0000")
Pokazanaff = Format(pokazanafstr , "000.0")
Locate 1 , 5
Lcd Pokazanaff : Lcd "MHz"
Waitms 100
If Pinb.3 = 0 Then : Goto Up : End If 'nowa funkcja
Return
'*******************************************************************************
' down
' zmiania o jeden krok czestotliwosci w dół
'*******************************************************************************
Down:
Frequency = Frequency - 1
Pokazanaf = Frequency * Mnoznik
Pokazanaff = Str(pokazanaf) 'Frequency * Mnoznik
Pokazanafstr = Format(pokazanaff , "00.0000")
Pokazanaff = Format(pokazanafstr , "000.0")
Locate 1 , 5
Lcd Pokazanaff : Lcd "MHz"
Waitms 100
If Pinb.4 = 0 Then : Goto Down : End If 'nowa funkcja
Return
'*******************************************************************************
' format
' pomocnicza funkcja, pomagajaca opanowac sterownik po zaprogramowaniu lub
' checi powrotu do ustawien poczatkowych
'*******************************************************************************
Formatt:
Setup = 49541 '&B1100000110000101
Gosub Ustaw
Frequency = 9820
Gosub Ustaw1
Gosub Odczyt_ustawien
Goto Menu
'*******************************************************************************
' odczyt ustawien
'odczytanie z pamieci EEPROM nastaw parametrow i czestotliwosci,
' oraz ustawinie ich w SAA1057
'*******************************************************************************
Odczyt_ustawien:
For A = 1 To 4
Readeeprom _eep(a) , A
Waitms 50
Next A
Setup = Makeint(_eep(3) , _eep(4))
Czestot1 = Setup
Gosub Saa
Frequency = Makeint(_eep(1) , _eep(2))
Czestot1 = Frequency
Gosub Saa
If Setup.13 = 0 Then : Mnoznik = 100 : End If
Return
'*******************************************************************************
' Ustaw
' ustawienie w SAA1057 parametrow petli PLL oraz zapis do pamieci EEPROM
'*******************************************************************************
Ustaw:
Czestot1 = Setup
Gosub Saa
_eep(3) = Low(setup)
_eep(4) = High(setup)
Writeeeprom _eep(3) , 3
Writeeeprom _eep(4) , 4
Return
'*******************************************************************************
' Ustaw1
' ustawienie w SAA1057 częstotliwosci i zapis w pamieci EEPROM
'*******************************************************************************
Ustaw1:
Czestot1 = Frequency
Gosub Saa
_eep(1) = Low(frequency)
_eep(2) = High(frequency)
Writeeeprom _eep(1) , 1
Writeeeprom _eep(2) , 2
Return
'*******************************************************************************
' The End ?
'*******************************************************************************dekoder RDS
' **************************************
' * Projekt: RDS-Modul *
' * Date: 28.02.2010 *
' * Autor: DL4FBZ & DL1ZAX *
' * Atmega: 8 *
' * LCD: 2 * 16 *
' * Version: 1.1 *
' **************************************
$regfile = "m8def.dat"
$crystal = 4332000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 20
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Initlcd
Cls
Cursor Off
Dim Checksume(26)as Word
Checksume(26) = &B1000000000
Checksume(25) = &B0100000000
Checksume(24) = &B0010000000
Checksume(23) = &B0001000000
Checksume(22) = &B0000100000
Checksume(21) = &B0000010000
Checksume(20) = &B0000001000
Checksume(19) = &B0000000100
Checksume(18) = &B0000000010
Checksume(17) = &B0000000001
Checksume(16) = &B1011011100
Checksume(15) = &B0101101110
Checksume(14) = &B0010110111
Checksume(13) = &B1010000111
Checksume(12) = &B1110011111
Checksume(11) = &B1100010011
Checksume(10) = &B1101010101
Checksume(9) = &B1101110110
Checksume(8) = &B0110111011
Checksume(7) = &B1000000001
Checksume(6) = &B1111011100
Checksume(5) = &B0111101110
Checksume(4) = &B0011110111
Checksume(3) = &B1010100111
Checksume(2) = &B1110001111
Checksume(1) = &B1100011011
Const Banka = &B1111011000
Const Bankb = &B1111010100
Const Bankc = &B1001011100
Const Bankc1 = &B1111001100
Const Bankd = &B1001011000
Dim Empfang As Long
Dim Empfang_neu As Long
Dim Ergebnis As Word
Dim Neue_daten As Bit
Dim I As Byte
Dim E As Byte
Dim T As Byte
Dim Txt2a As String * 17
Dim Txt As String * 2
Dim Txt0a As String * 8
Dim N0a As Byte
Dim N0p As Byte
Dim N2a As Byte
Dim N2b As Byte
Dim Blk As Byte
Dim M As Byte
Dim L As Byte
Dim Rds As Long
Dim Bit_zaehler As Byte
Dim Synchron As Bit
Dim Berechnen As Bit
Config Portd.2 = Input ' Interrupt
Set Portd.2
Config Portb.1 = Input ' Daten Input
Set Portb.1
Rdsdata Alias Pinb.1
Config Portb.0 = Input 'Taster 1
Config Portd.7 = Input 'Taster 2
Set Portb.0
Set Portd.7
Locate 1 , 5
Lcd "RDS-Modul"
Locate 2 , 4
Lcd "Version 1.1"
Wait 1
Cls
On Int0 Int2_isr
Enable Int0
Enable Interrupts
Config Int0 = Falling
N2a = 0
N2b = 0
Do
If Synchron = 0 Then
Empfang = Rds
Bit_zaehler = 0
Berechnen = 1
Else
Empfang = Empfang_neu
Neue_daten = 0
End If
If Berechnen = 1 Then
For I = 0 To 25
If Empfang.i = 1 Then
E = I + 1
Ergebnis = Ergebnis Xor Checksume(e)
End If
Next I
M.0 = Empfang.10
M.1 = Empfang.11
M.2 = Empfang.12
M.3 = Empfang.13
M.4 = Empfang.14
M.5 = Empfang.15
M.6 = Empfang.16
M.7 = Empfang.17
L.0 = Empfang.18
L.1 = Empfang.19
L.2 = Empfang.20
L.3 = Empfang.21
L.4 = Empfang.22
L.5 = Empfang.23
L.6 = Empfang.24
L.7 = Empfang.25
Select Case Ergebnis
Case Banka ' Sender Kennung
Locate 1 , 11
Lcd Hex(l) ; Hex(m)
Synchron = 1
Case Bankb
Synchron = 1
Blk = &H00
Blk.3 = L.3
Blk.4 = L.4
Blk.5 = L.5
Blk.6 = L.6
Blk.7 = L.7
Select Case Blk
Case &B00100000 'Type 2A
N2a = 1
Case &B00000000 'Type 0A
N0a = 1
Blk = &H00
Blk.0 = M.0
Blk.1 = M.1
Select Case Blk
Case &B00000000
N0p = 1
Case &B00000001
N0p = 3
Case &B00000010
N0p = 5
Case &B00000011
N0p = 7
End Select
Case &B01000000 'Type 4A
End Select
Case Bankc
Synchron = 1
If N2a = 1 Then
Txt2a = Txt2a + Chr(l) + Chr(m)
If Len(txt2a) > 16 Then Txt2a = Right(txt2a , 16)
End If
Case Bankc1
Synchron = 1
N0a = 0
N2a = 0
N2b = 0
Case Bankd
Synchron = 1
If N2a = 1 Then
Txt2a = Txt2a + Chr(l) + Chr(m)
If Len(txt2a) > 16 Then Txt2a = Right(txt2a , 16)
Locate 2 , 1
Lcd Txt2a
N2a = 0
End If
If N0a = 1 Then
Txt = Chr(l) + Chr(m)
Mid(txt0a , N0p , 2) = Txt
Locate 1 , 1
Lcd Txt0a
N0a = 0
End If
If N2b = 1 Then N2b = 0
Case Else
Synchron = 0
N0a = 0
N2a = 0
N2b = 0
End Select
Ergebnis = &B0000000000000000
If Neue_daten = 0 Then Berechnen = 0
End If
Locate 1 , 16
If Synchron = 1 Then Lcd "*" Else Lcd "-"
Loop
End
Int2_isr:
Shift Rds , Left
If Rdsdata = 1 Then Rds.0 = 1 Else Rds.0 = 0
Incr Bit_zaehler
If Synchron = 1 Then
If Bit_zaehler = 26 Then
Empfang_neu = Rds
Neue_daten = 1
Berechnen = 1
Bit_zaehler = 0
End If
End If
If Bit_zaehler = 27 Then Bit_zaehler = 1
Return