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
Anhand der eineindeutigen Seriennummer im USB Device Descriptor. Dafür ist die ja da. fchk
Und wenn es die nicht gibt, anhand der Position im USB-Gerätebaum.
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".
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
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
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...
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?
Mario schrieb: > Eine Frage habe ich noch: Kann ich mittels > "HIDClass::MCHPHIDClass::...." die SERIAL " iSerialNumber:" Nummer > rausfischen? Keine Ahnung, noch nie gesehen ;-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.