Hallo!
Ich habe folgendes Problem:
Ich versende von einem Microcontroller über die serielle Schnittstelle alle 100ms ein Byte. Drin steht jeweils eine Zahl(0,1,2...255,0,1...). Am Terminal vom Windows kann ich die empfangenen Daten auch sehen und prüfen, ob die richtig ankommen. D.h. die Fehlerursache durch Microcontrollercode oder die serielle Übertragung kann ich ausschliessen.
In Matlab lese ich diese Daten folgendermaßen aus:
s = serial('COM1','BaudRate',57600);
s.InputBufferSize=1;
fopen(s);
while 'TRUE'
akt_paket=fscanf(s,'%i',1)
end
Ist also eine Endlosschleife, die mir die Zahlen ausgeben soll. Das Problem ist, dass ich trotz '%i' im fscanf-Befehl, was für integer steht, nur entsprechende characters in ASCII-Coierung bekomme. Eine Modifikation des Aufrufs lautet:
akt_paket=uint8(fscanf(s,'%i',1))
Das spuckt mir dann auch teilweise die richtigen Zahlen aus mit folgendem Problem:
[] statt 0
1
2
...
126
127
255
255
255
... bis ca. 170, danach
171
172
...
254
255
[]
1
2
...
Ich vermute, dass die Ursache dafür im ASCII-Code selbst liegt, der ja nur 7 bit umfasst. Ich habe ausserdem unicode2native() ausprobiert (also die empfangenen Bytes als UNICODE zu definieren und diese dann nach uint8 zu casten), was aber auch nicht wirklich geholfen hat.
Vielleicht weiß jemand einen Rat.
Danke im voraus.
malaxay
Ich habe folgendes Problem:
Ich versende von einem Microcontroller über die serielle Schnittstelle alle 100ms ein Byte. Drin steht jeweils eine Zahl(0,1,2...255,0,1...). Am Terminal vom Windows kann ich die empfangenen Daten auch sehen und prüfen, ob die richtig ankommen. D.h. die Fehlerursache durch Microcontrollercode oder die serielle Übertragung kann ich ausschliessen.
In Matlab lese ich diese Daten folgendermaßen aus:
s = serial('COM1','BaudRate',57600);
s.InputBufferSize=1;
fopen(s);
while 'TRUE'
akt_paket=fscanf(s,'%i',1)
end
Ist also eine Endlosschleife, die mir die Zahlen ausgeben soll. Das Problem ist, dass ich trotz '%i' im fscanf-Befehl, was für integer steht, nur entsprechende characters in ASCII-Coierung bekomme. Eine Modifikation des Aufrufs lautet:
akt_paket=uint8(fscanf(s,'%i',1))
Das spuckt mir dann auch teilweise die richtigen Zahlen aus mit folgendem Problem:
[] statt 0
1
2
...
126
127
255
255
255
... bis ca. 170, danach
171
172
...
254
255
[]
1
2
...
Ich vermute, dass die Ursache dafür im ASCII-Code selbst liegt, der ja nur 7 bit umfasst. Ich habe ausserdem unicode2native() ausprobiert (also die empfangenen Bytes als UNICODE zu definieren und diese dann nach uint8 zu casten), was aber auch nicht wirklich geholfen hat.
Vielleicht weiß jemand einen Rat.
Danke im voraus.
malaxay