[Matlab] Comunicazione Matlab porta Com

Pubblicità

soxnaples

Utente Attivo
Messaggi
10
Reazioni
0
Punteggio
25
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: ...........
come notate invia prima il bit meno significativo e poi quello più significativo.
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')

Ma non funzione bene..
cosa sbaglio??
grazie mille
 
Pubblicità
Pubblicità
Indietro
Top