A_L_E_X Postat Iunie 13, 2010 Partajează Postat Iunie 13, 2010 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 sImi 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 spre comentariu
Vizitator AirBoy Postat Iunie 14, 2010 Partajează Postat Iunie 14, 2010 COM1 = 0x3F8COM2 = 0x2F8 Link spre comentariu
A_L_E_X Postat Iunie 14, 2010 Autor Partajează Postat Iunie 14, 2010 Nu inteleg ce vrei sa spui. Adica sa scriu : s = serial('0x3F8');In rest cum e programul ? Link spre comentariu
crispus Postat Iunie 14, 2010 Partajează Postat Iunie 14, 2010 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 Nu cumva COM1 e deschis in hyperterminal si vrei sa-l deschizi si in matlab? Link spre comentariu
A_L_E_X Postat Iunie 14, 2010 Autor Partajează Postat Iunie 14, 2010 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 spre comentariu
crispus Postat Iunie 14, 2010 Partajează Postat Iunie 14, 2010 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 spre comentariu
A_L_E_X Postat Iunie 14, 2010 Autor Partajează Postat Iunie 14, 2010 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 spre comentariu
crispus Postat Iunie 14, 2010 Partajează Postat Iunie 14, 2010 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. http://www.edaboard.com/ftopic355815.htmlpause(.1); ? Link spre comentariu
A_L_E_X Postat Iunie 16, 2010 Autor Partajează Postat Iunie 16, 2010 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 ? 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 spre comentariu
crispus Postat Iunie 17, 2010 Partajează Postat Iunie 17, 2010 CTRL + C nu merge? Link spre comentariu
A_L_E_X Postat Iunie 17, 2010 Autor Partajează Postat Iunie 17, 2010 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 spre comentariu
Vizitator sebustab Postat Iunie 25, 2010 Partajează Postat Iunie 25, 2010 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 spre comentariu
Vizitator blacksword Postat Iunie 25, 2010 Partajează Postat Iunie 25, 2010 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 spre comentariu
A_L_E_X Postat Iunie 26, 2010 Autor Partajează Postat Iunie 26, 2010 Multumesc pentru raspuns. Dar ca sa restartez tot programul la apasarea unei taste cum sa fac ? Link spre comentariu
Vizitator blacksword Postat Iunie 27, 2010 Partajează Postat Iunie 27, 2010 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 spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum