Plotta data från com-porten (seriel) i realtid?
Plotta data från com-porten (seriel) i realtid?
Hej.
Undrar om någon vet något gratis program där man kan plotta data som skickas från en microcontroller till serie-porten i realtid?
/J
Undrar om någon vet något gratis program där man kan plotta data som skickas från en microcontroller till serie-porten i realtid?
/J
"Bray´s" terminalprogram har en enkel grafisk plotfunktion för inkommande bytes (0-255 på y-axeln alltså). Inkommande data skrivs också ut som ASCII, bin, hex och dec.
Gå till denna sida och sök efter termv19b.zip (direktlänk)
Gå till denna sida och sök efter termv19b.zip (direktlänk)
Som jag misstänkte, det finns en nyare version av programmet men programskaparens sida är nere sedan en tid och jag länkade visst till en mirror där bara den gamla versionen fanns.
Jag tror jag har den nyare versionen på jobbet, lägger upp den om jag hittar den.
Edit: Whii, jag hittade den här hemma (finns en knapp i programmet som heter "Graph"): http://jojjas.mine.nu/misc/terminal/
Jag tror jag har den nyare versionen på jobbet, lägger upp den om jag hittar den.
Edit: Whii, jag hittade den här hemma (finns en knapp i programmet som heter "Graph"): http://jojjas.mine.nu/misc/terminal/
Jag kör portmon från microsoft (gratis är den också). 
http://www.microsoft.com/technet/sysint ... rtmon.mspx

http://www.microsoft.com/technet/sysint ... rtmon.mspx
Jag har varit ute efter lite samma sak och funderade på att skriva något själv i tex Java men stödet för serieport i Java är dåligt och det kommer bli ganska krångligt bara för att få upp en plot och inte speciellt flexibelt.
Därför tänkte jag istället använda Matlab bland annat pga att det är bra på att fixa allt som har med numerisk matematik att göra och har bra stöd för serieportskommunikation. Det är ju egentligen ett helt programmeringsspråk det också och om jag inte läst fel så kan man få till enkla grafiska gränssnitt samt att programmen går att kompilera till exekverbara filer.
Bara ett litet tips om man kan lite Matlab. Själv använder jag det i mer eller mindre varje kurs på högskolan och tycker det passar bra att lära sig lite mer om det i egna tillämpningar.
Därför tänkte jag istället använda Matlab bland annat pga att det är bra på att fixa allt som har med numerisk matematik att göra och har bra stöd för serieportskommunikation. Det är ju egentligen ett helt programmeringsspråk det också och om jag inte läst fel så kan man få till enkla grafiska gränssnitt samt att programmen går att kompilera till exekverbara filer.
Bara ett litet tips om man kan lite Matlab. Själv använder jag det i mer eller mindre varje kurs på högskolan och tycker det passar bra att lära sig lite mer om det i egna tillämpningar.
Själv har jag använt detta skript för att plota data från en AVR.
Jag har även tidigare gjort en realtidsplot som plotade data från en DSP. Men tyvärr har jag inte kvar koden.
Kod: Markera allt
clc
clear data;
s1 = serial('COM1'); %define serial port
s1.BaudRate=57600; %define baud rate
fopen(s1); %open serial port
for i= 1 :1500 %acquisition of 100 points
time(i)=toc;
data(i,1)=str2double(fscanf((s1))); %pos1
data(i,2)=str2double(fscanf((s1))); %setpoint
end
figure
plot(data(:,1),'g');
hold on
plot(data(:,2),'r');
xlabel('Pos1');
fclose(s1); %close serial port
Jag roade mig med att fixa till ploten så den plotar i realtid.
M-scriptet
Funktionen: realtimeplot
M-scriptet
Kod: Markera allt
clc
clear data;
h = figure(1);
drawnow
xlim([0 1500])
ylim([0 1024])
s1 = serial('COM1'); %define serial port
s1.BaudRate=57600; %define baud rate
fopen(s1); %open serial port
for i= 1 :3000 %acquisition of 100 points
data(i,1)=str2double(fscanf((s1))); %pos1
data(i,2)=str2double(fscanf((s1))); %setpoint
if(mod(i,10)==0)
realtimeplot(h,i,data(i,1),data(i,2))
end
end
fclose(s1); %close serial port
Kod: Markera allt
function realtimeplot(h,x,t,t2)
hold on
plot(x,t,'b',x,t2,'r')
if(x>1000)
xlim([0+(x-1000) x+500])
end
drawnow
Jag undrar om koden som använts
Jag använder en AT mega 16L.
Använder A/D omvandlaren. Jag läser ut värdet och skickar ut den på porten som ett tal (binärt). Har försökt använda ovanstående kod. Min fundering är om man behöver skicka ett Terminatortecken från microprocessorn. Mitt problem är att detta tecken (tex CR som är 13) kan krocka med det som läses ut från ad omvandlaren.
Jag är nyfiken på hur microdatorkoden ser ut som ni andra använt.
Använder A/D omvandlaren. Jag läser ut värdet och skickar ut den på porten som ett tal (binärt). Har försökt använda ovanstående kod. Min fundering är om man behöver skicka ett Terminatortecken från microprocessorn. Mitt problem är att detta tecken (tex CR som är 13) kan krocka med det som läses ut från ad omvandlaren.
Jag är nyfiken på hur microdatorkoden ser ut som ni andra använt.