Sériový port – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Sériový port – C / C++ – Fórum – Programujte.comSériový port – C / C++ – Fórum – Programujte.com

 

Yety0
Stálý člen
2. 10. 2010   #1
-
0
-

Potřebuji posílat na DTR a TXD (jsou na nich ledky) jedničky a nuly podle toho jak chci :)

Nevěděl by někdo co s tím? Googlim už asi 2 hodiny a nic ... v pondělí to musím být done a já už z toho jsem ....

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
zdenda
~ Anonymní uživatel
257 příspěvků
2. 10. 2010   #2
-
0
-
Nahlásit jako SPAM
IP: 213.211.51.–
Yety0
Stálý člen
2. 10. 2010   #3
-
0
-

To zdenda :

Zkoušel jsi to už někdy?

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
zdenda
~ Anonymní uživatel
257 příspěvků
3. 10. 2010   #4
-
0
-

A ten BREAK je TxD, takže můžeš zůstat u původních pinů. Jo, já jsem to zkoušel a ty bys měl taky, místo otázek.

Nahlásit jako SPAM
IP: 213.211.51.–
Yety0
Stálý člen
4. 10. 2010   #5
-
0
-

Každopádně díky za předchozí pomoc

Teď mám nový problém

Mám kód, který zinicializuje komunikaci

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>
#include <assert.h>
/*
*
*/

int setUp() {
HANDLE hSerial;
hSerial = CreateFile("COM5",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hSerial == INVALID_HANDLE_VALUE) {
if (GetLastError() == ERROR_FILE_NOT_FOUND) {
//serial port does not exist. Inform user.
}
//some other error occurred. Inform user.
}

DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength = sizeof (dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
//error getting state
}
// dcbSerialParams.BaudRate = CBR_19200;
dcbSerialParams.BaudRate = 1;
dcbSerialParams.ByteSize = 1;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams)) {
//error setting serial port state
}


Ten funguje (na portu se opravdu něco děje).

A teď potřebuju poslat na DSR 1
Předpokládal jsem, že to udělá

dcbSerialParams.fDtrControl = DTR_CONTROL_DISABLE;
SetCommState(hSerial, &dcbSerialParams);

Ale nic to nedělá....

Kdybys věděl proč popř. co udělat aby to dělalo co chci, tak bys mi fakt moc pomohl.

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
Yety0
Stálý člen
4. 10. 2010   #6
-
0
-

Ok, tak tenhle problém vyřešen (moje blbost - neumím číst API)

Avšak není vyloučeno, že je to poslední problém.

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
Yety0
Stálý člen
5. 10. 2010   #7
-
0
-

Ze mě neznámého důvodu nejde poslat na RTS 1.
Tváří se to jako, že to funguje, ale nic to nedělá.

EscapeCommFunction(hSerial, SETRTS)

Jinak SetCommBreak funguje, ale tohle ne.

Není to někde potřeba donastavit.

Nevěděl by někdo kdo to zná co je s tím?
Moc by mi to pomohlo.

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
zdenda
~ Anonymní uživatel
257 příspěvků
6. 10. 2010   #8
-
0
-

Co znamená "nic to nedělá" ? Nemáš to jen opačně? Zkus v cyklu set-sleep-clr-sleep, jestli to bliká.

Nahlásit jako SPAM
IP: 213.211.51.–
Yety0
Stálý člen
6. 10. 2010   #9
-
0
-

Když udělám

for(i=0; i<1000; i++) {
EscapeCommFunction(hSerial, SETRTS);
}

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
Yety0
Stálý člen
6. 10. 2010   #10
-
0
-

Tak to na RTS nic neposílá

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
KIIV
~ Moderátor
+43
God of flame
6. 10. 2010   #11
-
0
-

To Yety : no tezko uvidis nejakou zmenu, kdyz tam nic nemenis.. a jeste k tomu to muze probehnout velice rychle.. takze ani kdyby si menil tak toho moc neuvidis

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Yety0
Stálý člen
6. 10. 2010   #12
-
0
-

Jediný co potřebuju je poslat na RTS jedničku.
Jak to mám jinak udělat než pomocí EscapeCommFunction(hSerial, SETRTS) ?

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
liborb
~ Redaktor
+18
Guru
6. 10. 2010   #13
-
0
-

Těch možností je spousta, můžeš začít třeba tím, že zkontroluješ návratovou hodnotu EscapeCommFunction, pak se podíváš, jestli máš povolené ovládání RTS (DCB), pak se můžeš podívat, jestli se ti RTS "nehýbe" s TXD, pak se můžeš podívat, jestli nemáš ošizený port, kde máš jenom TXD, RXD a zem :) atd.

Nahlásit jako SPAM
IP: 78.80.52.–
Yety0
Stálý člen
6. 10. 2010   #14
-
0
-

To liborb :

To už jsem všechno zkontroval. Všechno sedí, ale na RTS se nic neděje :(

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
Yety0
Stálý člen
6. 10. 2010   #15
-
0
-

Pokud se to nastavuje takhle

dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
SetCommState(hSerial, &dcbSerialParams);

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
KIIV
~ Moderátor
+43
God of flame
6. 10. 2010   #16
-
0
-

a jeste zkontroluj jestli to neni treba invertovany vystup

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
zdenda
~ Anonymní uživatel
257 příspěvků
6. 10. 2010   #17
-
0
-

Tohle jsem myslel.

for(i=0; i<1000; i++) { 

EscapeCommFunction(hSerial, SETRTS);
Sleep(1000);
EscapeCommFunction(hSerial, CLRRTS);
Sleep(1000);
}

Nahlásit jako SPAM
IP: 213.211.51.–
Yety0
Stálý člen
7. 10. 2010   #18
-
0
-

Děkuji za spolupráci! Už jsem to rozchodil!!!!

Díky!!

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
KIIV
~ Moderátor
+43
God of flame
7. 10. 2010   #19
-
0
-

a co to teda bylo? at vime az bude chtit nekdo dalsi to same :D

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Yety0
Stálý člen
7. 10. 2010   #20
-
0
-

A co když potřebuju poslat na TXD jedničku aniž bych poslal jedničku na RTS?

Nahlásit jako SPAM
IP: 94.113.49.–
Kapitán A. J. Rimmer vesmírný dobrodruh
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Seriovy port v C — založil jatagan

Seriovy port v C — založil jatagan

Java - seriovy port — založil martin

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý