Kísérletek az R1340 antenna illesztővel 1.

Sokak által ismert és kedvelt rádió a Videoton által gyártott R-1340 típusú rádió. Már több cikkben is szerepelt a honlapunkon korábban. Nekem is van egy ilyen rádióm és nagy szeretettel használom. A készlethez tartozik egy különösen jó és gyors antenna illesztővel is. Mindig is érdekelt vajon, hogyan kommunikál a rádió az antenna illesztővel és lehetne-e használni amatőr rádióval. A cikkben ennek járok utána.

A kezelési utasításból megtudhatjuk, hogy az antenna illesztő 4 méteres bot és dipólantennák illesztésére szolgál. A névleges impedancia 50-ohm. Teljesen automatikusan működik. A maximális hangolási idő 5 másodperc. A rendszer képes „csendes hangolás” üzemre is, ami azt jelenti, hogy sikeres hangolás esetén a rádió eltárolja a hangoló beállításait és az erre a csatornára váltáskor ezt visszaolvassa. Tehát kisugárzás nélkül hangol. A rádióról kiválasztható az antenna típus és kezdeményezhető hangolás az „indítás” gomb megnyomásával. A rádió az adott csatornához tartozó antenna választást megjegyzi. Az illesztő egy 10 pólusú csatlakozón keresztül csatlakozik, aminek a kiosztása az alábbi ábrán látható.

A rádión lévő illesztő vezérlő csatlakozó kiosztása

1-2 tüske a +24V tápfeszültség; 6 – LN (loop negatíve); 7 PRES – jelenlét; 8 – LP (loop positive); 9-10 GND. A kezelési utasításban ugyan nem az illesztő kapcsán, de említésre kerül a CCITT V24 szabvány, ami az RS-232-nek felel meg és ennek létezett egy olyan változata is, ami 20 mA-es áramhurkot használt. Az áramhuroknak előnye a nagyobb zavarvédettség és a nagyobb áthidalható távolság. Feltételeztem, hogy az illesztő is áramhurkot fog használni. De nézzük is meg a kapcsolási rajzon, hogy hova jut a jel a csatlakozóról a rádióban.

A HA-3 panel kapcsolási rajzának részlete

A HA-3 as vezérlőpanel kapcsolási rajzán látható, hogy az LP-LN pontok az IC404-405 ön keresztül csatlakoznak az IC109 RxD és TxD lábaihoz. Tehát az áramhurok illesztését mind vétel, mind adás oldalán egy-egy optocsatoló valósítja meg. Az IC109 pedig egy Intel 8251 programozható univerzális kommunikációs interfész. Az adatlapból kiderül, hogy a működés módját a RESET utána a MODE INSTRUCTION regiszterbe való írással lehet meghatározni. A sebességet a TxC és RxC lábakra jutó órajel határozza meg. A rajzból az is kiderül, hogy a CPU I/OW utasítást használ és NSIO2 porton keresztül éri el a chipet.

A HA-2 panel kapcsolási rajzának részlete

A rajz szerint a HA-2 es panelon található a BAUD-rate generátor áramkör. Az ütemeket az alapórajel többszörös leosztásával állítja elő a készülék. Az ábrán látszik, hogy a BDG2 es csatlakozás a „600”-as megcsapolásról kapja a jelet. Tehát az antenna illesztő kommunikációja 600 BAUD sebességgel történik.

A hiányzó kommunikációs paramétereket úgymint adat bitek száma, stop bitek száma paritás stb a rajzról és leírásból nem lehet megállapítania. Mivel erről nem tesz említést a leírás, valahogy meg kellene tudni, hogy inicializáláskor, vajon mit ír be a program az IC109 8251-es USART chip MODE INSTRUCTION regiszterébe. Erre kézenfekvő lenne egy logikai analizátort használni és egyszerűen megnézni, hogy mi történik a D0 – 7, R/W és CS lábakon bekapcsoláskor, vagy RESET-nél. Sajnos mivel nincs kiemelő kártyám a rádióhoz, ezért erre nem volt lehetőségem, ezért úgy döntöttem, hogy megpróbálom a rádió kódját analizálni és abból kideríteni. Ehhez egy kicsit mélyebben el kellett merülnöm az rádió működésében.

A HA-2 panel kapcsolási rajzának részlete

