http://www.easy-soft.tsnet.pl/
Sterownik syntezy częstotliwości z
układem TSA6057
Przedstawiam drugi już sterownik syntezy
częstotliwości tym razem dla układu
scalonego firmy PHILIPS TSA6057. Różni
się on od poprzednio prezentowanego
zbudowanego z użyciem układu SAA1057
(
http://www.easysoft.tsnet.pl/projects.ht
ml#saa1057
) kilkoma parametrami
takimi, jak: krok syntezy, prąd pętli PLL i
moim zdaniem najważniejszym: zakres
częstotliwości pracy od 30 do 150MHz.
Koszt całego sterownika jest porównywalny do poprzedniego. Różni je tylko cena samego
układu syntezy. Schemat i płytka prototypowa uległy zmianie w minimalnym stopniu.
Opis działania.
Sercem sterownika jest mikrokontroler z rodziny AVR - AT90S4433. Program napisany jest w
języku Bascom AVR. Konstrukcja sterownika jest tak prosta i tak podobna do poprzedniej
wersji, że nie wymaga dodatkowego opisu. Zdecydowanie większa część sprzętowa
sterownika jak i jego program zostają bardzo podobne o ile nie takie same jak poprzednik,
taki też był cel budowy drugiego sterownika. Uzyskaliśmy coś w rodzaju uniwersalnego
modułu sterowania z możliwością wyboru układu wykonawczego.
Tak, jak i poprzednio, Portc.2 służy do sterowania podświetleniem. Celowo nie narysowałem
tego na schemacie. Cześć LCD ma podświetlanie zrealizowane z użyciem diod LED, część
używa do tego celu folii elektroluminescencyjnej. Kwestię sposobu sterowania
podświetleniem pozostawiam otwartą. Wyjście mikrokontrolera przyjmuje stan niski, gdy
podświetlenie powinno być załączone.
Wyjścia bistabilne i monostabilne służą do sterowania załączaniem np. końcówki mocy
nadajnika lub innym dołączonym urządzeniem.
Opis interfejsu TSA6057.
Aplikację układu TSA6057 wykonałem według schematu z dokumentacji PDF pochodzącej ze
strony internetowej producenta. Mikrokontroler komunikuje się z układem TSA6057 poprzez
2-przewodowy interfejs I
2
C. Wykorzystywane są 3 polecenia języka kompilatora języka
Bascom AVR: I2Cstart, I2Cwbyte i I2Cstop. Nastawy dla układu syntezy przesyłane są zgodnie
z opisem zawartym w dokumentacji producenta. Układ wykonany ze sprawdzonych elementów
działa niezawodnie, natychmiast po włączeniu, bez dodatkowego uruchamiania.
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 1/11 -
http://www.easy-soft.tsnet.pl/
Obsługa programu.
Po zmontowaniu całości konieczne jest wprowadzenie i zapamiętanie nastaw SAA1057 w
wewnętrznej pamięci EEPROM mikrokontrolera. Do tego celu używane są komórki EEPROM
znajdujące się pod adresami 1 do 3. Są to pojedyncze bajty, w których należy zapisać
ustawienia układu syntezy (konfiguracja i częstotliwość). Żądane wartości można zapisać przy
pomocy programatora, można również po pierwszym uruchomieniu skorzystać z funkcji
FORMAT w Menu ustalającej domyślne nastawy syntezy.
Po załączeniu pojawia się komunikat – powitanie, następnie mikrokontroler przechodzi do
sprawdzenia ustawień sprzed wyłączenia zasilania i wysyła do układu TSA6057 informacje o
tych ustawieniach. W ten sposób przywracane są poprzednio dokonane nastawy. Po tych
ustawieniach sterownik wyświetla tylko częstotliwość generowaną przez układ a przyciskom
S1..S5 przyporządkowano następujące funkcje:
[S1] wejście do menu
[S2] zmiana stanu wyjścia bistabilnego (wyprowadzenie portc.0)
[S3] zmiana stanu wyjścia monostabilnego (wyprowadzenie portc.1)
[S4] skrót do menu zmian częstotliwości
[S5] załączenie na 10 sekund podświetlania LCD (sterowanie poprzez wyprowadzenie
2 portu C)
Menu główne umożliwia wybór następujących funkcji:
1.
SETUP, w którym możemy zmienić wszystkie ustawienia konfiguracji TSA6057:
a. kroku syntezy (10kHz i 25kHz)
b. prądu pętli PLL (5uA i 500uA)
c.
konfiguracji wyjścia BAND SWITCH OUTPUT (SINK CURRENT i FLOATING)
2.
FREQUENCY umożliwiającej zmianę częstotliwości generowanej przez układ (ta
funkcja dostępna jest również po załączeniu zasilania lub wyjściu z menu głównego).
3.
FORMAT - służy do powrotu do ustawień "fabrycznych" w przypadku kiedy stracimy
orientację w ustawieniach jakich dokonaliśmy (można również użyć po
zaprogramowaniu procesora, gdy w eeprom są zapisane same HFF
Wyjście każdego poziomu menu następuje po wciśnięciu klawisz [S5]. Opuszczenie tego
poziomu menu odbywa się po wyborze jednej z nich. Aby zmienić częstotliwość należy użyć
opcji FREQUENCY dostępnej z poziomu „zerowego” po naciśnięciu przycisku [S4] lub po
wejściu do menu głównego. Teraz przyciskami [S1] i [S2] możemy zmieniać częstotliwość w
górę i w dół.
Sterownik wyśle nową nastawę do TSA6057 dopiero po potwierdzeniu przez naciśnięcie [S3]
lub wyjściu do menu głównego (klawisz [S5]). Celowo nie są wysyłane nowe ustawienia
częstotliwości po każdej jej zmianie w górę lub dół, aby uniknąć ciągłego przestrajania i tym
samym zakłócania pracy innych urządzeń nadawczo - odbiorczych. Jak poprzednio - nie ma
także ograniczenia pasma częstotliwości. W związku z tym sterownik będzie przestrajał układ
syntezy w całym zakresie pracy układu TSA6057, czyli od 30 do 150MHz.
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 2/11 -
http://www.easy-soft.tsnet.pl/
Budowa modelu.
W dokumentacji sterownika nie ma wzoru
płytki drukowanej. Jej projekt w tym
zakresie częstotliwości raczej nie powinien
sprawić większych trudności przeciętnemu
elektronikowi - amatorowi. Do prób
używałem płytki uniwersalnej, z otworami
i polami lutowniczymi. Jako generatora
VCO użyłem, najzwyklejszej głowicy
radiowej. Pewną pomocą może się okazać
zamieszczone zdjęcia sterownika.
Michał Wojtków
michallo4@wp.pl
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 3/11 -
http://www.easy-soft.tsnet.pl/
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 4/11 -
http://www.easy-soft.tsnet.pl/
'*******************************************************************************
' STEROWNIK SYNTEZY CZESTOTLIWOSCI Z UKLADEM TSA6057
'*******************************************************************************
'Autor : Michał Wojtków
'Data : 4.01.2004
'e-mail: michallo4@wp.pl
'www : www.michallo.ll.pl
'GG# : 714371
'uwagi : program ustepniony dla www.easy-soft.prv.pl
'*******************************************************************************
' KONFIGURACJA PODSTAWOWA
'*******************************************************************************
$crystal = 4190000 'deklaracja rezonatora
$regfile = "4433def.dat" 'wybór procesora
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E
= Portb.0 , Rs = Portd.7
Cursor Off
Config Debounce = 30
Config Sda = Portc.5
Config Scl = Portc.4
Config Pinc.2 = Output
Config Pinc.1 = Output
Config Pinc.0 = Output
Config Pind.4 = Input
Config Pind.3 = Input
Config Pind.2 = Input
Config Pind.1 = Input
Config Pind.0 = Input
Dim Db0 As Byte
Dim Db1 As Byte
Dim Db2 As Byte
Dim A As Byte
Dim Key As Byte
Dim _eep(3) As Byte
Dim Frequency As Word
Dim Mnoznik As Byte
Dim Pokazanaf As Long
Dim Pokazanaff As String * 10
Dim Pokazanafstr As String * 10
Portc.0 = 1
Portc.1 = 1
Podswietlanie Alias Portc.2
Reset Podswietlanie
'*******************************************************************************
' poczatek programu
'*******************************************************************************
Gosub Odczyt_ustawien
Cls
Locate 1 , 4
Lcd "PLL-Driver"
Locate 2 , 6
Lcd "Welcome"
Wait 2
Cls
Locate 1 , 3
Lcd "Nie do konca"
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 5/11 -
http://www.easy-soft.tsnet.pl/
Locate 2 , 1
Lcd "komercyjne radio"
Wait 2
'*******************************************************************************
' Petla glowna
'*******************************************************************************
Petla_glowna:
Cls
Locate 1 , 3
Pokazanaf = Frequency * Mnoznik
Pokazanaff = Str(pokazanaf)
Pokazanafstr = Format(pokazanaff , "00.0000")
Pokazanaff = Format(pokazanafstr , "000.0")
Lcd Pokazanaff : Lcd " MHz"
Podswitlanie_off:
For A = 1 To 250
Gosub Klawisz
If Key = 1 Then : Gosub Menu : End If
If Key = 2 Then : Toggle Portc.0 : End If
If Pind.2 = 0 Then : Portc.1 = 0 : Else : Portc.1 = 1 : End If
If Key = 4 Then : Goto Frequency : End If
Waitms 20
Next A
Set Podswietlanie
Do
Gosub Klawisz
If Key = 1 Then : Gosub Menu : End If
If Key = 2 Then : Toggle Portc.0 : End If
If Pind.2 = 0 Then : Portc.1 = 0 : Else : Portc.1 = 1 : End If
If Key = 4 Then : Goto Frequency : End If
If Key = 5 Then : Reset Podswietlanie : Goto Podswitlanie_off : End If
Loop
'*******************************************************************************
' OBSLUGA KLAWIATURY
'*******************************************************************************
Klawisz:
Key = 0
Debounce Pind.4 , 0 , Przypisanie , Sub
Debounce Pind.3 , 0 , Przypisanie , Sub
Debounce Pind.2 , 0 , Przypisanie , Sub
Debounce Pind.1 , 0 , Przypisanie , Sub
Debounce Pind.0 , 0 , Przypisanie , Sub
Return
Przypisanie:
If Pind.4 = 0 Then : Key = 1 : End If
If Pind.3 = 0 Then : Key = 2 : End If
If Pind.2 = 0 Then : Key = 3 : End If
If Pind.1 = 0 Then : Key = 4 : End If
If Pind.0 = 0 Then : Key = 5 : End If
Return
'*******************************************************************************
' menu
'*******************************************************************************
Menu:
Reset Podswietlanie
Cls
Locate 1 , 1
Lcd "1-Setup 2-freq"
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 6/11 -
http://www.easy-soft.tsnet.pl/
Locate 2 , 5
Lcd "3-format"
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 = 5 Then : Goto Petla_glowna : End If
Loop
'*******************************************************************************
' setup
'*******************************************************************************
Setup:
Cls
Locate 1 , 1
Lcd "1-krok 2-PradPLL"
Locate 2 , 1
Lcd " 3-BS"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Krok : End If
If Key = 2 Then : Goto Prad : End If
If Key = 3 Then : Goto Bs : End If
If Key = 5 Then : Goto Menu : End If
Loop
'*******************************************************************************
' KROK
'*******************************************************************************
Krok:
Cls
Locate 1 , 1
Lcd "Krok PLL: [kHz]"
Locate 2 , 1
Lcd "1-10 2-25"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto 10khz : End If
If Key = 2 Then : Goto 25khz : End If
If Key = 5 Then : Goto Setup : End If
Loop
'*******************************************************************************
' PRAD
'*******************************************************************************
Prad:
Cls
Locate 1 , 1
Lcd "Prad "
Locate 2 , 1
Lcd "1-5uA 2-500uA"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Current1 : End If
If Key = 2 Then : Goto Current2 : End If
If Key = 5 Then : Goto Menu : End If
Loop
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 7/11 -
http://www.easy-soft.tsnet.pl/
'*******************************************************************************
' Band Switch Output
'*******************************************************************************
Bs:
Cls
Locate 1 , 1
Lcd "Band Switch Out."
Locate 2 , 1
Lcd "1-Sink 2-Float"
Waitms 500
Do
Gosub Klawisz
If Key = 1 Then : Goto Sink : End If
If Key = 2 Then : Goto Float : End If
If Key = 5 Then : Goto Menu : End If
Loop
'*******************************************************************************
' 10khz
'*******************************************************************************
10khz:
Db2.6 = 1
Db2.7 = 0
Mnoznik = 100
Frequency = 9200
Gosub Konwersja
Goto Krok
'*******************************************************************************
' 12Khz
'*******************************************************************************
25khz:
Db2.6 = 0
Db2.7 = 1
Mnoznik = 250
Frequency = 3680
Gosub Konwersja
Goto Krok
'*******************************************************************************
' Current1:
'*******************************************************************************
Current1:
Db0.0 = 0
Gosub Konwersja
Goto Setup
'*******************************************************************************
' Current2:
'*******************************************************************************
Current2:
Db0.0 = 1
Gosub Konwersja
Goto Setup
'*******************************************************************************
' Sink Current:
'*******************************************************************************
Sink:
Db2.2 = 1
Gosub Konwersja
Goto Setup
'*******************************************************************************
' Floating:
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 8/11 -
http://www.easy-soft.tsnet.pl/
'*******************************************************************************
Float:
Db2.2 = 0
Gosub Konwersja
Goto Setup
'*******************************************************************************
' frequency
'*******************************************************************************
Frequency:
Reset Podswietlanie
Cls
Locate 1 , 3
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 FREQ 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 Konwersja : End If
If Key = 4 Then : Goto Petla_glowna : End If
If Key = 5 Then : Gosub Konwersja : Goto Menu : End If
Loop
'*******************************************************************************
' UP
' Zmiana częstotliwości 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 , 1
Lcd " "
Locate 1 , 3
Lcd Pokazanaff : Lcd " MHz"
Return
'*******************************************************************************
' down
' Zmiana częstotliwości 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 , 1
Lcd " "
Locate 1 , 3
Lcd Pokazanaff : Lcd " MHz"
Return
'*******************************************************************************
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 9/11 -
http://www.easy-soft.tsnet.pl/
' format
' Ustawienie domyślnej konfiguracji i częstotliwości
'*******************************************************************************
Formatt:
Frequency = 9070
Db2.6 = 1
Db2.7 = 0
Db0.0 = 0
Db2.2 = 0
Gosub Konwersja
Gosub Odczyt_ustawien
Goto Petla_glowna
'*******************************************************************************
' odczyt ustawien z eeprom i wysłanie do TSA6057
'*******************************************************************************
Odczyt_ustawien:
For A = 1 To 3
Readeeprom _eep(a) , A
Waitms 50
Next A
Gosub Konwersja1
Gosub Tsa
If _eep(3).7 = 0 Then : Mnoznik = 100 : Else : Mnoznik = 250 : End If
Return
'*******************************************************************************
' TSA 6057
' Wysłanie danych do układu TSA6057 przez magistrale i2c
' UWAGA: jesli blednie podlaczymy układ lub zle ustawimy adres
' pojawi sie napis "brak TSA6057"
'*******************************************************************************
Tsa:
I2cstart
I2cwbyte 196
I2cwbyte 0
I2cwbyte Db0
I2cwbyte Db1
I2cwbyte Db2
I2cwbyte 0
I2cstop
If Err = 1 Then : Cls : Locate 1 , 2 : Lcd "Brak TSA6057" : Wait 1 : End If
Return
'*******************************************************************************
' Konwersja danych
' Podstawia dane w celu zapisania ich w eeprom
'*******************************************************************************
Konwersja:
'Db0.0 = Prad
Db0.1 = Frequency.0
Db0.2 = Frequency.1
Db0.3 = Frequency.2
Db0.4 = Frequency.3
Db0.5 = Frequency.4
Db0.6 = Frequency.5
Db0.7 = Frequency.6
'********************
Db1.0 = Frequency.7
Db1.1 = Frequency.8
Db1.2 = Frequency.9
Db1.3 = Frequency.10
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 10/11 -
http://www.easy-soft.tsnet.pl/
Db1.4 = Frequency.11
Db1.5 = Frequency.12
Db1.6 = Frequency.13
Db1.7 = Frequency.14
'********************
Db2.0 = Frequency.15
Db2.1 = 0
'Db2.2 = BS
Db2.3 = 0
Db2.4 = 0
Db2.5 = 1
'Db2.6 = krok
'Db2.7 = krok
'********************
_eep(1) = Db0
_eep(2) = Db1
_eep(3) = Db2
For A = 1 To 3
Writeeeprom _eep(a) , A
Waitms 50
Next A
Gosub Tsa
Return
'*******************************************************************************
' Konwersja1
' Podstawia dane po doczytaniu ich z eeprom
'*******************************************************************************
Konwersja1:
Db0 = _eep(1)
Db1 = _eep(2)
Db2 = _eep(3)
Frequency.0 = _eep(1).1
Frequency.1 = _eep(1).2
Frequency.2 = _eep(1).3
Frequency.3 = _eep(1).4
Frequency.4 = _eep(1).5
Frequency.5 = _eep(1).6
Frequency.6 = _eep(1).7
Frequency.7 = _eep(2).0
Frequency.8 = _eep(2).1
Frequency.9 = _eep(2).2
Frequency.10 = _eep(2).3
Frequency.11 = _eep(2).4
Frequency.12 = _eep(2).5
Frequency.13 = _eep(2).6
Frequency.14 = _eep(2).7
Frequency.15 = _eep(3).0
Return
'*******************************************************************************
' The End
'*******************************************************************************
Michał Wojtków “Sterownik układu syntezy TSA6057”
- STRONA 11/11 -