Технический форум по робототехнике.
Myp » 14 янв 2009, 15:53
какой драйвер?
никакой это не драйвер, а программа для работы с компортом.
зайди на любой сайт или форум по программированию pda и скачай там что тебе надо
исходников кругом море
потом под себя подправь как надо или сам напиши по образцу
компорт для винмобайла программируется элементарно
есть даже пошаговые мануалы как програмить прогу передающую данные в компорт
getbraine » 14 янв 2009, 18:17
какой драйвер?
я еще в терминологии не совсем не разбираюсь, так что прошу не пинать....Спасибо за ответ!
Myp » 14 янв 2009, 19:05
кстатит драйвер тебе всётаки понадобится
для шнурка которым ты будешь соединять КПК и плату управления приводами
ну типа как драйвера для шнурка мобильника на комп ставишь такой же принцип и тут будет
MiBBiM » 14 янв 2009, 19:11
встроен в winmobile
EdGull » 14 янв 2009, 19:17
под FT232?
MiBBiM » 14 янв 2009, 19:22
короч я ступил.
прст в факе по моему кпк на 4пда было упоминание про ком-порт - кабель. оказалось что он использует не юсб-хось и виртуальный компорт, а встроенный в асер хардварный
Добавлено спустя 1 минуту 33 секунды:дрова для ft232 можно скачать
здесь
Myp » 14 янв 2009, 23:31
кстате обычно в любом нармальном кпк есть хардварный компорт под именем com1
просто обычно нет шнурков родных распаяных под него...
Сергей » 14 янв 2009, 23:43
Можно открыть доку на мамку и посмотреть распиновку com-порта
MiBBiM » 14 янв 2009, 23:56
getbraine » 17 янв 2009, 12:47
вот что нашел в гугле на тему управления этой платы с кпк:
- Код: Выделить всё • Развернуть
[spoiler]
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.IO.Ports;
using System.IO;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DeviceApplication4
{
public partial class Form1 : Form
{
//import the coredll.dll with the functions QueryPerformanceCounter
//and QueryPerformanceFrequency
[DllImport("coredll.dll")]
extern static int QueryPerformanceCounter(ref long perfCounter);
[DllImport("coredll.dll")]
extern static int QueryPerformanceFrequency(ref long frequency);
//initialize the parameters for the QueryPerformanceCounter
long ctrStart = 0, ctrAkt = 0, ctrEnd = 0;
//initialize the parameters for the SerialPort object
public static String portName = "COM2";
static int baudRate = 115200;
public static Parity parity = Parity.None;
static int dataBits = 7;
public static StopBits stopBits = StopBits.One;
SerialPort IR_COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
//initialize the char-array and variables for the function ManchesterCode and RohCodeToManchester
char[] rohData = new char[14] { '1','1','0','0','0','0','0','0','0','0','0','1','0','0' };
public char[] manchesterData = new char[29];
int index = 0, md = 0;
//initialize the byte-array for the function BurstOut
byte[] bufferBurst = new byte[22] { 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B };
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
GetName();
}
private void button1_Click(object sender, EventArgs e)
{
//set the ToggleBit
ToggleBit();
//manchester coding
RohCodeToManchester();
//open the port and send data
try
{
if (IR_COM.IsOpen == false)
{
IR_COM.Open();
}
//message
statusBar2.Text = "port status: open";
//send data
BurstOut();
//reset the indices
md = 0;
index = 0;
//message
statusBar1.Text = "status: data has been sent";
//close the port
IR_COM.Close();
}
catch (ArgumentOutOfRangeException)
{
label1.Text = "Der ьbergebene Parity-Wert oder Stopbit-Wert ist kein gьltiger Wert in der Enumeration.";
}
catch (NullReferenceException nre)
{
label1.Text = nre.ToString();
}
catch (ArgumentNullException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist NULL (Nothing in Visual Basic).";
}
catch (ArgumentException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist eine leere Zeichenfolge!";
}
catch (IOException)
{
label1.Text = "Der Port kann nicht geцffnet werden!";
}
}
public void GetName()
{
StringBuilder s = new StringBuilder();
String s1;
//get a list of port names
string[] ports = SerialPort.GetPortNames();
//display port names
foreach (string port in ports)
{
s.Append(port+" ");
}
s1 = s.ToString();
label1.Text = "Port Names: "+s1;
}
public void ManchesterCode(char c)
{
if (c == '1')
{ // 1 -> 10
manchesterData[index] = '1';
manchesterData[++index] = '0';
}
if (c == '0')
{ // 0 -> 01
manchesterData[index] = '0';
manchesterData[++index] = '1';
}
index++;
}
public void RohCodeToManchester()
{
for (int i=0; i < rohData.Length; i++)
{ //the array rohData is passed to the function ManchesterCode
ManchesterCode(rohData[i]);
}
//mark the end
manchesterData[28] = 'e';
}
public void ToggleBit()
{
if (rohData[2] == '1') rohData[2] = '0';
else { rohData[2] = '1'; }
}
public void QPC(long data)
{ //start the counter
QueryPerformanceCounter(ref ctrStart);
//specified the end time
ctrEnd = ctrStart + data;
while (ctrAkt < ctrEnd)
{ //wait until the counter reaches the end time
QueryPerformanceCounter(ref ctrAkt);
}
}
public void BurstOut()
{
while (manchesterData[md] != 'e')
{
//pause of 889µs
if (manchesterData[md] == '1' && manchesterData[md + 1] == '0')
{
QPC(319);
}
//pause of 1,778ms
if (manchesterData[md] == '1' && manchesterData[md + 1] == '1')
{
QPC(766);
md++;
}
//burst of 889µs
if (manchesterData[md] == '0' && manchesterData[md + 1] == '1')
{
IR_COM.Write(bufferBurst, 0, 10);
}
//pause of 1,778ms
if (manchesterData[md] == '0' && manchesterData[md + 1] == '0')
{
IR_COM.Write(bufferBurst, 0, 22);
md++;
}
//the end
if (manchesterData[md] == '0' && manchesterData[md + 1] == 'e')
{
IR_COM.Write(bufferBurst, 0, 10);
}
md++;
}
}
}
}[/spoiler]
взял с
http://www.codeproject.com/KB/miscctrl/UniversalRemoteControlPDA.aspx?fid=416965&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2038708правда вопрос остается открытым: что в ней нужно изменить чтобы сей код на C# управлял этой платой?
спасибо за ответы!
getbraine » 17 янв 2009, 20:01
Мой проект предназначен для НЕ танковой платформы,т.е. поворот осуществляется с помощью поворотного двигателя.
Вот первые программные наработки :интерфейс + реализация событий (т.е. написаны обработчики нажатий клавиш).
Осталось написать самые "вкусные вещи", а именно ф-ции:
-
- Код: Выделить всё • Развернуть
private void controllOfFrontEngine(bool active,int rotation)
-
- Код: Выделить всё • Развернуть
private void controllOfBackEngine(double speed, bool active, int rotation)
Они непосредственно будут работать с USB-интерфейсом КПК (т.е. отсылать "сигналы" на USB)
Вот проект ,созданный в MS Visual Studio 2008:
http://rapidshare.com/files/184935980/PDA_and_robot1.rar.html.
Компилироваться все будет под платформу Windows Mobile 5.0
Язык -C#
MiBBiM » 17 янв 2009, 20:28
я канеш не спец в с# (если честно, то я его вообще не знаю

), но если прочитать имена функций, то видно, что это исходник для общения через IR - порт

