www.mikrocontroller.net

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

Autor: Thomas (Gast)
Datum:

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
Autor: Alex (Gast)
Datum:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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
Autor: Alex (Gast)
Datum:

Schreiben und lesen wirst du ja dann wohl hinbekommen :)
Autor: Miralp (Gast)
Datum:

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@7...

(Entschuldigung für mein Deutsch)
Autor: Dirk (Gast)
Datum:

@ 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??
Autor: Irauschek (Gast)
Datum:

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!
Autor: john (Gast)
Datum:

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
Autor: miland (Gast)
Datum:
Angehängte Dateien:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net