Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков. |
05.03.2013, 12:50
|
|
Прописка
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
|
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(); //здесь налогично
} |
|
|
|
|
05.03.2013, 13:02
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: FT232 и .NET (C#).
Нужно присоединить к объекту serialPort2 обработчик события DataReceived:
Цитата:
|
serialPort2.DataReceived += serialPort1_DataReceived;
|
|
|
|
|
05.03.2013, 13:06
|
|
Прописка
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
|
Re: FT232 и .NET (C#).
Я делаю это в Конструкторе. Так что это не обязательно. К тому же если подключаться не к FTDI, а к просто COM порту компьютера - то все работает, события срабатывают данные приходят.
|
|
|
|
05.03.2013, 13:18
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: FT232 и .NET (C#).
Сообщение от LionRJ
|
Я делаю это в Конструкторе
|
Как-то всё неочевидно. Ну, и где этот Конструктор? У Вас скорее всего путаница с переменными: то serialPort2, то serialPort1, понимаешь ...
Скиньте весь проект, можно будет посмотреть ...
|
|
|
|
05.03.2013, 13:25
|
|
Прописка
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
|
Re: FT232 и .NET (C#).
Хорошо. Вот проект в VS10
|
|
|
|
05.03.2013, 14:01
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
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
|
|
|
05.03.2013, 14:06
|
|
Прописка
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
|
Re: FT232 и .NET (C#).
Весело). Я тоже так думал, поэтому записал параметр в модуль, потом переключился в гипертерминал считал - он его изменил. Затем отсылал команду ресет, после этой команды модуль в течении секунды шлет длиннущую строку. Так я отсылал команду, закрывал порт в своей программе, открывал гипертерминал и получал эту строку, а в своей программе нет). Побывал разные комбинации конца строки, не помогает. Причем я писал программу на LabVIEW там все работает исправно). Да погляжу сегодня осциллографом, и попробую замкнуть TX RX линии FTDI без bluetooth модуля погляжу что будет).
Спасибо за тест. Значит проблема не в FTDI, а в C# (или во мне)). Отпишусь что получилось.
|
|
|
|
05.03.2013, 14:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: FT232 и .NET (C#).
Попробуйте вместо "\r\n" использовать
System.Environment.NewLine - может поможет.
|
|
|
|
06.03.2013, 12:52
|
|
Прописка
Регистрация: 26.06.2007
Сообщений: 136
Сказал спасибо: 61
Сказали Спасибо 20 раз(а) в 17 сообщении(ях)
|
Re: FT232 и .NET (C#).
Замена строкой
Код:
|
System.Environment.NewLine |
не помогла (как выяснилось позже это одно и тоже, работают оба варианта).
Посмотрел осциллографом - модуль отправляет. Также отсоединил его вообще, и закоротил линии напрямую. Тоже самое ответа нет, событие не генерируется. Пробовал на двух других машинах, тоже самое, на 64 битной даже с другими драйверами ftdi - тоже самое. После этого уже хотел использовать сборку для работы с FTDI драйвером напрямую. Но нашел на официальном сайте примеры работы. Запустил один из них и он заработал. Когда открыл исходники оказалось что это для WindowsCE, я его скомпилировал, а он и на винде работает (вот вся сила .NET ). Покопался в исходниках нашел строчки
Код:
|
serialPort1.RtsEnable = true;
serialPort1.DtrEnable = true; |
Вставил их себе в код и все заработало как и должно быть, события генерируются байты читаются, все как надо).
Конкретно мне помогла строчка
Код:
|
serialPort1.RtsEnable = true; |
без
Код:
|
serialPort1.DtrEnable = true; |
тоже работает, но я ее оставил.
Почему влияет не пойму. Ведь я отключил управление потоком. Но работает.
Тему можно закрывать, но если кто мне расскажет буду рад, очень любопытно почему так получилось. Всем спасибо.
|
|
|
|
06.03.2013, 13:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: FT232 и .NET (C#).
Про RTS забыл совсем - нарвались тоже разок на чей то переходник USB - RS232 - c тех пор установить RTS - эт закон.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:22.
|
|