Jste zde

Programování radiokarty do PC

Chcete používat PC radiokartu i mimo svůj počítač ? Čtěte.

Ú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.

Nejdůležitější čip je Sanyo LM7000 - kmitočtová syntéza. Data ze sběrnice přecházejí do radiokarty přes latch LS273, jeho činnost je řízena hradlovým polem GAL. Do tohoto GALu vedou z ISA sběrnice adresové vodiče, IOR, IOW, AEN. Při naadresování přejdou data do LM7000 a LC7534. Sanyo LC7534 je regulátor hlasitosti. LM7000 má sériový vstup, tak je komunikace s kartou o něco komplikovanější. VF vlastnosti karty se nedají ovlivnit (ne softwarově), prakticky jen do karty posíláme číslo a podle tohoto čísla se naladí na potřebnou frekvenci. Existuje zpětná vazba, při nalezení platné frekvence vede z GALu do SD1 v ISA sběrnici stavový bit. Mě se ovšem nepodařilo jeho funkci využít ani prověřit.

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

Syntaxe sice odpovídá Pascalu, ale jde spíš o pochopení funkce radiokarty. Při bližším prozkoumání karty a po nalezení datasheetů o LM7000 a LC7534 jsem ovládání karty poněkud upravil oproti tomuto návodu.

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:

Hodnocení článku: