TEA6100 Bascom-AVR – sterowanie syntezerem PLL, kod bit-bang, interfejs Data/Clock

Pytanie

Jak sterować układem TEA6100 w języku bascom ?

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

Tak, układ TEA6100 można sterować w BASCOM-ie przez magistralę I²C. Wbrew jednej z przykładowych odpowiedzi nie jest to „jakiś podobny do I²C” protokół wymagający własnego bit-bangu od zera; nota katalogowa TEA6100 wprost pokazuje ramki START / ADDRESS / ACK / DATA / STOP dla magistrali I²C. (pe2bz.philpem.me.uk)

Najważniejsze fakty są takie:

  • adres zapisu TEA6100 to 11000010b = &HC2, a adres odczytu to 11000011b = &HC3; odpowiada to adresowi 7-bitowemu 0x61. (pe2bz.philpem.me.uk)
  • Do układu wysyła się 1 bajt sterujący A..H. (pe2bz.philpem.me.uk)
  • Z układu odczytuje się 2 bajty statusu: pierwszy zawiera dwie 3-bitowe informacje z ADC, drugi zawiera 8-bitowy licznik częstotliwości. (pe2bz.philpem.me.uk)
  • Przykładowa odpowiedź offline o regulacji głośności/basu jest po prostu nie o tym układzie; TEA6100 jest układem FM/IF i interfejsem strojenia, a nie procesorem audio typu volume/bass/treble. (pe2bz.philpem.me.uk)

Bezpośrednia odpowiedź na pytanie Szczegółowa analiza problemu

TEA6100 to stary układ Philipsa do toru FM/IF z interfejsem do mikrokomputera. Na pinach 9 = SCL i 10 = SDA ma magistralę I²C, a na pinie 6 = Fref wymaga częstotliwości odniesienia; tabela sterowania pokazuje, że bit A wybiera 32 kHz albo 40 kHz jako referencję. Bez poprawnego sygnału odniesienia odczyt licznika nie będzie miał sensu. (pe2bz.philpem.me.uk)

Dla BASCOM-a praktycznie najprościej sterować go przez niskopoziomowe instrukcje:

  • I2cstart
  • I2cwbyte
  • I2crbyte
  • I2cstop
    BASCOM domyślnie używa swoich procedur I²C, a dla AVR z TWI można też użyć sprzętowego wsparcia. Dokumentacja MCS opisuje też, że BASCOM posługuje się pojęciem „byte transmission address”, więc przy surowym I2cwbyte najbezpieczniej podawać już pełne bajty &HC2 i &HC3. (avrhelp.mcselec.com)

Format bajtu sterującego

Po adresie zapisu &HC2 wysyłasz jeden bajt danych A B C D E F G H. Z tabeli w nocie katalogowej wynika następujące znaczenie bitów: (pe2bz.philpem.me.uk)

Bit Znaczenie 0 1
A reference frequency 32 kHz 40 kHz
B IF mode AM FM
C IF input pin 19 pin 18
D counter input 460 kHz 10,7 MHz
E counter mode AM FM
F resolution divide by 8 divide by 1
G accuracy LOW HIGH
H test mode OFF ON

Dla typowego przypadku FM / 10,7 MHz / wejście pin 18 / 40 kHz / test OFF sensowny bajt startowy to np. 11111100b = &HFC albo z innym bitem dokładności, zależnie od wybranego trybu pracy licznika. Sam datasheet pokazuje przykład dla FM i referencji 40 kHz. (pe2bz.philpem.me.uk)

Minimalny przykład w BASCOM

Poniżej jest prosty, praktyczny szkielet programu. To jest właściwy kierunek dla TEA6100, a nie kod od procesorów audio typu TEA6300/6320. Opiera się bezpośrednio na formacie z noty katalogowej. (pe2bz.philpem.me.uk)

$regfile = "m8def.dat"
$crystal = 8000000
Config Sda = Portc.4
Config Scl = Portc.5
Config I2cdelay = 10
I2cinit
Const Tea6100_w = &HC2
Const Tea6100_r = &HC3
Dim Ctrl As Byte
Dim Status1 As Byte
Dim Counter As Byte
Dim Word1 As Byte
Dim Word2 As Byte
Declare Sub Tea6100_write(byval C As Byte)
Declare Sub Tea6100_read(byref S1 As Byte , Byref S2 As Byte)
Declare Function Tea6100_makectrl(byval Ref40 As Byte , Byval Fm_if As Byte , Byval Input18 As Byte , _
                                  Byval Cnt10m7 As Byte , Byval Cntfm As Byte , Byval Div1 As Byte , _
                                  Byval Highacc As Byte , Byval Teston As Byte) As Byte
' Przykład:
' A=1  -> 40 kHz
' B=1  -> FM
' C=1  -> wejście pin 18
' D=1  -> licznik 10,7 MHz
' E=1  -> counter mode FM
' F=1  -> divide by 1
' G=0  -> LOW accuracy
' H=0  -> test OFF
Ctrl = Tea6100_makectrl(1 , 1 , 1 , 1 , 1 , 1 , 0 , 0)     ' = &HFC
Call Tea6100_write(ctrl)
Do
   Call Tea6100_read(status1 , Counter)
   ' Byte 1 zawiera dwa 3-bitowe słowa:
   ' [0][word1(3 bity)][0][word2(3 bity)]
   Word1 = Status1
   Word1 = Word1 And &B01110000
   Shift Word1 , Right , 4
   Word2 = Status1 And &B00000111
   ' W FM:
   '   jedno słowo = multipath
   '   drugie słowo = level
   ' W AM:
   '   słowa oznaczają level bez modulacji / z modulacją
   Waitms 100
Loop
End

Sub Tea6100_write(byval C As Byte)
   I2cstart
   I2cwbyte Tea6100_w
   I2cwbyte C
   I2cstop
End Sub

Sub Tea6100_read(byref S1 As Byte , Byref S2 As Byte)
   I2cstart
   I2cwbyte Tea6100_r
   I2crbyte S1 , Ack
   I2crbyte S2 , Nack
   I2cstop
End Sub

Function Tea6100_makectrl(byval Ref40 As Byte , Byval Fm_if As Byte , Byval Input18 As Byte , _
                          Byval Cnt10m7 As Byte , Byval Cntfm As Byte , Byval Div1 As Byte , _
                          Byval Highacc As Byte , Byval Teston As Byte) As Byte
   Local C As Byte
   If Ref40 = 1 Then C = C Or &B10000000
   If Fm_if = 1 Then C = C Or &B01000000
   If Input18 = 1 Then C = C Or &B00100000
   If Cnt10m7 = 1 Then C = C Or &B00010000
   If Cntfm = 1 Then C = C Or &B00001000
   If Div1 = 1 Then C = C Or &B00000100
   If Highacc = 1 Then C = C Or &B00000010
   If Teston = 1 Then C = C Or &B00000001
   Tea6100_makectrl = C
End Function

Co zwraca odczyt

Nota katalogowa pokazuje, że po adresie odczytu &HC3 TEA6100 wysyła:

  1. Output data byte 1 — dwa 3-bitowe słowa ADC,
  2. Output data byte 28-bitowy frequency counter. (pe2bz.philpem.me.uk)

Dodatkowo producent podaje znaczenie dwóch 3-bitowych słów:

  • w FM: słowo 1 = multipath, słowo 2 = level,
  • w AM: słowo 1 = level without modulation, słowo 2 = level with modulation. (pe2bz.philpem.me.uk)

Jak z licznika wyznaczyć częstotliwość

Jeżeli chcesz zrobić już pełne strojenie „jak w radiu samochodowym”, sam odczyt licznika nie wystarcza — trzeba jeszcze policzyć częstotliwość według zaleceń z datasheetu. Producent podaje zależność: (pe2bz.philpem.me.uk)

\[
FI = T{IFF} + R \cdot (MHEX - THEX)
\]

gdzie:

  • MHEX — zmierzona wartość licznika,
  • THEX — wartość docelowa dla zadanej IF,
  • R — rozdzielczość w Hz/count.

Dla przykładu z noty: przy 40 kHz, FM, 10,7 MHz, divide by 1, LOW accuracy, producent dostaje THEX = 7Fh i R = 6400 Hz/count; dla MHEX = 83h wychodzi około 10,726 MHz. (pe2bz.philpem.me.uk)

Aktualne informacje i trendy

TEA6100 jest układem historycznym — sama dostępna nota katalogowa ma datę August 1987. Z punktu widzenia współczesnego projektowania nie jest to element do nowych konstrukcji konsumenckich, ale nadal ma sens przy naprawie, rekonstrukcji albo retro-projektach z dawnymi tunerami. (pe2bz.philpem.me.uk)

Po stronie BASCOM-a istotne jest to, że środowisko nadal rozróżnia dwa podejścia:

  • domyślne procedury I²C,
  • opcjonalne użycie sprzętowego TWI na AVR.
    To znaczy, że do TEA6100 nie potrzebujesz żadnej egzotycznej biblioteki protokołu; zwykłe mechanizmy I²C w BASCOM wystarczą. (avrhelp.mcselec.com)

