Conversione da 31250Kbps a...

Salve, vi espongo il mio problema: Ho 10 bit (1° bit di start, 8 bit di dati, 10° bit di stop) che "viaggiano" ad una velocità di 31250 bit per secondo (è lo standard MIDI) e vorrei portarli ad una velocità tale da poterli trasmettere alla porta seriale di un PC (quindi 19200 o 38400 bps). Come posso fare? Potrei risolvere con un PIC? Visto che si tratta del protocollo midi (e quindi di musica) posso incorrere, utilizzando un PIC, in latenze esagerate tale da rendere inutile l'interfaccia? Purtroppo ho l'esigenza di utilizzare o la seriale o la usb (quindi neanche la porta a 15 poli della scheda audio che veniva prima utilizzata per le interfacce midi) Grazie a tutti per l'aiuto! David

Reply to
David
Loading thread data ...

si o scegli un pic con la doppia uart o ne realizzi una software e l'altra con l'usart interna

a 38400 lato PC non dovresti avere problemi e la latenza di dovrebbe ridurre a poco piu' del tempo di trasmissione di un byte

ti propongo una 'buona' soluzione alternativa

ftdi ft232r dovrebbe essere in grado di funzionare direttamente a 31250 e la ftdi fornisce i driver per la seriale virtuale su USB gratuiti. se riesci a recuperare il moduletto DIP sei praticamente al 99% del lavoro

Reply to
mmm

David a =E9crit :

giano"

di

Uhm.. Se non mi sbaglio, in passato avevo visto degli adattatori MIDI quick&dirty che funzionavano sulla seriale in questo modo. Non conosco la loro affidabilit=E0, ma cercando un po' ho trovato qualcosa del genere:

formatting link
Che gi=E0 usa un MAX232 ed un fotoaccoppiatore, ci sono delle versioni ancora pi=F9 semplici (sconsigliabili, per non dir di peggio) che usano solo due resistenze.

"The closest that most serial cards and/or drivers inside PCs can come to the MIDI Baud rate is 28800 or 38400 Baud --exceeding the 1% margin that MIDI defines. Therefore PCs will typically need either a special RS232 card or an interface with a memory buffer and a Baud rate converter (typically based in a microcontroller). As an aside, the USB-to-RS232 adapters that we tested with also supported only the common "PC" Baud rates, so they will likely fail either."

C'=E8 anche qualcuno che si =E8 divertito a modificare una seriale per cambiarne la velocit=E0:

formatting link

Se vuoi costruire qualcosa, puoi anche usare un pic con due USART (come gi=E0 detto), oppure due pic (tipo 16f628) per gestire i due sensi di comunicazione.

L'autore cita un'interfaccia RS232 capace di funzionare su velocit=E0 non standard. Ad ogni modo, una interfaccia commerciale USB costa poco ormai, se =E8 questo che ti serve...

Se non sono indiscreto, a cosa ti serve esattamente? Magari un adattatore RS232/MIDI non =E8 la soluzione pi=F9 pulita che possa esistere e possiamo darti una mano conoscendo pi=F9 il tuo problema.

Reply to
Darwin

"mmm" ha scritto nel messaggio news:ea35k0$3u7$ snipped-for-privacy@news.unina.it...

Ok ;-)

Perfetto :D

Faccio subito una ricerca su internet! Ti ringrazio per l'aiuto!

Reply to
David

"Darwin" ha scritto:

Ti ringrazio per il link :), mi sono già messo all'opera per studiarlo

Non voglio arrivare a questo punto :)

No no nessuna indiscrezione :) la devo usare per connettere la mia tastiera musicale al portatile nuovo. Lo so che oramai si trovano interfacce Midi per poche decine di euro, ma è più bello il "fai da te" :-D (se proprio non ci riesco, mi toccherà comprarla nuova....ma almeno ci avrò provato :D) Grazie per l'aiuto Ciao

David

Reply to
David

"mmm" ha scritto:

Mi puoi dire qualche modello che ha la doppia usart? Grazie :)

David

Reply to
David

ma i programmi che useresti per controllare la tastiera supportano questa interfaccia 'fai da te' ?

Reply to
mmm

a memoria c'e' qualcosa nella serie 18 ma niente di umanamente saldabile e sopratutto un po' eccessivo visto che hanno poi risorse ad iosa,

se ti orienti sui pic scegli qualcosa della serie 18 ed usa la seconda seriale software

microchip mette a disposizione il compilatore C con una buona libreria SW.

piuttosto i chip FTDI li hai lasciati perdere ? tipo qualcosa del genere

formatting link

anche perche' hai la fortuna di avere un portatile con la seriale ?

Reply to
mmm

"mmm" ha scritto:

Ok ^__^

Perchè tra costo del chip e spese di spedizione mi converrebbe di più comprare l'interfaccia bella e pronta :) Per questo volevo fare qualcosa di economico e con chip che posso comprare dal negozio vicino casa :)

Reply to
David

"mmm" ha scritto:

Bhe l'interfaccia "fai da me" deve seguire lo standard MIDI e quindi utilizzando i driver generici (universal drive midi, citati anche nel link al file di testo postato da Darwin) dovrei riuscire a far funzionare tutto! Per quanto rigurda i programmi ce ne sono un'infinità (Cubase, Nuendo, Adobe Audition, Sony Acid Pro eccc.)

Ciao

Reply to
David

David a =E9crit :

(a proposito dei chip FTDI)

Peccato, sono soluzioni molto simpatiche.

Mah, io direi che la soluzione che comporta il minor dispendio di energie =E8 l'utilizzo di due PIC, uno per direzione. Si puo' fare anche con uno solo, implementando USART completa via software, ma non =E8 banalissimo e porterebbe via molto tempo. Pi=F9 che altro, il problema =E8 la ricezione, spedire i dati =E8 semplice, anche via software. Bisogna vedere pero' se puoi settare a velocit=E0 diverse la USART hardware per ricevere e per trasmettere. Al massimo, ricevi in hardware e trasmetti in software. Ma hai gi=E0 usato un PIC?

I driver non dovrebbero essere difficilissimi da scrivere. Dopotutto, si tratta di realizzare un banale layer di adattamento tra la seriale e le chiamate di sistema MIDI (che sono poche, se la memoria non mi inganna). Una volta che fai vedere l'interfaccia al sistema operativo, questa funzioner=E0 con qualunque programma.

Tuttavia, non so se le seriali moderne siano pi=F9 flessibili delle USART hardware di qualche tempo fa, magari si riesce ad impostare in qualche modo una comunicazione a velocit=E0 non standard.

Rimango comunque dell'idea che non vale la pena di seguire questa strada e che sia meglio utilizzare una interfaccia USB/MIDI. Per diverse ragioni, non ultima quella che sarebbe probabilmente pi=F9 affidabile e che la seriale sta rapidamente scomparendo (con grande dolore degli smanettoni come noi) a favore della USB.

Reply to
Darwin

"Darwin" ha scritto:

Si si ho già usato i PIC ma mai la Usart! Ho visto che tramite il compilatore Mikrobasic è facilissimo usare la Usart del Pic16F877A. Vedendo il codice di esempio presente nell'help ho pensato a queste poche righe (Solo la trasmissione):

program MidiRs232 ''Trasmissione da MIDI (31250bps) a PC (38400bps) dim received_byte as byte

main: Usart_Init(31250) 'Initialize USART module a 31250bps while true if Usart_Data_Ready = 1 then ' If data is received received_byte = Usart_Read ' Read received data Usart_Init(38400) 'Initialize USART module a 38400bps Usart_Write(received_byte) ' Send data via USART end if wend end.

Quando trovo 5 minuti di tempo preparo la demoboard e lo testo, anche se credo che non funzionerà (troppo semplice :-D) anche perchè essendo stato scritto in un linguaggio ad alto livello la lantenza, probabilmente, è elevata...dovrò mettere mano all'ASM :-/ Tu che dici? Ciao!

Reply to
David

David ha scritto:

Ah, in hardware =E8 semplicissimo.

sart

Anche in assembler, ci sono da fare dei calcoletti per ottenere la velocit=E0 corretta, ma non =E8 molto difficile.

Non conosco il Mikrobasic, ad occhio direi che il modo migliore per gestire la ricezione (perlomeno cosi' ho sempre fatto io) =E8 utilizzando una chiamata ad interruzione. Il PIC puo' sollevarla nel momento in cui ci sono dei dati pronti ricevuti. Altrimenti, il ciclo while viene ripetuto all'infinito ed il microcontrollore puo' difficilmente fare altro che testare continuamente la USART. Comunque, si puo' fare benissimo il tutto anche con il polling, non =E8 detto che nel caso tuo non sia perfino pi=F9 semplice.

E perch=E9 mai?

Bah, i test sono talmente semplici che non credo che ogni istruzione sia tradotta in moltissime istruzioni macchina. Comunque, io non lo trovo poi cosi' difficile l'assembly dei PIC.

Reply to
Darwin

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.