Jak sterować układem TEA6100 w języku bascom ?
tuning interface Philipsa – zbliżony do I²C, lecz nie w pełni zgodny).  Config I2cMaster.  ADDR/Nhigh/Nlow,Philips TEA6100/TEA6100A jest samochodowym syntezatorem PLL dla głowic FM/AM IF¹. Wersja A obsługuje również pętlę AFC. Układ nie jest klasycznym procesorem dźwięku (jak TDA73xx) ani radiem jednokostkowym (jak TEA5767), dlatego:
• komunikujemy się z nim wyłącznie w celu ustawiania częstotliwości (FM).
• nie steruje się nim PWM-em (to częsty błąd).  
 MSB           LSB
+----+---------+--------------+
|A4…A0|N16…N9  |  N8…N1       |   =  3 bajty
+----+---------+--------------+A4…A0 – bity adresowe (zależne od sposobu zamiany zakresów, AFC itp.)
N16…N1 – 17-bitowe słowo dzielnika.
Referencja: fref = 50 kHz (domyślnie z kwarcu 10,7 MHz ÷ 214).
Obliczamy:
\[ N = \frac{f{RF}+f{IF}}{f{ref}} \]
dla UKF 87,5–108 MHz i f_IF = 10,7 MHz.  
Przykład (100,70 MHz):
N = (100,7 + 10,7)/0,05 = 2232.  
'====================================================
'  TEA6100  – sterowanie Bascom-AVR
'  µC: ATmega8 @ 8 MHz
'====================================================
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64 : $swstack = 64 : $framesize = 64
'---- piny interfejsu TEA6100 -----------------------
Const Clk  = Portb.0                     ' CLOCK
Const Data = Portb.1                     ' DATA
Config Pinb.0 = Output
Config Pinb.1 = Output
Set Clk : Set Data                       'stan nieaktywny = High
'---- parametry PLL --------------------------------
Const Fref      = 50000                  ' 50 kHz
Const If_offset = 107000                 ' 10,7 MHz (w kHz)
Const AddrByte  = &B10000000             ' A4…A0 = 1 0 0 0 0 (przykład)
'---------------------------------------------------
Sub SendBit(b As Bit)
   If b = 1 Then Set Data Else Reset Data
   Reset Clk                                'zbocze opadające
   Waitus 5
   Set Clk
   Waitus 5
End Sub
'---------------------------------------------------
Sub SendByte(byval d As Byte)
   Dim i As Byte
   For i = 7 To 0 Step -1
       SendBit(d.i)
   Next
End Sub
'---------------------------------------------------
Sub SetFreq(byval Freq_kHz As Long)         'freq w kHz
   Dim N As Long
   Dim Nh As Byte , Nl As Byte
   N = (Freq_kHz + If_offset) / Fref        'oblicz dzielnik
   Nh = N / 256
   Nl = N Mod 256
   'transmisja 3 bajtów
   SendByte AddrByte
   SendByte Nh
   SendByte Nl
   Set Data : Set Clk                       'deaktywacja
   Waitms 50                                'czekamy na PLL lock
End Sub
'---------------------------------------------------
' PRZYKŁADOWE UŻYCIE:
Waitms 100
Call SetFreq(100700)                        '100,7 MHz
Do
   'tu kod aplikacji (np. klawiatura / UART)
Loop– Synteza PLL redukuje dryft analogowego generatora i zapewnia krok 50 kHz.
– TEA6100 pracuje do ~150 MHz, dlatego często stosowany w radioodbiornikach samochodowych.
– Interfejs jest jednokierunkowy (µC → TEA6100); brak potwierdzeń.  
• budowa własnego tunera FM, konwersja starych radio-head-units na MCU, projekty SDR z heterodyną 10,7 MHz.
• automatyczne przeszukiwanie pasma (skaner) – algorytm incrementeuje Freq_kHz w krokach 100 kHz i sprawdza poziom IF.  
– W praktyce TEA6100 ustępuje nowym syntezatorom z pełnym I²C (NPX TSA551x, RDA5807M czy Si470x), jednak dzięki prostocie i dostępności wciąż pojawia się w naprawach sprzętu car-audio.
– Dominujący dziś trend to monolityczne tunery (TEA5767, RDA5807) z wbudowanym IF i procesorem RDS; w projektach retro-radio TEA6100 bywa wstawiany w miejsce trudno dostępnych TSA6057.  
• Pull-upy 4k7 Ω na DATA/CLK; poziomy 5 V.
• Jeżeli urządzenie ma linię EN lub Latch Enable, należy ją trzymać w stanie wysokim i ściągnąć nisko tylko na czas transmisji (nie we wszystkich wariantach układu).
• Przeliczenie dla innych kwarców: f_ref = f_xtal / (2·P) – patrz datasheet.  
– Własne nadajniki FM wymagają pozwolenia radiowego; odbiorniki są dozwolone.
– Zachowaj kompatybilność EMC – krótkie przewody do pętli PLL, ekranowanie głowicy.  
Waitus ≥ 4 µs – krótsze czasy powodują niepewne ładowanie rejestru.  – W sieci krąży błędna informacja, że TEA6100 obsługuje I²C „0x44/0x46” lub PWM – to najpewniej pomyłka ze scalakami TEA6300/TEA6320 (procesory dźwięku).
– Starsze egzemplarze mogą wymagać napięć > 5 V (np. 8,5 V); użyj konwertera poziomów.  
• Wymiana TEA6100 + analogowa głowica na nowszy TEA5767 sterowany I²C – uproszczenie kodu.
• Implementacja algorytmu SEEK (mierzenie napięcia RSSI na pinie IF).
• Porównanie szumów fazowych różnych syntezatorów PLL w zakresie 88–108 MHz.  
Sterowanie TEA6100 w Bascom sprowadza się do przygotowania słowa dzielnika PLL i przesłania go trzema bajtami przez prosty 2-przewodowy interfejs Data/Clock. Kluczowe jest prawidłowe obliczenie dzielnika z uwzględnieniem IF 10,7 MHz oraz zachowanie timingów z datasheet. Kod „bit-bang” w Bascom (lub I2cMaster przy zgodnym hardware) umożliwia pełne programowe przestrajanie odbiornika FM.