Wspierające wyjaśnienia i detale

Najprostszy sposób myślenia o TEA6100 jest taki:

  • zapisujesz 1 bajt konfiguracji, który ustawia tryb pracy toru IF i licznika,
  • odczytujesz 2 bajty informacji zwrotnej, z których drugi jest najważniejszy do automatycznego dostrajania. (pe2bz.philpem.me.uk)

To nie jest więc układ typu „ustaw częstotliwość wprost rejestrem PLL”, tylko raczej element systemu, który daje mikrokomputerowi informację o stanie toru pośredniej częstotliwości i jakości odbioru. To ważna poprawka względem błędnych skojarzeń z TEA5767 albo z procesorami audio. (pe2bz.philpem.me.uk)

Aspekty etyczne i prawne

Tu nie ma szczególnych problemów etycznych. Z praktycznego punktu widzenia najważniejsze jest bezpieczeństwo elektryczne, ponieważ TEA6100 pracuje przy zasilaniu cyfrowym i analogowym rzędu 7,5–12 V, typowo 8,5 V, a nie przy typowym dla AVR poziomie 5 V. (pe2bz.philpem.me.uk)

Praktyczne wskazówki

  • Zacznij od samego zapisu bajtu sterującego &HFC i sprawdź, czy układ odpowiada ACK na &HC2. Format zapisu jest jednoznacznie pokazany w nocie. (pe2bz.philpem.me.uk)
  • Następnie uruchom odczyt dwóch bajtów z &HC3. Jeżeli drugi bajt się zmienia podczas strojenia toru radiowego, komunikacja działa poprawnie. (pe2bz.philpem.me.uk)
  • Koniecznie zapewnij poprawne Fref na pinie 6 — 32 kHz albo 40 kHz, zgodnie z bitem A. Bez tego licznik będzie bezużyteczny. (pe2bz.philpem.me.uk)
  • Uważaj na poziomy logiczne. Datasheet podaje typowy próg HIGH około 4,5 V, przy zasilaniu cyfrowym typowo 8,5 V. To oznacza, że interfejs z AVR 5 V może działać „na styk”, ale projektowo bezpieczniej traktować to jako przypadek wymagający ostrożności i najlepiej separacji/open-drain z odpowiednim podciąganiem. To jest praktyczny wniosek z parametrów elektrycznych układu. (pe2bz.philpem.me.uk)

Ewentualne zastrzeżenia lub uwagi dodatkowe

Największe ryzyko w tym temacie to pomylenie TEA6100 z zupełnie innymi układami z rodziny TEA. W dostarczonych przykładowych odpowiedziach właśnie to się stało: jedna odpowiedź opisała procesor audio, a inna błędnie zasugerowała niestandardowy interfejs niezgodny z I²C. Obie te ścieżki są dla TEA6100 mylące. (pe2bz.philpem.me.uk)

Drugie zastrzeżenie jest takie, że sam TEA6100 nie „załatwia całego radia”. Do pełnego systemu strojenia zwykle dochodzi jeszcze reszta toru odbiorczego, a algorytm mikrokontrolera musi interpretować licznik IF i poziom/multipath. (pe2bz.philpem.me.uk)

Sugestie dalszych badań

Jeżeli chcesz, mogę w następnym kroku przygotować jedną z trzech rzeczy:

  1. gotowy program BASCOM do testu komunikacji z TEA6100,
  2. procedurę automatycznego strojenia na podstawie licznika IF,
  3. skaner I²C w BASCOM, żeby od razu sprawdzić, czy układ odpowiada pod &HC2. (avrhelp.mcselec.com)

Mogę też rozpisać Ci dokładnie, jak przeliczyć Counter na decyzję:

  • „stroić w górę”,
  • „stroić w dół”,
  • „zatrzymaj się, bo jesteś w centrum filtru 10,7 MHz”. (pe2bz.philpem.me.uk)

Krótkie podsumowanie

TEA6100 sterujesz w BASCOM przez zwykłe I²C. Użyj:

  • zapisu pod &HC2,
  • odczytu pod &HC3,
  • jednego bajtu sterującego A..H,
  • dwóch bajtów statusu przy odczycie. (pe2bz.philpem.me.uk)

Jeżeli chcesz, mogę od razu dopisać Ci pełny, gotowy do wgrania program BASCOM dla konkretnego AVR, np. ATmega8 lub ATmega32, razem z wyświetlaniem licznika i poziomu sygnału na LCD lub UART.

Oceń odpowiedź: 1
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (2min)...