OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 20.04.2024, 02:37

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 
Autor Zpráva
 Předmět příspěvku: Interface SIF a infraport
PříspěvekNapsal: 13.03.2022, 17:44 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Před časem jsem se pustil do zkoumání infraportu, protože už od roku 2009 - od doby, kdy jsem si od Pavla Urbančíka koupil SIF mě to lákalo, ale nejprve jsem neměl žádné zařízení a když jsem ho sehnal, tak mi s ním SIF nikdy ani náznakem nekomunikoval. Nekomunikoval s tiskárnou, nekomunikoval s notebookem (Omnibook XE 4500, který jako na potvoru teď nemám při ruce).

Loni jsem začal dělal repliku SIFu. Navrhl jsem nový plošný spoj, objednal část součástek, ale pořád ještě nemám naprogramované CPLD - to je na jinou diskuzi.

Při navrhování jsem zjistil, že je na původním SIFu - na té první verzi - čip infraportu obráceně. Pořadí plošek na PCB je opačně a tedy správně osazený TFDU4300 je vlastně otočený o 180° https://cygnus.speccy.cz/obrazky/sif/sif_04_detail.jpg (fotka ukazuje špatné osazení!)

UB880 mi poslal fotky svého SIFu, porovnali jsme pár detailů a zdá se, že jeho pozdější verze SIFu, která je výrazně odlišná tu chybu nemá. Zkusil jsem svůj starý TFDU4300 otočit, ale nepodařilo se. Utrhl jsem při odpajování jeden vývod (nechtěl jsem na desku foukat horkým vzduchem). Pravděpodobně byl čip stejnak dávno nefunkční.

V Mouseru jsem na novou verzi SIFu objednal novější verzi téhož infraportu Vishay TFDU4301 - liší se pouze tím, že nemá samostatné napájení logiky a noha 7 je proto nezapojená. Jinak by měl být stejný. Osadil jsem ho na původní SIF a když přepnu druhou 16C650 na kanál 2, tak alespoň bliká a vysílá (vidím kamerou, a snímám fototranzistorem na osciloskop).

Zaradoval jsem se a zkusil jsem to propojit s USB infraportem Tekram IR-410U. V Linuxu se infraport detekuje jako /dev/ttyUSB0 dají se na něj poslat data, bliká v infra a ... a nic. ZX Spectrum nepříjímá, Deskjet 340 netiskne, nic. Mrknul jsem osciloskopem skrz fototranzistor a ukázalo se, že data jsou kódovaná úplně odlišně než jak bliká SIF.

Dokonce jsem zkusil infraport koupit na eBay, byl tam jeden pěkný v původní krabici s připojením na RS232, objednal jsem a za dva dny mi prodejce vrátil peníze, že už ho nemá. Ostatní bylo nepřijatelně drahé, nebo prostě infraporty zmizely z nabídek.

Tak jsem to opět na čas odložil. Dokud mi nedávno kamarád ve svém elektroodpadu nenašel a nepřinesl infraport ACT-IR210L údajně na RS232. No, nebyla to úplná pravda, protože nemá RS232 konektor, ale připojuje se na header základní desky. Základní deska tedy musí infraport podporovat. Naštěstí, aniž bych to dopředu tušil, jedno z mých PC s deskou FIC PA-2007 má takový header - 2x5 pinů, zatímco infraport má 1x5. A naštěstí pinout infraportu byl popsaný v manuálu, který jsem kdesi našel.

S deskou to bylo záludnější, v manuálu je pouze zmínka, že to IR má a nic víc. Najít +5V a GND bylo snadné, najít výstup nakonec taky, připojil jsem osciloskop a zkoušel terminálem v Dos Navigatoru - výstup byl na 7 & 8, oba piny spojené. No a vstup mohly být nakonec jen dva piny 3 nebo 4 a to jsem si tipnul. Trefil jsem 4 napodruhé.

Kód:
FIC PA-2007 IR header -> infraport ACT-IR210L

[1]  +5V      [2] +5V        červený drát infraportu (5) na oba piny 1 i 2
[3] vstup     [4] nezapojen? žlutý drát infraportu (3) na vstup pin 3
[5]  GND      [6] GND        černý drát infraportu (2) na oba piny 5 i 6
[7] výstup    [8] výstup     zelený drát infraportu (1) na výstup pin 8
[9] +5V       [10] +5V


A stále to nekomunikuje. To, co leze z PC s onboard headerem je podobné RS232 a tomu, co vysílá SIF - krátké bliknutí za každou 0 (protože je třeba začít startbitem a to je nula), mezera za každou 1. Bliknutí by mělo trvat 3/16 času jednoho bitu - říká to datasheet 16C650 a je to tak i v BIOSu PC (druhá možnost je 1.6us)

Ukázalo se, že ze SIFu je baudrate nesmyslný - nastavím 9600bps, ale na infraportu vidím rychlost zhruba 1/3. To je divné, protože stejné nastavení mi pro "normální" komunikaci funguje správně. Je snad nutné nastavit baudrate v 16C650 pro infraport jinak?

No nic, pátrám dál. Pokud s tím máte nějakou zkušenost, nenechávejte si ji pro sebe.


