Forum: Digitale Signalverarbeitung / DSP / Machine Learning RS232 mit Matlab 6.5 unter XP


von Thomas (Gast)


Lesenswert?

Hallöle,
ich würde gerne die Daten des ADCs eines Atmel-MCs direkt im Matlab
verwursten. Leider geht das nicht so einfach wie ich es mir dachte.
Habe den Beispielcode aus der Help benutzt, geht aber nicht.

s = serial('COM1');
set(s,'BaudRate',9600);
fopen(s);
s.Status %gucken ob Port aufgemacht wird
fprintf(s,'%d','123')
out = fscanf(s,'%d');
fclose(s)
s.Status %gucken ob Port geschlossen wird
delete(s)
clear s

Laut Matlab wird der Port geöffnet und wieder geschlossen (s.Status)
Aber nix gesendet und auch nichts wieder empfangen.

Ich verwende einen Mega16 quasi als Echo über RS232 und Anzeige auf
Display (beides funktioniert auch unabhängig von Matlab).

Hat jemand einen Tipp oder vielleicht ein funktionierendes M-File?

Danke

von Alex (Gast)


Lesenswert?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%
% Start serial communication
function s = start_serial ()

if length (instrfind) > 0
    fclose (instrfind);
end
s = serial('COM1',...
           'BaudRate', 9600,...
           'Parity', 'none',...
           'DataBits', 8,...
           'StopBits', 1,...
       'InputBufferSize', 1024,...
           'OutputBufferSize', 1024,...
           'Timeout', 2);
fopen(s);
disp ('COM-Port opened successfully');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%
% Stop serial communication
function stop_serial (s)

fclose (s);
clear s;
disp ('COM-Port closed successfully');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%
% Wait for response
function err = wait_response (s, time)

err = 0;
tic;
while (s.BytesAvailable == 0)
    if (toc > time)
        err = 1;
        break;
    end
end

von Alex (Gast)


Lesenswert?

Schreiben und lesen wirst du ja dann wohl hinbekommen :)

von Miralp (Gast)


Lesenswert?

Hallo,
Es gibt ein Bug für Matlab 6.5 und RS 232.
Aber es gibt ein patch :)

http://newsreader.mathworks.com/WebX/.ef37f39?50@743.BwaTbs83VVz@

(Entschuldigung für mein Deutsch)

von Dirk (Gast)


Lesenswert?

@ Ales, hab deinen Voirschlag auch mal versucht, leider nur mit wenig 
Erfolg. Ich wollte Daten versenden über die serielle Schnittstelle. 
Senden funst auch. Áber es liegen keine Bytes zum abholen bereit und bei 
meinem Empfänger Host wird mir eine warnung aus gegeben.
Hier ist mal der Asuzug von meinem Empfänger

COM-Port opened successfully
Warning: A timeout occurred before the Terminator was reached.
(Type "warning off MATLAB:serial:fscanf:unsuccessfulRead" to suppress 
this warning.)

   Serial Port Object : Serial-COM1

   Communication Settings
      Port:               COM1
      BaudRate:           9600
      Terminator:         'LF'

   Communication State
      Status:             open
      RecordStatus:       off

   Read/Write State
      TransferStatus:     idle
      BytesAvailable:     0
      ValuesReceived:     0
      ValuesSent:         0
Kannst du mir weiter helfen??

von Irauschek (Gast)


Lesenswert?

Hallo für alle, die neuere Versionen von Matlab verwenden - ich verwende 
7.6.0 - können binäre Daten mit Hilfe von fwrite über die geöffnete 
serielle Schnittstelle versenden.
z.B.:  fwrite(serial_pointer_obj, data, 'uint8');

Formatiertes schreiben belingt mit fprintf.

Binäres Empfangen funktioniert folgender maßen:
[data,count,msg] = fread(serial_pointer_obj, amount, 'uint8');

Wobei msg die Fehlermeldung beinhaltet, wenn zum Beispiel ein Timeout 
auftritt. Bei erfolgreichem Empfang ist isempty(msg) == true.

Formatiertes lesen ermöglicht fscanf.

Die formatierten Varianten sind jedoch nicht für die Kommunikation mit 
einem µC zu empfehlen!

von john (Gast)


Lesenswert?

i want to use matlab to talk to one sensor, before using matlab, i 
already use hyper terminal program to get the data from sensor to Pc, 
the requested protocol is to send instruction"00 02 3B AA", however i 
can not get the responce of the sensor. can somebody help me?the matlab 
code is listed below,
g = serial('COM3');
%set(s,'BaudRate',19200);
%s = serial('COM3','BAUD',19200);
!mode com3:19200,n,8,1
fopen(g);
as=['00','02','3B','AA'];
fwrite(g,as,'uint8');
mydata=fread(g,7,'uint8');
fclose(g)
delete(g)
clear g

von miland (Gast)


Angehängte Dateien:

Lesenswert?

hi,
did you find the problem?
i habe the same problem but i convert my ACII daten in bibary daten and 
this works with matlab and i can move my motor.

you can how its possible in my data.

there is the funtion MVP with TMCL-IDE

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
Noch kein Account? Hier anmelden.