Хочу собрать девайс, который бы управлялся с моего компа. На данный момент мне известно, что такое можно соорудить с помощью микросхем типа FT232 - на компе появляется виртуальный COM порт, а девайс читает информацию через UART. Надеюсь, не ошибся. Хочется понять, можно ли подобное сотворить так, чтобы пользователь устройства, собираясь подключить его к компу, не думал о всяких сложностях, а просто брал USB шнурок и втыкал в девайс и комп, и после установки драйверов все работало- как такое сделать? Вроде есть микрухи, которые общаются с USB компа, а на выходе у них тот же UART?
Еще было бы классно, если от девайса не шел бы шнурок, а вставлялся радиопприемник в то же USB отверстие, а в комп - передатчик; типа как в беспроводных мышах. И тогда отребность в проводах вообще отпадает. Только откуда берется эта пара - приемник/передатчик? У нее есть какое-то официальное название? Девайс в идеале должен поддерживать оба эти подключения. Как это сделать можно, о уважаемые схемотехники? -)
Общение с компом
Для того, чтобы программа зразу понимала, что это - ее девайс, у FTDI есть параметр Description. После обнаружения нового подключения FTDIки нужно просто выполнить ft_open с параметром OPENBYDESCRIPTION (ну, или что-то в таком духе).
Полезная инфа, сенкс. А по поводу беспроводного подключения что-нить подскажешь?
Неа, не видел такого. Неплохая идея для разработки.
А по поводу беспроводного подключения что-нить подскажешь?
Bluetooth не подойдет? Он тоже управляется UART'ом.
Дак автору хочется не уарт передавать, а USB. Кстати, я где-то видел USB передатчики.
Дак автору хочется не уарт передавать, а USB.
В начале упоминались микросхемы USB->UART типа CP2102 или FT232. Поэтому
я и спрашиваю, не устроит ли топикстартера Bluetooth...
Товарищи, может сталкивался кто с подобной проблемой?) Имеется платка pci7841. Это переходничок для компа с pci на can. Плата имеет два независимых контроллера can. Если я конечно описание правильно понял. Вместе с ней шло два файла typedef.h и pci7841.h. Начинаю писать код. Первая задача, которая стоит - узнать версию драйвера устройства.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <process.h>
#include "D:\electronics\projects\test c++\CAN\adlink\pci7841.h"
int main (void){WORD a; //WORD это unsigned short int
a=GetDriverVersion();}
и тут возникает проблема: не компилируется и ругается
unresolved external 'GetDriverVersion' referenced from 'адрес проекта'
функция описана в последнем хедере как
WORD _stdcall GetDriverVersion(void); хотя на самом деле непонятно как она описана, ведь в подключаемом файле она упоминается только этой строкой. Если есть время помогите плиз разобраться.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <process.h>
#include "D:\electronics\projects\test c++\CAN\adlink\pci7841.h"
int main (void){WORD a; //WORD это unsigned short int
a=GetDriverVersion();}
и тут возникает проблема: не компилируется и ругается
unresolved external 'GetDriverVersion' referenced from 'адрес проекта'
функция описана в последнем хедере как
WORD _stdcall GetDriverVersion(void); хотя на самом деле непонятно как она описана, ведь в подключаемом файле она упоминается только этой строкой. Если есть время помогите плиз разобраться.
Ну, нужно подсунуть линкеру lib-файл, который наверняка прилагается.
Наконец то получил заветные байты по can! И возник такой вопрос... А можно ли полученные 32 бита одной опирацией уложить в битовые поля.
Например получил b=0x12345678 на контроллер.
А в памяти контроллера уже есть структурка
struct data
{
unsigned v1:8;
unsigned v2:4;
unsigned v3:20;
} receive;
Сильно хочется сделать так receive=b, но компилятор ругается, пробовал так receive.v1=b, но в этом случае забираются только 8 бит от b... Можно ли подобную задумку осуществить не прибегая к сдвигу битов?
Например получил b=0x12345678 на контроллер.
А в памяти контроллера уже есть структурка
struct data
{
unsigned v1:8;
unsigned v2:4;
unsigned v3:20;
} receive;
Сильно хочется сделать так receive=b, но компилятор ругается, пробовал так receive.v1=b, но в этом случае забираются только 8 бит от b... Можно ли подобную задумку осуществить не прибегая к сдвигу битов?
Блин, причем тут общение с компом?
Как-то так
Код: Выделить всё
struct data
{
union {
struct
{
unsigned v1:8;
unsigned v2:4;
unsigned v3:20;
}
uint32 whole;
}
}
data.whole = 0xffffffff
Как-то так
Всё разобрался!Спасибо! Просто сообщение с компа пришло... )
-
- Сообщения: 162
BSVi писал(а):Блин, причем тут общение с компом?Код: Выделить всё
struct data
{
union {
struct
{
unsigned v1:8;
unsigned v2:4;
unsigned v3:20;
}
uint32 whole;
}
}
data.whole = 0xffffffff
Как-то так
один момент, при играх с юнионом полезно еще структуру приговорить прагмой __packed__
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей