Forum: PC Hard- und Software mehrere Pic Board an einem Rechner anschliessen (USB-hub) aber getrennt steuern


von Okocha (Gast)


Lesenswert?

Hallo Zusammen,

Ich stehe vor folgenden Problem:

Ich habe einen Board, der einen PIC C18 Mikrocontroller hat.
Die Kommunikation mit dem Booard ist mittels eine USB Kabel.
Die Kommunikation lauft mittels einen vordefinierte protocol.

Um die Kommuniaktion mit dem Board zu vereinfachen(user freundlich), 
wurde einen GUI erstellt.
So kann man mit Button-Click einen Befehl ausführen.

Bis hier ist alles Okay und es lauft auch wie es sein muss.

Nun möchte ich statt nur einen Board 6 Board an gleichen PC anschlissen 
und jeweils getrennt steuern.
Meine Frage: Ist das machbar?
Wie kann ich dann unterscheiden zwischen Board_1 und Board_x?


Danke in voraus

von Frank K. (fchk)


Lesenswert?

Anhand der eineindeutigen Seriennummer im USB Device Descriptor. Dafür 
ist die ja da.

fchk

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und wenn es die nicht gibt, anhand der Position im USB-Gerätebaum.

von Okocha (Gast)


Lesenswert?

Hallo Zusammen,


bei mir handelt es sich um eine Human Interfaces Devices.
Wenn es nur einen Board angeschlossen, kann ich Problemlos 
Einschalten/Ausschalten steuern also einwandfrei.

Sobald ich einen zweiten Board anschliesse, könnte ich ihm nicht 
steueren also ob es nicht existiert.
Ich muss die USB Kabel von der erste Board rausstecken, dann kann ich in 
diesem Fall der zweite Board steuern.


Mir ist das ganze Verlauf nicht ganz klar:
Wie soll ich zwischen die Boards unterschieden?
Alle Board haben eigentlich die gleiche Name "USB Descriptor ist gleich 
bei alle Board".

von Picpic (Gast)


Lesenswert?

Okocha schrieb:
> der einen PIC C18 Mikrocontroller

Welchen?

von Okocha (Gast)


Lesenswert?

PIC18F4550

von Frank K. (fchk)


Lesenswert?

Okocha schrieb:

> Alle Board haben eigentlich die gleiche Name "USB Descriptor ist gleich
> bei alle Board".

Siehst Du. Das solltest Du ändern.

Siehe 
http://www.beyondlogic.org/usbnutshell/usb5.shtml#DeviceDescriptors
und dort Nummer 16 iSerialNumber.

Die sollte ein Board eindeutig identifizieren.

fchk

PS: Die Seriennummer wird üblicherweise im EEPROM oder der letzten 
Flash-Page gespeichert oder aus einen 1-Wire ROM oder einem I2C-EEPROM 
mit eingebauter UID/MAC gelesen. Das Format ist nicht definiert, der 
String muss halt nur für jedes Devices einzigartig sein.

: Bearbeitet durch User
von Mario (Gast)


Lesenswert?

Hallo Frank,


ich danke es dir es hat geklappt.
Nun möchte ich die Boards einzeln mit nur einen GUI steuern.

Jetzt wenn ich z.B 3 Board steuern möchte muss ich die SW 3 mal starten.
Das ist nicht unbedingt praktisch.
Ich kann eigentlich alle 3 Board mit nur einen SW steuern, dafür muss 
die Kommunikation
eindeutich sein.

Die Frage ist soll ich bei jedem geschickten Befehl der SerialNummer 
mitübergeben oder wie
soll ich das ambesten tun?


Danke

von Volker S. (vloki)


Lesenswert?

Die PC-Software hast du vermutlich nicht selbst geschrieben, sonst 
würdest du wohl nicht fragen.
Die Software muss alle USB-Geräte öffnen, mit denen kommuniziert werden 
soll. Bisher öffnet sie vermutlich einfach das erste passende, das über 
VID/PID gefunden wird.
Höchst wahrscheinlich muss die PC-Software geändert werden...

von Mario (Gast)


Lesenswert?

Volker S. schrieb:
> Die Software muss alle USB-Geräte öffnen, mit denen kommuniziert werden
> soll. Bisher öffnet sie vermutlich einfach das erste passende, das über
> VID/PID gefunden wird.

Ja das stimmt

Eine Frage habe ich noch: Kann ich mittels 
"HIDClass::MCHPHIDClass::...." die SERIAL " iSerialNumber:" Nummer 
rausfischen?

von Volker S. (vloki)


Lesenswert?

Mario schrieb:
> Eine Frage habe ich noch: Kann ich mittels
> "HIDClass::MCHPHIDClass::...." die SERIAL " iSerialNumber:" Nummer
> rausfischen?

Keine Ahnung, noch nie gesehen ;-)

von Mario (Gast)


Lesenswert?

Die USB Verbindung wird so intialisiert:
1
HIDClass::MCHPHIDClass::USBHIDClassInit(VID,PID,64);
Ist das getun und die VID bzw. PID wie in die Firmware, dann könnte eine 
USB Verbindug hergestellt und mit der Firmware kommunitiziert.

von Volker S. (vloki)


Lesenswert?

Muss wohl eine Sprache sein, die ich nicht benutze...
(ich verwende die C++ X-Plattform HIDAPI von Alan Ott -> 
http://www.signal11.us/oss/hidapi/)

: Bearbeitet durch User
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.