(Ich hab das schon im DSP Bereich gepostet und meine da ist es im falschen Forum.) --------------------------------------------- Messwert vom Sensor empfangen: Sensor ---> µC ---> RS232 ---> Matlab Sollwert senden: Matlab ---> RS232 ---> µC ---> Aktor --------------------------------------------- (alles natürlich in Echtzeit) Hi, also ich hab es jetzt soweit hinbekommen dass ich senden kann. Irgnedwie ragiert aber mein Mikrocontroller viel zu langsam auf die Befehle. Ich hab gemerkt das Matlab die Daten irgendwie Puffert und dann Stück für Stück weitergibt. Also der Flashenhals ist (glaube ich zu mindest) bei Matlab. Breche ich die While-Schleiche ab bewegt sich mein Motor immer noch. Hier schreibt einer, das in Matlab der Sender ( fprintf(...) ) Process eine sehr kleine Priorität hat und dadurch anscheinend es zum Geschwindigkeitseinbruch kommt. http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/thread/770c29792893e31d/5e8ca900a8b9946b#5e8ca900a8b9946b Ich hab jetzt ca. 4 Stunden lang gesucht und bin nicht weitegekommen. Hier mein Skript: Eine Zahl wird im 10 ms Takt von 1 bis 1000 hoch und wieder runtergezählt und dabei jeweils einmal rausgesendet. Würde mich sehr über Hilfe freuen.
1 | % Creating serial port object |
2 | serobjw = serial('/dev/cu.SERIAL1-SPP-1'); |
3 | |
4 | %Set connection properties |
5 | serobjw.Baudrate = 115200; % Set the baud rate at the specific value |
6 | set(serobjw, 'Parity', 'none') ; % Set parity as none |
7 | set(serobjw, 'Databits', 8) ; % set the number of data bits |
8 | set(serobjw, 'StopBits', 1) ; % set number of stop bits as 1 |
9 | set(serobjw, 'FlowContro', 'none') ; % set FlowContro to none |
10 | |
11 | set(serobjw, 'OutputBufferSize', 100) ; |
12 | |
13 | |
14 | fopen(serobjw) ; |
15 | |
16 | |
17 | |
18 | speed = 100; |
19 | tempCountUp = 1; |
20 | |
21 | tempStringPart1 = '['; |
22 | tempStringPart2 = ']'; |
23 | |
24 | |
25 | |
26 | while (1) |
27 | |
28 | cString = sprintf('%s%05.0f%s', tempStringPart1,speed,tempStringPart2); |
29 | |
30 | if (strcmp(serobjw.TransferStatus,'write') == 0) |
31 | fprintf(serobjw,cString,'async'); |
32 | end
|
33 | |
34 | if(speed == 1) |
35 | tempCountUp = 1; |
36 | end
|
37 | |
38 | if(speed == 1000) |
39 | tempCountUp = 0; |
40 | end
|
41 | |
42 | if(tempCountUp == 1) |
43 | speed = speed + 1; |
44 | end
|
45 | |
46 | if(tempCountUp == 0) |
47 | speed = speed - 1; |
48 | end
|
49 | |
50 | cString
|
51 | |
52 | pause(0.01); |
53 | |
54 | end
|