Forum: Mikrocontroller und Digitale Elektronik Mega32 bzw. Mega8 <-> USB (HID) <-> PC (Windows). Hat jemand Mini - Code C++


von Waldemar F. (wally)


Lesenswert?

Hallo liebe Wissende,

das Stöbern im Forum und Internet hat mir zwar die Theorie näher 
gebracht jedoch habe ich es immernoch nicht geschafft eine 
funktionierende Verbindung aufzubauen.

Anforderung:
Wie viele von euch möchte ich gelegentlich einige Daten zwischen uC und 
PC hin und her senden. Geschwindigkeit ist egal, nur muss es per USB (am 
besten ohne Treiber -> HID) geschehen.


Ich bitte euch mir mit kleinen Codeschnippseln zu helfen.
Ich brauche einfach nur ein funktionierenden Code sowohl für den uC als 
auch für den PC der ein Zeichen sendet bzw. empfängt. Alleine bekomme 
ich das einfach nicht hin.

Falls du also irgendwann mal eine Kommunikation zwischen PC und uC 
mittels USB und HID hinbekommen hast, bitte lass mir den Code (Teile 
davon) zukommen, sodass ich endlich mal wieder ein Erfolgsmoment bekomme 
:)

Ich weiß man hat viel Arbeit in seinen Code gesteckt und gibt diesen 
ungern ab, jedoch brauche ich keine super-genialen Ideen sondern nur den 
minimalsten Code ... Einstellungen von irgendwelchen Variablen und die 
Übertragungsfunktionen. Das wäre echt genial wenn mir jemand helfen 
könnte.

Vielen Dank und lieben Gruß
Waldemar

von hp-freund (Gast)


Lesenswert?

Hallo Waldemar,
ich bin als erstes mit diesem:

http://www.obdev.at/products/vusb/download.html

im Ordner examples/hid-data gut klar gekommen.

Viel Glück
hp-freund

von Waldemar F. (wally)


Lesenswert?

Hallo nochmal :)
Habe mir nun das Beispiel genauer angesehen. Würde es gerne testen, doch 
beim erstellen der commandline habe ich Probleme. Ich bekomme nachdem 
ich make -f Makefile.windows eingegeben habe:
1
gcc  -O -Wall  -c hidtool.c -o hidtool.o
2
process_begin: CreateProcess(NULL, gcc -O -Wall -c hidtool.c -o hidtool.o, ...) failed.
3
make (e=2): Das System kann die angegebene Datei nicht finden.
4
make: *** [hidtool.o] Error 2

Bin es gewohnt Programme für den PC in einem Studio z.B. Borland bzw. 
Turbo C++ zu schreiben - komme mit der Makefile auf keinen grünen Zweig. 
Die Programme für den uC bekomme ich allerdings hin - das Compilieren 
funktioniert.

Hat also vielleicht jemand ein Hinweis für mich wie ich diese 
Commandline letztendlich zu einer .exe bekomme? Sei es irgend ne 
Einstellung beim GCC oder MINGW oder ein Code für Turbo C++?

Oder hat vielleicht jemand anderen - kürzeren - einfacheren Code der mir 
ein HID Gerät erzeugt bei dem ich einfach irgend ein Zeichen hin und her 
senden kann?

Danke nochmal Leute
Grüße
Waldemar

von hp-freund (Gast)


Lesenswert?

Bei mir gehts.

C:\vusb\vusb-20090822\examples\hid-data\commandline>make -f 
Makefile.windows
gcc  -O -Wall  -c hidtool.c -o hidtool.o
gcc  -O -Wall  -c hiddata.c -o hiddata.o
gcc -o hidtool.exe hidtool.o hiddata.o -lhid -lsetupapi

1. funktioniert gcc allein?
2. hast Du http://libusb-win32.sourceforge.net/ installiert ?

Wenn das nicht funktioniert, wird sich auch kein anderes USB-Programm 
erstellen lassen...

von Christopher G. (cbg)


Lesenswert?

Probier mal oben im Makefile folgenden Eintrag hinzuzufügen.
1
SHELL=cmd.exe
Kann bei diesem Fehler manchmal helfen.

von Waldemar F. (wally)


Lesenswert?

Huhu :)

