Hi, ich habe folgendes Problem: ich möchte gerne 4-5 arrays mit jeweils 4096 32 bit variablen Plotten (matlab, notfalls auch excel) ich sample verschiedene Signale und führe ffts durch. Die Ergebnisse würde ich gerne in ein paar Plots sehen. Nun bin ich am testen und wie das so ist, 3 zeilen code ändern, programm laufen lassen, daten ansehen und nochmal. Das Problem hierbei ist, dass wenn ich die Arrays aus dem debugger (data watch) raus kopiere, atmel studio für jedes array ca. 20 sekunden braucht um mir die daten zu kopieren (rechtsklick copy). über die Uart und dann kopieren geht schon n bisschen schneller aber auch noch recht umständlich. Gibt es ne möglichkeit die arrays direkt in ner text datei oder .cvs zu speichern? sodass ich mit sehr wenig aufwandt meine plots aktualisieren kann? kann möglicherweise atmel studio schon einfacheplots erstellen? irgend eine extention? ich habe leider nichts gefunden. gruss ps: SAMV71 board
Hast du schonmal den Simulator versucht. Oder die Daten direkt als CSV ausgeben lassen und von COM1 direkt in eine Datei schreiben lassen
Also ich habe das Problem mal so gelöst (waren dann doch etwas mehr als 4096 Werte :D): Alles als ASCII über einen Virtual Comport geschickt, dabei ein python script auf dem PC laufen gehabt, was mir eine neue datei erstellt, wenn ein bestimmter String empfangen wird. Dieses Script war ein 10 Zeiler oder so. Bei so wenig Werten, sollte sich das anfühlen, als ob es sofort passiert. Dann hast du eine / mehrere Datein, die du nur noch mit einem matlab script einlesen muss. Ich glaube man kann auch mit matlab direkt auf eine serielle schnittstelle zugreifen, weiß aber nicht genau wie.
Oh was ich fast vergessen hatte, wenn du rumgeizen willst kann man natürlich auch direkt die binärdaten in matlab einlesen.
nfet schrieb: > Alles als ASCII über einen Virtual Comport geschickt, dabei ein python > script auf dem PC laufen gehabt, was mir eine neue datei erstellt, wenn > ein bestimmter String empfangen wird. > Dieses Script war ein 10 Zeiler oder so. An soetwas habe ich auch gedacht, wär auch ne gute Lösung! Leider habe ich keine Ahnung wie das geht... Dann werd ich mich wohl ein wenig einlesen, wenn es nicht so Viel Aufwand ist. Danke!
In der "guten alten Zeit" (als sogar die Gummistiefel noch aus Leder waren), hätte man da einfach im Terminalprogramm eine bestimmte Tastenkombination gedrückt, die bei der Gegenstelle eine x-, y- oder z-Modem-Dateiübertragungsanforderung ausgelöst hätte. Die Daten werden dann als Datei verschickt und danach geht's weiter, als wenn nix gewesen wäre. Das geht heute immer noch (die meisten Terminalprogramme unterstützen das), man muß es "nur" auf der µC-Seite implementieren (was ziemlich simpel ist, diese Protokolle dienen nur dazu, eine sichere Binärdatenübertragung über eine "potentiell steuerzeichenverseuchte" Terminalschnittstelle zu realisieren).
Danke für die hilfe, habs in matlab gemacht. War echt nicht so schwer :D wens interessiert:
1 | %run('clean'); |
2 | clear all; |
3 | close all; |
4 | |
5 | delete(instrfindall); |
6 | s = serial('COM2'); %assigns the object s to serial port |
7 | |
8 | %fclose(s); |
9 | set(s, 'InputBufferSize', 256); %number of bytes in inout buffer |
10 | set(s, 'FlowControl', 'none'); |
11 | set(s, 'BaudRate', 115200); |
12 | set(s, 'Parity', 'none'); |
13 | set(s, 'DataBits', 8); |
14 | set(s, 'StopBit', 1); |
15 | set(s, 'Timeout',10); |
16 | set(s, 'Terminator', ' '); |
17 | %clc; |
18 | |
19 | disp(get(s,'Name')); |
20 | prop(1)=(get(s,'BaudRate')); |
21 | prop(2)=(get(s,'DataBits')); |
22 | prop(3)=(get(s, 'StopBit')); |
23 | prop(4)=(get(s, 'InputBufferSize')); |
24 | |
25 | disp(['Port Setup Done!!',num2str(prop)]); |
26 | |
27 | fopen(s); %opens the serial port |
28 | t=1; |
29 | disp('Running'); |
30 | x=0; |
31 | while(t < 2048) %Runs for 200 cycles - if you cant see the symbol, it is "less than" sign. so while (t less than 200) |
32 | |
33 | a = fgets(s); %reads the data from the serial port and stores it to the matrix a |
34 | a = str2num(a); |
35 | x =[x a]; % Merging the value to an array, this is not very computationaly effective, as the array size is dynamic. |
36 | %Consider pre allocation the size of the array to avoid this. But beware, You might loose some important |
37 | %data at the end! |
38 | |
39 | % disp([num2str(t),'th iteration max= ',num2str(a)]); |
40 | % hold on; |
41 | t=t+1; |
42 | a=0; %Clear the buffer |
43 | end |
44 | |
45 | fclose(s); %close the serial port |
46 | disp('done'); |
anschließend hat man die Werte im Array X ganz hilfreich: https://www.youtube.com/watch?v=vepXrSXtqL0
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.