Portál AbcLinuxu, 6. května 2025 23:01

Dotaz: signaly DTR, RTS a napajeni ad

26.5.2003 11:54 psl
signaly DTR, RTS a napajeni ad
Přečteno: 868×
Odpovědět | Admin
Pozoruji se svym seriovym kabelem pro pripojeni mobilu podivne veci. Na nekterych pocitacich moc nefunguje. V kabelu je prevodnik z RS232 na TTL urovne, nevim jak je proveden, je zalit v gume. Myslim si, ze je problem s napajenim prevodniku, protoze na nekterych PC funguje aspon na nizssich rychlostech. Take jsem si udelal adapter, ktery vsouvam mezi PC a kabel, adapter slouzi k privedeni napajeni +9V na DTR signal kabelu. Pouziti adapteru resi problem.

Zajimalo by me timto, jak mohu prikazat Linuxu do jakeho stavu nastavit signaly DTR a RTS na seriovem portu. At prochazim manual stty jak chci, neni tam zadna moznost k ovlivneni techto signalu, ktere se bezne pouzivaji k napajeni ruznych zarizeni na seriovem portu. Myslim si, ze je to i problem meho kabliku, ze signal ktery pouziva k napajeni nema spravnou uroven. Jen by jsem je jednou potreboval nastavit do definovaneho stavu, treba behem inicializace.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.5.2003 12:45 finn
Rozbalit Rozbalit vše signaly DTR, RTS a napajeni ad
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsem si 100% jisty, ale napr. u nekterych notebooku je napajeci napeti snizene, treba tady je o tom zminka.
28.5.2003 21:23 Karel (bengalian@volny.cz)
Rozbalit Rozbalit vše Re:signaly DTR, RTS a napajeni ad
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podobny problem jsem uz resil v souvislosti s modemem Baycom, ale vezmu to poporadku: Stav tech vedeni jde dumpnout programem statserial. Napriklad ,,statserial /dev/ttyS0''. Tohle je dobry udelat jako ,,prvni pomoc'', aby clovek aspon trochu videl, co se deje. Nahazovani/shazovani ruznych vedeni na seriaku. No asi to pujde udelat nejakym desivym prikazem, to nevim, ale kazdopadne to jde pres ioctl, takze bych zkusil editovat zdrojaky toho programovadla. Ty handshake jde pouzivat k dabelskejm vecem, jako priklad doporucuju prostudovat zdrojaky programatoru PIC16F84 od Jaako Hyvatti, je to tam pekne okomentovane. (http://www.iki.fi/hyvatti) Druhy rozmer problemu - hardware: Potiz nemusi byt ani tak v napajeni, jako v sense vedenich. Totiz. RS-232 je puvodem proudova smycka, kde jde o smer toku proudu, nikoliv o velikosti napeti. To co je v PC neni RS-232, ale hybrid. Takze chytri lidi prisli na to, ze vetsina portu je udelana tak, ze na nezatizenym vstupu je budto cca +12..+9V, nebo -12V..-9V. Takze to v podstate staci vest pres rezistor na diodu, ktera to zkratuje v pripade zapornyho napeti a na 5V se to pri kladnym srazi zenerkou, takze je z toho ,,na sup'' TTL. Tohle funguje vzdy a vsude a v podstate neni duvod to nepouzivat. Jenomze mnozi sli trochu dal a vymysleli, ze vetsina portu sezere, pokud dostane do vstupu primo TTL, tj. bud +5V, nebo 0V. Problem je v tom, ze to sezere prave jen vetsina portu, ne vsechny. Zazil jsem radice, kde bylo tohle detekovany trvale jako uroven Hi, protoze on potreboval zaporny napeti na to, aby detekoval Lo. Takhle to mj. ma byt podle normy, co definuje RS-232. Vetsina ,,chytrejch kabelu'' pouziva prave to prvni zapojeni a to je smrtelna zalezitost. Kdyz by se to melo udelat podle normy bude nejlip tomu dat externi zdroj a pouzit nejakej prevodnik TTL<>RS-232, napriklad MAX232, ICL232, AD232, MAX233...zalezi, jaky jsou potreba signaly. Takze. Pokud to s vnejsim zdrojem funguje, je to ta lepsi varianta. Napajeni ze serioveho portu je trochu problem, ale vetsinou to unese neco kolem 5mA spolehlive, obcas vic. Zaver: Zacal bych tim, ze bych se kouknul co na tom portu ma byt tim statserial. Na seriaku je vzdycky nejaky napeti, budto +12, nebo -12V, ale nikdy nula. Potom si to chce vzit schema od toho kabelu a zacit premyslet, co to kde potrebuje. Pokud je na napajecich napetich uroven Lo a ono se predpoklada, ze je tam neco kladnyho, staci tyhle ,,draty'' nakopnout nahoru, coz jde udelat pres ioctl. Jak na to jde vyzkoumat ze zdrojaku k tomu programatoru (alespon ja to z toho zkoumal) no a nekam do vhodnyho mista pridat par radku, ktery to udelaji. Nic totiz nepomuze tyhle draty nejak rucne nahodit pred startem toho programu, kdyz je napr. ten program nasledne shodi.
28.5.2003 21:59 Jan Martinek
Rozbalit Rozbalit vše signaly DTR, RTS a napajeni ad
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dá se to nastavit taky přímým přístupem na porty, např. nastavit DTR je možné pomocí
outb (1, BASEPORT + 4);
a nastavit RTS zase takhle:
outb (2, BASEPORT + 4);
kde BASEPORT je 0x3F8 nebo 0x2F8, podle toho, co je to za port. Blbý je, že to musí běžet jako root, aby se dalo takhle přistupovat na porty. A taky je potřeba předtím požádat systém o přístup na porty:
if (ioperm (BASEPORT, 8, 1)) {perror("ioperm"); exit(1);}
a až to nebude potřeba, tak zase uvolnit:
if (ioperm(BASEPORT, 8, 0)) {perror("ioperm"); exit(1);}
8.2.2004 12:30 Petr Slansky | skóre: 30 | blog: slansky
Rozbalit Rozbalit vše signaly DTR, RTS a napajeni ad
Takze jsem zkusil nasledujici program v C. Funguje, signaly DTR a DSR se skutecne meni (statser). Ale pouze po dobu behu programu (10s). Po skonceni programu se nastavi na defaultni hodnoty (DTR=1, DSR=1). Bylo by treba asi patchnout jadro anebo pppd, aby pouzival jine default hodnoty, ze? Anebo je jina cesta??
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

/* DTR, DSR state, as you wish */
int sig_dtr = 1;
int sig_dsr = 0;

int main(int argc, char **argv)
{
        int fd;
        int lstate;

        /* exactly one argument must be given */
        if (argc != 2) {
             printf("What device?\n"); exit(1);
        }
        /* open device */
        fd = open(argv[1], O_RDWR | O_NDELAY);
        if (fd < 0) {perror(argv[1]); exit(-1); }

        ioctl(fd, TIOCMGET, &lstate);
        if (sig_dsr != 0) {
                lstate |= TIOCM_RTS;
        } else {
                lstate &= ~TIOCM_RTS;
        }
        if (sig_dtr != 0) {
                lstate |= TIOCM_DTR;
        } else {
                lstate &= ~TIOCM_DTR;
        }
        ioctl(fd, TIOCMSET, &lstate);

        sleep(10);
        close(fd);
        return 0;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.