Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков.

 
Опции темы

FT232 и .NET (C#).

Непрочитано 05.03.2013, 12:50  
LionRJ
Прописка
 
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
LionRJ на пути к лучшему
Восклицание FT232 и .NET (C#).

Не знал в какую тему отнести поэтому сюда. Сделал устройства на основе FTDI232R и bluetooth модуля. Через HyperTerminal работает отлично, отвечает на AT команды. Написал свою программу на C# в Visual Studio. И тут появился странный глюк. Отправлять в FTDI отправялет, и bluetooth модуль видет эти команды (проверяю потом через HyperTerminal), но в ответ ничего не приходит. В буфере всегда 0 байт. События по появлению данных в порту не появляются. Причем если работать с простым аппаратным ком портом компьютера - все отлично работает, данные приходят и уходят. Настройки порта правильные (т.к. модуль настраивается). Кто знает где может быть проблема? Вот код.

Настройка:
Код:
  public Form1()
        {
          InitializeComponent();
           // serialPort1.PortName = cbCOMname.Text;
          theSerialPortNames = System.IO.Ports.SerialPort.GetPortNames();
          cbCOMname.Items.Clear();
          cbCOMname.Items.AddRange(theSerialPortNames);
          serialPort2.BaudRate = 115200;
          serialPort2.DataBits = 8;
          serialPort2.Parity = System.IO.Ports.Parity.None;
          serialPort2.StopBits = System.IO.Ports.StopBits.One;
          //serialPort2.Open();
        }
Открытие порта по кнопке
Код:
private void btConnect_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort2.PortName = cbCOMname.Text;
                serialPort2.Open();
                lbState.Text = "Connected";
                Connected = true;
            }
            catch
            {
                MessageBox.Show("Check your port number");
                lbState.Text = "Can't connect";
            }
        }
Отправка
Код:
        private void btTest_Click(object sender, EventArgs e)
        {
            DataForTexbBox = "";
            serialPort2.Write("AT" + endlit);
        }
Прием:
Код:
      private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(DoUpdate)); //здесь ставлю breekpoint никогда не вызывается
        }
        private void DoUpdate(object s, EventArgs e)
        {
            DataForTexbBox = DataForTexbBox + serialPort2.ReadExisting(); //здесь налогично
        }
Реклама:
LionRJ вне форума  
Непрочитано 05.03.2013, 13:02  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Нужно присоединить к объекту serialPort2 обработчик события DataReceived:
Цитата:
serialPort2.DataReceived += serialPort1_DataReceived;
Yurkin2007 вне форума  
Непрочитано 05.03.2013, 13:06  
LionRJ
Прописка
 
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
LionRJ на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Я делаю это в Конструкторе. Так что это не обязательно. К тому же если подключаться не к FTDI, а к просто COM порту компьютера - то все работает, события срабатывают данные приходят.
LionRJ вне форума  
Непрочитано 05.03.2013, 13:18  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Сообщение от LionRJ Посмотреть сообщение
Я делаю это в Конструкторе
Как-то всё неочевидно. Ну, и где этот Конструктор? У Вас скорее всего путаница с переменными: то serialPort2, то serialPort1, понимаешь ...
Скиньте весь проект, можно будет посмотреть ...
Yurkin2007 вне форума  
Непрочитано 05.03.2013, 13:25  
LionRJ
Прописка
 
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
LionRJ на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Хорошо. Вот проект в VS10
Вложения:
Тип файла: zip Krot.zip (134.0 Кб, 64 просмотров)
LionRJ вне форума  
Непрочитано 05.03.2013, 14:01  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Вы будете смеяться, но у меня Ваш код работает без проблем.
Что я делал: соединил своё устройство с FTDI на борту с компом, появился новый компорт COM4. Запустил по F5 Ваш код, выбрал COM4 из списка. Connect - no problem.
Кнопку TEST чуть подправил
Цитата:
private void btTest_Click(object sender, EventArgs e)
{
DataForTexbBox = "";
serialPort2.Write("V");
}
иначе мой прибор не откликнется (кстати, ему не нужно ждать окончания строки, только один символ V, после сразу - ответ)
Ну, и при нажатии на Test сразу попадаю на breakpoint в serialPort1_DataReceived().

