реклама на сайте
подробности

 
 
> Застрял на чтении данных с помощью FTDI
zheka
сообщение Sep 11 2011, 15:41
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, есть пару вопросов.
Пишу 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

  }


Где ошибка?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 21:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016