domingo, 20 de octubre de 2013

10000 Visitantes del mas alla!!!

Hola a todos, son ahora 10000 visitas desde la primera publicacion realizada a este blog, espero que las publicaciones realizadas sirvieran de ayuda o entretenimiento. Gracias!

En todo el tiempo que paso, redescubrí el significado de la palabra "Creación": desde la simple formulación de una frase en una conversacion, un silbido en un momento de alegría, una idea que resuelva un simple problema... son creaciones nuestra  en todo el sentido, somos seres creadores.

Sin embargo, también somos capaces de crear el caos, la destrucción y el miedo. Lo cual pasa en nuestros adentros,  pero cuando reflejamos esto hacia el exterior podemos caer en un abismo y dentro de el pueden caer otras personas... prefiero caer solo.

La vida en soledad es permite mirar sin mascaras, sin velos y sin miedos. El lugar donde descansamos y donde reímos, donde luchamos y donde lloramos, donde soñamos y amamos, es el lugar donde nuestra soledad vive. Uno nunca esta sin compañía en soledad, la compañera mas leal e incomprensible, el muro que nos separa de la falsedad de la vida y la nubosidad que llamamos gente.

El amor, el reflejo de uno mismo, que rompe el muro hacia las grandes dudas y equivoco. Vale la pena? Merece el dolor de llevar las cadenas? Es ciego el que ama? Cual es el costo que nos pone el amor?
 El que vive en soledad tiene la libertad de no ser comprendido, por que el que nos comprende nos esclaviza, el que nos ama nos adentra en la fosa de oscuridad para vivir una negra felicidad.

El miedo y el dolor son hermanas con anhelos de amor. El miedo vendrá con el amor, por lo que prefiero beber mis lágrimas solo. Cito una frase de Khalil Gibran: " Qué sabe del amor quien no ha tenido que despreciar precisamente lo que más amaba". 

El extrañar es la frustracion de los planes no realizados, los momentos no vividos, los abrazos y besos nunca recibidos. Pero tenemos nuestros sueños los cuales crean y destruyen nuestra vida a su antojo. Cuando vivimos de nuestros sueños, corremos el peligro y recibimos la bendición de quedarnos en el, de solo ser espectadores de nuestra vida mientras esta pasa como algo abstracto, no significa estar dormidos durante el día, sino de vivir una sola vida destruyendo cualquier frontera con la imaginacion.

Aun ante todo, pagaría el infierno por un solo minuto.

miércoles, 16 de mayo de 2012

MPUSBAPI

Hola a todos, hice un upload de estos archivos: mpusbapi.dll mpusbapi.h mpusbapi.c mpusbapi.lib están en http://www.4shared.com/folder/t3d1deH9/_online.html No se si están actualizados, yo los descargue de la Pagina de Microchip se llama "MICROCHIP SOLUTIONS" que contiene esos y mas archivos de sistema para nuestros proyectos lo instalan y luego buscan mpusbapi subiré todos los archivos pero tengan paciencia, que el trabajo me consume También tengo mucha información de PLC's que es con lo que trabajo si quieren que lo suba solo escriban en los comentarios Saludos

jueves, 3 de mayo de 2012

Descargar codigo de Seguimiento de colores en MATLAB

Hola a todos los saludo otra vez. Ahora vengo con links de descarga del programa de Seguimiento de colores esta en archivo .m con lo que solo deben abrir en matlab y correr el programa. Actualizare una serie de proyectos y codigos regularmente.
http://www.4shared.com/folder/t3d1deH9/_online.html

sábado, 27 de agosto de 2011

Fireweed

La música muestra nuestro interior tal cual sucede en ese instante

jueves, 18 de agosto de 2011

Comunicacion PIC18FXXXX con Matlab por Puerto USB




