Úvod
Před časem se mi dostala do ruky radiokarta od firmy AIMS Labs. Karta byla již starší, proto jsem si software stahnul z Internetu. Originální software od AIMS Labs mi však nevyhovoval, tak jsem začal pátrat po dalších programech, našel jsem jich několik, mnohé z nich byly univerzální a umožňovaly vybrat typ radiokarty. Začal jsem se o to zajímat a napsal si vlastní program v Pascalu. Fungoval, ale já jsem chtěl jít dál. Napadlo mě, že by nebylo špatné udělat si z radiokarty samostatné rádio.
Schéma
Toto je jen část schématu.
Programování
Vlastní programování jsem odvodil z následující tabulky, která prošla konverzí z www stránky a mírnou úpravou.
Function |
Port 30C or 20C |
||||
|
HEX |
BIN |
|||
|
Radio=ON |
Radio=OFF |
Radio=ON |
Radio=OFF |
|
ON |
send(C8) |
|
11001000 |
|
|
OFF |
send(00) |
|
00000000 |
|
|
Volume up |
send(88) |
NA |
10001000 |
NA |
|
sleep(100ms) |
|
sleep(100ms) |
|
||
send(C8) |
|
11001000 |
|
||
Volume down |
send(48) |
NA |
01001000 |
NA |
|
sleep(100ms) |
|
sleep(100ms) |
|
||
send(C8) |
|
11001000 |
|
||
Tune frequency |
bits:=Round((Freq*40)+10486188); |
bits:=Round((Freq*40)+10486188); |
|
|
|
for i:=1 to 24 do begin |
for i:=1 to 24 do begin |
|
|
||
if (bits and 1)=1 then begin |
if (bits and 1)=1 then begin |
|
|
||
send($0D); |
send($05); |
00001101 |
000000101 |
||
send($0D); |
send($05); |
00001101 |
000000101 |
||
send($0F); |
send($07); |
00001111 |
000000111 |
||
send($0F); |
send($07); |
00001111 |
000000111 |
||
end else begin |
end else begin |
|
|
||
send($09); |
send($01); |
00001001 |
00000001 |
||
send($09); |
send($01); |
00001001 |
00000001 |
||
send($0B); |
send($03); |
00001011 |
00000011 |
||
send($0B); |
send($03); |
00001011 |
00000011 |
||
end; |
end; |
|
|
||
bits:=(bits shr 1); |
bits:=(bits shr 1); |
|
|
||
end; |
end; |
|
|
||
send($E8); |
send($E0); |
11101000 |
11100000 |
||
Tuned |
send(F8) |
send(F0) |
11111000 |
11110000 |
|
sleep(140ms) |
sleep(140ms) |
sleep(140ms) |
|||
send(E8) |
send(E0) |
11101000 |
11100000 |
||
read<>FF |
read<>FF |
read<>11111111 |
LM7000
Funkce LM7000 je zakomponovaná v předchozím návodu, ale v něm je nastaven krok 25 kHz a všechny další stavové bity. Následující návod je mnohem přesnější. Jedná se o obvod kmitočtové syntézy pro AM i FM, s číslicovým sériovým vstupem. Vysokorychlostní programovatelná dělička je schopná přímého dělení FM rozsahu VCO frekvence. Referenční frekvence může mít 7 stavů: 100,50,25,10,9,5,1 kHz. 3 piny jsou určeny pro indikaci rozsahu (AM/FM, MW, SW, LW). Obvod má hodinový výstup pro řadič 400kHz. Výrobce předpokládá, že obvod bude spolupracovat např. s mikroprocesorem, takže je sám zdrojem hodinového kmitočtu pro řídící obvod. Dále může poskytovat časovou základnu pro hodiny 8Hz, čímž se zřejmě myslí hodiny reálného času. Datový sériový vstup je na pinech: CE, CL, DATA. Obvod společně s TEA5712T tvoří vf část karty a spolupracují přibližně tak, že LM7000 nastaví frekvenci, podle které TEA5712T osciluje. Není to tak jednoduché, já nejsem odborník na vf techniku, ale můžu s jistotou tvrdit, že LM7000 navíc nastavuje napětí pro VCO - napěťově řízený oscilátor, na radiokartě řešený pomocí varikapů. Oba integrované obvody jsou navrženy i pro příjem AM signálu, ale příslušné piny nejsou u těchto obvodů zapojeny. Bez zásahu do zapojení radiokarty nelze AM rozsah zprovoznit. Následuje popis pinů integrovaného obvodu:
SYC |
Hodinový výstup pro řadič (400 kHz). |
XIN, XOUT |
Krystalový oscilátor (7,2 MHz), zpětnovazební rezistor je na čipu. |
FMIN, AMIN |
(vstup) FMIN – vazba s TEA5712T |
CE, CL, DATA |
Vstup dat. |
BO1, BO2, BO3 |
Výstupní data rozsahu, BO1 může být také použit pro výstup časové základny (8 Hz). |
STRQ |
(stop request) |
STOUT |
(stop output) |
VDD1, VDD2, VSS |
Napájecí napětí (VDD2 je pro zálohování). *Pozn. je pro zálohování). *Pozn. je pro zálohování). *Pozn. |
AMIF, FMIF |
(výstup) FMIF – vazba s TEA5712T |
PD1, PD2 |
Charge pump output – zde je pravděpodobně napětí pro napěťově řízený oscilátor. |
*Pozn.: Na radiokartě jsou VDD1, VDD2 spojeny a přes rezistor 22 W přivedeny na +5V. Zálohování se předpokládá u samostatných rozhlasových přijímačů, kdy přístroj bude vypnutý, ale např. baterie bude zajišťovat, že po zapnutí se rozehraje poslední naladěná stanice před vypnutím.
Pro tuto práci je podstatná jen funkce datových vstupů (CE, CL, DATA). V mém návrhu ovládacího obvodu neuvažuji možnost skenování stanic. To není možné bez úpravy ovládacího obvodu, protože ten není schopný data z radio-karty číst (musel by řídit IOR vstup karty).
Průběhy logických úrovní (t1 > 1.5ms, t2 < 1.5ms , (krystal 7,2MHz):
Vstupní data:
Přenos dat začíná od bitu D0.
D0-D13 je dělící poměr (D0 nejnižší bit).
Nejlepší je vysvětlit to na příkladu (laděná frekvence je 90,0 MHz FM):
FM 100 kHz krok (fREF = 100kHz)
FM VCO = 100,7 MHz (FM RF = 90,0 MHz, IF = +10,7MHz)
Dělící poměr = 100,7 MHz (FM VCO)/100 kHz (fREF) = 1007 ®3EFh
Binárně (D13) 00 0011 1110 1111 (D0).
Na první pohled se zdá, že horní čtyři bity se nevyužijí, ale krok (fREF) může být různý, navíc se liší i pro AM/FM.
R0 |
R1 |
R2 |
fREF |
BO1 |
BO2 |
BO3 |
IF Count |
0 |
0 |
0 |
100 kHz |
1 |
1 |
0 |
10.7 MHz ± 10 kHz |
0 |
0 |
1 |
50 |
1 |
1 |
0 |
|
0 |
1 |
0 |
25 |
1 |
1 |
0 |
|
0 |
1 |
1 |
5 |
0 |
0 |
1 |
450 kHz ± 3 kHz |
1 |
0 |
0 |
10 |
1 |
0 |
1 |
|
1 |
0 |
1 |
9 |
1 |
0 |
1 |
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
450 kHz ± 0.6 kHz |
1 |
1 |
1 |
5 |
0 |
0 |
1 |
450 kHz ± 3 kHz |
Bitem označeným "S" se zvolí mezi AM a FM. Pro FM je "1".
Ostatní bity (T0,T1,B0, B1, B2, TB) budou v nule.Sanyo LC7534
Poměrně jednoduše funguje Sanyo LC7534 - regulátor hlasitosti. Dvěma bity ( z ISA sběrnice nejvyšší dva SD6 a SD7) se nastavuje, zda má hlasitost klesat, stoupat nebo být konstntní. Dalším bitem se tento obvod úplně umlčuje, navíc na stejný bit je "pověšen" vstupní umlčovací pin obvodu Philips TEA5712T.
Ovládání radiokarty
Ovládání radiokarty mimo počítač jsem realizoval mikroprocesorem Atmel89C51, pro větší komfort je můj obvod vybaven klávesnicí a LCD displejem. Popisovat funkci mého programu by bylo dost složité, následuje proto jen schéma mého obvodu a vnitřní zapojení klávesnice, program přikládám jako soubor v .ASM i .HEX podobě.
ISA sběrnice
Důležitá je funkce ISA sběrnice, oproti standartnímu postupu programování jsem se trochu odlišil, ale funguje to. V praxi záleží na hraně impulsu, nejsem si jistý zda na vzestupné nebo sestupné, ale v průběhu signálů jsou obě, takže to "šlape jak má".
Zapojení klávesnice a LCD
Je to nějaká historická TESLA určená do automatů, obyčejná maticově zapojená, s jednořadým konektorem s roztečí 2,5mm. Pokud jde o ovládání LCD displeje, vycházel jsem z datasheetu, který se shodoval s popisem ovládání displejů standartu HD44780.
Ovládací obvod
Nezakreslené piny nejsou nikam zapojené. RC člen u RESET vstupu mikroprocesoru se stará o zpoždění spuštění programu. Nevím, zda je to radiokartou nebo mikroprocesorem, ale po připojení napájecího napětí obvod nefungoval, dokud jsem krátce nespojil RESET s +5V. Tlačítkem TL je možné znovu spustit program od začátku, což by se mělo používat během odlaďování programu, v konečné podobě by k bezvýchodným stavům nemělo docházet. Zdroj hodinových impulsů jsem realizoval s časovačem NE555 v základním zapojení pro astabilní režim. Maximální frekvence je asi 1MHz. Lze použít i krystal zapojený na piny XTAL1 a XTAL2 obvodu 89C51, využije se tak jeho vlastního oscilátoru. Zapojení s NE555 umožňuje frekvenci hodinového taktu měnit. Řízením IOW vstupu radiokarty a E vstupu LCD displeje mohou obě zařízení sdílet datovou sběrnici. Port P0 má otevřený kolektorový výstup, takže je nutné použít tzv. pull-up rezistory (asi 10kW), kterými se spojí pin mikro-procesoru s napájecím napětím. Vzhledem ke způsobu snímání stavu klávesnice musí být každý pin portu P3 spojen přes kondenzátor 10nF se zemí. Jinak dochází k rušení radiokarty (praskání v reproduktorech). Pro zjednodušení nejsou ve schematu pull-up rezistory ani odrušovací kondenzátory nakresleny.
Snímání stavu klávesnice jsem vyřešil tak, že P1 se musí nastavit na hodnotu FFh, potom je možné využít ho jako vstupní, přičemž aktivní vstupní bit musí být v úrovni "L". Proto do P3 vyšlu FFh a potom vždy vybírám jen jeden řádek, do kterého vyšlu "L". V části programu pro vstup z klávesnice jsou použity dva hlavní způsoby testování stisknutých kláves. Pro regulaci hlasitosti je třeba, aby program testoval, zda je + nebo - tlačítko stisknuto a drženo, aby hlasitost mohla plynule stoupat nebo klesat. Pro pevně stanovené předvolby lze použít stejný způsob, protože je lhostejné, zda se stejná předvolba bude do radiokarty odesílat x-krát, když neuvažuji opotřebení integrovaného obvodu v důsledku opakovaně prováděných akcí. Ale polovodičový obvod není relé. Pokud budu chtít snímat z klávesnice přímo frekvenci, kdy stisk posloupnosti kláves např. 1-0-6-0 bude znamenat 106,0 MHz, tak musím rozlišit, zda je klávesa stisknuta, držena a uvolněna. Pokud by byl použit první způsob, došlo by k načtení 1-1-1-1 (stalo se během vývoje). Proto je nejdříve stištěna jiná klávesa (zvolil jsem klávesu L - ladit) pro výběr, že teď se bude přímo zadávat frekvence. Podle pořadí stisknuté klávesy bude přiřazena hodnota proměnné k1-k4. Pro FM rozsah mohou nastat v zásadě dva stavy: frekvence bude menší než 99,9 MHz včetně nebo vyšší než 100,0 MHz (včetně). V prvním případě se načtou proměnné k2-k4, v druhém k1-k4. Před smyčkou načtení z klávesnice je k1 = 0. Když není 1. stisknutá klávesa jednička, tak program rovnou přejde k načtení k2. Po načtení všech kláves čeká program na zmáčknutí enteru (ż) a poté z proměnných vypočítá frekvence, resp. data pro LM7000 (viz popis obvodu LM7000).
Závěr
Tato realizace je velice speciálně zaměřena, ovšem pro stavbu obdobného typu zařízení Vám může posloužit jako jeda z možných řešení.
Obsah:
- Úvod
- Schéma
- Programování
- LM7000
- Sanyo LC7534
- Ovládání radiokarty
- ISA sběrnice
- Zapojení klávesnice a LCD
- Ovládací obvod
- Závěr