TODOPIC
Mecatrónica => Robótica => Mensaje iniciado por: Axel_18 en 31 de Enero de 2011, 21:04:26
-
hola a todos
intento comunicar mi pic con matlab pero la verdad es que no se mucho de matlab :-/
mi idea es gráficar una señal cualquiera respecto al tiempo, donde los datos los enviara el pic al PC
Alguien me puede ayudar con el código, digo, algún ejemplo que me puedan facilitar?
gracias a todos :)
-
creo que en el foro hay algo sobre el tema, es cuestion de usar el buscador, tambien hay una web que te puede servir es matpic (http://www.matpic.com)
-
gracias por responder, me sirvio mucho.
ahora envio datos por rs232 desde el pic a matlab.
mi duda ahora es como lo hago para enviar un numero float, es decir un numero con decimales
en el pic, que lo programo en CCS defino la variable a enviar como
float dato
dato=2.034
la recibo en matlab como
fscanf(PIC,%e,14)
al igual que un ejemplo que parace en en matlab
mi problema es que me dice que ocurre una incompatibilidad de dimenciones
es posible hacer esto?
o debo pasar el numero que deseo enviar a ASCII es decir cada digito a su correspondiente ASCII y luego decodificar los datos enviados??
un saludo
-
encontré esto que seguro te sirve
http://www.mathworks.com/help/techdoc/ref/serial.fscanf.htmlhttp://www.mathworks.com/help/techdoc/ref/sscanf.htmlpor favor comenta tus resultados ya que tambien voy a empezar a hacer pruebas con este programa y tambien me enfrentaré a la misma situacion
-
Puedes multiplicar tu decimal por ejemplo 2.034 por 1000 =2034 y enviarlo a matlab y en matlab lo divides entre 1000 y listo.
En lo poco que he intentado no pude enviar un float, asi que opte por esa opcion.
suerte.
-
la opcion de multiplicarlo es muy valida, pero debe poderse enviar como un float obviamente formateado en ascii desde el pic, en ultimas son puros numeros y matlab hace la tarea muy facil al pasar el ascii a un numero float
-
chicos
solucione el problema con otro enfoque
lo que hice fue obtener un valor float, por ejemplo 3.434
Luego con el pic separo cada elemento y lo guardo en un vectoro, osea:
dato[0]=3+'0'
dato[1]=4+'0'
dato[2]=3+'0'
dato[4]=4+'0'
El cero es un cero es ASCII por lo que paso inmediatamente el dato a ascII sin afectar el valor numerico.
En matlab lo leo y lo guardo en una variable.
Identifico el numero en matlab utilizando la funcion sscanf la que me arroga el numero, a utilizar, osea me entrega 3434.
Por ultimo lo divido en 1000 y listo.
quiza mas adelante suba el codigo
salduos
-
Parece interesante pero... seguro esto hace lento el proceso y para ciertas aplicaciones tal vez no sea la mejor opcion, eso de trabajar con flotantes es complejo para micros que no tiene el hardware necesario. Aun asi la solucion es ingeniosa, si pudieras comentar un poco mas sobre el algoritmo y subir el codigo seria genial.
saludos...