roboforum.ru

Технический форум по робототехнике.

Плата с USB входом

Re: Плата с USB входом

Myp » 14 янв 2009, 15:53

какой драйвер?
никакой это не драйвер, а программа для работы с компортом.

зайди на любой сайт или форум по программированию pda и скачай там что тебе надо
исходников кругом море
потом под себя подправь как надо или сам напиши по образцу

компорт для винмобайла программируется элементарно
есть даже пошаговые мануалы как програмить прогу передающую данные в компорт

Re: Плата с USB входом

getbraine » 14 янв 2009, 18:17

какой драйвер?

я еще в терминологии не совсем не разбираюсь, так что прошу не пинать....Спасибо за ответ!

Re: Плата с USB входом

Myp » 14 янв 2009, 19:05

кстатит драйвер тебе всётаки понадобится
для шнурка которым ты будешь соединять КПК и плату управления приводами
ну типа как драйвера для шнурка мобильника на комп ставишь такой же принцип и тут будет

Re: Плата с USB входом

MiBBiM » 14 янв 2009, 19:11

встроен в winmobile

Re: Плата с USB входом

EdGull » 14 янв 2009, 19:17

под FT232?

Re: Плата с USB входом

MiBBiM » 14 янв 2009, 19:22

короч я ступил.
прст в факе по моему кпк на 4пда было упоминание про ком-порт - кабель. оказалось что он использует не юсб-хось и виртуальный компорт, а встроенный в асер хардварный

Добавлено спустя 1 минуту 33 секунды:
дрова для ft232 можно скачать здесь

Re: Плата с USB входом

Myp » 14 янв 2009, 23:31

кстате обычно в любом нармальном кпк есть хардварный компорт под именем com1

просто обычно нет шнурков родных распаяных под него...

Re: Плата с USB входом

Сергей » 14 янв 2009, 23:43

Можно открыть доку на мамку и посмотреть распиновку com-порта

Re: Плата с USB входом

MiBBiM » 14 янв 2009, 23:56

на пинаутс есть

Re: Плата с USB входом

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# управлял этой платой?
спасибо за ответы!

Re: Плата с USB входом

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#

Re: Плата с USB входом

MiBBiM » 17 янв 2009, 20:28

я канеш не спец в с# (если честно, то я его вообще не знаю :D ), но если прочитать имена функций, то видно, что это исходник для общения через 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]

п.с. а эти самые ф-ии управления колесами делают только одну вещь - посылают в порт определенную строку. на контроллере вы уже будете это дело обрабатывать

Re: Плата с USB входом

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!";
            }
        }
}

Re: Плата с USB входом

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(здесь ваша команда, подробнее об использовании ф-ии см. справку);
        }     
    }
}

вот как-то так :)

Re: Плата с USB входом

RoboTok » 21 фев 2009, 01:41

Господа, вот такая проблема у меня возникла с FT232RL.
Есть 2 устройства с FT232RL и я хочу их подключить одновременно.
Подключаю и появляется 2 COM порта.
Через терминальную программу пытаюсь общаться, но работает только с одним портом, а второй не работает.

Встречался ли кто с такой проблемой и как можно работать сразу с несколькими виртуальными портами на FT232RL ?


Rambler\'s Top100 Mail.ru counter