|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2008
Messaggi: 58
|
[Matlab] Comunicazione Matlab porta Com
Salve,
ho un microcontrollore PIC16F690 che è collegato a 8 convertitori A/D(12 bit di risoluzionie e 2 canali ognuno),dovrei interfacciarlo a matlab. Questo pic è connesso ad una porta com e funziona così: -devo inviare un carattere di sincronismo 's' per aspettare i numero di canali -inviare il carattere 'a' per inizio trasmissione -inviare il carattere 'b' di fine trasmissione il seguente codice è scritto in c ed è quello del pic(metto solo per il primo canale): Codice:
while(1){ //Inizializzo le variabili c=0; canali=0; d=0; //Attendo il carattere di sincronismo while(d!='s'){ if(kbhit()){ d=fgetc(pc); } } //Attendo il numero di canali da cui acquisire while(canali==0){ if(kbhit()){ canali=fgetc(pc); } } num_canali=canali-48; //48 è il codice ascii di 0 //Attendo il carattere di start (inizio acquisizione) while(c!='a'){ if(kbhit()){ c=fgetc(pc); } } //Inizio l'acquisizione while(c!='b'){ for(i=0;i<num_canali;i++){ switch(i){ //Acquisisco dal primo canale case 0: set_adc_channel(5); delay_us(10); value=read_adc(); delay_us(30); low=value; high=value>>8; fputc(low,pc); fputc(high,pc); break; case 1: ........... il codice invece implementato in matlab è il seguente: Codice:
rs232='COM3'; s=serial(rs232,'BaudRate',19200,'DataBits',8,'StopBits',1); fopen(s); pause(2); fwrite(s,'s'); pause(1); fwrite(s,1); pause(1); fwrite(s,'a'); i=1; j=1; k=1; while i<10 vett=fread(s,s.BytesAvailable,'uint8'); pause(2); while j<lenght(vett) low(k)=vett(j); j=j+1; high(k)=vett(j); k=k+1; end i=i+1 end fwrite(s,'b'); fclose(s); z=1; vbe=0.0048875855327468230694037145650049; //risoluzione(5/(2^12)) while z<length(high) % Quanto di un campione del primo canale quanto1=high(z)*256+low(z); signal1(z)=vbe*double(quanto1); %Incremento variabile di conteggio z=z+1; end plot(signal1,'*b'), title('Primo canale') cosa sbaglio?? grazie mille |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:00.