Теперь остаётся осциллографом смотреть, а посылает ли Ваш bluetooth ответ на FTDI чип?
Может ему этот endlit = "\r\n"; не нравится? Может Гипертерминал использует другую комбинацию для окончания строки?
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
LionRJ (05.03.2013)
Непрочитано 05.03.2013, 14:06  
LionRJ
Прописка
 
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
LionRJ на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Весело). Я тоже так думал, поэтому записал параметр в модуль, потом переключился в гипертерминал считал - он его изменил. Затем отсылал команду ресет, после этой команды модуль в течении секунды шлет длиннущую строку. Так я отсылал команду, закрывал порт в своей программе, открывал гипертерминал и получал эту строку, а в своей программе нет). Побывал разные комбинации конца строки, не помогает. Причем я писал программу на LabVIEW там все работает исправно). Да погляжу сегодня осциллографом, и попробую замкнуть TX RX линии FTDI без bluetooth модуля погляжу что будет).
Спасибо за тест. Значит проблема не в FTDI, а в C# (или во мне)). Отпишусь что получилось.
LionRJ вне форума  
Непрочитано 05.03.2013, 14:22  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Попробуйте вместо "\r\n" использовать
System.Environment.NewLine - может поможет.
Boba_spb вне форума  
Непрочитано 06.03.2013, 12:52  
LionRJ
Прописка
 
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
LionRJ на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Замена
Код:
"/r/n"
строкой
Код:
System.Environment.NewLine
не помогла (как выяснилось позже это одно и тоже, работают оба варианта).
Посмотрел осциллографом - модуль отправляет. Также отсоединил его вообще, и закоротил линии напрямую. Тоже самое ответа нет, событие не генерируется. Пробовал на двух других машинах, тоже самое, на 64 битной даже с другими драйверами ftdi - тоже самое. После этого уже хотел использовать сборку для работы с FTDI драйвером напрямую. Но нашел на официальном сайте примеры работы. Запустил один из них и он заработал. Когда открыл исходники оказалось что это для WindowsCE, я его скомпилировал, а он и на винде работает (вот вся сила .NET). Покопался в исходниках нашел строчки
Код:
serialPort1.RtsEnable = true;
serialPort1.DtrEnable = true;
Вставил их себе в код и все заработало как и должно быть, события генерируются байты читаются, все как надо).
Конкретно мне помогла строчка
Код:
serialPort1.RtsEnable = true;
без
Код:
serialPort1.DtrEnable = true;
тоже работает, но я ее оставил.
Почему влияет не пойму. Ведь я отключил управление потоком. Но работает.
Тему можно закрывать, но если кто мне расскажет буду рад, очень любопытно почему так получилось. Всем спасибо.
LionRJ вне форума  
Непрочитано 06.03.2013, 13:37  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: FT232 и .NET (C#).

Про RTS забыл совсем - нарвались тоже разок на чей то переходник USB - RS232 - c тех пор установить RTS - эт закон.
Boba_spb вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Netduino (.net mf) KoliaZP Embedd С 32 07.03.2013 00:00
.NET Gadgeteer Kabron Микроконтроллеры, АЦП, память и т.д 4 01.10.2012 17:42
вопрос по turbobit.net ndreich Отвлекитесь, эмбеддеры! 4 22.01.2010 09:58
net в p-cad... Mozart Proteus, KiCAD и другие ECAD 4 28.12.2006 12:23
[Решено] Чертежей.net.ru Василий Proteus, KiCAD и другие ECAD 0 15.03.2005 22:41


Часовой пояс GMT +4, время: 19:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.