matlab e COM1

ciao!

spero che ci sia qualcuno che conosce il matlab!

- ho un dispositivo che trasmette alla seriale del PC una serie di caratteri

- il dispositivo trasmette di continuo e su questo NON posso intervenire

- usando hyperterminal funziona tutto bene

- per il momento vorrei lasciare da parte il simulink

in matlab dovrei acquisire questi dati e visualizzarli in qualche modo... il problema è che se il dispositivo è gia acceso (sta trasmettendo quindi) mi viene dato un errore sulla fopen() mentre se lo accendo dopo il matlab riamane in attesa e mi tocca chiuderlo :(

il sorgente di prova che ho scritto è questo qui, salvato in un file di nome hello.m e richiamato dalla cmd line scrivendo, appunto, hello

function c = hello; s = serial('COM2'); s.baudRate=38400; s.databits=8; s.parity='none'; s.readAsyncMode='continuous'; s.timeOut=3; s.stopBits=1; s.inputBufferSize=1000; fopen(s); str = fread(s, 30, 'uchar') fclose(s) delete(s) clear s c = 0;

Reply to
ice
Loading thread data ...

Hey ho trovato l'errore..! Hai scritto COM1 in oggetto, ma COM2 nel codice! Ho vinto qualcheccosa? :-P

Scherzi a parte, non ho mai usato porte COM in Matlab, ma ho avuto problemi simili con altri programmi (tipo hyperterminal appunto). Hai provato ogni combinazione lineare di Stacca/Riattacca, Spegni/Riaccendi, Chiudi/Riapri? Altra cosa: è una seriale "vera" o un accrocchio su USB?

E come dice un'amico mio... Bestemmieeeeee!!

Pasu

Reply to
Pasu

no, va beh... ;)

si...

ora ho scritto da zero un programma in C e l'ho compilato con il DJGPP a

32-bit lo lancio dalla shell DOS e funziona perfettamente!!! il mio problema è il MATLAB...

vera seriale

-ice-

Reply to
ice

L'ultima volta che ho usato una seriale - 'na decina di anni fa - per farla funzionare correttamente avevo dovuto connettere insieme RTS e CTS (come in un mull modem).

Vedi anche qui: (Null modem with loop back handshaking)

formatting link

Ciao

Reply to
Massimo Ortolano

posso provarci... ma dal momento che il controllo di flusso non c'è (ne hw ne sw) non credo avrà influenza, no?

grazie!

-ice-

Reply to
ice

"ice" ha scritto

RTS e CTS servono per il controllo di flusso HW (con il controllo di flusso SW non c'entrano niente). Hai parlato di un dispositivo, sai con certezza che questo dispositivo non usa il controllo di flusso HW (o SW)?

Reply to
Marco

esatto

si, ne sono certo perchè:

- in hyperterminal disattivo il controllo di flusso (sia hw che sw) e il tutto funziona

- nel programma che ho scritto in C, il controllo di flusso non l'ho implemementatto e funziona tutto bene

- il cavo che collega il dispositivo alla seriale è un twisted-pair (pin5=massa e pin2=rx)

- in matlab non c'è verso...

ti ringrazio, cmq

-ice-

Reply to
ice

Il giorno Mon, 12 Feb 2007 15:36:00 +0100, "ice" ha scritto:

Finalmente ho trovato un altro utilizzatore del compilatore C DJGPP!!! :-)

Quale funzione usi per comunicare con le seriali? bioscom?

Reply to
Luigi C.

Non ho usato le seriali di Matlab, ma guardando l'help ho il sospetto che tu stia usando in modo sbagliato le proprieta' dell'oggetto tornato da serial (set, non campi puntati). Guarda questo esempio:

formatting link

Ciao,

--
RoV - IW3IPD
http://digilander.libero.it/rvise/
Reply to
RoV

Infatti, in genere, il problema è proprio lì: il tuo dispositivo non ha il controllo di flusso ma matlab potrebbe volerlo; facendo le connessioni dal lato PC come indicato sul link che ti ho dato, al punto "Null modem with loop back handshaking", al programma sembrerà che ci sia il controllo di flusso e la cosa dovrebbe funzionare, se il problema è quello :-)

Reply to
Massimo Ortolano

no, per evitare i problemi di XP legati all'I/O uso accesso diretto alle porte in inportb() e outportb()

-ice-

Reply to
ice

vi ringrazio a tutti per l'intervento... la conclusione è che provato ad usare la versione 7 di matlab (prima usavo la 6.5) e tutto ha funzionato al primo colpo!

2 giorni buttati via per un bug grande quanto un buco nero... e poi uno dovrebbe sborsare centinaia di euro per un coso del genere? boh?

-ice-

Reply to
ice

Il giorno Tue, 13 Feb 2007 15:06:59 +0100, "ice" ha scritto:

Strano, mi ricordo che proprio l'I/O diretto su porte è impossibile con XP. Per questo ero ricorso a bioscom, che utilizza l'interrupt 0x14 del bios.

Mi piacerebbe continuare la discussione ma temo siamo un po' OT...

Ho trovato un ng sul DJGPP: comp.os.msdos.djgpp, voglio provare a vedere se c'è qualche altro... dinosauro che come me non usa VisualC++ :-)

Reply to
Luigi C.

Il giorno Tue, 13 Feb 2007 18:55:22 GMT, Luigi C. ha scritto:

Trovato, tra l'altro al ng partecipa DJ Delorie.

Reply to
Luigi C.

Centinaia? Dì pure migliaia! E' per questo che sono passato a Scilab.

Massimo

Reply to
Massimo Ortolano

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.