Přílohy:
Poznámka: olepené samolepkami je to kvůli sondám osciloskopu, abych něco nezkratoval, jsou tam připájené krátké drátky, na které se lze chytit, za SIFem je fotozávora se zakrytou IR LED jako snímač
rs232_SIF_16C650_a_ZX-Spectrum.jpg
rs232_SIF_16C650_a_ZX-Spectrum.jpg [ 253.91 KiB | Zobrazeno 1875 krát ]
Poznámka: funkční infraport s nekompatibilním kódováním
USB_infraport_pripojeny_k_linuxovemu_PC.jpg
USB_infraport_pripojeny_k_linuxovemu_PC.jpg [ 286.24 KiB | Zobrazeno 1875 krát ]
Poznámka: infraport připojený k desce DOSového PC ovládaný DOS Navigatorem
rs232_infraport_pripojeny_na_onboard_header_PC_FIC_PA2007.jpg
rs232_infraport_pripojeny_na_onboard_header_PC_FIC_PA2007.jpg [ 189 KiB | Zobrazeno 1875 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Interface SIF a infraport
PříspěvekNapsal: 16.03.2022, 12:56 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Včera jsem se tím opět chvilku zabýval a stále netuším v čem je problém. Pořád doufám, že to je jen hloupou chybou v nastavování 16C650.

Na SIFu funguje správně nastavení baudrate i volba kanálu pomocí multiplexoru 74HC157 - ConnectOne / infraport. Sekundární 16C650 mi rozhodně s ConnectOne modulem pracuje správně a už dřív jsem ověřil přepínání kanálu pomocí signálu /OUT2 z 16C650.

Že dělám něco špatně hádám podle toho, že se mi do režimu infraportu nedaří přepnout primární 16C650, ačkoli by to mělo fungovat, SIF Term to nerozlišuje.

No nic - viz screenshoty z osciloskopu.

Po přepnutí do režimu infraportu by 16C650 měla generovat místo každé nuly pulz dlouhý 3/16 trvání bitu dle nastaveného baudrate. PC to tak dělá, datasheet 16C650 to tak popisuje.

Zkoušel jsem to na 1200bps, jeden bit by měl trvat cca 833μS a 3/16 z toho jsou cca 156μs. Místo toho tam vidím pulz dlouhý 42μs s odstupem 1666μs a 5001μs, což by odpovídalo odstupem třem sestupným hranám, které nastanou při vyslání znaku 0x0D (konec řádku CR). A tím pádem by seděl i správně baudrate 1200bps.

Nezáleželo na tom, kde jsem měřil - jestli před 74HC157, za, nebo jestli jsem snímal blikání IR LED fototranzistorem.

Mohl by některý z majitelů SIFu zkusit nastavit infraport a porovnat, co to dělá? Přítomnost TFDU4300 není nutná, stačí změřit přímo výstup z 16C650. Režim infraportu se nastavuje v registru MCR bitem 6 do 1 (a zároveň bitem 3 do 1, chci-li zvolit druhý kanál... ale i bez toho by to mělo tvarovat data jako pro infraport).

(zkouším pomocí https://cygnus.speccy.cz/popis_sifterm.php ... ale obsahuje-li chybu, bylo by lepší zkusit svým programem)

Přemýšlím, jestli nějaký vliv nemá nastavení řízení toku dat. Samozřejmě mám vypnuté CTS/RTS, ale nezkusil jsem řízení toku zcela vypnout, protože jsem se domníval, že i na infraportu lze vysílat a přijímat řídící byty xon/xoff.


Přílohy:
potize_s_RS232_a_IR_na_SIFu.png
potize_s_RS232_a_IR_na_SIFu.png [ 147.88 KiB | Zobrazeno 1736 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Interface SIF a infraport
PříspěvekNapsal: 28.03.2022, 01:33 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Už asi tuším v čem je problém - aby fungoval bit 6 v registru MCR, tak se nejprve musí povolit zápis do registru EFR, tam zapnout bity v registru MCR a teprve pak se dá zapnout režim infraportu v 16C650. Viz testovací BASIC. Na pořadí, jak se co posílá do 16C650 záleží.
Kód:
5 REM ** port addr **
10 LET port=131
15 LET THR=port+0
20 LET RHR=port+0
25 LET DLL=port+0
30 LET IER=port+4
35 LET DLM=port+4
40 LET FCR=port+8
45 LET ISR=port+8
50 LET LCR=port+12
55 LET MCR=port+16
60 LET LSR=port+20
65 LET MSR=port+24
70 LET SPR=port+28
75 LET EFR=port+8
80 LET XON1=port+16
85 LET XOFF1=port+24
100 REM ** LCR value **
101 REM b7 divisor latch
102 REM b6 set break
103 REM b5 set parity
104 REM b4 even parity
105 REM b3 parity enable
106 REM b2 stop bits 2
107 REM b1 word length 8b
108 REM b0 word length
110 LET LCRVAL=BIN 00000111
120 REM 1200bps 384=256+128
125 LET DLLVAL = 128
130 LET DLMVAL = 1
150 REM select UART [0,2]
155 OUT SPR,0
200 REM ** baudrate **
205 OUT LCR,128+LCRVAL
210 OUT DLL,DLLVAL
215 OUT DLM,DLMVAL
250 REM FIFO polled mode enab.
255 REM inter. & DMA disable
260 OUT FCR,BIN 00000001
300 REM access to EFR
305 OUT LCR,191
350 REM enab. MCR bits XonXoff
355 OUT   EFR,BIN 00011010
360 OUT XON1,17
365 OUT XOFF1,19
400 REM general reg. set.
405 OUT LCR,LCRVAL
450 REM enable IR + OUT2
455 OUT MCR,BIN 01001000
500 REM no interrupts
505 OUT IER,0
600 REM ** transmit **
605 OUT THR,13
610 OUT THR,65
615 BEEP .1,20: PAUSE 2
620 GO TO 600


Přílohy:
Poznámka: 1200bps, dva znaky 0x0D a 0x41 v režimu infraportu z 16C650 na SIFu
1200bps_kodovani_IR.png
1200bps_kodovani_IR.png [ 26.36 KiB | Zobrazeno 1537 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 24 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz