Autor Tema: MATLAB recibe datos PIC16f877a por rs232  (Leído 15129 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Rick_x

  • PIC10
  • *
  • Mensajes: 32
MATLAB recibe datos PIC16f877a por rs232
« en: 31 de Diciembre de 2009, 00:21:03 »
Estimados foreros:

Alguien a realizado algun proyecto en donde alla enviado informacion por rs232 a matlab. Cualquier informacion que tengan relacionado con esto, les agradeceria me la enviaran.
Por el momento solo estoy recibiendo informacion en la pic por rs232 desde matlab, pero enviar mucha informacion a MAtLAB y almacenarla, unos 60000 datos desde el ADC del pic, el almacenamiento de datos no lo tengo claro como hacerlo, ademas despues de la recepcion haré un procesado de la informacion en un entorno GUI de matlab, esto ya lo tengo estudiado

Ojala puedan colaborarme

Muchas GRacias y Feliz año nuevo!

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #1 en: 31 de Diciembre de 2009, 00:56:30 »
 :oops: no tengo la compu a mano pero te encontre esto que esta bien  :lol:
Código: [Seleccionar]
http://toyscaos.tripod.com/serial.html
hay que usar más google  ;-)... cualquier problemita aca 'tamos!

Saludos!  :mrgreen:
LAS MALVINAS SON ARGENTINAS!

Desconectado Rick_x

  • PIC10
  • *
  • Mensajes: 32
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #2 en: 02 de Enero de 2010, 00:01:07 »
He estado googleando muchisimo, hAsta ahora solo he conseguido enviar y recibir un dato, quisiera saber como puedo generar en matlab algo asi como un vector que vaya almacenando los datos para que posteriormente analizarlos.

gracias!
Feliz año nuevo :-)

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #3 en: 02 de Enero de 2010, 00:27:25 »
aaa pero entonces ya estas recibiendo datos.... tenes que hacer un ciclo con la cantidad de datos que deseas y anexarlos

algo así

Código: [Seleccionar]

K1= [];
for j=1:1000    % tomamos 1000 datos....
 K1 = [K1 fread(PS,1,'uchar')];
end


donde fread(fileID, sizeA, precision)
%fileID identifica el puerto que se esta usando.
%sizeA identifica el tamano o cantidad de datos
% precision el tipo de variable (8 bit,16,32,con o sin signo.....)

para encadenar se utiliza K1=[k1 X] coloca los datos así por ejemplo K1=[ 1 1 0 0 9 ......] o podes encadenar así k1=[k1 ; X] y genera un vector columna, como te convenga.
Aunque leer datos del puerto serie es sencillo muchas veces me ha pasado que se cuelga o tira errores aleatorios sin ningún problema en el script, bueno parece que en esta pagina  han creado una dll para mejorar la lectura..... habría que pegarle una hojeada...
Espero haberte ayudado algo  :).

Saludos y felices fiestas también..


LAS MALVINAS SON ARGENTINAS!

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #4 en: 04 de Enero de 2010, 11:57:56 »

Saludos

Hace muchisimo tiempo 3 años cuando me gradue del programa de tecnología eléctrica decidí realizar un proyecto de grado y no una práctica empresarial.

Raelice un proyecto llamado SISTEMA DE INSTRUMENTACIÓN PARA MEDIR SEÑALES SÍSMICAS fue toda una aventura muchas investigaciones, muchas trasnochadas por que no sabia nada de micros me tocó aprender sólo y el proyecto en su diseño inicial tenia un módulo RS232 en cual los datos se enviavan a matlab y se descargaban en tiempo real fue una odisea realizar el código pero bueno por fortuno lo pude hacer claro que también tenia un analisis estadístico, matemático por utilizamos la transformada de fourier para conocer en que ancho de banda se encontraba la mayor energía sin más chachara acá le pongo el código que me funciono muy bien saludo.

Código: [Seleccionar]
% cerrar ventanas, borrar variables y borrar pantalla

close all
clear
clc

% cerrar puerto serial si ya está abierto

s = instrfind;

if ~isempty( s )
    fclose( s );
    delete( s );
    clear s
end

% crear puerto serial

s = serial( 'COM1','BaudRate', 9600 );

s.InputBufferSize = 50000;

% abrir puerto serial

fopen( s );

% definir tiempo de captura en segundos

% pause( 5 );

data_rv = leer_accel( 1200, 10 );

% leer datos del buffer del puerto

data = fread( s, s.BytesAvailable, 'uint8' );

% cerrar y borrar el puerto

fclose( s );

delete( s );

clear s

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Rick_x

  • PIC10
  • *
  • Mensajes: 32
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #5 en: 13 de Enero de 2010, 23:25:19 »
Muchas gracias Cerebro y Chenao sus aportes fueron de gran utilidad.

Despues de un  tiempo sin computador ya esta reparado y funcionando full, he  retomado mi proyecto.

Chenao  la funcion leer_accel() esta definida por ti??  que es lo que hace???


Este es mi codigo que estoy usando, acepto comentarios y criticas

% Cerrar Todo
close all
clear
clc

% cerrar puerto serial si ya está abierto

s = instrfind;
if ~isempty( s )
    fclose( s );
    delete( s );
    clear s
end

SerPIC = serial('COM1');
set(SerPIC,'BaudRate',9600);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);
C=[];
for k=1:5
[A,count]=fscanf(SerPIC,'%s',3)   

C=[C;A];
end
fclose(SerPIC);

Quiero comentar que si almaceno los datos en un vector de la siguiente forma C=[C  A]; lo que pasa como estoy recibiendo datos que tienen entre 1 y 4 digitos queda cada digito ocupando una posicion de vector por ejemplo si recibo 654, 654, 998, 889, 889,

me queda el vector C con un largo de 15
es decir queda esto

C= 654654998889889  con lenght(C)=15

asi que uso C=[C;A] para que me quede con lenght(C)=5

- otra cosa que me causo curiosidad es que los datos en la pic son de tipo unsigned long de 10 bit ya que son leidos del ADC y me di cuenta de que en rs232 los envia como ASCCI...

- mientras escribia esto se me ocurrio cambiar el tipo de %s a %int y funciono C=[C A] como yo queria :-)


- otra consulta como se sube el codigo aca en el foro para que quede en un ventana aparte dentro del post :-)

muchas gracias
atte. un novato

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: MATLAB recibe datos PIC16f877a por rs232
« Respuesta #6 en: 14 de Enero de 2010, 18:28:49 »
Saludos

Si meti la pata :mrgreen: se me olvido ponerla pero lo ùnico que hace es tomar 1200 muestras provenientes del pic es lo único que hace.
Un saludo desde Pereira - Colombia


 

anything