PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitstempel Datenübertragung Arudino Matlab



Trocadero
15.06.2016, 09:00
Hallo zusammen,

ich übertrage Spannungswerte vom Arduino Mega Board an Matlab. Das funktioniert auch soweit. Über die Spannungswerte möchte ich dann integrieren, um den Strom zu berechnen und anschließend die Ladung.
Da ich die Ladung über die Integration des Stroms nach der Zeit bestimmen kann, würde ich nun dem ganzen gernen einen Zeitstempel verpassen. Bisher lese ich einfach nur die Daten in matlab ein, so schnell wie sie vom Arduino gesendet werden.



delete(instrfind({'Port'},{'COM5'}));
s = serial('COM5', 'BaudRate', 9600);
fopen(s);
voltage_history=zeros(1,1000);
time=zeros(1,1000);
current=zeros(1,1000);
for j=1:2
a=fscanf(s,'%s');
if a==':'
for i=1:1000
voltage_history(i)=fscanf(s,'%f');
time(i)=i;
current(i)=voltage_history(i)/150573;
end
end
end
fclose(s);
delete(s);


Dazu stellen sich mir jetzt ein paar Fragen und hoffe ihr könnt sie mir beantworten:
Wie schnell sendet das Arduino eigentlich die Spannungswerte?
Liest Matlab alle Werte ein, oder gehen auch manche Werte verloren, weil es diese vielleicht nicht so schnell verarbeiten kann?

Bisher kann ich nur ein Diagram erstellen mit y-Achse = Spannung und x-Achse = Anzahl an Werten. Die x-Achse würde ich gerne durch Zeit ersetzen. Habe natürlich schon im Internet gesucht, war mit den Ergebnissen aber nicht wirklich zufrieden. Mache ich das am Besten mit tic toc, oder kann man irgendwie die Milisekunden mitzählen?

Viele Grüße

Ceos
15.06.2016, 09:34
sende Geschwindigkeit definiert sich als Maximum aus deiner (Baudrate / (10Bit pro Byte)) bzw. wie schnell dein Ardunio messen kann .. für eine genauere Aussage müsste man den Ardunio Code sehen :)

Verloren gehen halte ich jetzt eher für unwahrscheinlich solange du innerhalb der Schleife nicht mit irgendwelchen krassen Berechnungen anfängst :)

Im Controller einen Timer mitlaufen lassen und den Timerwert immer mit senden halte ich für die beste Option!

:timerwertalsinteger_floatwert:timerwertalsinteger _floatwert:timerwertalsinteger_floatwert so nach dem Schema eventuell :) nur kein " . , : - + " als trennzeichen verwenden

Trocadero
15.06.2016, 10:59
Okay, hab es hinbekommen einfach mit


unsigned long time;
time = millis();
Serial.println(time);


Die Baudrate von meinem Arduino habe ich auf 9600 gestellt. Stelle ich beispielsweise 115200 ein, so werden mir irgendwelche Hieroglyphen geschickt. Bei 9600 geht es aber. Woran liegt das?
Wenn ich das richtig verstanden habe, würden bei 115200 therotisch mehr Daten gesendet werden, oder?

Ceos
15.06.2016, 11:28
sicher doch, je mehr baud == symbole pro Zeit um so mehr Bit/Byte pro Zeit ... je nachdem ob deine MEssroutine entsprechend schnell DAte liefern kann oder dort irgendwelche Pause entstehen

wenn du einen Fluss voll Wasser hast aber nur eine 10Zoll Leitung begrenzt die Leitung (Baudrate) wenn du aber nur pro Minute 1 Eimer WAsser hast und dann eine 10M Pipeline begrenzt dein Input die Daten :D