none
Comunicação Serial com um sensor de campo magnetico problemas hardware ou software? RRS feed

  • Pergunta

  • Boa tarde pessoal!

    Estou com o seguinte problema estou fazendo um driver de comunicação entre o pc e um magnetômetro (medidor de campo magnético)! O magnetometro comunica via serial e o pc(notebook) somente possui entradas USB, logo estou com um converso UBS-SERIAL(com o chip FTDI). Magnetometro serial RS422, FTDI converte de RS422-USB! 

    O problema se configura nesse etapa, quando olho no gerenciadores de dispositivos o driver USB - local em USB to RS422/485 Serial Converter, está marcado com uma exclamação amarela. E não cria uma porta COM virtual! Primeira dúvida todos os drivers que fazem essa conversão eles criam uma porta COM virtual ou podem fazer a comunicação de uma outra maneira ?

    OBS: Tenho uma unidade inercial (mede aceleraçoes,velocidades angulares , campo magentico) que usa para comunicao RS232 e uso um outro conversor com chip FTDI- 232, e quando e olho em gerenciadores de dispositos está sem a exclamação e ele cria uma porta COM virtual. Com essa unidade inercial consigo comunicar sem problemas! Criei o seguinte programa para abrir a comunicação!

    HANDLE Configure_port(void)

    {
    
      DCB dcb;
      HANDLE hCom;
      BOOL fSuccess;
      TCHAR *pcCommPort = TEXT("COM9"); // Most systems have a COM1 port
    
      // Open a handle to the specified com port.
      hCom = CreateFile( pcCommPort,
              GENERIC_READ | GENERIC_WRITE,
              0,  // must be opened with exclusive-access
              NULL, // default security attributes
              OPEN_EXISTING, // must use OPEN_EXISTING
              0,  // not overlapped I/O
              NULL // hTemplate must be NULL for comm devices
              );
    
      if (hCom == INVALID_HANDLE_VALUE) 
      {
        // Handle the error.
        printf ("CreateFile failed with error %d.\n", GetLastError());
      //    return (1);
      }
    
      // Initialize the DCB structure.
      SecureZeroMemory(&dcb, sizeof(DCB));
      dcb.DCBlength = sizeof(DCB);
    
      // Build on the current configuration by first retrieving all current
      // settings.
      fSuccess = GetCommState(hCom, &dcb);
    
      if (!fSuccess) 
      {
       // Handle the error.
       printf ("GetCommState failed with error %d.\n", GetLastError());
       //return (2);
      }
    
      PrintCommState(dcb);    // Output to console
    
      // Fill in some DCB values and set the com state: 
      // 57,600 bps, 8 data bits, no parity, and 1 stop bit.
      dcb.BaudRate = CBR_115200;   // baud rate
      dcb.ByteSize = 8;       // data size, xmit and rcv
      dcb.Parity  = NOPARITY;   // parity bit
      dcb.StopBits = ONESTOPBIT;  // stop bit
    
      fSuccess = SetCommState(hCom, &dcb);
    
      if (!fSuccess) 
      {
       // Handle the error.
       printf ("SetCommState failed with error %d.\n", GetLastError());
       //return (3);
      }
    
      // Get the comm config again.
      fSuccess = GetCommState(hCom, &dcb);
    
      if (!fSuccess) 
      {
       // Handle the error.
       printf ("GetCommState failed with error %d.\n", GetLastError());
       //return (2);
      }
    
      PrintCommState(dcb);    // Output to console
    
      _tprintf (TEXT("Serial port %s successfully reconfigured.\n"), pcCommPort);
    
      
      system("pause");
    
      return(hCom);
      }

     

    Mas com o primeiro chip FTDI  não consigo comunicar porque não sei se ela criou uma porta COM ou comunica-se de uma outra maneira usando alguma biblioteca diretamente! Existe alguma maneira de descobrir como é feita a comunicação desse chip FTDI?

     

    sexta-feira, 13 de maio de 2011 18:56