A rádió vezérlésének a lelke egy Intel 8080A processzor (IC 106), ami a HA-2 es panelon található. A programot három darab 2K méretű UV EPROM tárolja, a RAM pedig két IC-re osztva összesen 256 bájt méretű SRAM. A processzorhoz tartozik egy órajel generátor 8224 (IC 115) és egy szupport chip 8228 (IC114). A rajzról kiderül, hogy a címbusz szélessége A0 – A10 összesen 11 bit és az A11 – 15 vonalak csak az egyes chipek kiválasztására szolgálnak. A memória írás olvasás esetén a dekódolást az IC-109 végzi, ami egy SN54154 típusú 4 a 16 ra dekódoló áramkör. Az IO írás olvasás esetén ugyan ezt a feladatot a HA-3-as panelon található IC410 végzi el, ami szintén egy SN54154.

A HA-3 panel kapcsolási rajzának részlete

Nem megyek további részletekbe, de az adatlapokból és a kapcsolási rajzból sikerült megállapítanom, hogy a SIO2 chip címe 70h hexadecimális szám.

Tulajdonképen úgy kell elképzelni, hogy a processzor egy IO írás utasítást hajt végre a 70h hexadecimális címre, ami pont az antenna illesztővel való kommunikációért felelős IC-109-re mutat és a D0 – D7 adatbuszon pedig az az adat szerepel, ami tulajdonképpen a jelen esetben a „MODE INSTRUCTION” regiszterbe kerül beírásra. A feltételezésem szerint a programban kell találni valahol egy utasítást vagy rutint, ami erre a címre mutat és az ide beírt változó fogja tartalmazni a hiányzó információt, ami kell a jelek értelmezéséhez.

Az interneten még korábban megtaláltam a három EPROM tartalmát, így nem kellett szétszednem a rádiót, hogy kiolvassam őket. Szerencsére a retró computer körökben népszerű az Intel 8080A / 8085 processzor család, ezért könnyen találtam programot, amivel be tudtam olvasni a forráskódot. Elsőre kicsit reménytelennek tűnt a feladat, mert még soha nem foglalkoztam az assembly programozási nyelvvel, de mivel elég sok információ rendelkezésre állt, gondoltam, hogy megpróbálkozom vele.

Az EPROM-ból kiolvasott gépikód

A nyers gépi kód, ami az EPROM-okban található és az ábrán is látható, csak nagyon nehezen és körülményesen értelmezhető. A processzor ezeket a hexadecimális kódokat olvassa be és ezekből dekódolja az egyes utasításokat. Egy utasítás lehet egy, kettő vagy három szavas. Tehát ha megnézzük a kódot, akkor a 0000h címen látható első szó, jelen esetben az F3h, egy utasítás kell legyen, ami valóban a Disable Interrupt utasításnak felel meg. Ahogy írtam, nem lehetetlen, de rendkívül körülményes ilyen formában értelmezni a kódot. Ennél egyszerűbb, egy disassembler program segítségével úgymond lefordítani és értelmezhetőbb formátumba alakítani a kódot.

A program által lefordított kód részlete a 0000h címtől

Az ábrán látható, hogy a disassembler sorokba rendezte az utasításokat és rövid szavakat rendelt a hexadecimális számokhoz. Az utasítások (mnemonic vagy más néven OP Code) kékkel kiemelve jelennek meg az első sorban és utána az operandus, ami lehet cím, konstans vagy regiszter név. Az előző ábrán azt láthatjuk, hogy RESET után, amikor elindul a processzor, akkor az első utasítás, amit végrehajt a 0000h címen, ami a DI. Ez a Disable Interrupt utasítás, tehát a megszakítás kezelő kikapcsolása/tiltása. A következő utasítás az LXI SP,STACK, ami azt jelenti, hogy az SP regiszterbe betölti a STACK nevű konstanst. Ez már nem a nyers formátum, mert a jobb olvashatóság érdekében én már kommenteket fűztem az egyes sorokhoz és bizonyos változókat el is neveztem, tehát a program már tudja, hogy a STACK nevű változó az a 2100h hexadecimális számnak felel meg. Tehát ez az utasítás megadja a processzornak, hogy a veremtár kezdete a 2100h címre essen. Tehát a veremszámláló új értéke 2100h-lesz. A következő utasítás pedig egy JMP azaz Jump vagyis ugró utasítás és mégpedig INIT nevű változóban tárolt címre. Tehát ebből azt olvashatjuk ki, hogy a processzor elinduláskor sorrendben végrehajtja az első két utasítást, utána pedig ugrik egyet a programban. Ugráskor az történik, hogy a JUMP utasítás után lévő két bájt hosszú cím beírásra kerül az utasítás számlálóba és a program futtatása erről a címről folytatódik. Nézzük is meg, hogy ez hova mutat.

Az inicializáló rutin részlete

A sor elején ott az INIT cím, amit az olvashatóság kedvéért már én írtam bele a kódba. Tulajdonképpen ez az egész visszafejtés arról szól, hogy az ember megpróbálja kitalálni, hogy mi is történik, mert a gépikód nem tartalmazza a program írása során használt elnevezéseket és megjegyzéseket, ami megkönnyítenék a megértést. Ezért fáradságos munkával és esetleg szimulátor segítségével megpróbáltam kitalálni, hogy az egyes kódrészletek vajon mit is csinálnak. Ezután a kódot kiegészítettem a megjegyzéseimmel, hogy olvasható és értelmezhető legyen. Tehát ahogy a képen látható, feltételeztem, hogy ez a kódrészlet az Inicializálás, ahol a processzor beállítja az egyes perifériák működését. Ez így már a kódból könnyen kiolvasható és átlátható. Aki programozott már assemblerben az tudja, hogy milyen fontosak ezek a kommentek, mert enélkül szinte értelmezhetetlen, hogy mi történik. Az egy-egy utasítás jelentése, amit a processzor leírásából ki lehet olvasni, önmagában nem árul el sokat a működésről.

Mivel tudtam, hogy melyik címre ír a program, amikor a soros interface chip-et hívja meg a processzor, ezért viszonylag könnyű dolgom volt. Az IO írás utasítás az OUT és a cím a 70h, tehát ezt kellett megkeresni a programban és ahogy az ábrán látható pirossal aláhúzva ez elég hamar meg is történik. Na igen ám, de vajon mit is ír be a program erre a címre? A kulcs ismét a processzor leírásában van, amiből kiderül, hogy az OUT utasítás az Akkumulátor nevű regiszter tartalmát írja be a megadott címbe. Az akkumulátor tartalmát is könnyen megtudjuk, mert pont az egyel előbbi utasítás írja be: MVI A,8Eh. Tehát az akkumulátor tartalma 8Eh hexadecimális szám, ami 10001110b bináris számnak felel meg. A 8251-es interface chip adatlapját megvizsgálva ez a következőnek felel meg: STOP bit 1.5; paritás: NONE; karakter hossz: 8 bits; baud rate faktor 16x. Így nem is kell tovább keresgélni a kódban, meg van a hiányzó információ a kommunikáció értelmezéséhez.

A következő feladat egy kibontó kábel és „adatlopó” áramkör készítése volt. Mint, amikor az alagútban a kémek hallgatódznak. Hi!

A betoldott kibontó kábel az illesztőhöz

Áramhurok lévén a „hallgatódzást” egy optocsatoló segítségével oldottam meg. Az ötletet a rádió kapcsolási rajzából vettem, ahol szintén ilyen módon oldotta meg a konstruktőr a szintillesztést.

A szintillesztés egy optocsatolóval

A következő ábrán pedig már egy „elfogott” utasítás látható, amit a rádió küldött az „Indítás” gomb megnyomásakor.

Parancs a hangolás kezdeményezésére

És kis idő elteltével az antennaillesztő válasza.

Az illesztő válasza sikeres hangolás után

Jól jött, hogy az oszcilloszkóp rendelkezik soros dekódoló lehetőséggel, de a játék kedvéért előkerült a jó öreg logikai analizátor is, ami szintén sikeresen dekódolta a jeleket, a megadott paraméterekkel. Igaz az oszcilloszkópnak meg volt az előnye, hogy szépen elválasztva jelent meg az üzenet és a válasz, míg a régi logikai analizátor egymás után rakta a szavakat. Így nem derül ki, hogy pontosan mit is küldött és ki.

A logikai analizátor is sikeresen dekódolta a jeleket

Beletelt egy kis időbe, mire végig zongoráztam az összes lehetőséget, amit el tudtam képzelni a rádió használata közben. Természetesen dokumentáció és az illesztő programjának alapos tanulmányozása nélkül nem mondhatom, hogy mindent sikerült megfejtenem. Lehet, hogy vannak még extra utasítások, hibakódok stb, amik hasznosak lehetnek, de ismeretlenek. Viszont ettől függetlenül sikerült nagyjából megérteni, hogy mi is történik hangoláskor, csatorna előhíváskor és hangolási hiba esetén. Ez már jó kiinduló alap lehet a hangoló vezérléséhez és használatához. És akkor jöjjenek a mérési eredmények:

