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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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,328
Сказал спасибо: 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,328
Сказал спасибо: 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,328
Сказал спасибо: 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.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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 23:41


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot