Elettronica + software di una periferica USB

Ciao, per la mia tesina di laurea devo sviluppare una tastiera fatta con sensori di tocco di tipo piezoelettrico (i sensori non il tocco :-) ).

La cosa funzionerebbe più o meno così, stando ad un preprototipo che ho visto in dipartimento (usava però un solo sensore, e si interfacciava col pc tramite porta seriale): la matrice di sensori è collegata ad una schedina elettronica con uno stadio amplificante, vari filtri, e un PIC per la trasmissione su seriale. Non era connessa ad un pc però, ma ho visto un video nel quale la schedina era collegata ad un oscilloscopio e si visualizzavano i segnali generati dal piezoelettrico toccandolo.

La mia intenzione, come specificato sul NG it.comp.lang.c, era di usare la porta USB (almeno fino a quando non ho iniziato a capire come funziona ^_^). Mi sono state date molte dritte da brix99luftballons che spero si vorrà accodare pure qui, ma siccome le questioni sollevate sono quais esclusivamente hardware, mi sembra più opportuno chidere qua.

Questo è il messaggio al quale faccio riferimento:

Sul lato host, dipende dal sistema che usi e da che programma vuoi > realizzare... > se vuoi fare colpo, puoi realizzare una interfaccia grafica con tanto di > effetti di > scena, istogrammi, statistiche, simulazione di mouse ... la fantasia non > ha > limiti....

Ottime idee..cmq il progetto definitivo lo stendo la settimana prox col mio responsabile di tesi.

Oppure, se non disponi di VS, puoi realizzare il tutto in java con eclipse > o un qualche altro framework free.

Sì, a questo punto penso di usare Java+Eclipse (ho discreta conoscenza, sono informatico del resto :-) )

Allora, presupponendo che il tuo device USB sia un profilo seriale, > non devi fare niente... in genere Windows riconosce questo tipo > e lo espone come porta seriale standard [Virtuale](che so, COM5 etc..), > Il tuo programma si limita a visualizzare le porte seriali a disposizione > e l' utente sceglie semplicemete quella a cui è collegata il tuo > dispositivo, > imposta il baud-rate etc, il tutto utilizzando le API standard per la > gestione > delle seriali...tutto qua.

Mi sembra davvero fantastica una cosa del genere! La mia domanda, però, è: la USB sarà a tutti gli effetti una seriale (incluso, quindi il limitè di velocità), o sarà comunque una "seriale potenziata"? In questo caso, la scelta della tipologia di trasferimento (Low-Full-High) quando e come viene fatta?

Sono fattibilissime, ma richiedono esperienza,una buona conocenza del > protocollo USB e un minimo di confidenza con strumentazione tipo > oscilloscopio > o logic-state analyzer...tutto qua.

Il protocollo lo sto studiando, l'oscilloscopio sono in grado di usarlo, un L-S A non so cosa sia ^_^

ho usato sia i PIC che gli AVR, e secondo me i micro AVR (Atmel) sono piu' > semplici da usare, anche perche' dispongono di un compilatore C gcc free > integrabile nell' ambiente di sviluppo , mentre per i PIC il compilatore C > non e' > parte dell' ambiente free ma lo devi comperare a parte (a meno che non lo > possiedi gia').

In dipartimento hanno da sempre usato i PIC, penso che compilatori e programmatori ce li abbiano. Io cmq ho un paio di programmatori, uno seriale e uno parallelo. Come software usavo ICPROG

Semplicemente la porta seriale del tuo micro va collegata al chip e basta: > In questo modo, tu usi il bus USB, ma lavori come se usassi due semplici > porte > seriali: sul lato HOST ti trovi i driver gia' fatti e ti devi concentrare > solo sulla > tua applicazione, sul lato device, devi solo sceglierti una CPU adatta che > abbia almeno una UART a disposizione...

Non mi sembra male, ma ti chiedo: è più formativo lavorare in modo più tradizionale, o è altrettanto formativo usare questi chip?

Molte grazie ancora

Reply to
November17
Loading thread data ...

November17 ha scritto:

Per il riconoscimento di un dispositivo Usb, occorre una enumerazione secondo il protocollo standard Usb, altrimenti l'host scarta i dati. Per avere disponibili i dati l'host deve riconoscere e "configurarare" il dispositivo.

Un po' di esperienza è indispensabile, ma uno può anche iniziare a farsi esperienza in questo modo... certo servirà un po' di tempo e buona volontà.

