Jak sterować układem TEA6100 w języku bascom ?
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:
11000010b = &HC2, a adres odczytu to 11000011b = &HC3; odpowiada to adresowi 7-bitowemu 0x61. (pe2bz.philpem.me.uk)A..H. (pe2bz.philpem.me.uk)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:
I2cstartI2cwbyteI2crbyteI2cstopI2cwbyte najbezpieczniej podawać już pełne bajty &HC2 i &HC3. (avrhelp.mcselec.com)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)
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
Nota katalogowa pokazuje, że po adresie odczytu &HC3 TEA6100 wysyła:
Dodatkowo producent podaje znaczenie dwóch 3-bitowych słów:
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)
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:
Najprostszy sposób myślenia o TEA6100 jest taki:
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)
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)
&HFC i sprawdź, czy układ odpowiada ACK na &HC2. Format zapisu jest jednoznacznie pokazany w nocie. (pe2bz.philpem.me.uk)&HC3. Jeżeli drugi bajt się zmienia podczas strojenia toru radiowego, komunikacja działa poprawnie. (pe2bz.philpem.me.uk)A. Bez tego licznik będzie bezużyteczny. (pe2bz.philpem.me.uk)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)
Jeżeli chcesz, mogę w następnym kroku przygotować jedną z trzech rzeczy:
&HC2. (avrhelp.mcselec.com)Mogę też rozpisać Ci dokładnie, jak przeliczyć Counter na decyzję:
TEA6100 sterujesz w BASCOM przez zwykłe I²C. Użyj:
&HC2,&HC3,A..H,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.