|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - allisap
1
« en: Miércoles 4 de Mayo de 2011, 03:33 »
Pues si todavía te interesa este proyecto mandame un mensaje, un amigo y nos dedicamos a hacer proyectos software-hardware el programa en flash y yo estoy mas metido en el diseño de hardware,
Saludos
Victor
2
« en: Sábado 23 de Abril de 2011, 17:30 »
Saludos, mira no se si has oído hablar de CUDA es una serie de toolkits y librerías para varios lenguajes incluyendo matlab para hacer uso del procesador gráfico, (o procesadores gráficos) que vienen en las nuevas tarjetas aceleradoras, es para las tarjetas Nvidia Gforce, y hace uso del poder multinucleo de estas tarjetas para ejecutar algoritmos mucho mas rápido, sobre todo para aplicaciones de procesamiento de imágenes y de señales da un paseo por aqui http://developer.nvidia.com/getting-sta ... -computingpara que veas las aplicaciones,
3
« en: Jueves 7 de Octubre de 2010, 20:48 »
Saludos
yo siempre he usado la función fscanf y leo los datos con el parametro %f inténtalo así , tal vez te sirva,
Víctor Pasilla Campos
4
« en: Viernes 3 de Septiembre de 2010, 17:44 »
Prueba la siguiente
1.-en el maestro la función i2c_write te devuelve el ACK es decir es cero si el esclavo recibio los datos y 1 si no los recibio, asi que puedes hacer algo como esto
if (i2c_write(0xB4)==0){ // direccion del sensor melexis para mandar comando output_toggle(PIN_B0); } y coloca un led en el pin B0 si esta parpadeando cada que envias datos quiere decir que el esclavo si recibe los datos
2.-en el esclavo coloca un toggle de un pin en la interrupción y coloca un led tambien , con esto sabrias si el esclavo recibe los datos y si esta entrando a la interrupcion,
3.-no uses el pooling , mejor usa la funcion i2c_isr_state();
4.- baja la velocidad,para ver si eso no es lo que te da problemas (primero camina, luego corre )
prueba a usar simples toggles y leds para saber en que punto esta fallando el codigo esto realmente te ayuda a depurar mas facilmente,
espero te sirva
Saludos
Victor Pasilla Campos Puebla, Pue
5
« en: Viernes 27 de Agosto de 2010, 21:05 »
Saludos
estas aplicando el pwm al motor o primero lo filtras?
te lo pregunto porque, aunque teóricamente el propio motor debería funcionar como un filtro pasabajas, no siempre funciona y el motor produce un ligero sonido, como un golpeteo, y dependiendo de la frecuencia del PWM es el sonido, si aumentas la frecuencia el sonido se hará mas agudo, si la disminuyes se escucha mas como ruido mecánico
algo que me funciono muy bien (y solo si no necesitas invertir el giro) es utilizar un micro para generar el PWm, luego un filtro pasabajas y luego un amplificador de corriente, como driver de potencia para el motor con un transistor, checa la hoja de especificaciones del LM358 ahi esta en la pagina 11 (Power amplifier) es una configuracion sencilla de opamp de potencia
algo que se me olvidaba, la hoja de especificaciones marca que el motor mas lento es el Rs-xxxxx - 6530 al cual le puedes aplicar en 3.6-6 volts para una velocidad de 19200 RPM (algo asi como 320 hz ) asi que en realidad es bastante rapido, si requieres un velocidad muy lenta , sin que pierda torque en realidad lo que necesitas es un motoreductor, que te reduce la velocidad y te aumenta la fuerza del motor
Espero te sirva
Victor Pasilla Campos Puebla ,Pue.
6
« en: Miércoles 11 de Agosto de 2010, 19:53 »
no creo que la función errordlg te funcione para tu propósito,creo que es mejor usar la función msgbox por ejemplo si escribes :
msgbox('procesando datos...')
te hará aparecer el mensaje dentro de una ventana ahora para cerrarla automáticamente cuando termine el programa debes asignarle un manejador al crear la ventana y al final cierras esa ventana
por ejemplo
h=msgbox('procesando datos...')
te crea el identificador h de la ventana y cuando tu programa termine sus cálculos solo tienes que hacer
close (h);
y listo, fácil o no? espero te sirva,
Saludos Víctor Pasilla Campos Puebla, Pue
7
« en: Miércoles 11 de Agosto de 2010, 19:36 »
fácil
la función rand te genera un valor aleatorio entre 0 y 1 y ademas si le das rand(10,8) te genera una matriz de 10 * 8 llena de números aleatorios entre 0 y 1
si ademas quieres que estén en el rango de 0 - 50, simple, multiplica todo por 50 ,
esto te debe solucionar el problema
mat_rand=rand(10,8)*50
Espero te sirva.
PD. 1 minuto en la ayuda de matlab te lo habría solucionado también
8
« en: Viernes 25 de Junio de 2010, 15:45 »
si, me falto especificar que t2 es un control de texto estático
y cuando se mueve el slider, se obtiene el valor del slider con Ang=round(get(s1,''Value'')); y se actualiza el valor del texto estatico
saludos
victor
9
« en: Domingo 28 de Marzo de 2010, 03:16 »
es realmente simple, pero primero una pregunta ya sabes que debes obtener, es decir puedes dibujarlo en papel?
y bueno, unas cuantas idea que te deben servir....
1) las gráficas de tiempo discreto las puedes obtener con stem ( buscalo en la ayuda de matlab) 2) primero trata de obtener la grafica de u(n), es la mas simple y cuando te salga ya casi habrás solucionado todo....
(ayuda ) para u(n), primero crea un vector de ... digamos 40 valores y llena este vector con los valores de n que vaya desde -20 a 20 (llamale a este vector n) luego creo otro vector (del mismo tamaño que n) y llenalo con ceros, y luego llena la mitad con '1',llamale a este vector U y si graficas U y n usando stem ya tendras el u(n)
espero te sirva...
Victor Pasilla Puebla. Pue
10
« en: Domingo 28 de Marzo de 2010, 01:57 »
bueno, pero en que tienes problemas, A) en el uso de alguna instrucción especifica,  en como se programa en matlab, C) en entender el problema? si tu respuesta es A) , que instrucción es la que no entiendes?, si tu respuesta es  , ya leiste los tutoriales y la ayuda de matlab? si tu respuesta es C), si no entiendes como resolver el problema con lapiz y papel, como lo vas a programar? ah, y otra cosa , este no es un foro de "haganme la tarea" si tienes dudas concretas, (despues de estudiar el tema y haber tratado por ti mismo), puedes volver a preguntar
11
« en: Martes 23 de Marzo de 2010, 15:43 »
Solo para valientes? el valor no tiene que ver con el conocimiento,
pero bueno.....
si lo que necesitas es rotar una imagen, esto esta muy fácil... la rotación de los nuevos puntos de la imágenes los obtienes multiplicando cada punto de la imagen por las funciones seno y coseno del angulo de rotación, busca como hacer la rotación de un solo punto un cierto angulo (esto es simple geometría ), genera una función que te calcule la rotación de un solo punto, y luego se lo aplicas a todos los puntos de la imagen, y listo, sencillo, o no?
bueno, tal vez si tenga algunas complicaciones porque si bien matemáticamente esto es muy simple, cuando lo pasas a algoritmo y a programa ya no lo es tanto, porque cuando rotas una imagen esta se saldrá en algunas secciones del área original, pero simplemente debes recortarla
saludos
Victor pasilla
12
« en: Sábado 20 de Marzo de 2010, 04:35 »
bueno, no he revisado todo el código, pero lo que me salto a la vista cuando abrí el archivo es que tienes esto :
#include <16f877A.h> #use delay (clock=20000000) <-------------------- aqui dices que vas a usar un cristal de 20Mhz #fuses XT,NOPROTECT,NOWDT,NOLVP <---------- el fuse XT es cuando vas a usar un cristal de baja frecuencia 4 MHz o menos, para 20 Mhz debes usar HS #include <lcd.c> #include <kbd.c> #use standard_io(a) #include <stdlib.h> #rom 0x2100={'7','2','3'}
revisa esto, tal vez ahí esta el problema
Saludos
Victor Pasilla Puebla, Pue
13
« en: Jueves 18 de Marzo de 2010, 16:24 »
bueno no he revisado tu programa (hace mucho que no programo en ensamblador) pero puedes revisar algunos puntos para ver si el problema esta ahi
1) a que velocidad estas muestreando tu señal de ECG,
recuerda que si muestreas a una velocidad muy baja no podrás reconstruir correctamente tu señal
2) a que velocidad estas enviando los datos muestreados, esto esta relacionado también con la forma en como estas haciendo todo el proceso de captura y transmisión, por ejemplo : puedes tomar una muestra y transmitirla por el serial y al terminar la transmisión esperar un tiempo, tomar otra muestra y enviarla por el serial, esperar .... y asi sucesivamente esta forma no te servirá porque aquí pierdes tiempo durante la trasmisión serial Otra forma de hacerlo es mediante el uso de timers e interrupciones, un timer que se encargue de la captura de datos, y otro de la trasmisión serial esta es la mejor forma de hacerlo porque aquí puedes controlar las temporizaciones de captura y trasmisión 3) del lado del software del PC, como estas haciendo la lectura y la graficación? lees cada dato del puerto serial y lo graficas? o almacenas en un buffer y luego graficas? la segunda opcion es mejor porque en la primera el sistema debe estar muy ocupado leyendo datos que están constantemente llegando
bueno estas son algunas ideas,
espero te sirvan
Saludos Victor Pasilla Campos Puebla, Pue. México
14
« en: Domingo 7 de Marzo de 2010, 04:23 »
Portuguesa eh, pues bienvenida a este foro, y espero que te podamos ayudar  :D:D creo que puedes ir leyendo linea a linea usando fscanf y si las lineas de texto son siempre iguales por ejemplo : "texto", numero1, numero2, numero3, numero4 puedes usar fid = fopen('output.txt'', 'r'); texto=fscanf(fid,'%s',1) datos=fscanf(fid,'%f %f %f %f ',4); %4 datos, pueden ser mas tal vez se pueda leer todo en una sola linea pero necesaria probarlo, si tienen un archivo de ejemplo seria muy util saludos Victor Pasilla Puebla, Pue. México
15
« en: Domingo 7 de Marzo de 2010, 04:07 »
saludos,
bueno para comenzar no había oído eso de "inecuaciones", creo que se les llama desigualdades (bueno tal vez sea la región o algo así)
eso que quieres obtener es el conjunto solución de la desigualdad y básicamente son matemáticas simbólicas, matlab tiene un modulo de matematicas simbolicas pero la verdad nunca lo he usado, uno de los programas que manejaba muy bien las matemáticas simbólicas era Derive y me parece que Mathematica también puedes buscar alguno de estos y ver sí te sirve
Saludos
Victor Pasilla Puebla, Pue. México
16
« en: Domingo 7 de Marzo de 2010, 03:58 »
Saludos
Se me ocurre que lo que puedes hacer es una normalización, busca el valor mas grande y divide todos los datos entre el mayor así tendrás una escala entre cero y 1, luego lo multiplicas por una escala común y listo
Víctor Pasilla Puebla, Pue México
17
« en: Viernes 15 de Enero de 2010, 22:16 »
enviar el código?, no tengo el código para eso en especifico, pero tengo la idea, que es esta: para dos puntos cualquiera puedes obtener la ecuación de la recta que pasa por esos dos puntos (en cualquier libro de geometría analítica lo encuentras) divide la distancia entre x1 y x2 (de tus dos puntos) en 50 (o el numero de puntos que quieras), este úsalo como un delta o incremento y úsalo para calcular los nuevos puntos en base a tu ecuación de la recta y ya simple y facil saludos Victor Pasilla Campos Puebla, Mexico
18
« en: Viernes 15 de Enero de 2010, 18:00 »
ok, a ver si te entiendo... tienes los primeros 2 puntos, y quieres calcular puntos intermedios a esos dos pero que se unan con una linea recta? para esto solo calcula el punto medio y ya, o dividelo en 3 o cuatro según los puntos intermedios que quieras y este proceso repitelo para todos los puntos y listo
saludos
Víctor Pasilla Campos Puebla. México
19
« en: Viernes 15 de Enero de 2010, 17:33 »
la interpolacion es encontrar una ecuacion que se aproxime lo mejor posible a los puntos que tienes por lo que entiendo tienes las coordenadas de un circulo, así que lo mas fácil es obtener la ecuación del circulo que pasa por tus coordenadas y así ya puedes calcular los puntos que quieras
espero esto te ayude
saludos
Victor Pasilla Campos Puebla, Mexico
20
« en: Martes 29 de Diciembre de 2009, 23:11 »
no he revisado tu código completo pero esta seccion creo que no va funcionar do{ if(flag_listo) { flag_listo = 0; printf("Pulsos: %Lurn",cont_pulsos_rec); }}while(1); porque se cicla infinitamente y nunca sale del while para ejecutar el código tienes mas abajo... saludos Víctor Pasilla México, Puebla
21
« en: Domingo 27 de Diciembre de 2009, 03:43 »
facil, mete el proceso de abrir un archivo dentro de un for y al nombre del archivo lo armas con un sprintf,
Saludos...
Victor Pasilla Campos Mexico, Puebla
22
« en: Domingo 27 de Diciembre de 2009, 03:40 »
Saludos
si no tienes las especificaciones del motor lo que puedes hacer es medir con un multimetro para medir la resistencia de cada bobina del motor esto te dará una idea de la corriente que utilizaras , aunque al ser una bobina recuerda que tendras picos de corriente,
ademas si la corriente que necesitas es mayor de un amper te recomiendo que uses un puente H con transistores que si pueden manejar una cantidad de corriente mayor.
Espero te sirva...
victor pasilla campos
México, puebla.
23
« en: Sábado 14 de Noviembre de 2009, 04:38 »
que error te da?
ya revisaste si tienes la libreria?
Saludos
Víctor Pasilla Campos
24
« en: Sábado 14 de Noviembre de 2009, 04:30 »
necesito hacer un programa que lea 3 pines del puerto b y si se cumplen unas condiciones se ponga en el puerto c un codigo(0b11101001)
les dejo el programa que he trabajado creo que debe funcionar con algo como if ( input(PIN_B1)&input(PIN_B2)&input(PIN_B3)) output_c(233) // 233 es 11101001
espero te sirva saludos Victor Pasilla Campos Puebla,Pue
25
« en: Sábado 14 de Noviembre de 2009, 04:00 »
tu problema esta en la linea 18 printf(rcvchar); cuando recibes un caracter por ejemplo una A (ascci 65) recibes un 65 decimal pero cuando lo envías de regreso por el serial usando printf(rcvchar); estas enviando un 65 (un seis decimal y un cinco decimal separados) para recibirlo correctamente prueba con esto printf('%c',rcvchar); espero que te sirva, saludos Victor Pasilla Campos
|
|
|