Sul sito Microchip hanno reso disponibile il nuovo firmware MCHPUSB rev. 1.3; si tratta del firmware sviluppato appositamente per il riconoscimento come rs232 standard del dispositivo che invece è connesso tramite Usb. Il programma è un "po' molto" incasinato, come da standard Microchip, ma altrettanto come da standard, funziona e dispone di una buona documentazione; non so quanto sia adatto a neofiti o ad iniziati, in quanto conosco abbastanza l'usb e quindi non sono in grado di giudicare l'impatto del primo approccio. Comunque, è anche disponibile un firmware per l'interfacciamento via Usb di un' interfaccia "tastiera" che mi sa ti toglierebbe gran parte dei problemi; fai un circuito di riconoscimento del tasto premuto, lo associ ad un codice tastiera e lo invii all'host tramite Usb... finito! Se ti interessa, prova a cercare sul sito Microchip i documenti e il firmware relativo alla parola chiave Usb per la serie Pic 18F, dovrebbero uscire i relativi riferimenti. my 2 cents ciao Angelo

Reply to
marcoangelo.r

Il 04 Giu 2008, 12:46, "November17" ha scritto: [...]

^_^).

Non hai bisogno di capire *per ora* come funziona uno dei protocolli più incasinati del mondo informatico. :) Come ti è stato opportunamente suggerito, utilizzare un chip della FTDI per gestire una "seriale usb" è tutto ciò che dovresti fare. Potresti obiettare dicendo che è tutta circuiteria addizionale, ma dovresti fare esattamente lo stesso con una comune seriale, aggiungendo la circuiteria relativa al traslatore di livello "micro->PC". :) Inoltre la comune seriale è ormai obsoleta. Con una interfaccia USB puoi collegarti a qualsiasi pc.

La ricetta che suggerisco è: AVR + FT232R (uno degli ultimi nati, che non necessita nemmeno di un oscillatore esterno).

formatting link

In bocca al lupo! ;)

-------------------------------- Inviato via

formatting link

Reply to
Matricola

E' a tutti gli effetti una seriale: il collo di bottiglia è il massimo baud rate che ha il micro che scegli, di per se' i chip segnalati vanno anche a parecchi mb/s tanto che potresti usarli per interfacciare anche un controller profibus a 12Mbit/sec. Poi il trasferimento dei tuoi dati è effettuato incapsulandoli nel frame USB alla velocità permessa dal chip scelto....

LOGIC STATE ANALYER: permette di vedere i segnali digitali in modo logico, e' una specie di oscilloscopio a molte traccie (da 8 in su), ma i segnali sono rappresentati in modo digitale: e' molto piu' utile di un oscilliscopio per vedere in modo parallelo l' evoluzione di un sistema digitale.

Alla fine è meglio usare i materiali di cui si dispone ;-) ICPROG va benissimo.

Credo che con il tempo che hai, è meglio concentrasi sul progetto concreto :-) Nulla ti vieta poi di fare esperimenti con un chip completo di USB, ma senza patemi d'animo per fare funzionare le cose ...

Brix

Reply to
brix99luftballons

"brix99luftballons" ha scritto nel messaggio news:%sx1k.69205$ snipped-for-privacy@tornado.fastwebnet.it...

Rispondo qua per rispondere un po' a tutti:

Ok, penso accetterò questo suggerimento, che mi avete dato un po' tutti: non voglio fare le cose in grande e poi non riuscire a laurearmi in tempo.

Ho scaricato i datasheet dei componenti suggeriti da Matricola, mi sembra una ottima soluzione. Non ho ancora cercato il software e la documentazione proposta da Angelo, appena ho un po' di tempo esamino anche questa soluzione, i PIC mi garbano di più..l'ignoto fa un po' paura :-)

Non so però come si programmano i microcontroller della Atmel.. l'esperienza che ho coi PIC è minima, con AVR non ne ho proprio!

Crepi il lupo.. vi mostrerò il lavoro finito, ovviamente!

Reply to
November17

Il 04 Giu 2008, 18:07, "November17" ha scritto: [...]

Se adoperi il pic suggerito da marcoangelo non ti serve nient'altro che quello: incorpora l'interfaccia usb e tramite firmware puoi configurarlo come una vera e propria tastiera sfruttando il layer HID del protocollo. Significa niente driver su nessun sistema operativo. Inserisci nella porta usb e vai. E' pure più elegante. :) Conosci meglio i pic, e se ti riesce di districarti nei sorgenti della AN direi che è la soluzione migliore per te.

Buon lavoro. :)

-------------------------------- Inviato via

formatting link

Reply to
Matricola

"Matricola" ha scritto nel messaggio news: snipped-for-privacy@usenet.libero.it...

Allora, ho trovato il toolkit per i 18F che diceva Angelo, solo che non c'è la tastiera dentro, ma solo mouse..

Questa ultima soluzione non la comprendo bene però:

Nel fare ciò che suggerivi tu, cioè AVR+FTDI, andava tutto bene nel senso che programmavo seriale lato device, lato host mi veniva creata una COMx virtuale, era l'TF232R che prendeva il segnale differenziale della USB che veniva dall'host, e usciva tutti i pin della seriale facendo credere al AVR che fosse attaccata una seriale.

Col PIC perchè non è più necessario il FT232R?

Reply to
November17

"November17" ha scritto nel messaggio news:4846d013$0$35954$ snipped-for-privacy@reader2.news.tin.it...

E aggiungo: non posso usare una soluzione tipo PICqualchemodelloxlaserialenormale (tipo quello visto nel preprototipo) che butta i dati al FT232R che butta i dati sull'USB facendo credere al pc di lavorare con una seriale?

Reply to
November17

"November17" ha scritto nel messaggio news:4846d584$0$35966$ snipped-for-privacy@reader2.news.tin.it...

Ovvio che si ;-) Con l' FT232xxx puoi usare qualsiasi tipo di CPU che abbia una UART ..... e secondo me rimane sempre la soluzione piu' semplice.... Se usi il PIC con USB, sicuramente c'e' da fare piu' lavoro, senza benefici sostanziali salvo il risparmio del chip FT232. Tieni conto che se vai con seriale, puoi elegantemente implementare qualche protocollo standard tipo MODBUS che e' molto semplice, e mostrare che il tuo dispositivo può essere interfacciato con uno SCADA standard, come fosse una periferica remota ... ;-) Ciao Brix

Reply to
brix99luftballons

"brix99luftballons" ha scritto nel messaggio news:HQB1k.2588$ snipped-for-privacy@twister2.libero.it...

Anche secondo me, a questo punto :-) Cmq continuo a studiare l'USB "puro".. può tornare utile un giorno :-)

mmm..ho solo una vaga idea di quello di cui stai parlando.. potresti darmi un link/suggerire qualcosa da leggere per comprendere appieno?

Grazie per l'insostituibile aiuto :-)

Reply to
November17

November17 ha scritto:

Lo trovi a:

formatting link

ciao Angelo

Reply to
marcoangelo.r

Uno SCADA è un ambiente per creare interfaccie operatore di supervisione e controllo e sono abbastanza complessi, ma relativamente facili da usare. Permettono tipicamente di interfacciasi ad hardware standard industruale e di utilizzare protocolli standard indistriali in modo nativo o quasi. Sono pacchetti costosi, ma i demo permettono di avere una idea di quello che puo' fare: di solito hanno delle limitazioni sul numero di variabili e punti di IO che puoi usare, ma nel tuo caso, visto che hai una sola perifierica, potresti addirittura svilupparti un atua applicazione completa. Ci sono molti scada, Movicon tra questi e poi questo qua che come demo e' forse il piu' libero:

formatting link

Se googli o guardi in wikipedia trovi molte info (basta cercare SCADA) :-)

Visto che la tua e' una tesi di laurea, dimostrare molti concetti in un colpo solo con lo stesso sforzo potrebbe essere premiante ;-)

Dato che devi interfacciare un tuo oggetto hardware, la prima cosa da fare è definire il protocollo di comunicazione e trasporto dati vero l' host. Farne uno ad hoc va bene, ma riutilizzane uno già pronto e' meglio perchè:

  1. E' uno standard, non bisoggna inventare l' acqua calda.
  2. E' uno standard, quindi documentato.
  3. E' uno standard, quindi supportabile da applicazioni di terze parti
  4. E' uno standard........... Non so' se e' chiaro il concetto....

A questo punto, scelta la via seriale, il protocollo più naturale e' il MODBUS,

formatting link
Anche qui, se googli un poco, trovi materiale ab libitum........... Ovvio che devi implementare solo un subset dei comandi modubus, solo quelli che ti servono (leggi registro, scrivi registro ad esempio) e ti assicuro che si implementa anche in un PIC (o AVR). Se cerci trovi anche sorgenti esempio.

Quindi io farei:

  1. L' hardware seriale via USB, protocollo standard modbus
  2. Una applicazione demo con scada, per dimostrare che il mio oggetto si interfaccia la mondo ;-)
  3. Una applicazione ad hoc, per dimostrare che la so fare (in fondo sei un informatico)

Il tutto condito con migliaia di pagine sui benefici degli standard........

Brix

Reply to
brix99luftballons

"brix99luftballons" ha scritto nel messaggio news:nPN1k.69873$ snipped-for-privacy@tornado.fastwebnet.it...

Ottime proposte, grazie ancora per i consigli! Se sei di MI (o passi dalla zona) hai un drink pagato ;-)

