PC fjärrkontroll: Uppgraderingar[bilder]
PC fjärrkontroll: Uppgraderingar[bilder]
Jag har byggt en trådlösfjärrkontroll till min PC. Jag har slaktat en gammal gamepad och gjort ett nytt kretskort. Kretskortet innehåller en PIC, Kjell o CO AM-modul mottagare, 16 knappar och en analog "mushastighetsspak" samt motstånd och dioder.
Till PC har jag byggt en mottagare som består av en PIC, Kjell o CO AM modul mottagare, lysdiod och är kopplad till PC via parallellporten.
I PC har jag ett C++ med win32API program där man kan välja upp till 3 tangenter per knapp eller musfunktioner. 4 olika lägen finns, för nuvarande
1 = surfning, program,filhantering 2 = spel 3 = winamp 4 = VLC vilka lätt kan programmeras om via ett annat program.
Allt fungerar utmärkt, men jag funderar på att fixa lite saker.
1) göra om parallell kommunikationen till USB. Har skaffat PIC 18 serien med inbyggd USB men har problem att få in det i mitt C++ program. Antar att det smidigaste är att göra en virtuel serieport. Har någon några länkar eller erfarenhet av bibliotek för detta? Och var kan man hitta lämpliga bibliotek
2) Kjell o CO modulerna är lätta att använda, har bra räckvidd men de har för lång "startup" tid....dvs från man börja sända tills datan är stabil tar uppemot 50 ms vilket ger en märkbar fördröjning när man spelar spel. Någon som vet något bättre alternativ, som inte är för dyrt, alt. kretsschema på en krets som är bättre.
Till PC har jag byggt en mottagare som består av en PIC, Kjell o CO AM modul mottagare, lysdiod och är kopplad till PC via parallellporten.
I PC har jag ett C++ med win32API program där man kan välja upp till 3 tangenter per knapp eller musfunktioner. 4 olika lägen finns, för nuvarande
1 = surfning, program,filhantering 2 = spel 3 = winamp 4 = VLC vilka lätt kan programmeras om via ett annat program.
Allt fungerar utmärkt, men jag funderar på att fixa lite saker.
1) göra om parallell kommunikationen till USB. Har skaffat PIC 18 serien med inbyggd USB men har problem att få in det i mitt C++ program. Antar att det smidigaste är att göra en virtuel serieport. Har någon några länkar eller erfarenhet av bibliotek för detta? Och var kan man hitta lämpliga bibliotek
2) Kjell o CO modulerna är lätta att använda, har bra räckvidd men de har för lång "startup" tid....dvs från man börja sända tills datan är stabil tar uppemot 50 ms vilket ger en märkbar fördröjning när man spelar spel. Någon som vet något bättre alternativ, som inte är för dyrt, alt. kretsschema på en krets som är bättre.
Senast redigerad av Rick81 31 december 2005, 17:20:48, redigerad totalt 1 gång.
Re: PC fjärrkontroll: Uppgraderingar
libusb (eller Windows-porten libusb-win32) är rätt smidigt. Jag tror knappast att det kan vara enklare. Man går igenom en lista på vilka enheter som finns inkopplade till USB-portarna och väljer sedan den man vill kommunicera med. Själva kommunikationen består bara av en funktion. Jag har använt det för att kommunicera med en AVR som kör USB (Low-Speed) med control-överföringar. libusb fungerar under Windows, Linux och MacOS X utan att man ska behöva göra några ändringar.Rick81 skrev:1) göra om parallell kommunikationen till USB. Har skaffat PIC 18 serien med inbyggd USB men har problem att få in det i mitt C++ program. Antar att det smidigaste är att göra en virtuel serieport. Har någon några länkar eller erfarenhet av bibliotek för detta? Och var kan man hitta lämpliga bibliotek
Att låta PIC:en agera serieport kan ju också vara ett alternativ. Frågan är vilket sätt som är enklast.
Här kommer bilderna:
Den omgjorda gamepaden(jag vet det är fult med genomskinligt):
observera analoga spaken högst upp till höger, används till att ändra mushastighet
mottagaren som använder sig av parallellporten
mottagaren för USB
C++ programmet. Ettorna visar vilken knapp som är intryckt AD = ad värdet
Den omgjorda gamepaden(jag vet det är fult med genomskinligt):
observera analoga spaken högst upp till höger, används till att ändra mushastighet
mottagaren som använder sig av parallellporten
mottagaren för USB
C++ programmet. Ettorna visar vilken knapp som är intryckt AD = ad värdet
Senast redigerad av Rick81 31 december 2005, 17:58:00, redigerad totalt 1 gång.
Jag har laddat ned biblioteket som du föreslog och tittat lite på det. Verkar vara precis det jag behöver. Har du någon kod man kan få titta på? Är det anpassat för Borland kompilatorn? Jag använder Borland för klassen som sköter parallellporten.cykze skrev:Snyggt gjort! Hur gjorde du med USB-programmeringen i Windows?
Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <usb.h>
int main()
{
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for(bus=usb_get_busses(); bus; bus=bus->next)
for(dev=bus->devices; dev; dev=dev->next)
printf("Vendor: 0x%04X Product: 0x%04X\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
return 0;
}
Det andra alternativet ("Device Driver") som det står om på libusb-win32 är att man tar en exempel-inf-fil och sedan redigerar den och väljer att ladda den när man blir ombedd att installera en drivrutin. Prova sedan med programmet "testlibusb-win.exe" som tydligen ska följa med i paketet för att se om din enhet kan hittas.
Läs mer under rubriken "Installation".
Jag har inte testat libusb under Windows än (ska göra det när jag får tid). Men läser man under Development->Using så verkar det som att det finns färdiga libs för Borlands BCC-kompilator. Du får prova lite.
Kolla även den lilla dokumention som finns på http://libusb.sourceforge.net/doc/
Jag får inte lib USB att funka. Testprogrammet hittar min USB enheter, men när jag testar koden
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <usb.h>
int main()
{
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for(bus=usb_get_busses(); bus; bus=bus->next)
for(dev=bus->devices; dev; dev=dev->next)
printf("Vendor: 0x%04X Product: 0x%04X\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
return 0;
}
så får jag följande felmeddanden:
Error: Unresolved external '_usb_init' referenced from C:\BORLAND\BCC55\BIN\USBT
EST.OBJ
Error: Unresolved external '_usb_find_busses' referenced from C:\BORLAND\BCC55\B
IN\USBTEST.OBJ
Error: Unresolved external '_usb_find_devices' referenced from C:\BORLAND\BCC55\
BIN\USBTEST.OBJ
Error: Unresolved external '_usb_get_busses' referenced from C:\BORLAND\BCC55\BI
N\USBTEST.OBJ
Den hittar usb.h sen vet jag inte varför den klagar. Någon ide?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <usb.h>
int main()
{
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for(bus=usb_get_busses(); bus; bus=bus->next)
for(dev=bus->devices; dev; dev=dev->next)
printf("Vendor: 0x%04X Product: 0x%04X\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
return 0;
}
så får jag följande felmeddanden:
Error: Unresolved external '_usb_init' referenced from C:\BORLAND\BCC55\BIN\USBT
EST.OBJ
Error: Unresolved external '_usb_find_busses' referenced from C:\BORLAND\BCC55\B
IN\USBTEST.OBJ
Error: Unresolved external '_usb_find_devices' referenced from C:\BORLAND\BCC55\
BIN\USBTEST.OBJ
Error: Unresolved external '_usb_get_busses' referenced from C:\BORLAND\BCC55\BI
N\USBTEST.OBJ
Den hittar usb.h sen vet jag inte varför den klagar. Någon ide?
Senast redigerad av Rick81 7 januari 2006, 00:31:21, redigerad totalt 2 gånger.