, что совершенно не нужно вам.
попробую написать исходничек (основан на чистой интуиции, если не запускается я не виноват

)
- Код: Выделить всё • Развернуть
[spoiler]
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.IO.Ports;
using System.IO;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DeviceApplication4
{
public partial class Form1 : Form
{
//initialize the parameters for the SerialPort object
public static String portName = "COM1"; //хардварный порт - ком1, для юсб надо менять
static int baudRate = 115200;
public static Parity parity = Parity.None; //конфигу порта см. в описании устройства
static int dataBits = 7; //которое будете подключать
public static StopBits stopBits = StopBits.One;
SerialPort My_COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);//поменял имя
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
GetName();
}
private void button1_Click(object sender, EventArgs e)
{
//open the port and send data
try
{
if (My_COM.IsOpen == false)
{
My_COM.Open();
}
//message
statusBar2.Text = "port status: open";
//send data
//здесь посылаем данные
//смотрите описание функции Write
//чтобы было понятно как записывать
//вам надо научится записывать строку
My_COM.Write();
//reset the indices
md = 0;
index = 0;
//message
statusBar1.Text = "status: data has been sent";
//close the port
My_COM.Close();
}
//ловим ошибки
catch (ArgumentOutOfRangeException)
{
label1.Text = "Der ьbergebene Parity-Wert oder Stopbit-Wert ist kein gьltiger Wert in der Enumeration.";
}
catch (NullReferenceException nre)
{
label1.Text = nre.ToString();
}
catch (ArgumentNullException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist NULL (Nothing in Visual Basic).";
}
catch (ArgumentException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist eine leere Zeichenfolge!";
}
catch (IOException)
{
label1.Text = "Der Port kann nicht geцffnet werden!";
}
}
//получаем имена доступных портов
public void GetName()
{
StringBuilder s = new StringBuilder();
String s1;
//get a list of port names
string[] ports = SerialPort.GetPortNames();
//display port names
foreach (string port in ports)
{
s.Append(port+" ");
}
s1 = s.ToString();
label1.Text = "Port Names: "+s1;
}
}
}[/spoiler]
п.с. а эти самые ф-ии управления колесами делают только одну вещь - посылают в порт определенную строку. на контроллере вы уже будете это дело обрабатывать
getbraine » 17 янв 2009, 22:03
т.е правильно ли я понимаю ,нужно написать следующее для ф-ций управления двигателями
- Код: Выделить всё • Развернуть
private void controllOfFrontEngine(bool active,int rotation)
{
//initialize the parameters for the SerialPort object
public static String portName = "COM1"; //хардварный порт - ком1, для юсб надо менять
static int baudRate = 115200;
public static Parity parity = Parity.None; //конфигу порта см. в описании устройства
static int dataBits = 7; //которое будете подключать
public static StopBits stopBits = StopBits.One;
SerialPort My_COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);//поменял имя
try
{
if (My_COM.IsOpen == false)
{
My_COM.Open();
}
//message
statusBar2.Text = "port status: open";
//send data
//здесь посылаем данные
//смотрите описание функции Write
//чтобы было понятно как записывать
//вам надо научится записывать строку
My_COM.Write();
//reset the indices
md = 0;
index = 0;
//message
statusBar1.Text = "status: data has been sent";
//close the port
My_COM.Close();
}
//ловим ошибки
catch (ArgumentOutOfRangeException)
{
label1.Text = "Der ьbergebene Parity-Wert oder Stopbit-Wert ist kein gьltiger Wert in der Enumeration.";
}
catch (NullReferenceException nre)
{
label1.Text = nre.ToString();
}
catch (ArgumentNullException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist NULL (Nothing in Visual Basic).";
}
catch (ArgumentException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist eine leere Zeichenfolge!";
}
catch (IOException)
{
label1.Text = "Der Port kann nicht geцffnet werden!";
}
}
}
MiBBiM » 17 янв 2009, 22:38
ненене
ещё раз: все что вам нужно сделать - это отправить строку(байт, массив и т.д, зависит от кода на платформе, управляющей движками) в порт.
- Код: Выделить всё • Развернуть
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.IO.Ports;
using System.IO;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DeviceApplication4
{
public partial class Form1 : Form
{
//initialize the parameters for the SerialPort object
public static String portName = "COM1"; //хардварный порт - ком1, для юсб надо менять
static int baudRate = 115200;
public static Parity parity = Parity.None; //конфигу порта см. в описании устройства
static int dataBits = 7; //которое будете подключать
public static StopBits stopBits = StopBits.One;
SerialPort My_COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);//поменял имя
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
GetName();
}
//нажали на кнопку
private void button1_Click(object sender, EventArgs e)
{
//открываю порт
try
{
if (My_COM.IsOpen == false)
{
My_COM.Open();
}
//оповещаю пользователя
statusBar2.Text = "port status: open";
//выполняю команду
//допустим при нажатии на эту кнопку я запускаю задний движок
controllOfBackEngine(10,true,10);
//reset the indices
md = 0;
index = 0;
//message
statusBar1.Text = "status: data has been sent";
//close the port
My_COM.Close();
}
//ловим ошибки
catch (ArgumentOutOfRangeException)
{
label1.Text = "Der ьbergebene Parity-Wert oder Stopbit-Wert ist kein gьltiger Wert in der Enumeration.";
}
catch (NullReferenceException nre)
{
label1.Text = nre.ToString();
}
catch (ArgumentNullException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist NULL (Nothing in Visual Basic).";
}
catch (ArgumentException)
{
label1.Text = "Der ьbergebene IsOpen-Wert ist eine leere Zeichenfolge!";
}
catch (IOException)
{
label1.Text = "Der Port kann nicht geцffnet werden!";
}
}
//получаем имена доступных портов
public void GetName()
{
StringBuilder s = new StringBuilder();
String s1;
//get a list of port names
string[] ports = SerialPort.GetPortNames();
//display port names
foreach (string port in ports)
{
s.Append(port+" ");
}
s1 = s.ToString();
label1.Text = "Port Names: "+s1;
}
//вот функции управления движками
private void controllOfBackEngine(double speed, bool active, int rotation)
{//делаем одну простую вещь - отправляем команду
My_COM.Write(здесь ваша команда, подробнее об использовании ф-ии см. справку);
}
private void controllOfBackEngine(double speed, bool active, int rotation)
{//делаем одну простую вещь - отправляем команду
My_COM.Write(здесь ваша команда, подробнее об использовании ф-ии см. справку);
}
}
}
вот как-то так

RoboTok » 21 фев 2009, 01:41
Господа, вот такая проблема у меня возникла с FT232RL.
Есть 2 устройства с FT232RL и я хочу их подключить одновременно.
Подключаю и появляется 2 COM порта.
Через терминальную программу пытаюсь общаться, но работает только с одним портом, а второй не работает.
Встречался ли кто с такой проблемой и как можно работать сразу с несколькими виртуальными портами на FT232RL ?