Reply to
November17

Dell' estremo nord della provincia ;-) Auguri, allora. Brix

Reply to
brix99luftballons

"brix99luftballons" ha scritto nel messaggio news:f0Z1k.92958$ snipped-for-privacy@twister1.libero.it...

Grazie! :-)

Reply to
November17

"brix99luftballons" ha scritto nel messaggio news:HQB1k.2588$ snipped-for-privacy@twister2.libero.it...

Mi aggancio un attimo qua per una ulteriore domanda (ho provato a contattarti ma mi da' indirizzo invalido sia hotmail.com che hotmail.it):

Innanzitutto, il "mock-up" del progetto è piaciuto molto al mio responsabile, ti ringrazio tantissimo per questo. Mi ha chiesto, però, se è possibile anche utilizzare il dispositivo in remoto, connettendolo ad una rete locale e facendo spedire i dati (che sono un semplicemente gli identificativi dei tasti premuti) tramite TCP/IP. Ho visto che il protocollo Modbus funziona anche su TCP/IP, ma ti chiedo, vista al tua competenza: a livello hardware, in fase di progettazione, come devo sviluppare la periferica per il supporto della comunicazione tramite TCP/IP?

Grazie ancora!

Reply to
November17

Il 12 Giu 2008, 11:06, "November17" ha scritto: [...]

sono

come

Mi permetto di risponderti. :P Introducendo l'interfaccia di rete e lo stack TCP/IP, la cosa si complica non poco. Esistono dei driver (tipo quello della Microchip) che realizzano la connessione micro->lan, sfruttando la UART del microcontroller, al quale va anche delegata l'implementazione dello stack TCP/IP vero e proprio. Un lavoraccio, anche se esistono implementazioni gratuite nel panorama open source. A livello hardware hai bisogno dei trasformatori e del connettore lan. Puoi trovare anche connettori con trasformatori e led di stato integrati.

La via facile, anche più costosa: moduli all-in-one, tipo quelli della Tibbo, che colleghi ugualmente via UART, ma che implementano già lo stack e molte parti del protocollo. Ci devi solo collegare il connettore di rete. Esempio:

formatting link
Molto comodi, ma costicchiano intorno ai 50-70 euro, su futurashop.it

Altre info:

formatting link

Saluti.

-------------------------------- Inviato via

formatting link

Reply to
Matricola

"Matricola" ha scritto nel messaggio news: snipped-for-privacy@usenet.libero.it...

Ma sei un grande :-) Già per i consigli sul flussante JBC meriti una statua, mi vengono delle saldature degli SMD della cui bellezza non hai idea :-)

Wow :-(

mmm..notevole..non ho capito una cosa: la descrizione dice:

Il circuito all'interno del quale il modulo viene tipicamente utilizzato è denominato "Stand Alone"; il modulo viene affiancato a un LTC1232 utilizzato all'accensione del dispositivo per il reset, e ad un MAX232 per convertire i livelli di tensione dal formato seriale a quelli TTL. Le 4 linee Ethernet sono connesse invece direttamente al modulo.

Cioè bisogna comprare anche l'LTC1232 e il MAX232? E se comprassi direttamente il DS100 non dovrei preoccuparmi di queste cose?

Reply to
November17

"November17" ha scritto nel messaggio news:4850f7e8$0$40307$ snipped-for-privacy@reader5.news.tin.it...

Ah no, mi rispondo parzialmente da solo a quanto dice il documento Being of CMOS type, the serial port and I/O lines of the EM100 can be connected

directly to the serial port pins and I/O lines of most microcontrollers,

microprocessors, etc. An interface IC* must be added to the EM100 externally if

you want to connect the module to a "true" serial port (for example, COM port of

the PC).

Nulla dice per l'LTC1232 però..

Il top sarebbe metterci sia la porta USB con l'FT232 che l'ethernet con EM100/DS100.. e un bello switch per selezionare la porta...

potrebbero esserci problemi secondo te?

Reply to
November17

Il 12 Giu 2008, 12:35, "November17" ha scritto: [...]

Si può fare al 100%, magari aggiungendo della logica di controllo che "spenga" l'interfaccia che non è utilizzata, rendendo le due soluzioni mutuamente esclusive.

Riguardo le seriali, non so dirti con precisione quale dei moduli, ma di sicuro ne trovi di interfacciabili direttamente al micro, senza passare per un transceiver come il MAX232. Se posti un link diretto al doc che leggi, magari appena rientro da pranzo gli do un'occhiata. ;)

A dopo. :)

-------------------------------- Inviato via

formatting link

Reply to
Matricola

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.