Hola a todos, los saludo yo de nuevo. Vuelvo
con otra entrada la cual un microcontrolador
PIC-18FXXXX cualquiera de esta familia, se
conecta con una PC por puerto USB mediante
interfaz de Matlab.
Primero definamos el Puerto USB, Bus Serie
Universal, es como serial pero con paquetes
de 64 bytes y con velocidades de 480,12 o 1,5 Mbps
en este caso la frecuencia de clock usada para
comunicar el PIC con la PC es 48 Mhz, pero
usando los Phase Locked Loops (PLL) del PIC
se usan cristales mas bajos a la misma velocidad.
El tipo de conexion puede ser HID o BULK, HID se
usa para dispositivos como mouse,teclados y blabla
y BULK TRANSFER que entrega el dato por "volumen"
el ancho de banda puede variar y los envia
en secuencia lo cual nos lo hace mas simple.
Cualquier dispositivo USB debe identificarse ante
el HOST(PC) hay queespecificar el tipo
de transferencia de datos
a usar (endpoints), VID&PID, nombre y serie
del producto que se conecta para que el
host identifique al driver y pueda instalarlo
con el fin de que el dispositivo pueda formar
las “pipes” ó túneles para su comunicación
con el host y se oiga el clasico Pu PUM! al
conectar cualquier USB.
El driver y la libreria a usar es la MPUSBAPI
que nos brinda MICROCHIP, buscando MICROCHIP
SOLUTIONS para descargar en MICROCHIP.com
(si no lo encuentran pueden comunicarse a este
blog para ayuda) El programa para el PIC lo
desarrolle en PIC-C el cual lo descarge en red
A continuacion el programa completo compilado
y probado:
///////////////////////////////////////////
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,MCLR,NOPBADEN
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


#define USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
#define USB_EP1_TX_SIZE 64
#define USB_EP1_RX_SIZE 64

#include
#include
#include
#define LEDV PIN_A0
#define LEDR PIN_A1
#define LED_ON output_high
#define LED_OFF output_low

#BYTE TRISA = 0x0F92
#BYTE TRISB = 0x0F93
#BYTE PORTA = 0x0F80
#BYTE PORTB = 0x0F81
#BYTE ADCON1 = 0x0FC1
#BYTE CMCON = 0x0FB4

int8 dato[64];
void main(void) {

LED_ON(LEDV);
LED_OFF(LEDR);

usb_init();
usb_task();
usb_wait_for_enumeration();

LED_OFF(LEDV);
LED_ON(LEDR);

TRISA = 0x00;
TRISB = 0x00;
ADCON1 = 0x0F;
CMCON = 0x07;
while (TRUE)
{
if(usb_enumerated())
{
if (usb_kbhit(1))
{ usb_get_packet(1, dato, 64);
portb = dato[0];
dato[1] = porta;
usb_put_packet(1, dato, 64, USB_DTS_TOGGLE);
}
}
}

}

//////////////////////////////
ESCRIBAN SU CORREO EN COMENTARIO y
ENVIO LOS CODIGOS POR EMAIL

Como se ve es bastante sencillo, y se logra enviar
hasta 128 paquetes de 64 bytes cada uno
o tambien de 8 bits que es mas comun
desde dato[0] hasta dato[128],

Ahora vamos al codigo en MATLAB el cual
nos facilita la vida porque solo se carga la
MPUSBAPI y listo ojo que son 3 archivos
MPUSBAPI.dll
MPUSBAPI.c
MPUSBAPI.h
tienen que estar en la misma carpeta
del archivo .m que creemos
Ahhhhhhhh! Tienen que crear un archivo .m
en File->New->M-File y copian el siguiente codigo
%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
loadlibrary mpusbapi _mpusbapi.h alias libreria
data_in = eye(1,64,'uint8');
data_out = eye(1,64,'uint8');
vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_000b') 0]);
out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
[conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm)


if conectado == 1
[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0));






[my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0)); while (data_out(1)<=255)
calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10));
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(64), uint8(64), uint8(10));
data_out (1) = (data_out(1))+1;
data_in(2)
pause (0.1); end
calllib('libreria', 'MPUSBClose', my_in_pipe);
calllib('libreria', 'MPUSBClose', my_out_pipe);
end
unloadlibrary libreria % Importante descargar la librería de memoria, de lo contrario genera errores
close all
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Este programa envia un contador de 1 a 255 y muestra


por el puerto B del pic, y tambien lee el puerto A


y lo muestra en Matlab.


Recomiendo usar el Proteus 7. 4


Service Pack 3
luego instales los USB drivers


solo ahi me funciono


la simulacion


Para cualquier duda


o para los archivos


comenta el post


estare atento
En la proxima comunicaremos


este pic con LabView, y tambien


el control de varios servomotores


en JAVA NEtbeans o matlab


Saludos













martes, 19 de julio de 2011

Seguimiento de Objetos de Colores con webcam en Matlab









Esta vez vengo con un codigo .m para el seguimiento de colores usando una camara web y Matlab
copio el codigo y voy explicando las sentencias para que sea mas facil su comprension(el operador " % " hace que no se compile la linea, es decir, es un comentario):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;clear all;clc;

% primero se captura un stream de video usando videoinput, con argumento
%de winvideo, numero de dispositivo y formato de la camara, si no sabes usa la
%funcion imaqtool para averiguarlo es YUY o RGB
vid=videoinput('winvideo',1,'YUY2_160x120');
%640x480 160x120
% Se configura las opciones de adquision de video
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
%framegrabinterval significa que tomara cada 5 frame del stream de video adquirida
%con start(vid) se activa la adquisicion, pero todavia se toma la primera foto
start(vid)

% creamos un bucle que puede ser while always o while true en este caso
%y como mi compu es una netbook trucha(trucha=cagada=lenta=barata)
%hago que despues de 100 frames adquiridos se salga del bucle para evitar colgadas
while(vid.FramesAcquired<=100)

% se toma una snapshot del stream y se la almacena en data para trabajar mas
%facil
data = getsnapshot(vid);

% ahora vamos a reconocer el color rojo en tiempo real
% tenemos que extraer el color rojo
% de la imagen en escala de grises de la imagen adquirida en data
diff_im = imsubtract(data(:,:,1), rgb2gray(data));
%imsubstract sirve para sacar algun valor constante de una imagen, usamos como
%argumento el array de data y la funcion rgb2gray de data
%se usa medfilt2 para filtrar la senial del ruido
diff_im = medfilt2(diff_im, [3 3]);
% Convertir la imagen en escala de grises a una imagen binaria.
diff_im = im2bw(diff_im,0.18);

% para determinar el tamanio a reconocer se usa bwareopen para descartar
%imagen de rojo de menos de 300 pixels
diff_im = bwareaopen(diff_im,300);

% Etiquetamos los elementos conectados en la imagen
bw = bwlabel(diff_im, 8);

% Ahora hacemos el analisis del "objeto" detectado(que solo son pixels rojos)
%agrupados de mas de 300
% onfiguramos la region etiquetada
stats = regionprops(bw, 'BoundingBox', 'Centroid');

% mostramos la imagen
imshow(data)

hold on

%este es un bucle para encerrar el objeto rojo en un rectangulp y una cruz en el
%centroide(solo es programacion basica de matlab)
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2)))));
set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');
end

hold off
end
% aqui terminan los 2 bucles

% detenemos la captura
stop(vid);


%FLUSHDATA remueve la imagen del motor de adquisicion y la almacena en el buffer
flushdata(vid);

% borramos todo(como en cualquier programa)
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Este es un codigo basico para que usted senior lector pueda seguir desarrollando






Espero les sirva para entender el procesamiento de seniales.



Toda la informacion se encuentra en Mathworks.com







En la proxima publicacion unanse a mi en "LA LUCHA CONTRA EL PUERTO PARALELO Y SERIE....VIVA EL USB!!!" que me parecen utiles, pero ahora un poco obsoletos y estoy en contra



de esas tareas de Catedraticos que mas o menos son "Encender un Led con puerto serie o paralelo con VisualBasic o Hacer funcionar un motorcito paso a paso con puerto paralelo"(Lastima que por aqui el tiempo se detuvo).














































A ellos va la proxima publicacion, podremos manejar varios canales de 8 bits, osea varios ledcitos o motorcitos(servos, dc's o pap), con un PIC18Fxxxx (son lo mismo solo varian las patitas y los adc's) desde Java, Labview, o Matlab.






Los saludo, hasta la proxima