Also libusb hatte ich nicht installiert - dachte wäre nicht nötig. 
Nachdem ich es eben geladen und installiert hatte ging nach einem 
Neustart meine Maus nicht mehr. Weitere Neustarts haben nichts gebracht. 
libusb hat nicht nur meine Maus sondern auch Netzwerkkarte lahm gelegt. 
Ich musste per Tastatur das Teil wieder deinstallieren ... und tadaa .. 
es geht wieder alles wie gewohnt .. puh - nochmal Glück gehabt :) ... 
ansonsten setze ich mich morgen mal an ein XP Rechner (bin gerade an Win 
7) und probier das libusb da mal zu installieren ...

SHELL=cmd.exe hat leider auch nichts weiter geholfen.

Habe gemerkt, dass gcc nicht richtig funktioniert. Gebe ich gcc in 
meiner Kommandozeile (cmd.exe) ein, so kennt er den Befehl nicht.
Gehe ich allerdings in das Verzeichnis und gebe es dort ein funktioniert 
es:
1
C:\WinAVR-20100110\MinGW\bin>gcc -v
2
Reading specs from ../lib/gcc/mingw32/3.4.5/specs
3
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi
4
th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis
5
able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d
6
isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with
7
out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl
8
e-hash-synchronization --enable-libstdcxx-debug
9
Thread model: win32
10
gcc version 3.4.5 (mingw-vista special r3)
Muss ich gcc etwa irgendwo in Windows eintragen, dass er den Befehl 
kennt? Es ist seltsam, dass die avr-Sachen funktionieren .. nur dieses 
Windowszeug per Makefile habe ich noch nie gemacht :)

Ich denke allerdings wir sind dem Ziel sehr nahe - wenn das dann 
funktioniert kann ich endlich mit Tests beginnen :) Deswegen schonmal 
ein kleines Danke an euch an dieser Stelle.

von Christopher G. (cbg)


Lesenswert?

Die Pfade von make.exe, avr-gcc.exe usw müssen in der PATH 
Umgebungsvariable stehen. Ob Benutzer- oder Systemvariable ist egal aba 
bei einem von beiden müssen die Pfade stehen.

von Waldemar F. (wally)


Lesenswert?

Hi,

ja habe gerade ne Seite gefunden die genau das gleiche sagte - dennoch 
vielen Dank.

Habe bei Umgebungsvariablen unten bei PATH einfach noch
1
C:\WinAVR-20100110\MinGW\bin
 eingetragen - denn da liegt ja die gcc.exe. Danach habe ich mich neu 
angemeldet (PC neustart nicht nötig) und es hat funktioniert.

Konnte jetzt den V-USB-Code auch erfolgreich compilieren .. eine .exe 
wurde erstellt - perfekt. Jetzt geht es erstmal ins Bett und morgen 
versuche ich mich an der Kommunikation :)

von Waldemar F. (wally)


Lesenswert?

Also :)
Ich habe vorhin die minimalkonfiguration gebastelt und mit meiner 
generierten firmware mein mega8 geflasht.
Alles funktioniert einwandfrei - perfekt!
Wobei ich statt der beiden 68Ohm einfach je ein 100Ohm genommen habe.

Danke euch! Nun bin ich einen gewaltigen Schritt in meinem Vorhaben 
weiter.

Der Tipp mit dem vusb war super. An alle die das gleiche vorhaben wie 
ich: einfach gcc ordentlich installieren (mit dem PATH siehe oben) damit 
die .exe erzeugt werden kann. Die Makefiles konfigurieren, also die FUSE 
settings machen bzw. mit dem eigenen Programm die FUSEs setzen - ich 
habe erst FUSE_H - dann das FUSE_L gesetzt. Anschließend die .hex 
generieren, firmware flashen, .exe generieren. Sobald man den uC per USB 
anschließt erkennt er ein HID gerät usw. und meldet, dass es erfolgreich 
installiert wurde. Anschließend die .exe starten .. mit read lesen 
(stehen die ersten paar werte aus dem EEPROM drin) .. mit z.B. write 
0x13, 0x37 einfach schreiben .. und siehe da .. im EEPROM steht nach dem 
nächsten read 1337 im EEPROM ... wunderbar ... :) ..

nun muss ich Code lesen  ändern  anpassen :)

Danke nochmal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.