Logo

¡Bienvenido a Stratos!

Acceder

Foros





Adquisicion De Datos Por Puertos

Iniciado por Pogacha, 02 de Febrero de 2005, 05:12:32 PM

« anterior - próximo »

Pogacha

 Que tal, no es referido a programación de juegos (no directamente al menos), pero igual pregunto por si alguien sabe.
¿Como puedo adquirir datos en tiempo constante a alta velocidad a travez del puerto paralelo, o USB o algo así?
Mas de 16 megabaudios por lo menos, en palabras de 16 bits .
Algo así como un DMA (como el de la SoundBlaster) o algo así, pero no tengo ni idea de como funciona esto.

Si alguien sabe como, o a donde mandarme a preguntar o algun link, le agradeceria.

Saludos.

sés

 La verdad es casi no recuerdo nada de esto (me estoy amariconando con tanto Java ¬¬), así que te pego un trozo de mi viejo código para puerto serie:

BOOL CComSerie::Abrir( int nPuerto )
{
BOOL fSuccess;
COMMTIMEOUTS CommTimeOuts;
char szCad[128];

   wsprintf( szCad, "COM%d", nPuerto );

SECURITY_ATTRIBUTES sa;
sa.nLength =sizeof(sa);
sa.lpSecurityDescriptor =NULL;
sa.bInheritHandle =TRUE;
   hComm = CreateFile( szCad, GENERIC_READ | GENERIC_WRITE,
                       0, // exclusive access
                       &sa, // no security attrs
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL |
                       //FILE_FLAG_OVERLAPPED |
     0,
                       NULL );

   if( hComm == INVALID_HANDLE_VALUE )
       return FALSE;

   fSuccess = GetCommState( hComm, &dcb );

   if( !fSuccess )
       return FALSE;

   dcb.BaudRate = CBR_9600;
   dcb.ByteSize = 8;
dcb.Parity = FALSE;
   dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE; // binary mode, no EOF check
dcb.fNull = FALSE;
   dcb.EvtChar = 0;

/*
dcb.BaudRate   = CBR_9600;
dcb.fParity    = FALSE;  // enable parity checking
dcb.fOutxDsrFlow  = FALSE; // DSR output flow control
dcb.fOutxCtsFlow  = FALSE; // CTS output flow control
dcb.fDtrControl   = DTR_CONTROL_DISABLE;
dcb.fRtsControl   = RTS_CONTROL_DISABLE;
dcb.fDsrSensitivity  = FALSE; // DSR sensitivity
dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx
dcb.fOutX    = FALSE; // XON/XOFF out flow control
dcb.fInX    = FALSE; // XON/XOFF in flow control
dcb.fErrorChar   = FALSE; // enable error replacement
dcb.fNull    = FALSE; // enable null stripping
dcb.fAbortOnError  = TRUE;  // abort reads/writes on error
dcb.XonLim    = 100;   // transmit XON threshold
dcb.XoffLim    = 100;   // transmit XOFF threshold
   dcb.ByteSize   = 8;
   dcb.StopBits   = ONESTOPBIT;
dcb.XonChar    = 0;     // Tx and Rx XON character
dcb.XoffChar   = 0;     // Tx and Rx XOFF character
dcb.ErrorChar   = 0;     // error replacement character
dcb.EofChar    = 0;     // end of input character
dcb.EvtChar    = 0;     // received event character
*/

   fSuccess = SetCommState ( hComm, &dcb );

   if( !fSuccess )
       return ( FALSE );

   SetCommMask( hComm, 0 );

// Aumentar el buffer de entrada si se pierde algún dato
   SetupComm( hComm, 128*1024,4096 );

   CommTimeOuts.ReadIntervalTimeout = 100;
   CommTimeOuts.ReadTotalTimeoutMultiplier = 100;
   CommTimeOuts.ReadTotalTimeoutConstant = 100;
   CommTimeOuts.WriteTotalTimeoutMultiplier = 100;
   CommTimeOuts.WriteTotalTimeoutConstant = 100;
   fSuccess = SetCommTimeouts( hComm, &CommTimeOuts );

   if( !fSuccess ) return FALSE;

LimpiaPuerto();

   return TRUE;
}



-= EDIT =-
La lectura es con ReadFile y la escritura con WriteFile. Mira la documentación de las funciones que viene aquí para ver más sobre su funcionamiento.
Soy indeciso... ¿o no?

averbell


Zaelsius

 Supongo que se habla de Windows y C/C++.

16mbps? Pues USB o FireWire.. me temo que si quieres acceder de manera directa a los datos tendrás que programar a nivel de driver. El SDK de Microsoft para drivers y bajo nivel se llama DDK, y ya no está disponible para descarga gratuita. Tendrás que buscarlo en redes p2p o encargarlo a Microsoft.

Con puertos serie, como ha escrito Sés, es posible la lectura/escritura con Win32, sin demasiadas complicaciones...  pero la velocidad máxima del puerto es de unos 9000bps

PD: ¿ Y para qué necesitas hacer ésto? Si se puede saber.. :rolleyes:  

averbell

 Si el caso es vb te podre ayudar basante , ya que me dedicava a sacar protocolos de los automatas i programarlos mediante puerto serie entre otras cosas

Pogacha

 Si, pido perdon, Visual C++ / win32, y es para un proyecto secreto del curro :ph34r:,  sobre tratado de señales y se requiere adquirir mucha informacion a alta velocidad y tiempo constante, el tema es actualizarme, la ultima vez utilice DOS y puerto paralelo.
Sobre el puerto serie mas o menos tengo idea, el que no se ni encuentro info es el USB.
Si alguien sabe ...
Gracias

nsL

 http://www.lvr.com/usb.htm
http://www.tetradyne.com/dxusb.htm

Es lo poko q encontre por inet en un rato, ya buscare mas si tengo tiempo luego...
Me voy q a las 8 tengo examen practiko de estadistika  (grrr)

Saludos!  B)  
Yo no muero hasta la muerte -

averbell

 en la página de intel tambien habia info y ejemplos para adquirir datos incluso desde VB (usb)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.