A rádió az „indítás”, azaz a hangolás gomb megnyomásakor egy bájtos üzenetet küld. Az első 4 bit vagy 0h „bot” vagy 1h „dipól” antenna kiválasztása esetén. A második 4 bit 1h és Dh között változott. Itt feltételezem, hogy az 1.5-től 30 MHz-ig tartó frekvenciatartomány sávokra van felosztva és a rádió valamilyen előválasztás céljából ezt tudatja a hangolóval. A pontos sávfelosztásban nem vagyok biztos, mert a frekvenciát csak MHz-ként változtattam. Ez alapján az alábbi értékek adódtak:

  • 1.5 – 2 MHz               1h
  • 2 – 4 MHz                  2h
  • 4 – 5 MHz                  3h
  • 5 – 7 MHz                  4h
  • 7 – 10 MHz                5h
  • 10 – 13 MHz              6h
  • 13 – 15 MHz              7h
  • 15 – 17 MHz              9h
  • 17 – 19 MHz              Ah
  • 19 – 25 MHz              Bh
  • 25 – 27 MHz              Ch
  • 27 – 30 MHz              Dh

Tehát például 1.5 MHz-en, dipólt kiválasztva, hangolást kezdeményezésekor a rádió az 11h utasítást fogja kiküldeni. A vizsgálódásaim során más kombinációt nem találtam. Például a csatorna szám választása nem volt hatással erre az egy bájtos üzenetre.

A másik eset, ha a rádió már egy sikeresen lehangolt csatornára vált. Ebben az esetben, ahogy a leírásból kiderül, a rádió rendszer „csendes” hangolás üzemben, az előre memorizált értékek alapján hangol le, kisugárzás nélkül. Tehát, amikor egy olyan csatornát választottam ki, aminél már egyszer lehangolt sikeresen a rádió, akkor az előbb említett egy bájtos üzenet helyett egy hat bájtos üzenetet küldött a rádió a hangolónak. Például: 3F606E3D783Ah Az első bájt (3F) feltételezésem szerint egy utasítás lesz, az utána következő öt bájt pedig a memóriában tárolt reléállásoknak a kódja lehet. Az első bájt, minden csendes hangolás kezdeményezés esetén 3F volt. Semmilyen körülmények között nem találkoztam más értékkel. A további öt bájt pedig mindig korábbi sikeres hangolás illesztő által küldött értéknek felelt meg. Erről továbbiakban részletesebben is beszélek.

Az illesztő sikeres hangolás esetén egy hat bájt hosszú üzenetet küldött vissza a rádiónak. Például: 606E3D783AFFh. Az első öt bájt mindig látszólag random változott frekvenciától és antennától függően. Az utolsó bájt, mindig FFh-volt. A műszaki leírásból és a mérésekből arra következtetek, hogy ez az öt bájt tartalmazza a relék állását, az utolsó FFh pedig csak amolyan töltelék, hogy meglegyen a hat bájt hosszú válasz. Mint fentebb már említettem, hogy a rádió, ugyan ezt az öt bájtot fogja visszaküldeni a hangolónak csendes hangolás esetén.
Ha csenden hangolás történt, tehát a rádió az előző példában említett üzenetet küldte (3F606E3D783Ah) akkor a hangoló 80FFh választ ad. Kiválasztott frekvencia és antennatípustól függetlenül, mindig ez volt a válasz.

Végezetül, ha az antenna illesztő sikertelen volt a hangolásban, akkor 87FFh-t küldött válaszul és a rádión kigyulladt a „HIBA” lámpa.

Biztos vagyok benne, hogy mind a rádióhoz, mind az antenna illesztőhöz létezett valamilyen dokumentum, ami a szoftver működését és a parancsokat leírta. A rádióhoz biztosan volt ilyen, mivel a leírása szerint a rádió teljes mértékben távvezérelhető számítógépről. Sajnos én ezzel eddig nem találkoztam. Ha esetleg valaki rendelkezik ilyen leírással, vagy ismeri a távvezérlő utasításokat, akkor kérem vegye fel velünk a kapcsolatot, nagy segítség lenne megérteni a rendszer működését.

Üdv:
HA5TBN Dani

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .