Forum: PC-Programmierung Serielle Kommunikation mit MATLAB


von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag
Ich habe einige Probleme meine serielle Kommunikation mit MATLAB in den 
Griff zu kriegen.
Das bild zeigt, wie ich mittels Docklight mit meinem Controller 
kommuniziert habe. Sobald der Controllier initialisiert ist, will ich 
die letzten drei Schritte in einer Schleife laufen lassen, damit ich an 
die Messdaten gelange (bisher noch nicht im MATLAB code).
Wichtig ist noch, dass ich die Software vom Controller nicht verändern 
möchte.
Hat jemand eine Idee, was bei der Kommunikation falsch ist?
Ich kriege nur "ISO15693: [5D0E000000A207E0,5B]" als Antwort, dann kommt 
"Warning: Unexpected Warning: A timeout occurred before the Terminator 
was reached."

Danke für eure Hilfe.

Hier noch meinen MATLAB code:

startMCU =              '0108000304FF0000';
setHighDataRate =       '010C00030410002101020000';
agcTtoggle =            '0109000304F0000000';
ampmToggle =            '0109000304F1FF0000';
setUpAllSensors =       '0113000304180221022D2D2C2C000000000000';
sampleAllSensors =      '01130003041802210001000F00010100400000';
readingBlock0x09 =      '010B000304180220090000';

% reset serial port
instrreset
delete(instrfindall)

%Set Parameter
s = serial('COM4');
set(s, 'BaudRate', 115200, 'DataBits', 8, 'StopBits',1, 'Terminator', 
...
    'CR/LF', 'ByteOrder', 'bigEndian', 'Parity', 'none');

%Communication begin
fopen(s);

% Remove data from input buffer
flushinput(s);

% record file for debugging
s.RecordName = 'myRecord.txt';
record(s);

% start MCU
fprintf(s, startMCU);

% set High Data Rate
fprintf(s, setHighDataRate);

fprintf(s, agcTtoggle);

fprintf(s, ampmToggle);

% convert to 8 byte mode for sampling sensors
fprintf(s, convertTo8ByteMode);

% set up and sample
fprintf(s, setUpAllSensors);
fprintf(s, sampleAllSensors);
fprintf(s, readingBlock0x00);

% delay to sample
pause(0.5);
fprintf(s, readingBlock0x09);


condition = true;
count = 0;
while condition
    received = upper(fscanf(s));
    if strcmp(received, 'REQUEST MODE.');
        count = count+1;
    end
    if count == 3
        condition = false;
    end
end % while condition

data = fscanf(s);

fclose(s);
delete(s);
%Communication end

% delete serial port for further communication
delete(instrfindall)

: Verschoben durch User
von Klaus (Gast)


Lesenswert?

Das Problem hat sich erledigt.
Ich habe nicht beachtet das "fscanf()" einen Terminator an meine Befehle 
anhängt. Somit versteht mein Controller nur den ersten Befehl. Nun 
verwende ich "fwrite()" und es funktioniert.

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.