Bienvenid@ a Laneros.com

¿Deseas interactuar con más de 375.000 Laneros?

¡Regístrate ahora!

leer/escribir puerto usb con visual basic

Tema en 'Programacion y Diseño de Software' iniciado por vitorbelfort, 4 Enero 2008.

  1. vitorbelfort

    vitorbelfort Lanero novato

    Registrado:
    4 Enero 2008
    Mensajes:
    1
    Me Gusta recibidos:
    0
    hola, soy un estudiante enmi ultimo anio de carrera y necesito hacer para el proyecto una interfaz grafica de usuario en visual basic para una casa domotica. Ese no es el problema, el problema radica en que salvo el hardware tengo que hacerlo todo, es decir la entrada y salida de datos desde la interfaz grafica a traves del puerto usb. No se como leer y escribir datos en ese puerto desde visual.
    Agradeceria toda ayuda posible.
    Un saludo

    Anuncio

     
    #1
  2. PEGUS

    PEGUS Lanero novato

    Registrado:
    15 Mayo 2008
    Mensajes:
    1
    Me Gusta recibidos:
    0
    para lo que tu quieres hacer, te recomiendo que controles el puerto paralelo, es mucho mas facil, mira estos ejemplos te pueden dar una idea...(cual idea esta practicamente hecho)
    Notas Antes de Empezar

    ---------

    1.- Este tema permanecerá cerrado para manterer la consecutividad en el tema, pero si tienen dudas comentarios, críticas o sugerencias, pueden hacerlas en.

    Comentarios Tuto Puerto Paralelo


    --------

    2.- En el caso de "Controlar 1 Bit" y "CONTROLAR TODOS LOS BITS DE SALIDA" Se ha hecho un ejemplo en Turbo c++ v3, LabView v 7.1 y Visual Basic Profesional v6

    Pero a Partir del 3° "DISPLAY 7 SEGMENTOS " Será con Visual Basic V8 Turbo c++ v3 y LabView 7.1

    El único que cambia es VB, la razón es que me gusta más esta versión [​IMG]

    Si quieren pueden seguir haciéndolos en vb6, solo hay que modificar un par de cosillas.

    Además Visual Basic Puede Descargarse Gratuitamente
    Visual Basic 2005 Express Edition

    En esta versión se pueden abrir y convertir proyectos de Vb6

    --------

    3.- Hasta hace días solo sabía usar C, así que aprendí Visual Basic para poder hacer este tuto. Si alguien esta interesado en aprender Visual Basic este tutorial me sirvió mucho.

    Curso Visual Basic

    --------

    4.- Haré lo posible por hacer un ejemplo en C, en Visual Basic y Lab View.

    --------

    5.- Tomen todas las precauciones posibles con el puerto, compren opto acopladores 4n26 para trabajar con CD o moc3010 para CA, si llegaran a quemar su puerto o necesitan otro, pueden comprarlos, los venden por $300 para PCI.

    --------

    ________________________________________________________________

    CONTROLAR 1 BIT

    Para empezar solo controlaremos un bit de salida para apagar/encender un dispositivo de CA desde el puerto Paralelo del PC, ya entendiendo esto se pueden controlar los demás Bits.

    Material Necesario
    1 Puerto paralelo libre
    1 Moc3010m
    1 Triac (A los Amperes que trabaje el dispositivo I=P/V)
    1 Resistencia 560 Ohms
    1 Resistencia 220 Ohms
    1 Led
    1 Conector Db25 Macho
    Cable para interconexiones (Puede ser del de Red de 8 Hilos)
    1 Fusible (Al amperaje del dispositivo)
    1 Clavija CA con cable

    Si quieren pueden hacer sus propios programas o bajar el que yo he hecho.

    El circuito es bastante sencillo, aunque si quieren primero pueden probar con un LED + 2 resistencias y un 4n26.

    [​IMG]


    Funcionamiento:
    La R1, se encarga de limitar la corriente del puerto paralelo evitando que este se dañe, esta conectada al pin2 del puerto paralelo que es el Bit Menos Significativo (LSB=Less Significative Bit) del dato de salida del Puerto.
    Del puerto paralelo podemos utilizar desde el pin 2 hasta el 9, para escribir un dato de 8 bits el pin 2 es el que utilizaremos y corresponde al bit1 o LSB.

    Si quisiéramos controlar más dispositivos podemos utilizar los demás bits.
    Puede verse que R1 se conecta al pin1 de un Moc3010m, este es un dispositivo de 6 patas que esta sirviendo como aislante entre la etapa de control (PC) y la de potencia (Dispositivo de CA, motor, foco, lavadora, televisión.).

    El moc, contiene en su interior un acoplamiento óptico entre un LED y un fotodiac, cuando ponemos a 1 lógico, el bit1 del puerto paralelo, llega corriente al Led interno del moc y fluye corriente a través de este hasta La tierra del puerto Paralelo que va desde el pin18 hasta el 25.

    Mientras el Bit1 se mantenga en 1, el led esta encendido (pero no se ve pues esta adentro), frente al Led del Moc, existe un fotodiac, que es un dispositivo típico de disparo, actúa cuando entre sus 2 terminales hay cierto potencial llamado voltaje de disparo (regularmente son 35v). Pero este disparo no ocurre si el Led no le proporciona luz.

    Por tanto mientras no haya pulso por parte del puerto LPT, el led no enciende y el fotodiac no se dispara, la haber pulso, el led enciende y el fotodiac esta habilitado para hacer los disparos.

    El triac es un dispositivo semiconductor, el cuál conduce corriente en ambos sentidos por tanto puede conducir durante los 360° de una señal de CA.

    Su conducción esta controlada por la compuerta, en la cuál es recibido el disparo proporcionado por el fotodiac, cuando este manda un pulso a la compuerta del triac, este se comporta como un interruptor cerrado, haciendo que la corriente fluya hacia la Carga que puede ser cualquier cosa como un foco, motor, televisión.

    Si no hay disparo del Fotodiac, el Triac se comporta como un aislante o interruptor abierto y no llega corriente a la carga por lo cuál no enciende.

    Ahora, en la lista aparece un Led, este puede ponerse en serie con el interno del moc solo para tener un indicador visual del estado del puerto. El fusible sería solo si el aparato no lo incluye ya, se pondría en serie con la carga.

    Y eso sería todo en cuanto a hardware se refiere.

    Software


    SOFTWARE PARA C

    En C sería de esta manera.

    Notas:
    *Adjunto el link para descargar el compilado

    *No lo explicaré para evitar enfadar, pero si alguien tiene dudas respecto al código, puede hacérmelas saber.

    *Como estamos usando dos.h solo puede correr en DOS, no he podido hacerlo funcionar en XP por que tiene los puertos Bloqueados, si alguien me dice como se lo agradeceré mucho.

    *Empezamos con las librerías necesarias

    *La función PARALELO pueden o no agregarla, yo la pongo para que el programa solito busque la dirección del puerto casi siempre es la misma pero bueno [​IMG]. Si lo quitan tendrán que declararla o introducirla manualmente.

    Código:
    #include <conio.h>
    #include <dos.h>
    #include <stdio.h>
    #include <string.h>


    int paralelo(), para, opc=0, contador, estado=0;
    unsigned int _far *puntero_a_direccion;
    char *uno="1", *dos="2", *tres="3", *letra;

    main()
    {
    paralelo();
    outportb(para,0);
    while(opc!=3)
    {
    clrscr();
    *letra=getch();
    opc=strcmp(letra,uno);
    if(opc==0)
    {
    outportb(para,1);
    estado=1;
    }
    else
    {
    opc=strcmp(letra,dos);
    if(opc==0)
    {
    outportb(para,0);
    estado=0;
    }
    else
    {
    opc=strcmp(letra,tres);
    if(opc==0)
    {
    gotoxy(30,20);
    printf("Aplicaci¢n Finalizada");
    delay(1000);
    opc=3;
    }
    else
    {
    gotoxy(30,20);
    printf("Presiona una opci¢n v*lida");
    delay(1000);
    }
    }
    }
    }
    outportb(para,0);
    }

    paralelo()
    {
    clrscr();
    busqueda:
    puntero_a_direccion=(unsigned int _far *)0x00000408;
    printf("Rastreando Direcci¢n de Puerto Paralelo");
    while(contador<40)
    {
    printf(".");
    contador++;
    delay(35);
    }
    clrscr();
    para=*puntero_a_direccion;
    outportb(para, 0);
    }



    [​IMG]


    Descargas

    Software en C Solo Funciona Para Win9x Razón: En Xp deben desbloquearse los puertos


    SOFTWARE PARA VISUAL BASIC

    En Visual Basic es más sencillo, podemos solo agregar 2 botones y lo demás es cosa de presentación.

    El comando es Out &dirección.dato

    El código sería así:

    Notas:

    Hay que agregar un .dll que esta adjunto en el 1bitlptfvisual.zip, a la carpeta del sistema, yo lo pegué en Windows, system y system32.

    Adjunto el compilado por si lo quieres ya hecho, no lo explicaré por que esta muy sencillo, pero si alguien tiene dudas respecto al código, puede hacérmelas saber

    Para el Form

    Código:
    Private Sub Command1_Click()
    Out &H378, 0
    End Sub

    Private Sub Command2_Click()
    Out &H378, 1
    End Sub



    Además debemos agregar un Módulo par ala Dll

    Código:
    Public Declare Function Inp Lib "inpout32.dll" _
    Alias "Inp32" (ByVal PortAddress As Integer) As Integer
    Public Declare Sub Out Lib "inpout32.dll" _
    Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)



    [​IMG]

    Descargas
    Software en Visual Basic


    SOFTWARE EN LABVIEW
    Si creyeron que en Visual Basic es fácil, pues esperen trabajar con Lab View, en 5 min, se puede hacer lo que hicimos con los anteriores programas.

    Las versiones superiores a Lab View 5 permiten utilizar el puerto paralelo. Yo estoy usando la 7.1 y permite compilar las simulaciones, pero no he podido comprobar si funciona en Pc's sin Lab View, dejaré un instaler por si alguien "QUE NO" tenga instalado Lab View, me hace favor de probarlo.

    Para empezar, ocupamos poner un Interruptor Bolean, un convertidor de Bolean String a Number , una constante numérica en la que pondremos la dirección del puerto en decimal =888 y un Out Port

    Tal como en la imagen siguiente:

    [​IMG]

    No olviden meterlo dentro de un ciclo while

    [​IMG]


    Descargas
    Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.






    center>CONTROLAR TODOS LOS BITS DE SALIDA</center>

    Ya vimos como controlar un solo Bit, pues el proceso para hacerlo con todos es similar.

    Disponemos de 8 bits de salida o lo que es igual a 1byte.

    En fin, para encender el primer bit debíamos enviar un 1, para encender los demás debemos pensar en el puerto como un número binario, los 1 representan un estado "alto" y los 0 un estado "bajo".

    Si quieremos, encender todos los 8 bits, entonces debemos mandar un 11111111, podemos mandarlo en decimal y el mismo programa lo pasa a binario, enviaremos entonces un 255.

    Y así es para cada número.
    000=00000000
    001=00000001
    002=00000010
    ...
    255=11111111


    En este caso no explicaré el Hardware externo, ya que no hay ninguno [​IMG], simplemente estamos viendo como controlar los bits sin nada conectado.

    Así que nos pasamos directo al Software.



    <center>
    SOFTWARE EN C</center>
    En C, puede ser de esta manera:
    La función paralelo, lo que hace es buscar la dirección del puerto y almacenarla.
    Si queremos que al salir del programa se apaguen todos los bits debemos mandar un

    Código:
    outport(para,0);


    De lo contrario al salir del programa se quedarán tal cuál los hayamos dejado.

    La explicación del programa es un poc extensa, así que me la ahorraré, si alguien no lo entiende, me avisa y entonces lo explico.

    Código:
    #include <conio.h>
    #include <graphics.h>
    #include <dos.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>

    int paralelo(), para, contador=2, stop=0, opci, arreglo[8], salida(), datum[8];
    unsigned int _far *puntero_a_direccion;
    char *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8";
    long dato=0;
    float resultado;
    main()
    {
    paralelo();
    outportb(para,0);
    contador=0;
    while(contador<8)
    {
    arreglo[contador]=0;
    contador++;
    }


    while(stop==0)
    {
    clrscr();
    printf("Presiona una n£mero del 0-7\nPara Salir Presiona *");
    *letra=getch();

    opci=strcmp(letra, n0);
    if(opci==0)
    arreglo[0]=arreglo[0]+1;

    opci=strcmp(letra, n1);
    if(opci==0)
    arreglo[1]=arreglo[1]+1;

    opci=strcmp(letra, n2);
    if(opci==0)
    arreglo[2]=arreglo[2]+1;

    opci=strcmp(letra, n3);
    if(opci==0)
    arreglo[3]=arreglo[3]+1;

    opci=strcmp(letra, n4);
    if(opci==0)
    arreglo[4]=arreglo[4]+1;

    opci=strcmp(letra, n5);
    if(opci==0)
    arreglo[5]=arreglo[5]+1;

    opci=strcmp(letra, n6);
    if(opci==0)
    arreglo[6]=arreglo[6]+1;

    opci=strcmp(letra, n7);
    if(opci==0)
    arreglo[7]=arreglo[7]+1;

    opci=strcmp(letra,stopo);
    if(opci==0)
    stop=1;

    salida();
    }
    }

    salida()
    {

    contador=0;
    clrscr();
    dato=0;
    while(contador<8)
    {
    datum[contador]=((arreglo[contador])%2)*(pow(2,contador));
    dato=dato+datum[contador];
    contador++;
    }
    outportb(para,dato);
    }

    paralelo()
    {
    clrscr();
    busqueda:
    puntero_a_direccion=(unsigned int _far *)0x00000408;
    printf("Rastreando Direcci¢n de Puerto Paralelo");
    while(contador<40)
    {
    printf(".");
    contador++;
    delay(30);
    }
    clrscr();
    para=*puntero_a_direccion;
    outportb(para, 0);
    }



    <center>[​IMG]</center>

    Si quieren, pueden descargar el que yo he compilado.

    Descargas
    Software en C




    <center>
    SOFTWARE EN VISUAL BASIC
    </center>
    La ocasión anterior, el programa en visual fue más sencillo, pero en esta, la verdad es que me ha costado más por los arreglos que he hecho con los checkbox.

    <center>[​IMG]</center>

    Los Bits pueden encenderse o apagarse desde los 8 checkbox o puede ingresarse el dato en el texbox.

    Para hacerlo, hubo que agregar 1 checkbox y copiarlo y pegarlo 7 veces para hacer una matriz, entonces se simplifica el trabajo pues solo damos la instrucción una vez y solo debemos indexarlos para hacer referencia a cada uno.

    Para empezar, ocuparemos un módulo para la dll

    Código:
    Public Declare Function Inp Lib "inpout32.dll" _
    Alias "Inp32" (ByVal PortAddress As Integer) As Integer
    Public Declare Sub Out Lib "inpout32.dll" _
    Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)



    El código para hacer que revise los checkbox es así

    Código:
    Private Sub revisa()
    contador = 0
    dato = 0
    While contador < 8
    If Check1(contador).Value = 1 Then arreglo(contador + 1) = 1 Else arreglo(contador + 1) = 0
    dato = dato + (arreglo(contador + 1) * (2 ^ contador))
    contador = contador + 1
    Wend
    Text1 = dato
    Out &H378, dato

    End Sub


    Private Sub Check1_Click(Index As Integer)
    revisa
    End Sub



    Lo de poder ingresar el dato desde el texbox es adiciona y no es necesario para el funcionamiento del programa.

    Descargas
    Software Visual basic




    <center>
    SOFTWARE EN LABVIEW</center>

    Como la ocasión anterior, en LabView la programación resultó más sencilla, el único detalle es que no pude hacer que los chek buttons se selccionen solos cuando el dato es ingresado, por ello agregué LEDS [​IMG]

    Empezamos añadiendo 8 checkbuttons y les agregamos un convertidor de Boleano a Número.
    <center>[​IMG]</center>

    Después, ocupamos darle un peso a cada salida, deben de estar en base 2, el primero se eleva (2^0)multiplicado por 0 o 1 dependiendo del estado del check button. Si esta presionado tendríamos (2^0)(1)=1

    Para el segundo check (2^1)(check) Si el check esta presionado (2^1)(1)=2 si no esta activo (2^1)(0)=0
    <center>[​IMG]</center>

    Las salidas de cada bit elevado a su potencia, al final las sumaremos para sacar el dato completo y como son muchas, agregamos una suma ´múltiple, le hacemos de 8 y listo [​IMG].

    La salida de la suma, la mandamos a un indicador numérico o si no quieren visualisarlo, simplemente lo mandan al outport
    <center>[​IMG]</center>

    Finalmente, metemos todo dentro de un ciclo while y le ponemos un bolean true para que se repita siempre y quedaría así:
    <center>[​IMG]</center>


    Este Es EL Que Yo He Compilado, Si Quieren Pueden Descargarlo En El Link De Abajo

    <center>[​IMG]</center>

    Descargas
    Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.
    Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servirá Para Poder Ejecutarlo. Ocupa Xp.

    Resúmen Descargas
    Software Visual basic
    Software en C Solo Funciona en Win9x, en Xp se deben desbloquear los puertos.
    Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.
    Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servirá Para Poder Ejecutarlo. Ocupa Xp.
     
    #2
  3. alocate

    alocate Lanero novato

    Registrado:
    10 Agosto 2009
    Mensajes:
    3
    Me Gusta recibidos:
    0
    hola, yo use el peurto usb para un proyectito en visual basic 6, no se cual uses pero en esa version se debe agregar la libreria comcontrol6, que tiene por simbolo un telefonito amarillo, despues en la parte de Form_OPen se coloca
    mscomm1.portopen = true ' para abrir el puerto
    luego cuando desees enviar por ejemplo el texto de text1.text se coloca
    mscomm1.output = text1.text ' para enviarlo en ascii
     
    #3
  4. ivanasklp

    ivanasklp Lanero novato

    Registrado:
    30 Enero 2010
    Mensajes:
    1
    Me Gusta recibidos:
    0
    hola que tal ALOCATE yo tambien estoy usando esa version visual basic 6.0 y la verdad es que igualmente estoy practicando con este software y me gustaria que me ayudaras con lo que quiero, mi finalidad es enviar y recibir datos por usb hacia una ventana creada en visual basic 6.0 de tal manera que al dar click a un boton se envie por ejemplo una señal de +++ en ascii que me sirve para comunacrme con un pic18f4550 y este a su vez controla un modulo XBEE al llevar este +++ el XBEE me regresa un mensaje de 'ok' en ascii y pues pasa del pic al usb de mi pc y pues necesito que este 'ok' me lo envie a un control de texto por ejemplo y unas fucnione smas pero de eso me encargo yo, tan solo me gustaria me asesoraras en este proyectito que estoy asiendo por favor me puedes enviar un correo o agregarme a ivanasklp@gmail.com o bien ivan_ask@hotmail.com de antemano agradesco tu ayuda y tu tiempo gracias ... hasta pronto
     
    #4
  5. RIVERMILLOS

    RIVERMILLOS Lanero novato

    Registrado:
    29 Diciembre 2009
    Mensajes:
    33
    Me Gusta recibidos:
    0
    #5
  6. Kolb

    Kolb Lanero reconocido

    Registrado:
    26 Agosto 2006
    Mensajes:
    71
    Me Gusta recibidos:
    0
    Usar el USB en su forma nativa no tiene mucho sentido. Lo que hay que hacer es conectar al USB un conversor USB-rs232. Es muy posible que su maquina reconozca y configure el conversor automáticamente como un puerto COMx, si no lo hace, instalas el driver que viene con el conversor.
    Con el puerto COMx virtual se puede hacer todo lo mismo que si fuera un puerto real. Transmitir y recibir información via rs232 a tu PIC. Para esto puedes usar el control MSCOMM en VB6.
    Yo he desarrollado mas de 20 aplicaciones diferentes trabajando de esta forma y funcionan perfecto.
     
    #6

Compartir esta página