Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Застрял на чтении данных с помощью FTDI
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
zheka
Господа, есть пару вопросов.
Пишу PC-шную часть программы по общению AVR с PC.
Использую C++ Builder и FTDI драйвер (точнее .lib библиотеку)
Определение подклчюенных устройств и чтение служебной информации происходит на ура.
А вот дальше траблы...
Подключаемого устройства пока не имею. Для проверки использую USB Программатор Petka, который имеет свойство отправлять автоматический ответ на посылаемую пустую строку с символом конца строки. Байты у меня отправляются, а вот прием не идет. ПРинимается 0 байт.
Вот код:
Код
void __fastcall TForm1::AdvGlowButton1Click(TObject *Sender)
{
    DWORD dw;
    unsigned char *source;
    unsigned char *dest;
    DWORD len;
     int i;
    source="";
    dest="";
    len=1;
    char S[] = "USB AVR";
    char TxBuffer[128];
    ftStatus = FT_OpenEx(S,FT_OPEN_BY_DESCRIPTION,&ftHandle1);
if (ftStatus == FT_OK) {
// success - device with device description "USB Serial Converter" is open
     Image1->Visible=true;
     Image2->Visible=false;
//         ftStatus = FT_Close(ftHandle1);
}
else {
// failure
     Image1->Visible=false;
     Image2->Visible=true;
}

    FT_SetBaudRate(ftHandle1,FT_BAUD_115200);
    FT_SetDataCharacteristics(ftHandle1,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE);
    FT_SetTimeouts(ftHandle1,300,300);

    FT_ResetDevice(ftHandle1);

    FT_Purge(ftHandle1,FT_PURGE_TX);

// запись данных в устройство



for(i=0;i<1;i++)

{

TxBuffer[i]=0x00;

}

FT_Write(ftHandle1,TxBuffer,1,&dw);
//    FT_Purge(ftHandle1,FT_PURGE_RX);
// отображаем количество переданных байт

    AdvMemo1->Lines->Add(AnsiString("Передано байт : "+ AnsiString(dw)));




  ftStatus=FT_Write(ftHandle1,source,len,&dw);
    AdvMemo1->Lines->Add(AnsiString("Передано байт: "+ AnsiString(dw)));
  ftStatus=FT_Write(ftHandle1,source,len,&dw);
    AdvMemo1->Lines->Add(AnsiString("Передано байт: "+ AnsiString(dw)));
      ftStatus=FT_Write(ftHandle1,source,len,&dw);
    AdvMemo1->Lines->Add(AnsiString("Передано байт 1: "+ AnsiString(dw)));

      ftStatus=FT_Read(ftHandle1,dest,len,&dw);
    AdvMemo1->Lines->Add(AnsiString(ftStatus));
        AdvMemo1->Lines->Add(AnsiString("Принято байт: ")+ AnsiString(dw));


    //    FT_GetModemStatus(ftHandle1,&dw);
//    AdvMemo1->Lines->Add(AnsiString("Статус модема ")+ AnsiString(dw));
   if (    FT_GetModemStatus(ftHandle1,&dw)){

if (dw & MS_CTS_ON)
    AdvMemo1->Lines->Add(AnsiString("MS_CTS on ")); // CTS is on
if (dw & MS_DSR_ON)
    AdvMemo1->Lines->Add(AnsiString("MS_DSR on  ")); // CTS is on
if (dw & MS_RING_ON)
    AdvMemo1->Lines->Add(AnsiString("MS_RI on  ")); // CTS is on
if (dw & MS_RLSD_ON)
    AdvMemo1->Lines->Add(AnsiString("MS_RLSD on  ")); // CTS is on
}
else
    AdvMemo1->Lines->Add(AnsiString("Ошибка")); // FT_W32_GetCommModemStatus failed

  }


Где ошибка?
zheka
Уже разобрался.
Вот, может быть кому поможет http://www.hardw.net/doc/50.htm
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.