Ano, příště si to ukážeme. Pro tyto účely (ovládání relé, poslání resetu na nějaké zařízení apod.) lze využít právě ony doplňkové signály (viz druhá kapitola), které se ovládají přes jeden z konfiguračních registrů. Naopak, pokud je zapotřebí jednou za čas si přečíst nějaký stav, opět lze použít doplňkové signály, tentokrát vstupní.
Již dvanáct let mi nikdo nedokáže odpovědět na jednu otázku (je pravda, že posledních pár let už mne to tak nesužuje a tudíž se ani neptám a negoogluji (v manuálech modemů to není)), třeba budete vědět.
Obecně platí, že pokud mají dvě zařízení komunikovat po sériové lince, musí mít stejně nastaveny parametry komunikace. Pokud to u jedné strany není možné (nějaký blackbox), musí se druhá přizpůsobit. Jedinou výjimkou je klasický modem. Je to v zásadě blackbox (nemá na sobě nic, čím by bylo možné předem nastavit rychlost) a přesto (bez problému?) komunikuje v celé škále rychlostí bez jakéhokoliv nastavení.
Až tak jednoduché to ovšem také není. Občas nekomunikuje (dalo by se říct "ze záhadných důvodů", ale ono je to částečně taky logické):
Zapnu počítač s připojeným (nebo nepřipojeným, to je jedno) modemem. Ať použiji nebo nepoužiji 'setserial', tak s ním nejsou schopny komunikovat některé aplikace přes '/dev/ttyS0'. Od okamžiku, kdy pouze spustím a ukončím 'minicom' (s vymazanými inicializačními řetězci), vše začne fungovat. Dělá snad nějakou extra inicializaci?
Abych to shrnul: Vím, že nějakým AT příkazem se dá nastavit DTE speed, ale jak ji můžu nastavit, když pro odeslání AT příkazu potřebuji znát současnou rychlost. Napadá mne, že po zapnutí modem standardně komunikuje na nějaké rychlosti dané nějakou normou (např. 2400), ale to mi nikdo nepotvrdil...
No, modem vetsinou miva/mival autobauding. Podle poslanych znaku A a T (coz je zacatek kazdeho AT prikazu :-) to dokaze 'desifrovat' (stejne jako paritu 8N, 7E, 7O), za predpokladu, ze je pouzito 8 datovych bitu tj. 8 bez ci 7 s paritou. Proto vetsina aplikaci pracujich s modemem zacina poslanim 'AT\r' a cekanim na '\nOK\r\n' .... Je pravda ze v pozdejsi dobe (napriklad u GSM/GPRS modemu) uz tato 'featura' uz vypadla a clovek musi 'nejak' zjistit (manual ?) jaka je defaultni rychlost a prestavit si ji. Samozrejmne kazdy modem ma svuj command, napr. GSM/GPRS Wavecom na to ma AT+IPR.
Jak jiz rekl prede mnou pan Anonym, modem ma detekci rychlosti. Pokazde kdy ocekava command, ktery vzdy zacina AT nebo at, z dat ktera mu prijdou se snazi rozpoznat rychlost a format.
Co se tyce problemu, kdy modem nekomunikuje a minicom ho z toho dostane, muze byt, ze modem byl v online mode = co dostane, to posle. Z tohoto stavu se dostane bud sekvenci 1s klid, pak +++, pak 1s klid, ovsem ty tri plusy musi prijit na spravne rychlosti. Dalsi moznost je shodit a nahodit DTR. A to je presne to, co udela minicom. Nahozeni a shozeni DTR dostane modem do command mode a tim padem modem 'obzivne'. Ovsem pozor, at&d0 (tusim) zablokuje tuto moznost, pak na DTR nereaguje.
Obrázek 5: Díky značnému rozšíření sériového portu existuje mnoho součástek, které sériovou komunikaci podporují. Na tomto schématu je ukázáno jednoduché zapojení teplotního čidla k počítači. Přes pin RxD se čte teplota posílaná ve formě stále opakované sekvence bytů.
To mi prijde jako nesmysl, ten obvod je pokud vim 1-Wire zarizeni a to odesila data v uplne jinem formatu nez je UART (RS-232). Nekoukal jsem do datasheetu, ale podle zapojeni bych si tipnul, ze spodni pin je zem, prostredni 1-Wire, ktery ma "pull-up" pres TxD a zenerky (tim se generuje napajeni) a rovnou je mozne pres TxD delat i pulsy dle 1-Wire specifikace, vse se potom cte pres stavovy pin.
Taky o tom obrázku pořád pochybuju. I přes to co jsem napsal níže...
Nezbývá než ten datasheet pořádně prostudovat. Anebo jestli nám to pan Tišnovský osvětlí...
Tak mám zase trochu času pohledět na obrázek a odpovím si sám.
Asi to funguje tak, že DTR je využit jako "řídící signál", pomocí kterého jsou generovány jednak příkazy pro 1wire zařízení a pak "synchronizační bitové pulsy" potřebné pro čtení vrácených dat směrem do PC. Data se přesouvají do datového registru UART přes RX.
Asi těžko to funguje tak jak je psáno pod obrázkem, že čidlo pořád posílá bajty s hodnotou, úměrnou teplotě, přičemž by se nabízelo je jen jednoduče číst. V PC musí být ovladač nebo něco v uživatelském prostoru, co to aktivně řídí.
Datasheet toho čidla jsem prolétl jen zběžně, ale dostat y toho data o teplotě asi není tak triviální jak sugeruje popiska pod obrázkem. Anebo tam je nějaký trik, který mně uniká.
Souhlasim s touto poznamkou. Pouzite cidlo pouziva opravdu 1-wire a piny serioveho portu jsou pouze pouzity jeko bezne I/O + jako napajeni . To take vylucuje opakovane posilani dat ze senzoru (master-slave sbernice). Cidlo pouze reaguje na prikazy z master zarizeni na sbernici v tomto pripade PC. Take jsem se v celku zdesil pohledem na zapojeni. Pripoustim ze seriovy port je vcelku blbuvzdorny. Jeho vstupy/vystupy jsou chraneny rezistory a je odolny vuci zkratu na vedeni, nicmene natvrdo zapojit diodu a "vyzkratovat" piny (urovne +12V= logicka nula, -12V logicka jednicka) je prinejmensim nerozvazne (no rekneme si to na rovinu je to cunarna) a nadherna ukazka toho jak by se veci nemely delat.
Pripojit zenerovu diodu primo na piny je OK.
Maximalni proud pres RS232 rozhrani je omezen a dokonce musi byt omezen primo dle specifikace.
Horsi je to obracene. Rozmezi -3V az 3V je zakazane pasmo pro RS232. Ale vetsina implementaci serioveho portu to neresi a rozhodovaci uroven byva nekde kolem 2-3V
Toho vyuziva toto zarizeni a proto jsou s tim nekde problemy.
Presne toto zapojeni nekde funguje jinde ne, prave proto ze vyuziva typicke nikoli zarucene parametry (osobne vyzkouseno http://teplomer.kaznejov.cz )
A mimochodem teplotni cidlo nic samo o sobe neposila, je to ciste master/slave komunikace.
To ze neco funguje byt sporadicky jeste automaticky neznamena, ze je to dobre udelane. Pripojit piny primo na zenerovu diodu dobre neni pokud to same uvidi nejaky bastlir a v dobre vire to udela na paralelnim portu, tak o nej prijde. Proto jsem presvedcen ze toto by se v takovem clanku ukazovat nemelo(pripadne to patricne okomentovat slovy na jinem portu tohle nezkousejte). To vede i k tomu, ze se muze ovjevit na TXD 12V a na DTR -12V.
A jsou tam jiz diody v otevrenem smeru, coz povazuji za vetsi zlo jak tu zenerovu diodu (i kdyz asi to je to jedine co brani zniceni cidla v takovem pripade). Pokud uz ma nekdo potrebu pripojit jedno teplotni cidlo k PC volil bych gameport a jeden termistor.
To zmíněné teplotní čidlo je jak je vidět zajímavá a užitečná součástka.
Při prvním pohledu na obrázek jsem se zhrozil, že "to přece nemůže fungovat". Pak jsem se naštěstí podíval do popisu a uviděl "parasite power mode". :)
Záleží na konkrétní kartě, co vše se dá nastavit, typicky je každý port vzdálený od předchozího o 8 bytů. BIOS však nemá ve své tabulce konfiguračních parametrů místo pro tyto porty a tak je ignoruje - ani nehledá ani nikam neukládá info o nich. Například jedna z přídavných karet (osmiportová PM-1028) může mít bázovou adresu kdekoli mezi 0x200 až 0x400 (přesněji až 0x3ff) v krocích po osmi bytech:
COM Port I/O address
COM1 Base Address + 00H
COM2 Base Address + 08H
COM3 Base Address + 10H
COM4 Base Address + 18H
COM5 Base Address + 20H
COM6 Base Address + 28H
COM7 Base Address + 30H
COM8 Base Address + 38H
Mam zkusenosti s pomerne dlouhymi kabely na rychlosti 9600. Pouzivame obycejny stineny kabel, ktery se bezne pouziva treba na zabezpecovaci zarizeni. Rx, Tx a GND, stineni je spojeno s GND.
Timto zpusobem pripojujeme tiskarny az na vzdalenost 50 metru. Dokud neprijde bourka, vsechno funguje v pohode. Pri bource obcas odleti driver tiskarny, pripadne port PC. Ale to se stava i s kratsimi kabely.
Pokud se pouzije twistovany kabel (UTP 5, ethernet), NESMI se pouzit v jednom paru signal a zem. Kapacita je takova, ze signal neprojde. V takovem pripade se musi pouzit jeden par (oba paralelne) jako signal, dalsi par jako zem.
Pokud je potreba vetsi vzdalenost, nezbude, nez pouzit konvertory RS232 na RS422 a v tomto pripade je naopak nutnost pouzit twistovany kabel (telefonni nebo ethernet). Timto zpusobem se da jit i na stovky metru. Jedno z nejdelsich vedeni co jsme takto delali bylo radove 300 metru RS485 na rychlosti 38400.
Mám jeden dotaz - je vše připojeno na stejnou fázi a stejný napájecí okruh? Vy v tomto správně používáte stínění připojené na GND a nikoli na kostru konektoru, takže teoreticky by to mohlo být jedno, ale už jsem viděl, jak konektory (tady šlo o paralel), které měly propojené i svoje kostry, pěkně jiskřily :-)
To je správný dotaz. Odpověď je: "Někdy jo, někdy ne." To záleží na tom, jak dobrou mají kde instalaci. Nebo spíš jak špatnou.
Jednou se u jednoho zákazníka stalo, že v rozdvojce přes kterou byl připojený computer, se zkratl zemní kolík s fází, zem do té zásuvky pro jistotu vůbec nevedla, takže fáze prošla celkem v klidu na šasi PC, z něj po USB do externí multiseriálky a z ní přes sériové kabely do vzdálených tiskáren, které už byly uzemněné. Asi nemusím popisovat co všechno vyhořelo. Musel jsem kvůli tomu letět na Sicílii. Naštěstí to všichni přežili (i to jak jsem se tam musel rozčílit když jsem zjistil proč se to stalo :-)).
Další problém se jmenuje Olivetti. Computery které jsme jeden čas používali, nebyly vůbec uzeměné. Měly jenom dvoupinovou zástrčku. Ty krásně kopaly a jiskřily při připojování uzeměné tiskárny. A taky padaly, když se přiblížil někdo v silonové bundě a jiskra šla do PC, pak přes parallelní kabel do tiskárny a z ní přes zdroj do zemního kolíku. Tak jsme museli přidávat žlutozelený drát z kostry PC na zemní kolík do zásuvky. Olivetti ovšem stále tvrdilo, že je všechno podle normy a že s tím nemíní nic dělat.
Díky za odpověď. Ptám se třeba proto, že v jedné školní laboratoři (nebudu konkrétní, ale 99% lidí tam muselo mít "padesátku") byla půlka zásuvek na jednu fázi a druhá půlka zásuvek na fázi druhou (jedna místnost pro cca 8 lidí). Takže například tiskárnu bylo neradno přepojovati, stejně jako další zařízení (měli jsme tam i pár zbastlených věcí na RS-232C apod.).
Já měl Olivetti strašně dávno (286) a byla k tomu normální PC zástrčka - na jedné straně do "naší" sítě, na druhé ten klasický trojúhelník. Ale je možné, že si zase vymysleli něco nového, vždyť takto se ušetří 33% mědi :-)
Ja mohu z prehistorickych zkusenosti rict, ze pri pripojovani klasickych terminalu k pocitacum (tehdy PDP a jejich SMEP kopie) se z duvodu spolehlivosti a ruseni nedalo jit na vetsi vzdalenost nez radove deset metru. Pro vetsi vzdalenosti se tenkrat pouzivala proudova smycka. Pocitace i terminaly s ni bud umely pracovat primo nebo existovaly prevodniky.
re:
"Dokud neprijde bourka, vsechno funguje v pohode. Pri bource obcas odleti driver tiskarny, pripadne port PC. Ale to se stava i s kratsimi kabely."
Pred tyzdnom som potiahol 20m kablu (LAN kabel s redukciou na RS232) na prepojenie dvoch satelitov na zdielanie karty. Kabel je natiahnuty z izby na poschodie nizsie cez vonkajsiu stenu (von je z toho asi 4m). Myslíte ze pri burke mi moze odist nejaka suciastka?
Maximalni delka vedeni v RS232 nebyla definovana jako delka, ale byla definovana kapacitanci kabelu. Kdysi davno sem v nejakym manualu narazil na vzorecek, ketrym se to dalo spocitat dle katalogovych vlastnosti kabelu. Ale uz to zcela jiste nenajdu... S beznymi kabely to vychazelo okolo 15m, ale je pravda, ze i ja sem v davnych dobach provozoval linku mezi dvema panelaky (35m zaves). Problem byly bourky, to vzdycky neco vyhorelo. Pak sme tam vrazovali optocleny, aby to bylo odolnejsi...
Zajimavosti, se kterou se clovek bezne nesetka jsou multi-serial karty. Mam jednu takovou 32xRS232, delala se i v 64x variante. Jesli ji najdu, poslu vam fotku.
e.
Jo, něco takového máme v práci. Jenže to chtělo speciální kartu do počítače, která byla navíc do ISA slotu. A ten počítač zkolaboval, takže od té doby smůla.
Prosim, vie niekto z diskutujucich alebo autor ako nastavit na UART-e variabilnu rychlost ?
(tusim bola vtedy oznacovana ako USER_BAUD v dokumentacii)
Vysvetlenie: velmi davno (v dobach 486) som napisal program v asm, ktory bol pouzity ako lacny frekvencny generator (seriovy port je dokonca skratuvzdorny, ma vnutorne obmedzenie prudu), kde tato moznost bola pouzita. Pamatam sa, ze vtedy uvadzali v dokumentacii, ze nie kazdy UART to podporuje, ale skusal som to na vsetkych (cez 20 typov) pc v okoli a fungovalo to vsade. Bohuzial program sa stratil aj dokumentacia, takze si teraz nepamatam, ako UART inicializovat do tohoto rezimu a pripadne ako zistit, ci dany UART tuto moznost podporuje.