Jump to content
ELFORUM - Forumul electronistilor

Achizitie date de pe portul serial


A_L_E_X

Recommended Posts

Nu stiu daca am deschis subiectul unde trebuie. Daca nu, rog un moderator sa-l mute. Vreau sa fac un sistem de achizitii de date si sa trimit niste numere prin portul serial si sa fac un grafic pe calculator ori in timp real ori sa capturez un numar de date si dupa aceea sa fac graficul. Daca fac un program in matlab si scriu

s = serial('COM1');fopen(s)out = fscanf(s)figure(1)plot(out)fclose(s)delete(s)clear s
Imi da urmatoarea eroare :

?? Error using ==> serial.fopenPort: COM1 is not available. No ports are available.Use INSTRFIND to determine if other instrument objects are connected to the requested device.Error in ==> Citire_serial at 2fopen(s)
Cum fac portul serial available ? In hyperterminal imi apar datele.

 

Si cum pot sa setez cate date sa citesc ? Adica dupa ce citesc 10 date sa se opreasca si sa-mi afiseze graficul ? As putea pune un contor N si sa-l decrementez dupa fiecare citire cu fscanf ?

Link to comment
Share on other sites

Nu inteleg ce vrei sa spui. Adica sa scriu :

s = serial('0x3F8');
In rest cum e programul ?
Aici e helpul de la functia serial.Si se deschide folosind numele (com1, com2, ...), si nu adresa.Ce a spus Airboy sunt adresele uzuale pentru porturile seriale:

COM1 = 0x3F8COM2 = 0x2F8 :jytuiyu

Nu cumva COM1 e deschis in hyperterminal si vrei sa-l deschizi si in matlab?
Link to comment
Share on other sites

Nu, nu este deschis si hyperteminalul in acel moment.Am observat ca daca rulez programul de 2 ori, a 2-a oara imi da eroarea cu portul serial. Daca inchid si redeschid matlabul imi merge dar la fel doar o singura data. Numai ca atunci cand rulez prima oara mi se deschide fereastra figure numai ca nu apare si graficul in schimb primesc urmatoarea eroare :

??? Error using ==> plotMATLAB:Graphics:Plot.Error in ==> Citire_serial at 5plot(out)
Prima problema e cum fac portul sa fie mereu disponibil, deoarece merge cand vrea el iar a doua problema este cum sa folosesc functia plot deoarece vad ca in fereastra principala matlab imi afiseaza numarul citit (numai unul) dar graficul pauza. Trebuia sa mai scriu ceva la plot. Poate plot(out, N) si sa scriu inainte for N=1:10; ca sa imi citeasca 10 valori ?
Link to comment
Share on other sites

Prima problema e cum fac portul sa fie mereu disponibil, deoarece merge cand vrea el iar a doua problema este cum sa folosesc functia plot deoarece vad ca in fereastra principala matlab imi afiseaza numarul citit (numai unul) dar graficul pauza. Trebuia sa mai scriu ceva la plot. Poate plot(out, N) si sa scriu inainte for N=1:10; ca sa imi citeasca 10 valori ?

Cel mai probabil prima problema e data de faptul ca deschizi portul serial si da eroare si nu mai ajunge sa inchida portul.La problema a doua, vezi ca functia fscanf poate citi mai multe valori pe care le pune intr-un array:

A = fscanf(fileID, format, sizeA) reads sizeA elements into A, and positions the file pointer after the last element read. sizeA can be an integer, or can have the form [m,n].

N-am mai lucrat de mult timp cu matlab, dar probabil codul ar arata ceva de genul:
nr_elem = 10s = serial('COM1');fopen(s)out = fscanf(s, '%d', nr_elem)figure(1)plot(out)fclose(s)delete(s)clear s
Link to comment
Share on other sites

Merge dar se pare ca matlabul are un timp in care pot sa trimit datele. Cum pot sa pun un delay in matlab astfel incat sa astepte 10 secunde sa primeasca datele ?

Warning: A timeout occurred before the read operation completed.
Link to comment
Share on other sites

Am reusit sa fac achizitia de date si am incercat sa citesc un numar infinit de elemente iar fereastra sa se actualizeze la nesfarsit. Dar am o problema : Cum fac sa ies din bucla while ? Am facut un cod de test in care generez o functia y=x^2 in care am folosit o bucla while. Pot sa modific si pentru a achizitiona datele pentru portul serial dar problema e cum fac sa opresc programul fara sa dau end task la procesul matlab :sparge: ? Adica sa-i pun o intrerupere de la tastatura dar nu stiu ce functie se foloseste in Matlab.

clear alli=1;while(1)y(i)=i.^2;figure(1),plot(y),axis([0 100 0 10000])pause(0.1)i=i+1;end
Link to comment
Share on other sites

Merge cu CTRL+C dar daca rulez din nou programul imi da eroarea :

?? Error using ==> serial.fopenPort: COM1 is not available. No ports are available.Use INSTRFIND to determine if other instrument objects are connected to the requested device.Error in ==> Citire_serial at 2fopen(s)
Am incercat intai sa inchid si dupa aceea sa deschid portul serial si tot nu merge

s = serial('COM1');fclose(s)fopen(s)out = fscanf(s)
Link to comment
Share on other sites

  • 2 weeks later...
Guest sebustab

Salut. Vezi ca poti citi date date de la seriala si sa le afisezi grafic cu ajutorul unui program TinyBootloader, scris de un profesor de la facultatea de Electronica si Telecomunicatii din Galati. Programul poate sa scrie PIC-uri pe seriala, dupa ce ai programat in el un bootloader, dar poate si sa-ti afiseze pe ecran datele primite, in mod grafic, si mai are si alte smecherii.

http://www.etc.ugal.ro/cchiculita/softw ... loader.htm

Link to comment
Share on other sites

Guest blacksword

Am incercat intai sa inchid si dupa aceea sa deschid portul serial si tot nu merge

clear all;delete(instrfindall);s = serial('COM1');fclose(s);fopen(s);out = fscanf(s);

Adica sa-i pun o intrerupere de la tastatura dar nu stiu ce functie se foloseste in Matlab.

clear all;i=1;tasta = 'a';while (~strcmp(tasta,'s'))    y(i)=i.^2;    figure(1);    plot(y);    axis([0 100 0 10000])    pause(0.1);    i = i + 1;    tasta = get(gcf, 'currentch');    set(gcf, 'currentch', char(1))end
Link to comment
Share on other sites

Guest blacksword

Multumesc pentru raspuns. Dar ca sa restartez tot programul la apasarea unei taste cum sa fac ?

while(1)    clear all;    i=1;    tasta = 'a';    while (~strcmp(tasta,'s'))        y(i)=i.^2;        figure(1);        plot(y);        axis([0 100 0 10000])        pause(0.1);        i = i + 1;        tasta = get(gcf, 'currentch');        set(gcf, 'currentch', char(1))    end    % eventual un "pause" aici sa astepte tastarea unei taste pana sa ruleze fisierul    % pe linia asta pui numele fisierului fara .mend
Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines