[RISOLTO] [Windows, stranezze:] Se cambio Arduino, cambia la porta COM...

Mi accade una cosa un po' strana.
Ho diverse schede, tutte Arduino Uno R3 che collego tramite USB (sempre la stessa porta USB).
PC "di sviluppo" con Windows XP, software ultima versione (della serie 1.0).
Installo, qualche tempo fa, collego Arduino, riconosciuta, ricerca driver... tutto funzionante, assegna la porta COM e tutto va bene.
Poi acquisto altre schede Arduino Uno ed iniziano le stranezze.
Collego un Arduino nuovo e... ricerca driver... ops... alla fine gli viene assegnata un'altra porta COM!
Se ricollego il precedente, ottiene la sua vecchia porta COM.
E' come se il PC riconoscesse la scheda e sapesse quale porta COM assegnare.
Capisco che questo potrebbe tornare utile per gestirne più di uno alla volta, ma introduce una certa aleatorietà nell'assegnazione della porta che mi preoccupa. Alcune schede ottengono sempre la stessa COM, per altre invece parte la ricerca driver ed hanno una porta diversa.
Questo mi fa sorgere delle domande che porgo a voi, alla ricerca di qualcuno che possa gettare luce sulla vicenda:

  • per quale motivo accade questo? Come mai alcuni Arduini vengono semplicemente riconosciuti ed ottengono sempre la stessa porta COM e per altri invece parte la ricerca driver, come se fosse la prima volta che collego un Arduino, se sono tutti UNO R3?
  • posso in qualche modo "forzare" l'assegnazione di una determinata porta COM agendo sui driver? Ne avrei la necessità per poter scrivere dei software in Visual Studio e Python senza la seccatura di implementare la scelta della porta, la ricerca della porta, gestione errori ecc ecc ecc, metto una COM e su quella comunicano

In assenza di soluzione per le precedenti stranezze, pensavo di usare la porta USB per la programmazione e poi comunicare tramite convertitore RS232 da collegare alla porta seriale del PC ed ai pin 0-1 ed in questo caso avrei sempre la COM1 senza neanche la necessità di installare i driver (almeno nel PC che deve solo scambiare dati). Ma se posso risolvere in modo più semplice....

Interessante domanda....
A me assegna alla uno com3 e alla due com4 sempre quelle ma non mi ero mai fatto tante domande.... il tuo.caso è molto curioso

Potrebbero avere il VID/PID differente, quindi le vede come 2 periferiche diverse.
In quel caso assegna diverse COM in modo che se dovessero essere attaccate contemporaneamente non ci siano conflitti.

Inoltre se cambi porta USB potrebbe richiedere una nuova installazione dei driver perche cambia l'associazione periferica-portaUSB.

Ricorda che Windows è plug and pray. :grin: :grin:

Bella scoperta! Ogni device ha un ID diverso.

E' tutto normale.

PaoloP:
Ricorda che Windows è plug and pray. :grin: :grin:

veramente ahah :grin:

A me tutte le schede sono su com diverse, tanto che le ho eliminate e ricollegate per averle in ordine.
Ho due COM fisiche (1 e 2)
Arduino Mega->COM3
Uno ->COM4
Uno clonazzo->COM5
Nano->COM6
Mini Pro->COM7

Fai un file .BAT sul C: che contiene:

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

poi lo lanci e da menu->Visualizza->Periferiche nascoste
Nel ramo Porte (COM e LPT) vederai tutte le com e come sono mappate, anche se non c'e' collegato l'hw.

Ogni Interfaccia USB ha il suo Nr identificativo e percui viene attribuito un suo driver e una sua porta COM. Per variare la COM assegnata devi cancellare il driver USB installato. A questo punto l’ arduino che viene collegato prende la prossima COM libera.
È tutto normale.

Ciao Uwe

paulus1969:
E' come se il PC riconoscesse la scheda e sapesse quale porta COM assegnare.

E' assolutamente normale che Windows si comporti in questo modo, non c'è nulla di strano, viene assegnata una nuova com ad ogni nuovo device CDC che colleghi.

Grazie a tutti per le indicazioni.

Il fatto è che io collego sempre alla stessa USB (neanche stacco il cavetto dal PC) diverse schede che sono tutte Arduino UNO R3, è come se alcuni lotti di Arduino avessero un codice di riconoscimento diverso… alcune schede nuove e spacchettate vengono subito commesse alla stessa porta COM virtuale, altre, nuove e spacchettate, fanno partire il riconoscimento - driver - altra porta COM.

Mi è quindi impossibile sapere a priori quale porta COM verrà assegnata.

A questo punto mi si prospettano tre soluzioni:
1 - creo il mio software lato PC in modo da poter scegliere o autoselezionare la porta COM
2 - riesco in qualche modo a forzare l’assegnazione della porta COM agendo sul driver (si può fare?)
3 - metto un convertitore RS232 - TTL sulla COM1 fisica del PC ed uso quella porta per le comunicazioni, riservando la USB alla sola programmazione

Esiste un “driver generico” che mi crea una COM (sempre quella) su una porta USB che serve solo a comunicare come una porta seriale “all’antica”? Potrei risolvere usando questa porta solo per comunicare sui PC che devono solo comunicare, usando quella del driver solo sul PC che uso per la programmazione.

Tutti i software che io conosco hanno la possibilità di modificare la scelta della porta COM. Un motivo ci sarà. :grin:

Già… che bella seccatura! :smiley:

paulus1969:
Mi è quindi impossibile sapere a priori quale porta COM verrà assegnata.

La porta si può assegnare preventivamente nel file .inf, a patto che sia disponibile, è anche possibile dire a windows XP/7/8 che device con lo stesso VID/PID, ma con diverso SID (Serial ID), devono usare sempre la stessa port COM quando collegati ad una specifica porta USB.
Cambiando la porta USB per forza di cose viene assegnata una nuova COM anche se il device è stato enumerato e installato su altra porta USB.
C'è una application note di FTDI che spiega come agire sul registry per non far assegnare una nuova COM ogni volta che colleghi un nuovo device CDC con lo stesso VID/PID ma diverso SID.

astrobeed:
...
C'è una application note di FTDI che spiega come agire sul registry per non far assegnare una nuova COM ogni volta che colleghi un nuovo device CDC con lo stesso VID/PID ma diverso SID.

... direi che le più interessanti (... per gli utenti windows) sono queste tre qui : :wink:

  1. How COM Ports Are Allocated On Driver Installation

  2. Re-Assigning COM Port Numbers Using the Windows Registry

  3. ComPort_Assignment Utility

Guglielmo

Vi ringrazio per le segnalazioni, interessante!
Metto RISOLTO nel titolo, a questo punto.