# Usb y labVIEW , entre otros



## jokelnice

Quisiera abrir este espacio para compartir experiencias en el desarrollo de proyectos utilizando este software desarrollado por national instruments , y conocer mas sobre este programa que  tantas cosas facilita .

pues bien para comenzar el foro me gustaría comentarles de otro foro muy bueno que se encargo de explicarnos paso a paso la comunicación  USB.  

https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/

agradecimientos de paso a   * jonathan moyano * por sus colaboraciones , les recomendaria que para entender lo de como funciona en si el protocolo leerse el anterior para entender conceptos ya en la aplicación con labview


----------



## jokelnice

bueno comenzemos como lo nombre anteriormente vamos a comunicarnos por el protocolo   usb   y si leyeron la pagina anterior la primer forma de comunicarse sera usb en modo   cdc  que sera a grandes rasgos la emulacion del puerto serial , ahora que necesitamos  :
1.sotfware labview ( yo estoy utilizando ni labview 8.6 ) 
2.microcontrolador 18f4550( compatible con usb )
3.proteus para probar los circuitos si se desea .
4:compillador ccs picc 
el resto se ira mostrando 

le dejo algunas paginas para comprendan muchos terminos necesarios entre ellos ( vendor ,id , usb modo bulk, mpbuspapi , usb modo  cdc , etc  

https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/
http://picmania.garcia-cuervo.com/USB_0_Desencadenado.php
http://www.muchotrasto.com/USB2Microchip.php

en que consiste el proyecto : el protocolo usb se puede trabajar en modo cdc ( Communication Device Class)  que no es mas que utilizar  nuestro micro junto con  unas librerias proporcionadas por picc en donde podemos hacerle creer al PC , que lo que esta conectado no es un micro si no es un puerto serial y se logra esto el programa en labview consistira en hacer una sencilla comunicacion serial aunque en realidad sea ( usb ) , bueno necesitamos el driver suministrado por microchip para editarle el vendor y el id en primera instancia y algunos otros como nombre del dispositivo aca continuacion solo las lineas que se editan 



		Código:
	

 .....
[SourceDisksNames]

[DeviceList] 
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_0001 ///   se edita : vendor : 04D8 y el id 0001 " yo quise el 0001"[/b]

;------------------------------------------------------------------------------
;  Windows 2000/XP Sections
;------------------------------------------------------------------------------




		Código:
	

.......
;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------

[Strings] 
MCHP="jonathan Technology Inc." // modificable
MFGNAME="jonathan Technology Inc."// modificable
DESCRIPTION="DISPOSITIVO USB_CDC"   // nombre 
SERVICE="driver de emulacion de puerto serial// modificable"

y finalmente el driver es este .


----------



## jokelnice

entones teniendo nuestro driver ya instalado ahora sef¡guimos con el micro y en esencia lo primero que queremos hacer en labview es enviarle datos al micro y que el lo muestre por un puerto entonces el codigo es este 


		Código:
	

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include ".\libreria\usb_cdc.h"
#rom int 0xf00000={1,2,3,4}

void main() {
   int8 x;
   set_tris_b(0x00);
   output_b(0x00);
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
     while(!usb_cdc_connected()) {} // espera a detectar una transmisión de la PC (Set_Line_Coding).
       do{usb_task();
          if (usb_enumerated()){  // Espera a que el dispositivo sea enumerado por el host.
            if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
                x=usb_cdc_getc();
                output_b(x);
              }
             }
       }while (TRUE); // bucle infinito.
}


pero recuerden que hay que personalizar nuestro dispositivo hay entran las librerias de picc una es la usb_cdc.h que son para que funcione y otra llamada *picUSB_CDC.h * *que si es la que editamos para personalizar el dispositivo * y se modifican las siguientes lineas 
	
	




		Código:
	

        0x10,0x01, //usb version in bcd  ==2,3
         0x02, //class code. 0x02=Communication Device Class ==4
         0x00, //subclass code ==5
         0x00, //protocol code ==6
         USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7

        [b] 08,0x04,           //vendor id (0x04D8 is Microchip)
         0x01,0x00,           //product id yo quise el 0001      nota : es el mismo vendor y id de el driver que [/b]modificaron 

// RR2 cambiado para       0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ?)  ==8,9
// compatibilidad con .inf 0x33,0x00, //product id   ==10,11
// de Microchip

  importante el vendor y el id 



		Código:
	

         8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'D',0,                                                                                        // modificable 
         'C',0,[/b]
   //string 2 --> nombre del dispositivo
         22, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         '*',0,
         'J',0,
         'O',0,
         'N',0,
         'A',0,
         'T',0,                                                                                           // modificable 
         'H',0,
         'A',0,
         'N',0,
         '*',0
};

 con esto  ya nuestro dispositivo seria reconocido ( una vez conectado buscar en el asistente de harware nuevo encontrado el driver ) si todo esta bien en administrador de dispositivos el puetos debe su dispositivo a cual se le asigno un COM


----------



## jokelnice

Ahora si entra..  labview como hasta el momento todo esta bien ahora es una sencilla comuncicacon serie la cual con ocho botones manejarenos los 8 bits que enviaremos despues el micro los reconoce y los saca por el puerto b entones aca les dejo la carpeta donde esta todo lo necesario y por supuesto el VI de labview antes les envio la demostracion :

YouTube - usb y labview 

y el ejemplo esta aqui



> version para 8.2 para que le funcione a la mayoria


----------



## Patico21

hola aqui molestando otra vez la verda que tu aporte esta de lujo pero lamentablemente tengo solo el lab view 8.5 seria posible que mejores la calidad de tu imagen del VI para tratar de probarlo en mi programa ya que no tengo el mismo que tu....mira la verdad en la u estoy aprendiendo un poco de el programa me parece super interesante pero como que estos son mis primeros pininos en el programa y me mandaron a investigar como hacer la comunicacion de el usb con lab view seria mucho molestarte que me explicaras o me brindes un poquin de información en cuanto a como preparas a lab view para escritura y lectura del puerto segun lei es emulando el puerto serial.
que tomas en cuenta para hacer el VI y como instalas las demas cosas para que tu proyecto sirva muchas gracias por la respuesta de antemano


----------



## Patico21

me podrias explicar como relaciono el driver con el lab view...por favor la verdad me interesa mucho esta chevere el programa ayudame para poder sacarlo por favor


----------



## jokelnice

claro patico21 haber dejemos labview paro lo ultimo ....... para que funcione este codigo que necesitas :1) el driver 
2) el programa del microcontrolador con las librerias que son proporcionadas por ccs picc
3) el ultimas el programa en labview .

para probar  el programa es sencillo no se si ya  hayas hecho alguna comunicacion serial donde configuramos baudios , paridad .. etc ....  todo se resume en que si logramos hacer que nuestro pc reconozca que nuestro micro es un puerto serie podemos tratar la comunicacion como cualquier comunicacion serial 

ahora si como funciona el ejemplo ....
dentro del la carpeta del ejemplo  esta una que es el codigo del microcontrolador alli esta el cogigo fuente , el .hex y la carpeta donde estan las librerias que es donde tu personalizarias tu dispositivo  y estan las librerias para que la comunicacion funcione ; pero si lo que quieres es probar el ejemplo dejas todo como esta y cargas el  .hex  ( lo puedes cargar directamente al micro o puedes simularlo en proteus perfectamente ) ; teniendo esto ya hecho en el  dispositivo procederemos a conectarlo al pc , cuando hagas  esto el pc lo reconocera pero abrira el asistente de nuevo harware encontrado alli entra el driver  alli escogeras la opcion que dice instalar desde una lista o ubicacion especifica , despues  escoges incluir esta ubicacion en la busqueda y alli buscas la carpeta donde quedo el driver que fue la primera descarga que se hizo "tambien se modifica" si lo deseas personalizar,  si no lo puedes dejar tal como esta para probar y listo si todo esta bien cuando finalice el asistente para probar te diriges a administrador de dispositivos y debe haber un puerto serial ( com ) que lo ha reconocido tu pc ...... pero sera en realidad nuestro micro


----------



## jokelnice

ahora si entra labview como te decia , es facil y es hacer una comunicacion serial los vi basico estan en instrument I/O //  para solucionar lo de que no te corre el programa en labview  8.5 vamos hacer un experimento y me cuentas si te funciono voy a cargar solamente el runtime de labview 8.6 tu lo instalas y en teoria deberia correr el programa si no me cuentas  aca esta el link .



sin embargo te explico un poco el programa te decia que tiene tres vi basicos uno que configura el puerto serial , otro que escribe o envia datos a nuestro dispositivo y otro que cierra el protocolo , en cuanto a lo de los botones simplemente colocas los botones utilizas un _build array _ es decir metes esto en un array ( vector ) de booleanos despues usas _Boolean Array To Numbe_ que pasa el array a numero despues _ build array _ de nuevo este es otro array pero este solo tiene una posicion y es numerico despues  _Byte Array To String _  que pasa el numero a su respectivo codigo ascil para que pueda ser enviado y listo este es el dato que se envia  

*espero que te sirva cualquier cosa  me cuentas ya sea por el foro o por mensajes *


----------



## Moyano Jonathan

Jokelnice, te felicito por tus avances en labview, cualquier cosa que pueda ayudarte me decís.


----------



## jokelnice

Moyano Jonathan dijo:
			
		

> Jokelnice, te felicito por tus avances en labview, cualquier cosa que pueda ayudarte me decís.



gracias jonathan moyano ...... pero si te fijas es basicamente todo lo que tu has desarrollado lo unico que hice fue manejarlo con labview que es lo mio , y te adelanto que ya estoy manejando  tambien muchas cosas de hecho mi proyecto de grado esta muy avanzado en la comunicacion usb yo, ya te   habia comentado que yo habia hecho la comunicacion por bulk pero que no habia entendido algunos conceptos  y cualquier cosa o cualquier duda te preguntaria muchas gracias ah y muy  pronto mas ejemplos de labview logicamente


----------



## Moyano Jonathan

Buenisimo. Yo ya manejo HID tambien aunque todavía estoy en fase de experimentación.


----------



## Patico21

muchas gracias pana la verdad que me anima mucho comnezar a adelantar esto para lo de la u y por curiosidad dejame hacer lo que me dices y te cuento como me fue


----------



## Amaro

master . lo mejor seria utilizar la mayor cantiad de bits por usb , ya que por paralelo ya es obsoleto 

gran aporte lo leere con calma para introducirme al tema


----------



## jokelnice

que tal amigos ya estoy preparando un ejemplo con la comunicacion us en modo bulk transfer y utilizando la mpbuspapi de microchip dentro de poco lo posteo


----------



## Moyano Jonathan

Yo estoy teniendo bastantes problemas con mpusbapi.dll y visual. Con HID estoy leyendo ejemplos de programación y estudiando las librerías para poder hacer más prácticas.


----------



## jokelnice

bueno para que funcione los siguientes ejemplos necesitamos , saber varios conceptos hay que tener en claro que el ejemplo anterior es basicamente emular un puerto serial y en labview se trabajaba como eso como una ( comunicacion serial ) ahora lo que se va a realizar es llamar una libreria que hizo microchip para que los dispositivos que soportaban el protocolo usb funcionaran basicamente esta la bien llamada   mpbuspapi.dll que se consigue en la pagina de microchip     ( que es simplemente una libreria con funciones (abrir conecion , escribir , leer , cerrar etc.) logicamente hablando del protocolo usb ) lo primero es conocer dichas funciones :: 

adjunto la expliacion de cada una de las funciones


----------



## Moyano Jonathan

Si puedes hacer luego experimentos con la clase HID me decis a ver si puedo solucionar los problemas que tengo con ese tipo de comunicación.


----------



## jokelnice

para la demostracion del ejemplo solo vamos a utilizar una en especifico y dejare alos lectores que con su ingenio y sabiduria sepan utilizar las demas para aprobechar todo el protocolo usb , a continuacion la explicaion de la funcion :
la funcion que voy a utilizar se llama MPUSBGETDEVICECOUNT ( ) ;

     MPUSBGETDEVICECOUNT(PVID_PID)   :     *Devuelve el número de dispositivo con VID_PID asignado.*
pVID_PID: Input: cadena de caracteres del número de identificación asignado.
   MPUSBGetDeviceCount(vid_pid)


que quiere decir esto : como sabemos el vendor es el identificativo del fabricante , y el id el del producto , lo que debemos suponer que un fabricante debe tener varios productos es decir el mismo vendor    pero con diferentes id . 
para eso es que sirve esta funcion debuelve el numero de dispositivos o mejor devuelve un numero que equivale a cada producto que este conectado al pc es decir un mismo vendor y los diferentes vi de aca un ejemplo  

Si hay tres dispositivos con los siguientes PID_VID conectados:
 Dispositivo tipo 0, VID 0x04d8, PID 0x0001
 Dispositivo tipo 1, VID 0x04d8, PID 0x0002
 Dispositivo tipo 2, VID 0x04d8, PID 0x0003

entonces la funcion nos devolvera un 3  ya que hay tres dispositivos 
teniendo claro esto solo nos falta explicar como integramnos esa libreria en labview


----------



## jokelnice

pues bien hay algo que se llama call library function  esta en


----------



## jokelnice

y ahora toda la teoria :::

*
Llibrerias compartidas e labview *

en e menu conectivity/libraries & executables se encuentra el nodo call library funtion node que permite enlazar funciones de librerias compartidas . 
al colocar el nodo en el diagrama de bloques y cinfigurarlo aparece la pantalla :


----------



## jokelnice

***** funtions*
_library name or path_  : en este campo se indicara la ruta de la libreria .activando la casilla inferior la ruta podra indicarse desde el diagrama de bloques 

_funtion name _ : aqui se elegira una de las varias funciones que puede tener la libreria 

_ thread _ : indica si puede haber multiples llamadas a lamisma libreria ( reentrant) o no ( run in ui thread ) , en este ultimo caso las llamdas se realizaran en el sistema de ejecusion del interfaz para asegurarse que solamente haya un hllo realizando la llamada 

****** parameters* 
 en esta pestaña hay varios campos en los que se indicaran los parametros de la funcion . habra un parametro de retorno _( return type )_ y varios parametros a los que se le asignara un nombre y un tipo .

*****  *callbacks*
permite configurar llamadas a otras funciones en cierto instanmtes claves de la ejecusion del nodo ._ reserve_ especifica la funcion a llamar cuando reserva un espacio de tiempo y memoria para cada llamada en un vi reentrante . _unreserve _  es lo contrario a lo anterior . _abort _ : permite configurar una funcion cuando se intenta abortar la ejecucion del vi .

*******f*untion prototype*
 va mostrando una reconstruccion de la cabecera de la funcion al estilo "C"  de acuerdo con lo que el programador  indique en los campos anteriores, puede servirpara comparar el resulatdo con la cabecera generica en c para estas funciones 
    - _type data type pass _ indican el tipo de datos del para,etro seleccionado , labview no puede reconocer todos los tipos de datos de los diferentes lenguajes de programacion existentes pero hay equivalencias entre la mayoria de tipos de otros lenguajes y los de* labview* 
*
equivalencias : *



		Código:
	

             C                 labview                                            C                       labview 
         bool          .......       I32                                   short          ........  i16
         boolean     .......       U8                                      dword, hwnd    ........  U32 
         byte          .......       U8                                    double         ........  DBL
         chart, cstr  .......       string                                 unsigned int  ........   U32
         word         ........      U16                                    unsigned short  ......   U16
         float          ........      sgl                                  int, long     .........  I32


----------



## JANETH

Muy buen post!, siguo de cerca tus comenarios y experiencias debido a que estoy empezando a trabajar con la comuncacion usb y labview, agradezco toda tu información y proximamente tenga un resultado seguro lo subo.. estamos en contacto

ycnan


----------



## jokelnice

retomando alguna inquietud que surgio por ahi y devolviendonos atras en el foro , vamos a realizar ahora el  envio de datos del pic al pc con el modo cdc no tiene  muchas ciencia pero igual lo realizaremos, lo primero seria entonces el programa del microcontrolador que es el siguiente  


		Código:
	

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include ".\libreria\usb_cdc.h" // descriptores del dispositivo clase cdc 

void main() {
   int8 dato;
   set_tris_b(0x01);    // puerto b0  como entrada 
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
   while(!usb_cdc_connected()) {}    // espera a detectar una transmisión de la PC (Set_Line_Coding).
   do{
       usb_task();
         if (usb_enumerated()){  // Espera a que el dispositivo sea enumerado por el host.
            if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
                 if(usb_cdc_getc()=='1'){ //¿ si lo que llegó fué el caracter '1'?
                      dato=input_d();  //  entonces lee lo que haya en el puerto b0 
                       printf(usb_cdc_putc,"%c",dato); envio el dato leido 
                 }
               }
           }
       }while (TRUE); // bucle infinito.
}


y despues a continuacion el codigo en labview necesario para la recepcion de datos


----------



## jokelnice

el programa es basico lo que hace primero es enviar un caracter en este caso es "1" el micro detecta si le llego ese indicador y ahi si comienza el envio de datos el programa espera hasta que dicho puerto contenga los datos en el host y lee un dato este esta en string asi que despues se transformadorrma el booleano para ser representado por un led


----------



## FRYCK

muy  buen  aporte  jokelnice


----------



## piablio

muy buen tema lo estoy siguiendo desde ahora...
una consulta este vi podria captar conversiones del AD a 200 Hz de frecuencia de muestreo?, la idea es graficar un sensor en tiempo real


----------



## jokelnice

este vi en especifico no ya que solo esta hecho para leer un bit , pero se podria redisenar ( de hecho yo ya lo realice pero no con cdc )  uno perfectamente para que lea el conversor del micro , logicamente asiendo algun muestreo de las señal  ........  pues bien yo lo hice con  señal de 60 Hz , y con un pic  18f4550 ........ ahora si el muestreo alcanza a llegar a 200 hz con este micro no sabria decirte creo , que en esto se quedan un poco colgados estas series de micros  





> no he probado hasta que frecuencia se podria hacer el muestreo "  ...


la solucion seria utilizar otro tipo de dispositivos  por si no se puede.  saludos


----------



## Moyano Jonathan

Yo más o menos se hacer que el PIC haga 255 muestras.....y que despues las mande por usb.


----------



## piablio

yo me encuentro trabajando en esto justamente en aquisicion de una señal de un sensor a 200Hz via USB y mostrar los datos en un grafico con Labview.
Tratare de publicar aca mis resultados,

Jokelnice:  con lo referente al muestreo del micro este tiene un tiempo de conversion bastante rapido (del orden de los microsegundos),  asi que se podria muestrar mucho mas rapido que eso (200Hz).
En lo que estoy entrampado es en la adquisicion por labview, que muestre las lecturas R.T.

Jonathan: si pudieras darme algunas claves de como hacer esto te agradeceria...


----------



## Moyano Jonathan

Dejame que busque el código en cuestion y te muestro


----------



## jokelnice

aca va un ejemplo de lo que he podido hacer .....................en este ejemplo no hice muestreo simplemente leia el conversor ( 10 bits ) y lo enviaba por usb_ bulk , la idea es mejorarlo para realizar muestreo de señal , pero ya es algo ,un avance significativo 





> "para mi proyecto tambien tengo que utilizar dos sensores y despues obtener una grafica caracteristica que se obtiene al graficar estas dos señales es decir sensor1 vs sensor2


........ saludos  

YouTube - conversor adc y usb


----------



## Alber Moremont

Que tal jokelnice...he entradao en este foro ya que actualmente me encuentro desarrollando un proyecto con USB y la aplicación debo hacerla con Labview, supongo ue esta información que publicas me sera de gran ayuda, de antemano gracias.

También he seguido el foro de que propones arriba(Control de dispositivos a través del módulo USB del PIC18F2550) y estoy seguro que todo este conocimiento me servira bastante para poder relizar el proyecto.

Son bastante buenos estos foros, pues es aqui en donde he encontrado más información útil y no tan repetitiva.

No llevo practicamente nada del proyecto, pero en cuanto tenga algo de avance informaciónrmare como va todo.


----------



## Moyano Jonathan

Yo tengo ganas de armar algo como lo que has hecho vos jokelnice, pero en visual basic


----------



## piablio

jokelnice:
esto es lo que necesito, si fuera posible que adjuntes el codigo del vi aca en el foro para que lo pidamos ver te lo agradeceria. Yo se que trabajas con Labview 8.6, podrias exportarlo a la version 8.5 por favor que es la que trabajo...
espero tus comentarios


----------



## jokelnice

si claro colegas si yo trabajo con 8.6 , pero ya instale la 8.2 que es la otra que tengo para que la mayoria de gente pues los pueda ver , tan pronto lo diseñe en 8.2 muestro resultados basicos ...............* una cosa .....los vi que se muestran en este foro algunos estan bloqueados es decir que se ejecutan pero no deja ver su codigo ,  para verlo solo participen y comenten  " esto es solo para  que  entre todos mejoremos muchas cosas " dejen sus datos y se brindaran  las claves ......... saludos  *


----------



## adrianjpc

Hola! a todos muy buen aporte 
me gustaria saber como utiliza la libreria call library function para poder utilizar las funcion
de lectura y escritura 
como edito Fuction prototype

gracias por sus aporte


----------



## jokelnice

adrianjpc dijo:
			
		

> Hola! a todos muy buen aporte
> me gustaria saber como utiliza la libreria call library function para poder utilizar las funcion
> de lectura y escritura
> como edito Fuction prototype
> 
> gracias por sus aporte



como estamos adrianjpc , si claro  podria mostrar lo del call library, pero cuando hablamos de funciones de escritura y lectura , estamos haciendo refererencia a las del usb  , o a otras funciones saludos  y espero poderte ayudar


----------



## adrianjpc

Me gustaria saber como adquiriste datos analogicos desde labview
en el comentario anterior diste un ejemplo me gustaria saber como
le hiciste.

tengo problema de la lectura de un sensor devido a k la lectura es muy lenta
se tarda como uns 3seg para leer no se a k se deva 
me gustaria que me ayudaras.


----------



## jokelnice

*adrianjpc* si claro haber , pero como le estan utilizando el usb por bulk o por cdc , si podriamos compartir codigos y ayudar mutuamente , saludos


----------



## piablio

adrianjpc dijo:
			
		

> Me gustaria saber como adquiriste datos analogicos desde labview
> en el comentario anterior diste un ejemplo me gustaria saber como
> le hiciste.
> 
> tengo problema de la lectura de un sensor devido a k la lectura es muy lenta
> se tarda como uns 3seg para leer no se a k se deva
> me gustaria que me ayudaras.



los datos analogicos se adquieren a tavez del PIC el labview lee los datos del microcontrolador a travez del puerto que elijas manejar, yo creo que el retardo de los 3 segundos se deba a la programacion del micro, comparter el codigo para ver y poder ayudarte


----------



## adrianjpc

Estoy utilizando la comunicacion de usb por bulk con la funcion call library de labview para hacer uso de  la libreria Mpusbapi.dll de microchip


----------



## adrianjpc

aquii les dejo el programa del pic 18F4550 en CCS C y el digrama en labview 


#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

#build (reset=0x800:0x800,interrupt=0x808:0x808)
#org 0x000, 0x07FF{}


#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer



#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports



#define LEDV    PIN_C1
#define LEDR    PIN_C0
#define LED_ON  output_high
#define LED_OFF output_low

#define modo      recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define resultado envia[0]


void main(void) {

   int8 recibe[3];                  //declaramos variables
   int8 envia[1];
   set_tris_d(0x00);
   set_tris_e(0x00);
   output_d(0x00);
   output_e(0x00);

   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);


   LED_OFF(LEDV);                   //encendemos led rojo
   LED_ON(LEDR);

   usb_init();                      //inicializamos el USB

   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   LED_OFF(LEDR);
   LED_ON(LEDV);                    //encendemos led verde

   while (TRUE)
   {
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe

            if (modo == 0) // Modo_Analogico
            {
               resultado = read_adc();  

               usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC

            }

            if (modo == 1) // Modo_Led
            {
                resultado = read_adc();  

               usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
                output_d(param1); 
                output_e(param2);             
            }

         }
      }
   }
}


----------



## adrianjpc

jokelnice Este es el programa que utlice en labview ojala y me puedas ayudar 
ya que tu hiciste algo semejante


----------



## adrianjpc

si no aparece los archivos adjuntos me avisas ya que soy novanto en esto


----------



## jokelnice

si amigo el adjunto no aparece , para enviarlo tienes que ire a modo avanzado despues agregar una imagen o archivo al examen , buscas el archivo ( algunas archivos no los sube por ejemplo los vi de labview  entonces tienes que comprimirlos (winrar winzip etc) )y en cuanto al codigo los consejos de los moderadores es que todo lo que sea codigo baya precisamente entre las etiquetas "codigo"


----------



## adrianjpc

aqui esta de nuevo los digrama en labview y y el programa del pic


----------



## adrianjpc

jokelnice ojala me ayudes a resolver mi problema y me enseñes como le hiciste para adquirir señales de un sensor que en el video lo simulabas con un potenciometro (el conversor ( 10 bits ) y lo enviaba por usb_ bulk )


----------



## adrianjpc

aqui les dejo la tarjeta que desarrolle 
estoy manejando 4 E/S digitales y 3 relevadores para cargas y 6 entradas analogicas 
donde puse un pontenciometro en la entrada AN0 para hacer simulaciones


----------



## jokelnice

si claro mira haber estuve revisando tu codigo empezemos por el del microcontrolador 
1) te falta definir la resolucion del conversor aunque creo que por default esta a 8 bits 
2) lo segundo es definir que va hacer la targeta observado vi que era  
   a. 6 entradas analogos aca solo probaremos uno
   b. 4 entradas digitales y cuatro salidas dgitales tendriamos que definirlsa por aparte 
   c. 3 relevadores que supongodeben ser salidas digitales 

3) lo mas aconsejable asi lo hice yo es " tambien estoy haciendo una targeta de adquicion " es probar cada cosa por aparte y lo que hice a lo ultimo unir todo , *piensa que estariamos muy debuenas en donde todo lo que hicieramos nos saliera el primer intento * te aconsejo primero las salidas digitales despues entradas y finalmente el conversor 

estuve mirando el codigo y si hay unos errores o mas hay que depurar si te fijas estamos leyendo el conversor en dos instancias deberia ser en una sola .
y en cuanto a el codigo en labview tambien hay que hacer mejoras ,pero te parece si poco a poco las solucionamos y te propongo que desarrollemos la targeta por partes . la primera seria enviar datos del pc al micro y que el micro mande esto aun puerto y tendriamos las salidas digitales ....


----------



## thoranaga

Hola paisano y colega jokelnice...
Una pregunta. ¿Que *ventajas/desventajas* tiene el trabajar en BULK y no en CDC?, ya que tengo entendido que esta última está especializada en transferencia de comunicación (ej. cable-módem) y la BULK en almacenamiento masivo (ej. Memorias USB).... Recuerde que en electrónica también se aplica el principio KISS http://es.wikipedia.org/wiki/Principio_KISS...  ... Y si es solo una DAQ ¿Para que "almacenar", si eso lo puede hacer Labview? (De hecho esa parte me tiene truncado... El almacenamiento de datos...)

También se me hace loable que trabaje en Labview ya que permite ser superflexible para las condiciones y gustos cambiantes del usuario final, algo que en visual se vuelve tedioso, y de hecho imposible para el usuario final, (si acaso el crear una paleta de colores, jajajaja...) cosa que en Labview no sucede... (Ahi le paso un "tip" para cuando tenga que exponer su tesis.) 

Esta es la primera vez que escribo un post, y me honra hacerlo con un colega de la Distri (o no "yamisiño", jajajaja!...).
P.D: No creo que se imagine quien soy...


----------



## alcon8212

señor chazos,o mejor dicho thoranaga que milagro ud por aqui esa es una pregunta interesante


----------



## juan_d

hey, jokelnice, he trabajado el usb en forma hid, y cdc, pero aun no lopuedo hacer por la forma bulk transfer, por falta de un sofware para leer y enviar datos, se gun he leido este post,ud ya lo maneja , seria tan amable de indicarme como hacerlo, si tiene de casualida un ejemplo de labiew que maneje esto, estari muy agradecido


----------



## adrianjpc

jokelnice ya probe la salidas digitales funcionan  muy bien, presisamente eso fue lo que hice probar parte por parte. pero al probar las entradas analogica la respuesta es muy retardada no es en timpo real .
me gustaria que me compartieras tu codigo que hiciste para ver cuales son mis errores y si podemos mejorar algo.


----------



## jokelnice

a *thoranaga *  venga pachito ese milagro encontrarmelo  por aca , venga y alcon8212 es quien yo creo que es , pero venga para resolverle la duda hay va el usb tiene varias clasificaciones , una es la forma como trabaja o algo asi 
entonces una explicacion sencilla 
*usb - cdc* ( Comunication device class) : es una comunicacion de baja velocidad , se caracteriza por emular si es asi que se dice un puerto serial  un puerto *"com" *es decir que si se hace bien nos podemos como cualquier comunicacion serial precisamente   
*
usb-hid* ( human interface device ) : tambien es de baja velocidad su principal caracteristica es que no se necesita ningun tipo de driver para que funciones ya que funciona gracias al _plug and play_ es el utilizado en los mouse , los joystick etc 
*usb- msd *( mass storage device ) este es el protocolo con el que funiconas las memorias usb _no _es el bulk como crees de este si no eh averiguado nada solo el nombre 
*usb-bulk* ( transmisión por bolcamiento ) es la mas rapida de todas ,  si necesita driver para realizar la comunicacion es la mas estable  .  
una explicaion sencilla . pero consisa colegas
venga y lo del *principio KISS*  cierto muy cierto , no lo habia escuchado bueno . bueno.

a* juan_d*  si se esta manejando por bulk transfer con la api proporcionada por microchip y para comenzar ah entenderlo hay unos ejemplos publicados anteriormente muestra la explicacion de sencilla de como la podemos hacer funcionar  y en cuanto al sotware para poder y enviar los datos se puede en cualquiera , visual basic  , c++ , c#, etc... solo mente depende de poder integrar la _api de microchip_ 

a *adrianjpc* ok estoy preparando los ejemplos ya que yo tengo la version 8.6 y casi nadie la tiene entonces estoy pasando los ejemplos a la 8.2 para que la mayoria lo pueda ver  .......

saludos


----------



## adrianjpc

jokelnice por mi no te preocupes tengo la version 8.6 espero y tus ejemplos me puedan ayudar 
gracias

saludos


----------



## jokelnice

ah ok entonces ahi va si alguien lo necesita en 8.2 avisen 
bueno pues aca va el codigo , esto solo es el codigo para probar el adc 


		Código:
	

#include <18F4550.h>
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 2 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer

#include ".\librerias\pic18_usb.h" //libreria suministrada por picc para el manejo de pic 18fxxx
#include ".\librerias\PicUSB.h" //Configuración del USB y los descriptores para este dispositivo ,ademas la identificacion del dispositivo ( id - vendor)
#include ".\librerias\usb.c" //handles usb setup tokens and get descriptor reportsç

void main(void) {
int8 recibe[2]; //declaramos variables
int8 envia[0];
int8 x,y,i;
int16 dato;
/*set_tris_b(0x00);
//set_tris_d(0x7f);
output_b(0x00);*/

usb_init(); //inicializamos el USB
usb_task(); //habilita periferico usb e interrupciones
usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
                            //es decir esperar hasta que el dispositivo lo reconozca el pc
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);

while (TRUE){
   if(usb_enumerated()){//si el PicUSB está configurado
       if (usb_kbhit(1)){//si el endpoint de salida contiene datos del host
         usb_get_packet(1,recibe,1); //cojemos el paquete de tamaño 1bytes del EP1 y almacenamos en recibe
           if( recibe [0]=='1'){//  si llego un "1" entonces activa el conversor  
               set_adc_channel(0);
               delay_us(4);
               dato=read_adc();
               delay_us(10);
               envia[0]=dato;
               usb_put_packet(1,envia,,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC**/
              }
           }
         }
      }
    }

 este es el codigo para enviar el valor leido del conversor fue el primer ejemplo conversor a 8 bits despues lo mejore a 10 y se vio cierta mejoria 

y en cuanto a los vi despues de hacer varios codigos pude concluir que es mejor utilizar el codigo , en si es decir sin llamar subvis a no ser que claro se invoquen dinamicamente que funciono igual  , tambien me di cuenta que directa o indirectamente influye el pc en el que estamos corriendo  ya que por experiencia una cosa era lo que yo observaba  en la casa y otra lo que veia en  la "u" cuando haciamos pruebas con otro equipo  saludos y *comenten sus experiencias para mejorar  *


----------



## adrianjpc

gracias jokelnice voy a tratar de entenderle al codigo y luego te digo los resultados

saludos


----------



## adrianjpc

jokelnice cual es la diferencia entre utilizar el conversor de 8 y 10 bits 
en que se mejora?


----------



## lapm

Que tengan unescelente día.

Me presento mi nombre es Luis, soy docente en la UTA (universidad Técnica de Ambato), y quisiera si ustedes me pueden ayudar a utilizar dichos puertos como el serial, paralelo, y USB el cual ya es muy difundido para la utilizanción de los sistemas de comunicación. La razón es que necesito impartir éstos conocimiéntos a mis alumnos para que ellos puedan realizar sus proyectos y así que ellos puedan construir sus circuitos y que no esten comprando ya que son muy caros, pero bueno quisiera si alguien me da una manito para pooder aprender a utilizar dichos puertos utilizando logicamente LabView, yo estoy con la versión 7.0 ya que en la universidad sólo tienen la licencia de dicha versión pero también utilizo la versión 8.2, en lo que tiene que ver a PICs utilizo el PIC16F6877A, se programar utilizando el Maplab o utilizand el compilador CCS tambien e simulado en la plataforma de Proteus pero quisiera no sólo llegar a simular, más bien mi objetivo es realizar prácticas completamente a la vez didácticas que ésto me sirvan para futuros proyectos.

De antemano Gracias por su aporte


----------



## jokelnice

* adrianjpc* pues mira al utilizar el conversor a  a 8 biys tendremos 5/255 =19.6mv/bit  y a  100bita 5/1023=4.88mv/bit
  lo que quiere decir que en 8 bits  cada 19.6mv el cpnversor va a  identificar o va representar  como un bit ( digital) , mientras que con diez bits sera cada 4.8 mv por lo tanto tendremos una mejor resolucio a la hora de leer  , lo que quiere decir que minetras los dispositivos trabajen a mas bits seran mucho mejor .

*apm*  como no este tipo de foros esta hecho para todos , y si claro , entre todos podemos colaborar , en cuanto al manejo de los puertos si se ha venido desarrollado en labview , se han venido trabajando con el compilador de microcontrolador _ccs picc_ habria que recopilar alguna información para su comprension y despues se estaria publicando  el mas sencillo sera el serie , el paralelo y el usb  tiene un poco mas de trabajo porque como tal no esta incorporado en labview como si lo esta serie . 
saludos


----------



## adrianjpc

jokelnice porque al programar el pic le pones retardo de 4 y 10 milisegundos. Esto  hace que la lectura  no sea en tiempo real?
set_adc_channel(0);
               delay_us(4);
               dato=read_adc();
               delay_us(10);
               envia[0]=dato;
               usb_put_packet(1,envia,,USB_DTS_TOGGLE);


----------



## piablio

jokelnice dijo:
			
		

> ah ok entonces ahi va si alguien lo necesita en 8.2 avisen
> bueno pues aca va el codigo , esto solo es el codigo para probar el adc
> 
> 
> Código:
> 
> 
> #include <18F4550.h>
> #DEVICE ADC=8
> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
> #use delay(clock=48000000)
> 
> #define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
> #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
> #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
> #define USB_EP1_TX_SIZE 2 //size to allocate for the tx endpoint 1 buffer
> #define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer
> 
> #include ".\librerias\pic18_usb.h" //libreria suministrada por picc para el manejo de pic 18fxxx
> #include ".\librerias\PicUSB.h" //Configuración del USB y los descriptores para este dispositivo ,ademas la identificacion del dispositivo ( id - vendor)
> #include ".\librerias\usb.c" //handles usb setup tokens and get descriptor reportsç
> 
> void main(void) {
> int8 recibe[2]; //declaramos variables
> int8 envia[0];
> int8 x,y,i;
> int16 dato;
> /*set_tris_b(0x00);
> //set_tris_d(0x7f);
> output_b(0x00);*/
> 
> usb_init(); //inicializamos el USB
> usb_task(); //habilita periferico usb e interrupciones
> usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
> //es decir esperar hasta que el dispositivo lo reconozca el pc
> setup_adc_ports(ALL_ANALOG);
> setup_adc(ADC_CLOCK_INTERNAL);
> 
> while (TRUE){
> if(usb_enumerated()){//si el PicUSB está configurado
> if (usb_kbhit(1)){//si el endpoint de salida contiene datos del host
> usb_get_packet(1,recibe,1); //cojemos el paquete de tamaño 1bytes del EP1 y almacenamos en recibe
> if( recibe [0]=='1'){//  si llego un "1" entonces activa el conversor
> set_adc_channel(0);
> delay_us(4);
> dato=read_adc();
> delay_us(10);
> envia[0]=dato;
> usb_put_packet(1,envia,,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC**/
> }
> }
> }
> }
> }
> 
> este es el codigo para enviar el valor leido del conversor fue el primer ejemplo conversor a 8 bits despues lo mejore a 10 y se vio cierta mejoria
> 
> y en cuanto a los vi despues de hacer varios codigos pude concluir que es mejor utilizar el codigo , en si es decir sin llamar subvis a no ser que claro se invoquen dinamicamente que funciono igual  , tambien me di cuenta que directa o indirectamente influye el pc en el que estamos corriendo  ya que por experiencia una cosa era lo que yo observaba  en la casa y otra lo que veia en  la "u" cuando haciamos pruebas con otro equipo  saludos y *comenten sus experiencias para mejorar  *





podrias subri este ejemplo en version 8.5 que es la que comunmente los mortales trabajamos , 
estaria muy agradecido


----------



## David Andres Toro Garzon

Saludos Jokeline, me lei todo tu foro en una noche, que dolor de cabeza, pero muy interesante,.
Me gustaria que me permitieras tener los codigos para mirar como hace usted la comunicacion del USB del labview, porque sinceramente hay muchas cosas que no comprendi leyendo y talvez viendo como funcionan, aprenda. 

Almenos eso de modificar lo del VID y PID, porque estoy tratando de montar los ejemplos en Windows Vista, pero el Labview no reconoce el dispositivo.
Windows Vista si lo reconoce, pero Labview no, y me gustaria manejar bien lo del USB para yo tambien hacer una tarjeta de adquisicion de datos (Algun dia, en unos siglos).

Me gustaria que me ayudara a comprender mucho lo de esa comunicacion, y que pena si le pregunto bastante, pero estoy bien interesado.

PD. muchas gracias, Jokeline y Moyano han sido de gran ayuda para usar el USB.


----------



## David Andres Toro Garzon

Ha, y un aporte para todos los que sean muy curiosos y les guste el control y la robotica, les dejo una pagina, por si depronto no la conocian, es muy interesante. Tiene libros, softwares, todo realcionado con la carrera.

http://controlpoli.co.cc/


----------



## David Andres Toro Garzon

jajajaja, otro aporte
para el amigo que no ha podido con el labview 8.6, este trae una opcion que te permite grabar en una version anterior, solo lo trae el 8.6, asi que es sino que Jokeline le de en FILE/Save for Previous Version/ y listo te aparece un cuadro que te da la opcioin para grabar en versiones anteriores, pero solo las versiones del 8.X


----------



## piablio

David Andres Toro Garzon dijo:
			
		

> Ha, y un aporte para todos los que sean muy curiosos y les guste el control y la robotica, les dejo una pagina, por si depronto no la conocian, es muy interesante. Tiene libros, softwares, todo realcionado con la carrera.
> 
> http://controlpoli.co.cc/



esta super buena la pagina la veremos mas en detalle
se agradece


----------



## jokelnice

me alegra que el foro este creciendo .



			
				adrianjpc dijo:
			
		

> jokelnice porque al programar el pic le pones retardo de 4 y 10 milisegundos. Esto  hace que la lectura  no sea en tiempo real?
> set_adc_channel(0);
> delay_us(4);
> dato=read_adc();
> delay_us(10);
> envia[0]=dato;
> usb_put_packet(1,envia,,USB_DTS_TOGGLE);



saludos adrian tu apreciacion es buena pero si observas el retardo esta en microsegundos el _us_ y de hecho si miramos las hojas de datos nos ponen como recomendacion este tipo de retrasos para asegurar la conversion , saludos y espero que te haya servido ..



			
				David Andres Toro Garzon dijo:
			
		

> jajajaja, otro aporte
> para el amigo que no ha podido con el labview 8.6, este trae una opcion que te permite grabar en una version anterior, solo lo trae el 8.6, asi que es sino que Jokeline le de en FILE/Save for Previous Version/ y listo te aparece un cuadro que te da la opcioin para grabar en versiones anteriores, pero solo las versiones del 8.X



je je je jej huy colega pueden creer que este ah sido un dolor de cabeza no me van a creer que tengo instalada versiones anteriores para poder hacer los ejercisios  *no puedo creer que se haya pasado por alto * pero muchas gracias por la apreciacion no, no ah y la pagina esta muy bien en cuanto a lo de labview en windows vista  la verdad es que no eh hecho pruebas asi que no podria decirte porque no te funciona alguna vez lei que la *mpbuspapi* de microchip no funcionaba en vista recordemos que con esta es la que hacemos la *comunicacion usb en modo bulk *  , y lei tambien que entonces tendriamos que hacer algo con algo que trae vista que se llama *winusb * especifico para dispositivos usb de lo cual no eh mirado nada espero que haya podido ayudar y estamos en comunicacion


----------



## jokelnice

ah atendiendo sugerencias  esto y gracias a David Andres en los foros anteriores ya estan adicionados los ejemplos en otras versiones saludos


----------



## thoranaga

Jajajaja!... Si soy yo!... Y alcon8212 es nada mas y nada menos que don "MARIN"...   
Que bacano reencontrarmelos en la virtualidad!...
Jhonathan o mejor *Jockelnice!*... 
Si, que pena que estaba confundiendo el *USD- MSD con el Bulk*, ops:!...(Los otros ya los conocía, pero es bueno recordar... Thanks!)  
En efecto el Bulk permite manejar * todo el ancho de banda del USB*, es decir que si es USB 1.1 tendríamos 12Mbits /s y si es 2.0 serían 480Mbits /s!!!...  Y ni hablar del nuevo USB 3.0 con nada mas y nada menos que 5.0 Gbit/s. Pero aclaro: son Bits no Bytes!... http://en.wikipedia.org/wiki/Universal_Serial_Bus... 
Claro está que eso depende del Computador y no del desarrollo del firmware que viene estándar para Microchip/Labview... (Cuando hice la prueba con un HID, en algunos computadores salía: "Este dispositivo USB puede funcionar mas rápido"...Porque lo conecté en puertos 1.1)
Tal vez esa pueda ser la causa del cambio del comportamiento en la U y en su casa... Algunos PC de la U son de usb 1.0/1.1... Aunque no estoy muy seguro k sea por eso... En cuanto al CDC su velocidad es la que "emule" en el puerto configurado es decir 9600 bits o en mi caso 38,4Kbits/s.  Pero eso implicaría que en ocasiones el "puerto virtual" cambie de ubicación y sea necesario escogerlo en la aplicación de LabView. Aunque eso no es tan grave... (Cambiar el "puerto" del VISA Serial por un tipo "indicador").... En cuanto a estabilidad no he probado el Bulk para saber cual de los dos es mas estable.... Eso si el Bulk es matador en sistemas RTOS http://es.wikipedia.org/wiki/Sistema_operativo_de_tiempo_real
¿Pero exactamente cuál es el problema en la U?... Errores de Labview?... Saltos o ruido en la señal?... Me cuenta...Se me cuida!...
Sugiero a *David* que pruebe primero con USB-CDC... Y después si pase a USB-Bulk... Saludos.


----------



## thoranaga

Por cierto gracias por subirlo en 8.2!... Cualquier cosa estoy para ayudarle (aunque sigo "fan" del  USB-Cdc, jajajaja!)... Y que viva la Distri!, jejejeje....


----------



## adrianjpc

jokelnice gracias por tu aportacion ya hice pruebas funciono perfectamente bien
mi error estaba  en los retardos que se deve hacer para hacer la convercion adc en el pic y en labview mandaba a llamar dos veces la funcion  call  library lo que hacia que se retardara el sistema.


----------



## adrianjpc

Me gustaria que me ayudaras a tomar datos no de  una entrada analogica si no mas al mismo tiempo
eh estado intentando pero me marca error  en el codigo de pic


----------



## jokelnice

como seria , no entiendo muy bien lo quieres hacer


----------



## adrianjpc

quiero programar varias entradas analogicas por ejemplo 4 de puertoA, como le haria?
en el codigo cambio el canal y me marca error que tengo que hacer?


----------



## darck_khronos

y como puedo comunicar una simulacion de proteus usando rs232 en Labview


----------



## jokelnice

adrianjpc dijo:
			
		

> quiero programar varias entradas analogicas por ejemplo 4 de puertoA, como le haria?
> en el codigo cambio el canal y me marca error que tengo que hacer?



pues de alguna manera tienes que hacer un codigo donde te vaya seleccionando cada canal , guardas cada lectura y a la hora de enviarlo lo podrias enviar generando un array de todas las lecturas y  envias solo un trama algo como esto 



		Código:
	

envia[0]=canal_1; // lectura 1 , etc
                envia[1]=canal_2;
                envia[2]=canal_3;
                usb_put_packet(1,envia,USB_DTS_TOGGLE); //enviamos el paquete

 yo todavia estoy experimentado ya que necesito hacer algo parecido 



			
				darck_khronos dijo:
			
		

> y como puedo comunicar una simulacion de proteus usando rs232 en Labview



pues recuerda que rs232 es serial y hasta donde "c"  proteus no tiene implementado este tipo de emulacion como el usb , lo que hacemos con el hyperterminal  es interno solo es una emulacion quiere decir que en ningun momento se esta metiendo con la parte del hardware del pc ( como si se hace con el usb en cdc por ejemplo en donde  con  una emulacion podrias tener proteus ejecutando y labview tambien y ver si la comunicacion esta bien ) en el serial es muy complicado lo mejor es montar lo que estes haciendo y ahi si pobrar la comunicacion rs232 en labview


----------



## darck_khronos

por que estoy haciendo una pequeña practica con serial con un 18f4550 y ya lo comunique con labview en fisico, solo tengo la duda si tambien podria hacer lo mismo simulado asi como la usb


----------



## tr_manolete

hola jockelnice quisiera saber si me podrias pasar el codigo de tus vi's ya que tengo cierta curiosidad de como manejaste esta interfaz he visto que contiene el visa pero hasta ahi.


----------



## tr_manolete

si necesitas simularlo bajate el proteus 7.4 sp3 que ya trae hasta el usb simulacion y obvio el rs232 que traen las versiones anteriores este programa tiene mucha caña.


----------



## jokelnice

tr_manolete dijo:
			
		

> hola jockelnice quisiera saber si me podrias pasar el codigo de tus vi's ya que tengo cierta curiosidad de como manejaste esta interfaz he visto que contiene el visa pero hasta ahi.



claro *tr_manolete* los ejemplos que se han posteado ya se puede ver el codigo , algunos tenian clave pero ya se las quite y si para esta comunicacion uso las librerias de visa 

saludos


----------



## adrianjpc

jokelnice ya terminaste tu tarjeta de adquisicion de datos? como vas?

saludos a todos


----------



## jokelnice

adrianjpc dijo:
			
		

> jokelnice ya terminaste tu tarjeta de adquisicion de datos? como vas?
> 
> saludos a todos



bien colega lo que pasa es que eh tratado en hacerlo funcionar en otro tipo de programas como labwindows o visual basic , ademas estoy haciendo como una especie de manuales para manejar los puertos ( serie , paralelo , etc ) en labview 

saludos .........


----------



## biocesar

hola jokelnice, primero te agradesco por tus grandes aportes, de un tiempo aca e estado desarrollando unos proyectos en la universidad, lo hacia por el puerto usb con un 2550, inicialmente con hid, despues pase al cdc, ahora me he querido meter con el bulk_trasfer, mi proyecto actual consiste en un sistema de adquisicion de una señal, solo una, cn un comversor a/d de 10, y graficar en labview, para migrar proximamente al delphi y luego un pequeño salto al lazarus, pero bueno, mira mi problema con el bulk_transfer es que el pc no me reconoce el dispositivo usb cuando lo conecto al pc, me podrias ayudar con esto, no se que es lo que estoy haciendo mal, el leeido algo sobre una ta mchpusb.sys, pero no se que es, te agradesco cualquier ayuda y ncunado tenga todo listo lo subo para compartirlo con todos


----------



## biocesar

lo otro es una pregunta que puede sonar tonta, pero creo que es bueno que me lo digeran, yo uso un pic18f2550 con cdc, al usar el bulk_transfer lo conecto con un cable usb el los pines 15 (RC4/D-/VM) y 16 (RC5/D+/VP), o a los pines 17 y 18 que son el tx y rx, esto lo pregunto ya que viendo los ejemplos que hay aqui, veo que los configuran, gracias


----------



## biocesar

mi programa es este: 

#include ".\adq_bulk_transfer.h"
#include ".\Firmware\usb_desc_scope.h"

#include <pic18_usb.h>
#include <usb.c>

int   leer_puerto;
long  dato;


void main()
{
   usb_init();    

   usb_task();   
   usb_wait_for_enumeration();  

   setup_adc_ports(AN0|VSS_VREF);
   setup_adc(ADC_CLOCK_INTERNAL);

   while(true)
   {
      if(usb_enumerated())
      {
         usb_get_packet(1, leer_puerto, 1);

         if(leer_puerto == 1)
         {
            set_adc_channel(0);
            delay_us(4);
            dato = read_adc();
            delay_us(10);
            usb_put_packet(1, dato, 2, USB_DTS_TOGGLE);
         }
      }
   }

}


----------



## le8a9p

hola q tal, muchas gracias a todos por los aportes, ahora me encuentro iniciando el desarrollo de una tarjeta de adquisicion, de seguro con toda la información que hay aca podre hacerla. muchas gracias y sera ponerme a leer...jee


----------



## jokelnice

a *biocesar *
como estamos colega pues mira crero que el codigo al parecer esta bien , y lo de porque no te reconoce el dispositivo pues tendriamos que ver el archivo donde configuraste el vendor , tanto del driver  *"mchpusb.sys"* _( este es necesatio ) _ ya que en modo bulk a diferencia de hid para que funcione es necesario este driver ( este se edita para que se reconozca el dispositivo ) y el del  del micro , ah tambien saber si trabajas con xp o vista , ya que la mpbuspapi no funciona en vista .

¿ una pregunta te sale el asistente de dispositivos de tu pc y no lo reconoce  , o sencillamente no pasa nada cuando conectas ?

ah y lo de los pines de conecion son el D+ y D- los del usb, con estos funciona 

saludos ...... y espero que haya servido si no informaciónrmanos 

a *le8a9p* pues colega bienvenido y esperamos que aportes y compartas tus experiencias


----------



## biocesar

hola, mira gracias por contestar tan pronto, mi sistema operativo es xp, bueno, he avanzado un poco, pues ya me detecta el dispositivo, pero le hice un par de cambios, asi que quiero si puedes que lo veas para que me digas si hay algo mal, lo otro es que no se como modificar el .sys, porfa dime como se hace


----------



## Meta

Veo que cada vez más en estos foros preguntan sobre Labview. ¿Realmente vale la pena aprenderlo?

Cada vez más me convence en bajarlo y aprenderlo, para hacer un manual en PDF como hago siempre pero con el puerto serie. 

Otra cosa, falta en la encuesta puerto serie...


----------



## alejooocortes

hola me a servido mucho el foro para guiarme en la construccion de mi tarjeta de adquisicion, y me intereza mucho todo lo que tiene que ver con labview, yo he estado manejando algo los puertos pero manejando la opcion  VISA  de labview para hacer la comunicacion de leer y escribir pero me a dado duro lode recibir del pic, trabajo con el pic18f2550. me gutaria saver si me puedes guiar en algo o una luz. muchas gracias y de nuevo muy bueno el foro


----------



## tr_manolete

para hacer una tarjeta de adquisicion de datos no es mejor que utilices el pic 18f4550  y estoy de acuerdo en que te interese la programacion de labview ya que tambien ami me gusta mucho ya que tiene demasiuadas prestaciones, yo llevo medio año utilizandolo y aun me falta  mucho por aprender jeje


 saludos a todos en el foro


----------



## adrianjpc

biocesar la pc np reconoce al pic poque no has echo tus configuraciones en tu pic.
que tipo de cristal estas utilizando?


----------



## tr_manolete

hola jokelnice podrias seguir explicando algo acerca de call library function node es que me quede a medias?


----------



## jokelnice

biocesar dijo:
			
		

> hola, mira gracias por contestar tan pronto, mi sistema operativo es xp, bueno, he avanzado un poco, pues ya me detecta el dispositivo, pero le hice un par de cambios, asi que quiero si puedes que lo veas para que me digas si hay algo mal, lo otro es que no se como modificar el .sys, porfa dime como se hace



no mira el codigo esta bien el .sys se modifica pero este ejemplo no es necesario ya que esta bien configurado haber entonces este archivo viene con otros hay uno que es un .inf que se deja modificar alli es donde se configura ya que es como si fuera un archivo de texto a continuacion las lineas que se modifican 


		Código:
	

[DeviceList]
%DESCRIPTION%=DriverInstall,USB\VID_04D8&PID_0021	; Modificable aca va el vendor y el id de nuestro dispositivo es el mismo que se configura en el pic




		Código:
	

CopyFiles=DriverCopyFiles,StubCopyFiles
DriverVer=15/12/2008					; // es la fecha de regidtro del driver , no interviene como tal




		Código:
	

[Strings]						; Modificable
ONEYSOFT="jokelnice"
MFGNAME="jokelnice usb "
DESCRIPTION="DISPOSITIVO USB" // estos son las cadenas que identifican nuestro dispositivo

 estos es lo basico mas abajo esta el archivo .



			
				tr_manolete dijo:
			
		

> hola jokelnice podrias seguir explicando algo acerca de call library function node es que me quede a medias?



si como no .....este es el metodo para llamar librerias externas *( dll ) * en labview que es lo que tenemos que saber : las funciones que tienen esas librerias ( es por eso que por lo general estas librerias estan casi siempre acompañadas de un _archivo .h _ , aca se utilizo para hacer posible la comunicacion usb con la libreria de microchip pero , quiere decir que si conoces por ejemplo  una dll  de system32 tambien podrias utilizarlo no se por ejemplo para controlar los sonidos de nuestro pc o algo asi , espero te alla servido si es necesario algo especifico , cuentanos ; por el momento mirare haber si explico otra de las funciones para ver su utlizacion


----------



## tr_manolete

si la verdad es que necesito ver su utilizacion ya que  sigo sin comprender se que proporciona control pero no me queda claro ? ejemplo el mpsusbapi.dll contiene el archivo mpusb_read pero cual es la cuestion de utilizarlo o mejor dicho como se utiliza y de que manera puedo aprovechar su utilizacion.


----------



## jokelnice

que tal amigos para no dejar perder el hilo del foro , logre hacer las diferentes funciones de la mpbuspapi para que las puedan integrar en cualquier codigo ademas se puede ver el codigo para que sea mas comprencible .
para poder llamarlas desde labview esta  carpeta  la tienen que dejar en el siguiente ubicacion :

C:\Archivos de programa\National Instruments\LabVIEW 8.6\user.lib

despues de esto la pueden llamar desde aqui en labview


----------



## adrianjpc

muy buen aporte jokelnice

jokelnice estoy viendo que la vercion de labview que tienes esta completa 
me puedes pasar el link de la pagina donde los descargaste


----------



## tr_manolete

bueno creo que hay un pequeño problema que me imagino lo tendremos todos bueno es lo que creo el problema es que los vi's son de labview 8.6 y yo solo tengo el 8.2 no podrias pegar una imagen acerca de el bock diagram para hacerlos en 8.2 y asi poder ver lo que nos pusiste. sirve que aprendemos otras cosas mas que solo descargar los vi's.


----------



## julianesteban

hola todos es proyecto es muy bueno pero quiero saber si los datos enviados por el puerto resisten largas distancias sin que se caiga la comunicacion por favor jokelnice tu que eres el creador del proyecto responde  gracias de todos modos por toda esa imformacion y lo de la labview es si ni guardar el proyecto en una version anterior a la que necesiten


----------



## tr_manolete

espero que te ayude la siguiente información :

Max wire length -- 5 meters
Note: Can be extended to 30 meters by adding a series of hubs. 
Max number of hubs -- 5 
Max number of devices per USB port -- 127
Note: Hubs count as a device 
Low power device -- 100mA 
High power device -- 500mA 
Wiring Configuration -- Star topology 
Signal Levels (volts) -- 0.0-0.3 (low), 2.8-3.6 (high) 
Communication type -- Half-duplex 

esto biene en la pagina de http://www.bb-elec.com/tech_articles/USB_Converters.asp


----------



## jokelnice

julianesteban dijo:
			
		

> hola todos es proyecto es muy bueno pero quiero saber si los datos enviados por el puerto resisten largas distancias sin que se caiga la comunicacion por favor jokelnice tu que eres el creador del proyecto responde  gracias de todos modos por toda esa imformacion y lo de la labview es si ni guardar el proyecto en una version anterior a la que necesiten


la verdad no tengo información de este tipo tampoco me eh puesto hacer pruebas pero creo que *tr_manolete* nos colaboro con la respuesta


----------



## crangel17

Hola jokelnice he estado leyendo todos tus avances con el protocolo usb, te felicito son muy buenos.

Tengo una pregunta para el manejo de la librería  mpusbapi.dll  que tipo de comunicación hay que utilizar, funciona con la cdc ?, o tiene que ser con otra como la hid o modo bulk transfer


----------



## lapm

Hola amigos, 
Visitando los sitios de internet, me he topado con éste foro y a mi parecer es un lugar en donde se puede aprender de las personas que tienen a bien enseñarnos.
De tal manera quisiera pedirles de la manera más comedida me indiquen cuáles son los parámetros necesarios para poder utilizar este tipo de comunicación que se está teniendo en discusión en éste foro, por lo que necesito si alguien me indica cómo empiezo a comunicarme por el puerto usb y LabView.
De antemano doy mi agradecimiénto a las personas que me dan una manito con respecto a éste tema.

saludos cordiales a todos.


----------



## crangel17

Hola jokelnice muy interesantes todos tus aportes tengo una duda la librería picubs es diferente para modo cdc  y modo bulk transfer, en caso de ser diferente me facilitas la de modo bulk transfer, gracias por su colaboracion


----------



## jokelnice

crangel17 dijo:
			
		

> Hola jokelnice muy interesantes todos tus aportes tengo una duda la librería picusb es diferente para modo cdc  y modo bulk transfer, en caso de ser diferente me facilitas la de modo bulk transfer, gracias por su colaboracion



si como no colega , la mpbuspapi fue echa por microchip solamente para comunicacion *bulk transfer * , y en cuanto a la libreria picusb.h ( descriptores de los  dispositivos)  esta sirve para bulk , la de cdc ( emular el puerto serie ) es diferente  las dos estan en los ejemplos del foro 

saludos .........


----------



## jokelnice

lapm dijo:
			
		

> Hola amigos,
> Visitando los sitios de internet, me he topado con éste foro y a mi parecer es un lugar en donde se puede aprender de las personas que tienen a bien enseñarnos.
> De tal manera quisiera pedirles de la manera más comedida me indiquen cuáles son los parámetros necesarios para poder utilizar este tipo de comunicación que se está teniendo en discusión en éste foro, por lo que necesito si alguien me indica cómo empiezo a comunicarme por el puerto usb y LabView.
> De antemano doy mi agradecimiénto a las personas que me dan una manito con respecto a éste tema.
> 
> saludos cordiales a todos.



si como no , no se si ya miraste foros como ;
https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/
http://www.muchotrasto.com/USB2Microchip.php

son buenos  y en cuanto lo  especifico en labview si puede empezar por los primeros ejemplos , si no se entiende cualquier cosa solamente informaciónrma


----------



## adrianjpc

hola jokelnice por mi no te preocupes yo ya eh logrado funcionar esto fue un exitos ahora estoy para ayudarles 

solo  me gustaria saber tu nombre completo para agradecerte la ayuda


----------



## lapm

jokelnice; gracias por haber tomado en cuenta mi pedido, pero quisiera saber por qué me sale el siguiente error, y no me deja abrir el esquemático?

Saludos cordiales.


----------



## tr_manolete

hola lapm ese error se me presento ami tambien en otras ocaciones y la verdad descubri que a veces cuando se descargan archivos o se apaga las pc por algun voltaje o calentamiento o se te llega a trabar y la pc es reiniciada es cuando estos archivos son dañados lo que te sugiero es que lo vuelvas a descargar o siempres tengas un respaldo en tu memoria usb.


----------



## crangel17

Hola jokelnice gracias por tus respuestas, no he podido hacer funcionar tu ejemplo bulk podias enviar una mas elemental, por ejemplo lo que transmita de labview el micro lo recibe y lo retransmite, o algo asi gracias


----------



## jokelnice

crangel17 dijo:
			
		

> Hola jokelnice gracias por tus respuestas, no he podido hacer funcionar tu ejemplo bulk podias enviar una mas elemental, por ejemplo lo que transmita de labview el micro lo recibe y lo retransmite, o algo asi gracias



colega pues ese es como basico , hay otro en donde se utilizo el conversor analogo un poco mas avanzado trata de enterderlo y tratemos de mirar donde esta el error ..

saludos.....


----------



## crangel17

hola jokelnice ya lo entendi gracias, cual es maximo tamaño de bufer de Tx y RX en la comunicacion bulk


----------



## jokelnice

crangel17 dijo:
			
		

> hola jokelnice ya lo entendi gracias, cual es maximo tamaño de bufer de Tx y RX en la comunicacion bulk


pues colega segun lo que habia averiguado era 32 bytes , pero quize hacer la prueba y me dierom muchisimos mas llegue hasta 128 bytes  y la verdad no quize seguir pero esto ya es muchisimo ;* otra ventaja mas para utilizar el puerto usb *
aca hay un video de cuando iba en los 32 bytes YouTube - USB Y LABVIEW ( TARGETA DE ADQUICISION )
y una imagen del esquema del de los 128


----------



## Moyano Jonathan

Impresionante tus avances !


----------



## tr_manolete

no entiendo ese programa alguien me puede explicar?


----------



## jokelnice

tr_manolete dijo:
			
		

> no entiendo ese programa alguien me puede explicar?



no colega simplemente crangel17 pregunto el tamaño del endpoint  en otras palabras en realidad cuantos bytes podriamos enviar o recibir practicamente al mismo tiempo ( sabemos que no es al mismo tiempo si no que es muy rapido ) ese se muestra aca : 
	
	




		Código:
	

#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    128               //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    128


lo que quice decir es que hasta aca llego la prueba y se envia perfectamente 

saludos espero que haya quedado claro .......


----------



## Moyano Jonathan

Modificaste algo en los descriptores ?


----------



## tr_manolete

ok entonces los datos que se envian y se obtienen son tan rapidos que se ha llegado a 128 bytes verdad. otra pregunta como puedo rescatar un valor que he guardado en la memoria eprom del pic si es que quiero leero al conectarlo al usb y correrlo en labview?


----------



## jokelnice

Moyano Jonathan dijo:
			
		

> Modificaste algo en los descriptores ?


 no colega no se modifico nada solo estol 
   #define USB_EP1_TX_SIZE    128   
   #define USB_EP1_RX_SIZE    128 



			
				tr_manolete dijo:
			
		

> ok entonces los datos que se envian y se obtienen son tan rapidos que se ha llegado a 128 bytes verdad. otra pregunta como puedo rescatar un valor que he guardado en la memoria eprom del pic si es que quiero leerlo al conectarlo al usb y correrlo en labview?


 pues colega eso seria de la misma manera que se han echo los ejemplos lo unico es que esta vez los datos estarian guardados en la epromm y al momentos de enviarlos pues sellecionarias cuales 


		Código:
	

datos[0]= read_EEPROM (0);	
datos[1]= read_EEPROM (1);
datos[2]= read_EEPROM (2);

y al momento de enviarlas 


		Código:
	

usb_put_packet(1,datos,1,USB_DTS_TOGGLE);

pues seria algo asi , no se si es eso lo que quieres hacer o es diferente , cualquier cosa comenta
saludos ....


----------



## Moyano Jonathan

Muchas gracias jokelnice ya voy a ver si puedo hacer algo parecido en VB


----------



## Alexandra1

> Código: Seleccionar todo
> datos[0]= read_EEPROM (0);
> datos[1]= read_EEPROM (1);
> datos[2]= read_EEPROM (2);
> 
> y al momento de enviarlas
> 
> Código: Seleccionar todo
> usb_put_packet(1,datos,1,USB_DTS_TOGGLE);



Hola jokelnice, 

Por favor podrias decirme     como seria el codigo en labview para recibir datos?
Tambien he estado intentando enviar valores de 0-255 (1 byte) pero en el labview aparentemente solo me acepta hasta de 0-127, esto es correcto o tengo un error en mi codigo?.   :x


----------



## jokelnice

Alexandra1 dijo:
			
		

> Código: Seleccionar todo
> datos[0]= read_EEPROM (0);
> datos[1]= read_EEPROM (1);
> datos[2]= read_EEPROM (2);
> 
> y al momento de enviarlas
> 
> Código: Seleccionar todo
> usb_put_packet(1,datos,1,USB_DTS_TOGGLE);
> 
> 
> 
> 
> Hola jokelnice,
> 
> Por favor podrias decirme     como seria el codigo en labview para recibir datos?
> Tambien he estado intentando enviar valores de 0-255 (1 byte) pero en el labview aparentemente solo me acepta hasta de 0-127, esto es correcto o tengo un error en mi codigo?.   :x
Hacer clic para expandir...


saludos si mira si debe ser algun error  , ya que no tendria porque limitarse a 127 , mirandolo podriamos observar el error o algo . saludos y esperamos ayudarte


----------



## Alexandra1

Hola jokelnice,

  Gracias por responder, aqui esta mi codigo del PIC y el Labview que es el mismo que todos estamos usando gracias a J1M:



		Código:
	

#include <18F4550.h>
#DEVICE ADC=8

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20MHZ)


#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer


#include <pic18_usb.h>     					//Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>	      					//Configuración del USB y los descriptores para este dispositivo
#include <usb.c>        					//handles usb setup tokens and get descriptor reports

#define LEDV    PIN_B6
#define LEDR    PIN_B7
#define LED_ON  output_high
#define LED_OFF output_low

#define modo      recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define resultado envia[0]

void main(void)
{
   int8 recibe[3];                  //declaramos variables
   int8 adc[1];
   int16 contador;

   LED_OFF(LEDV);                   
   LED_ON(LEDR);

   setup_adc_ports(AN0|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   set_adc_channel(0);
   delay_us(10);

   usb_init();                      		//inicializamos el USB
   usb_task();                      		//habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      		//esperamos hasta que el PoteUSB sea configurado por el host

   LED_OFF(LEDR);                   
   LED_ON(LEDV);

   contador=0;

   while (TRUE)
   {

      if(usb_enumerated())          		//si el PoteUSB está configurado
      {
         LED_OFF(LEDR);                   
	   	 LED_ON(LEDV);       			// encendemos LED para indicar que el disp esta enumerado

               while(contador<512)
               {
                adc[0] = read_adc();
                delay_us(10);

                usb_put_packet(1, adc, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
                delay_ms(100);
               }
       }
   }
}


----------



## Chico3001

No soy un experto en labview pero veo que tus variables las declaraste como int8 y si por default las toma con signo el rango que abarcan son de -128 a 127, intenta cambiandolas por unsigned int


----------



## Alexandra1

Chico3001, todas mis variables estan declaradas, como unsignet, podrias decirme exactamente enque parte de mi codigo haz encontrado ese error?


----------



## Chico3001

Por eso decia que no soy experto... pero no esta mal que verificaras de nuevo las opciones por default de tu compilador para ver si agarra las variables como signed o unsigned por defecto, o intenta cambiar esta parte:



		Código:
	

void main(void)
{
   int8 recibe[3];                  //declaramos variables
   int8 adc[1];
   int16 contador;


Por esta otra, te repito que no uso labview, asi que no se si mi idea sea adecuada o incluso implementable



		Código:
	

void main(void)
{
   unsigned char recibe[3];                  //declaramos variables
   unsigned char adc[1];
   unsigned int contador;


----------



## jokelnice

Alexandra1 dijo:
			
		

> Hola jokelnice,
> 
> Gracias por responder, aqui esta mi codigo del PIC y el Labview que es el mismo que todos estamos usando gracias a J1M:
> 
> 
> 
> Código:
> 
> 
> #include <18F4550.h>
> #DEVICE ADC=8
> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
> #use delay(clock=20MHZ)



si mira alexandra en cuanto al codigo intentemos cambiandole el clock recuerda que es 48MHz si es que queremos trabajar a la maxima velocidad posible con estos micros , ademas no se si estoy equivocado pero no se si el compilador entiende que 20MHz o 20000000 es lo mismo ( esto es solo para la declaracion del clock ) asi que deberiamos intentar con 48000000 en vez de 48MHz la verdad asi siempre lo eh hecho  ; te repito no se si tenga alguna incidencia pero seria bueno probar .

en cuanto al vi de labview falta el vi principal , no se pudo probar.... lo de J1M es muy bueno y pienso que es un sensey en esto de los foros pero sin duda el vi era un primer boceto , faltaba depurar algunas cosas asi que seria mejor ( asi lo hice yo ) mirar ejemplos y tratar de hacer el tuyo asi tu te entenderas lo que esta haciendo el programa y sabras en que fallaste y en que mejorar.
sino te funciona cuentanos y miramos haber si el problema es del micro o del programa en labview hay mirariamos  . cualquier cosa comenta 

Saludos ......


----------



## Alexandra1

Hola a todos, les agradeceria si alguien me puede ayudar, con este programa, por mas que intento no logro obtener la lectura correcta  :evil: . 

Simplemente estoy usando el canal AD0 del Pic para leer el voltaje de un rango de o a 5V, para luego enviar este valor a traves del puerto USB a la PC, para valores bajo de voltaje menores a 2.5V tengo lecturas correctas de 0 a 127, pero para valores superiores la lectura se mantiene en este valor (127) a pesar de que estoy variando el voltaje de entrada, hasta llegar a 3.7V con una lectura de 205 de alli en adelante la lectura es nuevamente correcta, alguien me podria decir que es lo que estoy haciendo mal...  
No es problema del potenciometro por que lo he verificado con un multimetro y este esta OK



		Código:
	

#include <18F4550.h>
#DEVICE ADC=8

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN

#use delay(clock=48MHZ)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer


#include <pic18_usb.h>     					//Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>	      					//Configuración del USB y los descriptores para este dispositivo
#include <usb.c>        					//handles usb setup tokens and get descriptor reports


#define modo      recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define resultado envia[0]

void main(void)
{
   unsigned char recibe[3];                  //declaramos variables 
   unsigned char adc[1]; 
   unsigned int contador; 


   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_DIV_2);
   set_adc_channel(0);
   delay_us(10);

   usb_init();                      		//inicializamos el USB
   usb_task();                      		//habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      		//esperamos hasta que el PoteUSB sea configurado por el host
 
   while (TRUE)
   {

      if(usb_enumerated())          		//si el PoteUSB está configurado
      {
         while(TRUE)
               {
                adc[0] = read_adc();
                delay_us(10);
                usb_put_packet(1, adc, 1, USB_DTS_TOGGLE);
                printf("El valor de AD0 es: %2u\n\r",adc[0]);
                delay_ms(500);
               }
      }
  }
}


----------



## tr_manolete

en donde ves el valor que sale del pic en un display  o en hyperterminal de la pc comunicandose por el usb?


----------



## Alexandra1

El valor lo veo en el Hiperterminal y con un indicador del labview y el valor es el mismo.


----------



## tr_manolete

igual y tienes mal escalado en los programas no crees?
o a lo mejor el pic no alcanza a realizar la conversion


----------



## lobito23

Que tal jokelnice eh estado revisando tu proyecto es increible lo que has hecho, eh descargado tus archivos, no tengo mucha nocion hacerca de pic´s soy un aficionado pero me gustaria poder echarlo andar y revisando el archivo no encontre como identificar los pines en los cuales van conectadas las entradas analogicas de los sensores no se si me podrias ayudar explicandome un poco mas.


----------



## Alber Moremont

Hola a todos.

Me gustaria saber si alguien ha podido hacer la counicación USB por medio de VISA y si es asi si me podrian mandar algo de información ya que no se como usar este recurso de labview.

Y una pregunta más, si se hace la comunicación utilizando CDC, ¿se maneja la velocidad del puerto serie o es realmente la comunicación a la velocidad del USB?


----------



## jokelnice

lobito23 dijo:
			
		

> Que tal jokelnice eh estado revisando tu proyecto es increible lo que has hecho, eh descargado tus archivos, no tengo mucha nocion hacerca de pic´s soy un aficionado pero me gustaria poder echarlo andar y revisando el archivo no encontre como identificar los pines en los cuales van conectadas las entradas analogicas de los sensores no se si me podrias ayudar explicandome un poco mas.



 los microcontroladores tienen el modulo de conversor anoalogo digital hay varios dispositivos pero siempre estan identificados com an0 , an1 , an2  segun los canales analogos que tengan , si seria mejor que si no tienes mucho conocimiento en pics te recomiendo foros como 
https://www.forosdeelectronica.com/f24/curso-tutorial-pic16f877-13694/
si nececitas algo en especifico comenta 
saludos


----------



## jokelnice

Alber Moremont dijo:
			
		

> Hola a todos.
> 
> Me gustaria saber si alguien ha podido hacer la counicación USB por medio de VISA y si es asi si me podrian mandar algo de información ya que no se como usar este recurso de labview.
> 
> Y una pregunta más, si se hace la comunicación utilizando CDC, ¿se maneja la velocidad del puerto serie o es realmente la comunicación a la velocidad del USB?


si claro amigo se puede hacer  lo primero que tenemos que hacer es tener  nuestro dispositivo usb 
despues se ejecuta el asistente de visa * driver wizard* se encunatra en .... \national instrument \ visa \ driver wizard .....que nos crea un driver para hacerle creer a labview que el dispositivo es un dispositivo visa, y listo ya se puede utilizar las librerias  visa de labview . 
 si necesitas algo con el asistente informaciónrmanos 
saludos


----------



## tr_manolete

hola jockelnice respecto a lo q comentas ¿visa es capaz de reconocer los puertos y los canales  de conversion analogos del pic o solo reconoce un dispositivo de entrada y salida?

ahora no se si sabes respecto a la programacion en CCS, yo estoy intentando leer una señal de la linea de 120 o 220 ca el problema que tengo es que no se como leer el valor minimo y el maximo de la señal ya que intente hacer un retardo de 8ms por ciclo durante la lectura pero el problema es que casi siempre el pic lee en el mismo punto la señal de ca y ya lo intente  dando valores arbitrarios al tiempo pero nada...
si me puedes ayudar te lo agradeceria mucho


----------



## Alber Moremont

Jokelnice, ya lo intente con el DDW de VISA y logro crear el archivo *.INF sin ningun problema, pero cuando lo instalo (estoy usando Windows Vista), el archivo se copia con el nombre oem##.inf y su correspondiente oem##.PNF, segun yo eso es normal.

El problemas es que no se si tambien se tiene que generar el *.PNF correspondiente al nombre que le di en el DDW, porque ese no se crea y por mas que he intentado, no logro cambiar el driver a mi dispositivo y windows asigna automaticamente el de HID.


----------



## Alber Moremont

Se resolvio el problema, solo estaba haciendo un paso mal...pero ahora ya tengo el dispositivo listo
para usarse con VISA, espero que me funcione.

Y en cuanto a la comunicación con CDC, ¿si se comunica a la velocidad del USB o se realiza a la del Puerto serie?


----------



## lobito23

Hola de nuevo jokelnice.

Muchas gracias por la información eh estado revisando los tutoriales del foro y me han servido mucho.
y bueno no se si podrias proporcionar el codigo ya compilado de tu proyecto que mostraste en video de la captura por usb_ bulk como lo hiciste con usb_CDC, bueno  de antemano muchas gracias.


y con respecto a labview se utiliza algun modulo en especial como el NI DAQmx o algun otro ?


----------



## lobito23

que tal jokelnice:

tengo un problema no se que hago mal. Despues de conectar el micro y ser reconocido por la computadora, busco el driver es intsalado despues de que se instala ya no lo vuelve a reconocer mas, no se si me podrias ayudar..


----------



## tr_manolete

desisnstalalo mi chavo para que al volver a conectar te pida de nuevo los drivers ok.


----------



## FEBB

Para aquellas personas que presentan problemas con el driver  del picUSB,  para que el computador lo reconozca, este driver lo pueden encontrar en su computador en la siguiente ruta  C:\Archivos de programa\....\PICC\Drivers
Para instalar este driver deben ir  primero administrador de dispositivos y actualiza el dispositivo y listo   .


----------



## Alber Moremont

Ya he podido controlar con VISA de labView mi dispositivo HID, es una aplicacion sencila de encender y pagar un led, la cual desarrollo Moyano Jonathan (de otro foro), pero  el lo hacia con VB. Ahora espero poder adentrarme mas y desarrllar alicaciones propias y enfocadas a lo que necesito.

Definitivamente estos foros me han servido mucho...

Saludos


----------



## lobito23

Que tal Albert no se si puedas compartir como es que realizaste esa comunicacion con un dispositivo HID en labview


----------



## Alber Moremont

Claro, es relativamente sencillo...

De esta pagina puedes descargar un pequeño tutorial para crear el driver...
http://zone.ni.com/devzone/cda/tut/p/id/9019


----------



## jokelnice

Alber Moremont dijo:
			
		

> Ya he podido controlar con VISA de labView mi dispositivo HID, es una aplicacion sencila de encender y pagar un led, la cual desarrollo Moyano Jonathan (de otro foro), pero  el lo hacia con VB. Ahora espero poder adentrarme mas y desarrllar alicaciones propias y enfocadas a lo que necesito.
> 
> Definitivamente estos foros me han servido mucho...
> 
> Saludos



bien echo colega .


----------



## tr_manolete

que onda antes que nada quisiera sdaber si me podrias ayudar a conectar mi proyecto al usb pero necesito mandar los datos que se han guardado a la eprom pero me quedo una duda no se si usar la memoria flash para guardar esos datos y tambien para pedirte si puedes irme diciendo los pasos para configurar mi proyecto usando el usb y el labview 

mi proyecto consta de usar un programa que mide el voltaje y la corriente y con esos valores calcular la potencia pero tambien poder guardar este dato de la potencia en una eprom o flash y asi poder conectar en un momento determinado la al usb y sacar el dato por labview.


----------



## Alber Moremont

Hola otra vez jokelnice.

Una preguntota, sabes como puedo leer los datos del pic desde labView usando visa read?
es que la comunicacion ya esta establecida, puedo mandarle datos con visa write y el pic hace lo que le pido correctamente, pero no puedo por nada del mundo leer algo...

otra cosa mas, de donde bajo la mpusbapi.dll?

De antemano gracias...

un saludo


----------



## jokelnice

Alber Moremont dijo:
			
		

> Hola otra vez jokelnice.
> 
> Una preguntota, sabes como puedo leer los datos del pic desde labView usando visa read?
> es que la comunicacion ya esta establecida, puedo mandarle datos con visa write y el pic hace lo que le pido correctamente, pero no puedo por nada del mundo leer algo...
> 
> otra cosa mas, de donde bajo la mpusbapi.dll?


pero que has intentado Hacer yo tengo por hay unos ejemplos que servirian este es uno basico  ....

la mpbuspapi se encuentra en la pagina de microchip , de todas maneras hay va.......


----------



## Alber Moremont

Gracias jokelnice, solo que hay un problemilla, tengo LabView 8.5 y pues no puedo abrir el archivo, no se si seria posible que me lo mandes en una version anterior.


----------



## jokelnice

listo aca esta el 8.2


----------



## Alber Moremont

jokelnice dijo:
			
		

> listo aca esta el 8.2



OK jokelnice, muchas gracias...te informaciónrmaré si es que ya puedo adquirir bien mis datos...

Solo una pregunta mas, veo que en el programa en C utilizas BULK, yo lo hacia con HID, ¿crees que eso pueda ser el problema que tenia en mi comunicación?

Un saludo


----------



## mikeedavila

Alber Moremont dijo:
			
		

> Ya he podido controlar con VISA de labView mi dispositivo HID, es una aplicacion sencila de encender y pagar un led, la cual desarrollo Moyano Jonathan (de otro foro), pero  el lo hacia con VB. Ahora espero poder adentrarme mas y desarrllar alicaciones propias y enfocadas a lo que necesito.
> 
> Definitivamente estos foros me han servido mucho...
> 
> Saludos



Saludos alber, recién experimenté con visa y hid y logré q el labview reconozca mi dispositivo pero no tengo ni idea de cómo enviarle y recibir datos del micro, igual estoy intentando hacer una prueba con leds pero no funciona, pudieras facilitarme tu vi?, gracias.  Con respecto al micro lo estoy programando con Protón y el usb wizard integrado del mismo, y la aplicación de leds si funciona en visual basic pero en labview no da señales de vida, puedes ayudarme?



		Código:
	

' select MCU and clock speed                                                                                                                                                                                                                                   
Device = 18F4550
XTAL = 48	
'*****************************************************************
TRISD=0 'todo el puerto B como salida  ***************************
PORTD=0
Symbol LED_1 PORTD.0
Symbol LED_2 PORTD.1
Symbol LED_3 PORTD.2
Symbol LED_4 PORTD.3
'*****************************************************************
' descriptor file, located in \inc\usb_18 - a copy
' is located in the same folder as this file	
USB_DESCRIPTOR = "USBProjectDESC.inc"

' we are going to use an interrupt to keep the USB
' connection alive, so disable auto polling from within 
' the USBIn and USBOut commands
USBIN_AUTO_POLL  = OFF
USBOUT_AUTO_POLL = OFF

' USB buffer...
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX  = 8
Symbol USBBufferSizeRX  = 8
Dim    USBBuffer[USBBufferSizeMax] As Byte

' some useful flags...
Dim PP0 As Byte SYSTEM        ' USBPOLL status return
Symbol CARRY_FLAG = STATUS.0  ' high if microcontroller does not have control over the buffer
Symbol ATTACHED_STATE = 6     ' is USB attached
Symbol TRNIF = UIR.3		  ' low if USB Busy
Dim TIMER1 As TMR1L.Word      ' access 16 bits of TMR1
 
' use an interrupt to keep USB connection alive...
Symbol TimerPreload = $A23F   ' approx 2ms
ON_HARDWARE_INTERRUPT GoTo USBServiceInterrupt

' indicador de conexión de usb, los leds se encienden antes de que el PC reconozca el dispositivo
LED_1 = 0 : DelayMS 500 : LED_1 = 1 : DelayMS 500 : LED_1 = 0
LED_2 = 0 : DelayMS 500 : LED_2 = 1 : DelayMS 500 : LED_2 = 0
LED_3 = 0 : DelayMS 500 : LED_3 = 1 : DelayMS 500 : LED_3 = 0
LED_4 = 0 : DelayMS 500 : LED_4 = 1 : DelayMS 500 : LED_4 = 0

GoTo ProgramStart

' ************************************************************
' * the USB interrupt service routine maintains the          *
' * connection to the bus - without this routine, a          *
' * call to USBPoll, USBIn or USBOut must be made            *
' * every couple of milliseconds or so                       *
' ************************************************************
USBServiceInterrupt:
   ' don't poll USB if it's busy...
    btfss TRNIF				
    bra ExitInterrupt
    
    ' poll the USB interface...
    Call (Check@BusStatus)
    Call (Driver@Service)

    ' clear interrupt flag and exit...
ExitInterrupt:   
    bcf PIR1,0 
    TIMER1 = TimerPreload
    retfie fast   
     
' ************************************************************
' * program starts here...                                   *
' ************************************************************
ProgramStart:
   GoSub AttachToUSB
   
   ' turn on interrupt timer...
   TIMER1 = TimerPreload
   T1CON = %10000001								
   PIE1 = %00000001	  ' enable TMR1 overflow interrupt
   INTCON = %11000000 ' enable global and peripheral interrupts
   
' ************************************************************
' * main program loop                                        *
' ************************************************************
ProgramLoop:
   ' your code in here - to send data, load USBBuffer
   ' and then call DoUSBOut. To receive data, call DoUSBIn...
   
   '*************************************************************
   GoSub DoUSBIn '********************************************
'*************************************************************

   GoTo ProgramLoop
  
' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
DoUSBIn:
   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
   
   '**************************************************************   
   PORTD = USBBuffer[7] '**************************************
   
   Return
   
' ************************************************************
' * transmit data                                            *
' ************************************************************
DoUSBOut:   
   USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
   Return

' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
AttachToUSB:
   Repeat								
      USBPoll		
   Until PP0 = ATTACHED_STATE
   Return


Gracias Lord Lafebre por el código!


----------



## Alber Moremont

Hola mikeedavila, 
mira primero que nada si ya estas completamente seguro que tu dispositivo lo reconoce labview como un dispositivo RAW, entonces en el administrador de dispositivos de windows (sí es el que estas usando) te aparecerá como NI VISA USB-devices.

Y bueno, en mi rpograma lo unico que hago es mandarle los caracteres '0', '1','2' o '3', con lo cual alterna el estado de alguno de los dos leds individualmente ('0' o '1') o juntos ('2') o definitivamente los apaga('3').

Lo importante de esto es que para que el micro haga lo que tu quieres, el el firmware del mismo debes recibir los datos como caractéres y no como otro tipo de dato. Yo lo hice en C y mis variables las declare como unsigned char.

Bueno ya para no hacerla larga, aqui va el VI.

La parte de la logica es solo para mostrar el estado de los LED´s en el panel de LabView

Espero te sirva, cualquier cosa aqui estoy.  

P.D. hasta ahora solo puedo enviar datos hacia el micro, no puedo leerlos.


----------



## mikeedavila

Alber Moremont dijo:
			
		

> La parte de la logica es solo para mostrar el estado de los LED´s en el panel de LabView



Gracias Alber, tu VI me ayudó mucho.... la verdad fue mi error, estaba enviando los bits menos significativos desde el labview y por el tamaño del string el micro no lo reconocía, jajaja..... error de principiante.... al menos ya pude escribir datos, voy a probar la lectura.... gracias de nuevo


----------



## Alber Moremont

OK, mikeedavila, yo voy a seguir intentando leer los datos, si tú lo consigues hacer por favor me informaciónrmas porque no puedo...


----------



## JAIME_VELASQUEZ

hola, he estado haciendo algunas pruebas con el cdc y el labview y si funciona, pero como es un puerto serial virtual, no puedo sacarle provecho a la velocidad de transmision por USB, alguno de ustedes conoce otro metodo para aumentar la velocidad de transmision de datos


----------



## edgarh44

hola agradezco a todos por el apoyo k  brindan, me acabo de comprar un pic18f4550 y por favor si me pueden pasar su diagrama, para conectarlo al usb, y cual seria el driver para k pueda ser usado en win vista, ahora voy a empezar a hacer un fonocardiografo,.. y espero k me vaya bien.. muchas gracias.. ayudamen lo mas pronto k solo me queda 3 semanas.. Gracias


----------



## mikeedavila

Cómo te va edgar, pues el diagrama es el mismo para todas las configuraciones según entiendo.  Te paso el link de la página de mi buen amigo, el maestro Lafebre en la cual tiene un tutorial sobre cómo conectar un 18f2550, el diagrama funciona igual para el 4550, obviamente con los pines respectivos. http://www.freewebs.com/glafebre/articulos.htm El tutorial es en Protón para el micro, y Visual Basic para la PC pero te dará una idea, además el driver para vista lo genera el Labview 8.5 y el 8.6 pero no lo he probado, suerte con tu proyecto, pues tres semanas es en verdad poco tiempo.


----------



## Alber Moremont

edgarh44 dijo:
			
		

> hola agradezco a todos por el apoyo k  brindan, me acabo de comprar un pic18f4550 y por favor si me pueden pasar su diagrama, para conectarlo al usb, y cual seria el driver para k pueda ser usado en win vista, ahora voy a empezar a hacer un fonocardiografo,.. y espero k me vaya bien.. muchas gracias.. ayudamen lo mas pronto k solo me queda 3 semanas.. Gracias



Hola Edgar, mira pues tambien en este foro https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/ puedes encontrar la forma de conectar el PIC al USB. 

El foro es uno de los que menciona jokelnice al inicio, pero actualizado, jeje  , echale un ojo...


----------



## edgarh44

Hola jokelnice ps ya pude conectar mi pic a la pc,.. pero un favor si me puedes pasar tu programa de adquisicion de señales para 8.6, ps la verdad ya el tiempo me queda muy corto, espero tu ayuda y muchas gracias


----------



## jokelnice

edgarh44 dijo:
			
		

> Hola jokelnice ps ya pude conectar mi pic a la pc,.. pero un favor si me puedes pasar tu programa de adquisicion de señales para 8.6, ps la verdad ya el tiempo me queda muy corto, espero tu ayuda y muchas gracias



mira atras en el foro hay ejemplos inclusibe hay uno con  el adc del micro


----------



## jpcs

Hola, quiero iniciarme en la adquisición de datos por usb,, así que estube simulado en proteus y viendo los resultados en labview,  y todo va bien,,, , pero cuando implemento el circuito,,,  no puedo ver los datos enviados por el pic ni con hiperterminal...   Espero su colaboración en esto,,, se debe modificar algo en windows o es el programa del micro que me falla,,,  



		Código:
	

void main() {
   usb_cdc_init();                        
   usb_init();                               
   while(!usb_cdc_connected()) { }
   do{
      usb_task();
      if (usb_enumerated()){             
         if(usb_cdc_kbhit()){             
            if(usb_cdc_getc()=='E'){    
               output_high(pin_A0);               
               printf(usb_cdc_putc,"Se recibe el caracter E");   
             }
            if(usb_cdc_getc()=='A'){     
               output_low(pin_A0);               
               [b]printf(usb_cdc_putc,"Se recibe el caracter A");     [/b]//Esto es lo que no puedo visualizar en la pc..........
             }
         }
        }
       }
       while (TRUE); // bucle infinito.
}

 Ahh, me olvidaba,,, si puedo enviar datos al micro, lo que no puedo ver es los datos enviados desde el micro,,,, Ademas ya lo he testeado todo....  Espero su colaboración


----------



## tr_manolete

por lo que yo veo solo lo estas comunicando datos al pic nunca estas enviando mensajes a la pc ni por hiperterminal lo que haces es enviar un mensaje pero no hay quien lo lea me entiendes.el micro manda el mensaje pero quien lo lee?


----------



## jpcs

Bueno gracias,,, mas que todo por la guia que brindan en el foro para iniciarse en el manejo de lo micros por puerto usb,,,   Ya solucioné el problema,,, solo era el capacitor que va en el pin 14 Vusb  del 18f2550  estaba mal,,, lo cambie y todo funcionó tal como en la simulación ,  Gracias por la respuesta tan rápida,,,,,ahora a seguir avancando con el micro..


----------



## edgarh44

Hola k tal.. ps ahora si estoy con la soga al cuello, me pueden pasar sus programa de Adquisicion de Datos en Labview 8.6 y tambien el C del pic 18f4550, estoy en este trabajo ya como 3 semanas y no logro tener buenos resultado, y tambien pk la universidad se ha complicado mucho. Bueno espero que me ayuden. Gracias


----------



## mikeedavila

Hola a todos, encontré un VI en la página de national que hace la lectura de un dispositivo HID, ojalá les sirva, lo probé y funciona perfectamente


----------



## PITIURS

Hola q tal
como dicen si quieres encontrar busca, eso hice, y o sorpresa me encontre este grandioso foro, veo que hay grandes abances felicidades, y gracias a todos los que han aportado información.

Estoy trabajando con mi proyecto final, y este tema me cae como mandado del cielo.
Nesesito digitalizar audio a 44100 muestras por segundo, y enviarlo a la pc por medio del puerto usb, creen que forzando un 18f4550, pueda lograrlo?
despues nesesito jugar con la información en labview, es posible?
gracias, es bienbenida toda ayuda.


----------



## nicolas8702

Hola me llamo nicolas  he estado  mirando  y me han sido de gran ayuda ahora mi inquietud es como puedo enviar los datos de 3 entradas analogo digitales por el mismo endpoint y  que el labview me las reconosca


----------



## newbyte

jokelnice dijo:


> Ahora si entra..  labview como hasta el momento todo esta bien ahora es una sencilla comuncicacon serie la cual con ocho botones manejarenos los 8 bits que enviaremos despues el micro los reconoce y los saca por el puerto b entones aca les dejo la carpeta donde esta todo lo necesario y por supuesto el VI de labview antes les envio la demostracion :
> 
> http://www.youtube.com/watch?v=y4qhEUdqTaQ
> 
> y el ejemplo esta aqui



Hola! Primero que nada gracias por compartir tus experiencias; espero me puedas ayudar, ya programe el PIC y la PC me lo reconoce muy bien, checo en el administrador de dispositivos y le asigna COM3, el problema es que cuando corro la aplicación en LABVIEW me arroja el siguiente error:
http://www.imaxenes.com/imagen/error1rv87dm.jpg.html

Agradecería tu ayuda.
Saludos!


----------



## nicolas8702

hola newbyte yo he trabajado con la clase cdc del pic 18f2550  con lab view me ha funciona do bien  aqui te envio mi VI espero  que te sira lo unico es que esta hecho con labview 8.6 y tienes que instalar el visa para que pudas acceder a los puertos seriale


----------



## newbyte

nicolas8702 dijo:


> hola newbyte yo he trabajado con la clase cdc del pic 18f2550  con lab view me ha funciona do bien  aqui te envio mi VI espero  que te sira lo unico es que esta hecho con labview 8.6 y tienes que instalar el visa para que pudas acceder a los puertos seriale



Hola! Gracias por la ayuda, éste fin de semana lo pruebo y te platico ya que en estos momentos me dirijo a la universidad.
Saludos!


----------



## karl87

hola soy nuevo en esto y es emocionante conocer a gente que le guste todo esto,, yo haria dos preguntas,, con el pic18f4553  ¿ es posible realizar muestreos de  al menos 15 kmuestras por segundo (ksps)?,,, y ¿y como podria utilizar el conversor de 12 bits que trae este nuevo pic, para obtener una mejor resolucion?  gracias espero comentarios


----------



## Doqman

Que tal compas, espero que vallan bien en todos sus proyectos

En estos dias estoy interezado en la programacion en labview y en desarrollar algunas aplicaciones por el puerto usb, pero he tenido dificultades basicamente con los bloques manejados en este, no he podido encontrar un lugar donde se expliquen las entradas y salidas de los mas complejos, y las especificidades de cada bloque.

Espero me puedan ayudar.

Daniel Oq


----------



## nicolas8702

bueno karl primero  que todo el pic18f4550 solo tiene 10 bits de resolucion y si  es posible optener esa cantidad de muestras yo he logrado hasta 30 por segundo la clave esta en el numero de instrucciones totales que ejecuta el pic por cada muestra ahora pues lo quenecesitas es elegir lo  que vas a hacer y el compilador yo por lo menos he manejado el 2550 con ccs y me ha funcionado bien pero si lo  que quieres es  un programa optimizado para tu pic te recomiendo el asembler ya que ccs sacrifica memoria y tiempo deejecucion en el pic plantea tu proyecto  a ver  si  te puedo colaborar ok...


----------



## Doqman

Compas

Leyendo un poco en internet me he encontrado algunas paginas que despejan un poco las dudas acerca del funcionamiento del puerto USB y los bloques en labview, aca se las dejo por si alguien esta muy desubicado en el tema


http://perso.wanadoo.es/jovilve/

http://qtcorregido.galeon.com/LabVIEW.htm

http://books.google.es/books?id=ZYAYyO8CmiIC&lpg=PA121&ots=mXQJsmnKva&dq=que%20es%20visa%20resource%20name&pg=PP1#v=onepage&q=&f=true

espero que les sivan

Daniel Oq


----------



## karl87

gracias _nicolas8702 _por tu respuesta, lo que pretendo hacer es una daq,, no con un 4550, sino con un 4553 que tenga una mayor resolución porque habia leido que el este pic tiene un conversor de 12 bits,, esto me ayudaria en la resolucion de mis muestras, supongo, y me gustaria conocer tu código que elaboraste con el 2550, yo estoy manejando el ccs pues me resulta mas facil, no tengo ningun conocimiento en ensamblador. Lo que pretendo hacer es algo como lo que se ha planteado en este foro realzar muestras grandes para despues mandarlas por usb a una pc y ver los resultados en LAbview... gracias por la ayuda saludos


----------



## nicolas8702

hola karl  ahor aentiendo lo que realmete quieres  creo que el programa  que  he  hecho  te puede servir lo unico  que  creo  que debes hacer es cambiar la libreria del pic , cambiar la resolucion del adc y listo aqui  te dejo el codigo  base que utilizo para todo con la clase cdc del pic espero que te sirva



		Código:
	

#include <18F2550.h>
#device ADC=8
#fusesHSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//pll en div 5 para crystal de 20mhz
#use delay(clock=48000000)
#include ".\librerias\usb_cdc.h"

void main()
{

int8 x,v;//DECLARACION DE VARIABLES
set_tris_a(0xFF);//PUERTO A COMO SALIDA EXCEPTO  RA6
set_tris_b(0x00);//PUERTO B COMO SALIDA
set_tris_c(0x00);//PUERTO A COMO SALIDA EXCEPTO  RA6
setup_port_a( ALL_ANALOG );//DECLARA TODO EL PUERTO A COMO ANALOGO
setup_adc( ADC_CLOCK_DIV_8);//OSCILADOR DEL CONVERSOR A LA MITA DEL CRISTAL

Set_ADC_Channel(0);
delay_ms(1);
Read_ADC(ADC_START_ONLY);
output_b(0x00);// INICIANDO EL PUERTO B EN CERO
usb_cdc_init();   // Configuramos al puerto virtual.
usb_init();       // Inicializamos el stack USB.
    while(!usb_cdc_connected()) {} // espera a detectar una transmisión de la PC (Set_Line_Coding).
       do{usb_task();
          if (usb_enumerated())           // Espera a que el dispositivo sea enumerado por el host.
            {
              output_b(0x01);
              v=read_ADC( ); 
              DELAY_US(500);
              usb_cdc_putc(v);//envia el dato al usb 
              output_b(0x00);
            if(usb_cdc_kbhit())           // En espera de nuevos caracteres en el buffer de recepción.
               {
                x=usb_cdc_getc(); // asigna a x el dato recivido
                output_b(x);// el dato recibido en el puerto b
               }
             
         
            }
         }
         while (TRUE); // bucle infinito.
}


----------



## karl87

tengo un problema,,, tengo a mi pic con el programa cargado,, y lo conecto a la pc,,, pero este aun no lo reconoce, dice que es un dispositivo desconocido,,, supuestamente ya tengo la libreria que da Microchip,, para reconocerla,,, pero esto sigue apareciendo,, alguien que me pueda ayudar para hacer que mi pc la reconosca,,, gracias


----------



## nicolas8702

ok karl lo que pasa es que el usb cdc no necestita de la mpusbapi.dll esta clase de dispoditivo requiere de un driver hecho por microship  aqui te dejo el driver ten encuente el vid y el pid del driver asi como el de la libreria usb para el pic si estos deo no coinciden  el driver no se instalara

aqui esta el driver

aqui esta el driver


----------



## jokelnice

huy eh estado como apartado pero que bueno que no ah  muerto el tema espero colaborales ahora si


----------



## pistolerolokoo

Jockelnice, antes que nada quiero darle una felicitación por sus excelentes aportes.

Tengo una pregunta, en el programa que usted nos muestra para enviar la señal del ADC por usb usando labview, ¿cuales son los cambios que se tendrian que hacer en el programa en c para que el conversor funcione con los 10 bits?.  Me imagino que se nececita declarar adc =10 tambien modificar define USB_EP1_TX_SIZE 2 al menos para  dos bytes, ya ves que el conversor de 10 bits necesita dos bytes para almacenar su valor por lo que se necesitan enviar 2 bytes para enviar el valor completo. Tambien  modificar esto en el código



		Código:
	

dato=read_adc(); 
               delay_us(10); 
               
               envia[0]= make8(dato,0);
               envia[1]=make8(dato,1);
               usb_put_packet(1,envia,2,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC**/

 
Donde dato que es donde se guarda la conversión es un int 16 y entonces en el arreglo envia de 2 bytes guardamos el byte bajo y el alto de la conversión y enviar esto por usb

Ya lo hice pero no me funciona con tu programa en labview para 8.2. Por eso te queria preguntar sobre como se hace.

Saludos


----------



## jokelnice

si claro tienes razon el lo del "USB_EP1_TX_SIZE 2" y e en lo de los 10 bits yo tuve el mismo problema con el conversor a 10 bits pues la verdad lo que pude observar es que el conversor si guarda alta y baja pero es forma de registros ( como se trabajaba en assembler ) , en c no ocurre esto es decir el numero queda guardado como eso como un numero de 10  bits .

la solucion fue hacer una parte de codigo que tomara ese numero y separara la parte alta de  la baja y asi si se puede enviar 



		Código:
	

 set_adc_channel(0);
                      delay_us(4);
                      dato=read_adc();
                      delay_us(10);
                      parte_baja =(int)dato;   // separo la parte baja 
                      parte_alta =(int)((dato& 0x300)>>8); // separa la partealta
                      envia[0]=parte_baja;       
                      envia[1]=parte_alta;




		Código:
	

 usb_put_packet(1,envia,2,USB_DTS_TOGGLE);      // envia alta y naja

 y pues en labview solo es tener en cuenta que llegan dos datos y se tienen que unir , tengo que mirar algunos codigos ya que no recuerdo en este momento muy bien como lo hice 

*PDT....* la forma en que lo hiciste no se si funciona o no ya que no lo probe ,  solo muestro la forma en que yo lo hice,  por ejemplo no comprendo lo de *make8* bueno cualquier cosa busco el codigo completo o algo asi 

saludos ......


----------



## pistolerolokoo

Gracias Jokel por tu explicación, entonces lo que yo pensaba si era correcto, lo que tu me explicas es exactamente lo mismo solo que programado de otra manera. La función make8 sirve para separar la parte baja y alta de un dato int16. 

Muchas Gracias Jokel por tu ayuda, lo de labview voy a tratar de implementarlo entoces eso me falta unir los dos datos.

Excelente foro, desde ahora por aqui voy a andar  ayudando tambien en lo que pueda Saludos


----------



## jokelnice

a mi me sirvio este control " join number " de labview que esta en 
 - numeric
   -data manipulation 

 listo pide alta y baja y eso es todo


----------



## Vannes

jokelnice gracias a tus aportes y una preguntilla.

En el programa que realizaste: "recibir_datos_cdc_662" cuando lo simulo con proteus y Labview.
En Labview recibo DATO LEIDO:r  bytes leidos: 1 , DATO LEIDO:rr  bytes leidos: 2, 
DATO LEIDO:0  bytes leidos: 0 , así sucesivamente cuando RB0=1.

No entiendo porque recibo el caracter 'r',porque hay veces que los bytes leidos son 2 cuando el micro le programas q te envie el dato de 8 bits.
Respecto el analizador usb de proteus donde puedo ver el paquete de envio. 
Siento mis duda de inexperto en el bus usb, todos los libros q encuentro estan en ingles.


----------



## jokelnice

Vannes dijo:


> jokelnice gracias a tus aportes y una preguntilla.
> 
> En el programa que realizaste: "recibir_datos_cdc_662" cuando lo simulo con proteus y Labview.
> En Labview recibo DATO LEIDO:r  bytes leidos: 1 , DATO LEIDO:rr  bytes leidos: 2,
> DATO LEIDO:0  bytes leidos: 0 , así sucesivamente cuando RB0=1.


 como lo pudiste simular 



> No entiendo porque recibo el caracter 'r',porque hay veces que los bytes leidos son 2 cuando el micro le programas q te envie el dato de 8 bits.


 debe haber algun problema en alguna parte 


> Respecto el analizador usb de proteus donde puedo ver el paquete de envio.
> Siento mis duda de inexperto en el bus usb, todos los libros q encuentro estan en ingles.


 se debe cargar en proteus el archivo .cof y no el .hex al hacer esto el trabaja con un archivo en donde podemos ver el comportamiento durante la ejecusion para eso se usa el boton de step " al aldo del de correr el codigo " si todo esta bien el parara el circuito y nos mostrara un listado de variables y su valor en ese momento   y con respecto al usb se puede ver todo el buffer para ver que datos hay . saludos ....


----------



## Vannes

Jokelnice gracias de nuevo:


1) Lo simule a la vez proteus y Labview, primero al run del proteus y entonces Labview    ya me aparecia el puerto virtual serie y la daba al run.

2) Ya te he hecho caso he puesto el .Cof y de más, pero sigue apareciendo la r en Labview cuando transmito desde el proteus, supongo q juntar los 2 simulando da este tipo de errores, o no encuentro el problema.

3) Ya he analizado la variable dato con Proteus y si retransmite el caràcter con código hexadecimal 0x00  con RB0=0  simbolo ASCII (NUL)  y  0x01 con RB1=1  simbolo ASCII (SOH).

dato=input_b()
printf(usb_cdc_putc,"%c",dato);

Si sabes algo Jokelnice ya me diras cuando puedas, no se si habías probado simular a la vez Proteus y Labview con comunicación USB CDC, y si es efectiva o causa errores.
Un saludo y siento las molestias!


----------



## nicolas8702

Hola  a todos he stado trabajando con el modo usb bulk transfer me gustaria saber si alguien tiene un programa en labview que envie y reciba n bytes en el end point yo he hecho un programa pero los datos que llegan al pic parpadea  le agradezco la ayda de antemano


----------



## kaller

hola, bueno aqui les presento mi primer trabajo de comunicacion Labview85 con el PIC18f4550 que nos dejaron en el colegio, se trata de lo siguiente:
lectura y escritura.
*escritura:* con el labview se deben introducir 2 numeros, estos se deben desplagar tanto internamente como externamente. usando 2 display de 7 segmentos en los puertos B y D del PIC respectivamente. Y Colocando 2 Displays simulados en el Labview.
*lectura:* desde un puerto, en este caso se nos pidio usar los A (4,3,1,0) y C (7,6,1,0) con un dipswitch ingresar un byte de tal forma que el labview nos marque en codigo ASCII el simbolo o letra requerido. 

aca les pongo unas imagenes para que me comprendan:



		Código:
	

[IMG]http://i251.photobucket.com/albums/gg284/KiraKamiX/frontpanel1.jpg[/IMG]






[IMG]http://i251.photobucket.com/albums/gg284/KiraKamiX/blockpanel.jpg[/IMG]




		Código:
	

/*CONFIGURACION PIC*/

#include "18f4550.h"
#fuses HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB
#use delay(clock=48000000) //FREC OSC



#build(reset=0x800, interrupt=0x808)
#org 0x000, 0x7ff { }


#include "usb_cdc.h"
#rom int 0xf00000={1,2,3,4}

void main() {
   int8 x, y;
   int8 r1, r2, r3, r4, r5, r6, rt1, rt2, rt3;
   int8 s1, s2, s3, s4, s5, s6;
   set_tris_b(0x00);
   output_b(0x00);
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
     while(!usb_cdc_connected()) {}
       do{usb_task();
          if (usb_enumerated()){
            if(usb_cdc_kbhit()){  
                y=usb_cdc_getc();
                x=usb_cdc_getc();
                output_b(0x00);
               
Switch(x)
{
case 0x30:
output_b (0b01110111);
break;
case 0x31:
output_b (0b00010100);
break;
case 0x32:
output_b (0b10110011);
break;
case 0x33:
output_b (0b10110110);
break;
case 0x34:
output_b (0b11010100);
break;
case 0x35:
output_b (0b11100110);
break;
case 0x36:
output_b (0b11100111);
break;
case 0x37:
output_b (0b00110100);
break;
case 0x38:
output_b (0b11110111);
break;
case 0x39:
output_b (0b11110100);
break;
default:
output_b (0b00000000); 
}


Switch(y)
{
case 0x30:
output_d (0b01110111);
break;
case 0x31:
output_d (0b00010100);
break;
case 0x32:
output_d (0b10110011);
break;
case 0x33:
output_d (0b10110110);
break;
case 0x34:
output_d (0b11010100);
break;
case 0x35:
output_d (0b11100110);
break;
case 0x36:
output_d (0b11100111);
break;
case 0x37:
output_d (0b00110100);
break;
case 0x38:
output_d (0b11110111);
break;
case 0x39:
output_d (0b11110100);
break;
default:
output_d (0b00000000); 
}

      rt3 = 0;
      r1 = input_a(); 
      r2 = (r1&0xff);
      r3 = (r2&0b00000011);
      r4 = (r2>>1);
      r5 = (r4&0b00001100);   	  
      rt1 = (r3|r5);
      s1 = input_c();
      s2 = (s1&0xff);
      s3 = (s2<<4);
      s4 = (s3&0b00110000);
      s5 = (s2&0b11000000);
      rt2 = (s4|s5);
      rt3 = (rt1|rt2);
      printf(usb_cdc_putc,"%c",rt3);
              }
             }
       }while (TRUE);
}


Este es el programa en el PIC, como pueden ver yo uso bootloader, los case son para decodificar el Codigo ASCII y convertirlo a numeros en el display, la parte final son los corrimientos y operaciones a nivel bit para el uso del puerto a y c.

y les dejo este pequeño video de prueba (disculpen por la calidad):

http://www.youtube.com/watch?v=kqEIXEey3C8

una duda que tengo es, como indicarle al pic que escriba, lea o ambos, si me pudieses ayudar Jokelnice, ya que le
estoy enviando todo a la vez, no me ha dado problema pero si me gustaría saber.


----------



## jokelnice

bueno el proyectico colega , en cuanto a lo de la escritura o lectura se puede realizar una combinacion en donde el programa le envie una combinacion diferente para que lea escriba etc , seria una de muchas formas


----------



## PITIURS

q tal nesesito ayuda
estoy trabajando el usb con la mpusbapi y labview.
capto los datos del pic en arreglos de 128 byts, y he podido hasta graficarlos en labview.
pero quisiera meterle filtros pasabandas a mi senal para darle efectos, pero no encuentro como, ya q si integro el filtro me manda error.
porfa ayuda. 
adjunto programa.
gracias


----------



## karl87

hola _jokelnice_ estoy tratando de hacer lo que tu pegaste aca en el blog,,, mi dispositivo pic ha sido detectado,, a la pc,,, pero al momento de abrir LABVIEW,, simplemente no recibo ningun data,,, cual podria ser mi problema,,, estoy usando el bootloader al cargar el programa del CCS...  gracias


----------



## jenn_t

uyyyyy hola JOKELNICE como va todo?, ufff  desde que pude pasar esa señal seno a traves del USB, me olvide del tema, te acuerdas que me colabaste con eso? pues bueno ahora voy a intentar lo mismo pero para 10 bits por que la vez pasada lo trabaje a 8(el conversor), asi ke retomo el foro, aunque me parece que eso lo discutimos fue en otro tema, en el de jhonatan moyano creo, entonces retomemos, je


----------



## atricio

hola disculpen me interesa mucho el tema seria posible que me digan que version del compilador CCs estan usando y que labview se esta usando para realizar los ejemplos de la primera pagina por favor...y si no es molestia seria posible que me ayuden con información del compilador para poder comenzar a programar a y algo adicional que micro estan usando yo poseo un 18F2550 se pued usar ese o no muchas gracias de antemano


----------



## jenn_t

hola atricio, pues yo uso el compilador CCS V.4.03, el labview 8.2 y el pic 18F2550, hasta el momento me han funcionado muy bn, si quieres comenzar con el asunto del usb te recomiendo este post de jhonathan moyano, para que conozcas bn de que se trata todo y desarrolles algunos ejemplos que hay ahi.

https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/


----------



## atricio

muchas gracias amigo lo voy a poner en practica porque en la u me piden este tipo de cosas y me quiero adelantar un poco y tambien porque el labview me gusta mucho


----------



## jenn_t

nice... , espero que te vaya muy bn..


----------



## jenn_t

hola, como van, tengo una pregunta, alguno de ustedes ha trabajado  pasando  array de datos de 10bits a labview???, he tratado pero el conversor de queda en ceros:S.... alguna sugerencia???


----------



## kaller

jokelnice dijo:


> bueno el proyectico colega , en cuanto a lo de la escritura o lectura se puede realizar una combinacion en donde el programa le envie una combinacion diferente para que lea escriba etc , seria una de muchas formas


Si, gracias por el consejo, de hecho ahora estoy trabajando con labview y 2 pic18f4550, uno solo actua como puente y el otro trabaja con un sensor de temperatura, una memoria eeprom, un reloj en tirmpo real, y un driver para controlar un motor con pwm. en cuanto lo tenga al 100, se los mostraré. saludos.


----------



## comandojonh

Disculpe amigo quisiera saber que es lo que hace en esta parte del codigo


if(usb_cdc_kbhit()){  
                y=usb_cdc_getc();
                x=usb_cdc_getc();
                output_b(0x00);

Que tal amigos del foro tengo unas cuantas preguntas que me gustaria me las respondieran si no es mucha molestia:

Como puedo recibir una trama con el pic y como puedo enviarla a esta desde labview, tengo este problema ya que debo manejar una matriz de leds rgb desde labview y tenia pensado eviar una trama al pic con los valores para el pwm de los tres colores, agradezco de antemano su ayuda


----------



## karl87

tengo una pregunta como declaro en el pic el numero de muestras que deseo, por que veo en los codigos que usan por ejemplo delay_ us(10),,,, esto corresponde a la frecuencia que queiren muestreao o como? 

gracias...


----------



## kaller

if(usb_cdc_kbhit()){   // Parte de codigo que emula un COM con el PIC, ver post principal

usb_cdc_getc();funciona como cualquier getc, pero es un getc especial para tomar un byte desde USB (con emulacion de COM a.k.a. puerto serial), se almacena en una variable.

output_b(0x00);  //despliega en el puerto B (00000000), sería como un clear.


----------



## nahumof

HAAAAA!!! bueno despues de habes sacado mi desesperacion por que todos hablan de cdc. si es muy bonito. pero leeeennntoooooo. bueno. espero me puedan alludar. 

primero que nada como diriamos aca en mexico eres una riata jokelnice. la neta es que por flojera he estado trabajando con el CDC desde hace un año y he querido evolucionar al bulk, pero no me termina de entrar.

 me preguntaba si podrias subir lo que posteaste en la pagina 5 de este foro pero para LB 8.2 ya que embebi las librerias para usar y no me deja jalarlas a mi diagrama de bloques.

porfas y gracias desde ya.


----------



## karl87

hola nahumof,,,esos son los descriptores que tienes que modificar, en el archivo del driver que te proporciona microchip, los cuales el vid y pid, deben ser iguales en el archivo .h de tu compilador (CCS) ya sea que manejes 
usb_desc_scope.h o la similar Usb_scope.h,,, esto es muy importante leelo muy bien porque de esto depende que tu driver de micrcrochip sea valido, sino nunca te va a reconocer tu hardware, estas modificaciones en el programa de tu pic son indispensables, ahora en el programa de labview no se que estes usando yo uso la call library como todos aca creo jejej ya que es modo bulk,,, suerte y lee todo de pies a cabeza y si estoy de acuerdo contigo el jokelnice es una riata saludos y lo que hagas compartelo aca se aprende experimentando jajaja


----------



## nahumof

hola karl 87 gracias por tu comment, si pues lo de los descriptores si ya lo habia entendido, y ya lo habia hecho. si me detecta mi dispocitivo, pero no se como usar el call library node... no encuentro ayuda util al respecto...y me parecio interezante integrar los modulos de subVI's que no secomo se usan ni para que.(bueno ahora tu me dices que nadamas son los descriptores) pero para que open??? y close??? read?? writhe??

ya antes habia trabajado con bulk pero con unos ejemplos de CCS ya que compre el kit de evaluacion USB hace mas de un año...si lo quieres lo subo, solo no tendran que hurgar en la carpeta jajaja.

la onda es que no se como utilizarlo en LB... si tienen algo de ayuda se agradece...
saludos


----------



## jokelnice

huy colegas que pena por ya casi no pasar por aca , pero ya pronto va a quedar mas tiempo para seguir con el tema y ver todo lo que ah pasado


----------



## Guille0421

Hola jokelnice...
que pena ver tan tarde el foro, despues de casi 9 meses, pero ahora lo necesito...
necesito enviar dos datos diferentes a labview por usb. Utilizare usb_cdc como tu lo explicaste, pues me parecio muy bueno. la pregunta es como hago para que los dos datos se actualicen automaticamente y se ubiquen como deben ir, me explico, como hago para enviar los datos y recibir el dato 1 como temperatura, y el segundo como humedad.
Te agradeceria si me pudieras explicar.
y muy buen foro.....


----------



## kaller

Que tal bueno, aca les traigo un pequeño proyecto con cdc, se trata de una señal con PWM para un ventilador, para el control de temperatura mediante un sensor DS1620.
Este sensor tiene una precision de 0.5°C por lo que es aceptable, tiene un termostato en el chip, con alarmas de temperaturas altas y bajas, segun se configure mediante el PIC18F4550.




>





		Código:
	

#include <18f4550.h>
#fuses HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB
#use delay(clock=48000000) //FREC OSC

#build(reset=0x800, interrupt=0x808)
#org 0x000, 0x7ff { }

#include <DS1620v2.c>       //Libreria Sensor de TEMP DS1620 3Wire
#include <usb_cdc.h>        //Libreria para emular el puerto Serial

void main()
{

  unsigned int8 PWM1;                                //Variable PWM
  char X, Y, Y1, Y2, Y3, Y4;                         //Variable PWM
  char h1, h2, h3, l1, l2, l3;                       //Variable para TEMP
  float v1, v2, v3;                                  //Variable para TEMP

  setup_ccp2(CCP_PWM);                               //Modulo CCP2 en modo PWM PIN_RC1
  setup_timer_2(T2_DIV_BY_16,255,16);                //Configuracion Frecuencia de Osc
  set_pwm2_duty(0);                                  //PWM con valor Cero al inicio
 
  DS1620_Init();           //Inicializa el Sensor

    data1=52;              //Valor de TH Inicial 26.0°C
    data2=46;              //Valor de TL Inicial 23.0°C
    DS1620_HWrite(data1);  //Escribe TH=26.0°C
    DS1620_LWrite(data2);  //Escribe TL=23.0°C

 usb_cdc_init();                       // Configuramos al puerto virtual.
  usb_init();                          // Inicializamos el stack USB. 
  while(!usb_cdc_connected()) {}       // espera a detectar una transmisión de la PC (Set_Line_Coding).
  do{usb_task();
    if (usb_enumerated()){       // Espera a que el dispositivo sea enumerado por el host.
      if(usb_cdc_kbhit()){       // En espera de nuevos caracteres en el buffer de recepción. 

X=usb_cdc_getc();              //########## ESPERA DEL PRIMER COMANDO (P/T)
   switch(X)            //########## ANALIZA EL PRIMER COMANDO
   {
   case 'P':      //############################ Recibe caracter P(PWM)      
        Y1=usb_cdc_getc();             //Recibe de RS232 valor de las centenas
        Y2=usb_cdc_getc();             //Recibe de RS232 valor de las decenas
        Y3=usb_cdc_getc();             //Recibe de RS232 valor de las unidades
        Y1=(Y1-48)*100;
        Y2=(Y2-48)*10;
        Y3=Y3-48;
        Y4=(Y1+Y2+Y3);         //Suma de los 3 valores 
        PWM1=(Y4*2.55);        //Factor de PWM
        set_pwm2_duty(PWM1);   //PWM Ciclo de trabajo igual a PWM1
        break;                 //Break del PWM


  case 'T':     //################################## Recibe caracter T(TEMP)
        Y=usb_cdc_getc();             //Comando leer o escribir (W/R)
        switch(Y)
        {
        case 'W':                    //Recibe comando W(Write TH-TL)
        h1=usb_cdc_getc();           //Recibe de RS232 valor de las centenas TH
        h2=usb_cdc_getc();           //Recibe de RS232 valor de las decenas TH
        h3=usb_cdc_getc();           //Recibe de RS232 valor de las unidades TH  
        l1=usb_cdc_getc();           //Recibe de RS232 valor de las centenas TL
        l2=usb_cdc_getc();           //Recibe de RS232 valor de las decenas TL
        l3=usb_cdc_getc();           //Recibe de RS232 valor de las unidades TL

        h1=(h1-48)*100;
        h2=(h2-48)*10;
        h3=h3-48;
        data1=(h1+h2+h3)*2;
        l1=(l1-48)*100;
        l2=(l2-48)*10;
        l3=l3-48;
        data2=(l1+l2+l3)*2;

        DS1620_HWrite(data1); //Escribe TH
        DS1620_LWrite(data2); //Escribe TL   
        break;
   
        case 'R':             //Recibe comando R(Read TH-TL-TEMP)
        v1=DS1620_Readh();       //Lee del sensor la TH
        v2=DS1620_Readl();       //Lee del sensor la TL
        DS1620_start();       //Inicio de la conversion de TEMP 
        delay_ms(100);
        v3=DS1620_ReadT();       //Lee la TEMP del sensor
        delay_ms(100);
        DS1620_stop();        //Para la conversion del sensor
        v1=V1/2;    //Divide valor entre 2, asi lo maneja el sensor.
        v2=V2/2;    //Divide valor entre 2, asi lo maneja el sensor.
        v3=V3/2;    //Divide valor entre 2, asi lo maneja el sensor.
        printf(usb_cdc_putc,"%f",v1);  //Enviar a USB valor flotante de TH(00.00)
        printf(usb_cdc_putc,"%f",v2);  //Enviar a USB valor flotante de TL(00.00)
        printf(usb_cdc_putc,"%f",v3);  //Enviar a USB valor flotante de TEMP(00.00)
        break;        
        
        default:
        break;
        }
  break; // BREAK DEL SENSOR
  
  default:
  break;
  }
              }
             }
       }while (TRUE); //Ciclo infinito
}



No soy muy buen programador, pero de que funciono me funciono


----------



## karl87

hola  nahumof, yo creo que tienes que leer un poco mas acerca de esto, Todo el sistema se basa en abrir y cerra PIPES, que nos sierven para establecer la comunicación, esto es independiente de los descriptores, pues esto como tu dices de abrir o cerrar, es nada mas enel pograma de LAbview ya que cada PIPE que abres tiene un proceso individual, basico Abrir, Leer, y Cerrar, porque sino lo haces no te va a jalar, por eso en cada CALL, se necesitan declarar las variables y especifcar si es de lectrua o escritura, o si cierra o abre, . aqui te posteo algo que lei....

Mpusbopen: (instance, pVID_PID, pEP, dwDir, dwReserved) 

Devuelve el acceso al pipe del endpoints con el VID_PID asignado. 

·         Instance (Input): Un número de dispositivo para abrir. Normalmente, se utiliza primero la llamada de MPUSBGetDeviceCount para saber cuántos dispositivos hay. 
·         pVID_PID(Input):String que contiene el PID&VID del dispositivo objetivo. El formato es “vid_xxxx&pid_yyyy”. Donde xxxx es el valor del VID el yyyy el del PID, los dos en hexadecimal. 
Ejemplo: 
Si un dispositivo tiene un VID=0x04d8 y un PID=0x000b, el string de entrada es: “vid_0x04d8&pid_0x0010”. 

Mpusbwrite: (handle, pData, dwLen, pLenght, dwMilliseconds) 

·         handle(Input):Identifica la pipe del endpoint que se va a escribir. La pipe unidad tiene que crearse con el atributo de acceso MP_WRITE. 
·         pData (Output): Puntero al buffer que contiene los datos que se van a escribir en la pipe. 
·         dwLen(Input):Especifica el número de bytes que se van a escribir en la pipe. 
·         pLenght (Output)untero al número de bytes que se escriben al llamar esta función. MPUSBWrite pone este valor a cero antes de cualquier lectura o de chequear un error. 
dwMilliseconds(Input):Especifica el intervalo de time-out en milisegundos. La función 

Mpusbread(handle, pData, dwLen, pLenght, dwMilliseconds):

·         handle(input):Identifica la pipe del Endpoint que se va a leer. La pipe unidad tiene que crearse con el atributo de acceso MP_READ. 
·         pData(output)untero al buffer que recibe el dato leído de la pipe. 
·         dwLen(input): Especifica el número de bytes que hay que leer de la pipe. 
·         pLenght (output): Puntero al número de bytes leídos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error. 
·         dwMilliseconds(input):Especifica el intervalo de time-out en milisegundos. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwMilliseconds=0, la función comprueba los datos de la pipe y vuelve inmediatamente. Si dwMilliseconds es infinito, el intervalo de time-out nunca termina. 

Mpusbclose (handle): 
Cierra una determinada unión. 
·         handle(Input):Identifica la pipe del Endpoint que se va a cerrar.


----------



## loloco

Alber Moremont dijo:


> Ya he podido controlar con VISA de labView mi dispositivo HID, es una aplicacion sencila de encender y pagar un led, la cual desarrollo Moyano Jonathan (de otro foro), pero  el lo hacia con VB. Ahora espero poder adentrarme mas y desarrllar alicaciones propias y enfocadas a lo que necesito.
> 
> Definitivamente estos foros me han servido mucho...
> 
> Saludos



Podrías ayudarme, estoy conectando el pic por HID pero no logro conmutar el led, ya creé el driver con visa y lo reconoce a la perfección pero no logro conmutar el led, podrías postear el firmware del pic para comparalo con el que tengo (gracias al Moyano).

Gracias


----------



## loloco

Problema resuelto, al parecer algo andaba mal en la configuración del pic, si les interesa puedo ver como postear (soy nuevo en el esto de los foros) un ejemplo completo adquiriendo datos por el ADC del pic para visualizarlo en una gráfica con opciones como guardar los valores en un archivo de datos, realizar acciones a voluntad dependiendo del comportamiento de la señal entre otras cosas...

Saludos.


----------



## kalonos

nomanches que padre desarrollo del tema, la verdad es justo lo que necesitaba para mi proyecto, te agradesco el post.


----------



## jenn_t

hola, definitivamente este post me ha sacado de muchos lios (lo cual agradezco infinitamente), pero ahora tengo una pregunta, alguien ha intentado enviar datos desde una EEPROM hacia el PC, yo lo he intentado pero como necesito guardar 100 datos en la 24lc256 al leer los datos desde el labview se pierden, alguien sabe que pueda estar sucediendo?


----------



## loloco

jenn_t dijo:


> hola, definitivamente este post me ha sacado de muchos lios (lo cual agradezco infinitamente), pero ahora tengo una pregunta, alguien ha intentado enviar datos desde una EEPROM hacia el PC, yo lo he intentado pero como necesito guardar 100 datos en la 24lc256 al leer los datos desde el labview se pierden, alguien sabe que pueda estar sucediendo?



Que hay, primero que nada, ¿còmo comunicas el pic con la pc?, postea tu codigo, igual puedo ayudarte


----------



## marwuin

Saludos, actualmente tengo una aplicacion donde comunico via USB el PIC 16F877 (Con Proton) y la PC (LabView), todo funciona perfecto.

Una vez que la comunicacion estaba funcionando, se me ocrrio desconectar el cable de comunicacion. Entonces en LabView se genero un error que me colgo la aplicacion.

Ahora, mi pregunra, ¿es posible en base a ese error se pueda detener la comunicacion antes que el programa se cuelgue?

Si me pueden ayudar con respecto a esto estare muy agradecido, gracias.


----------



## loloco

marwuin dijo:


> Saludos, actualmente tengo una aplicacion donde comunico via USB el PIC 16F877 (Con Proton) y la PC (LabView), todo funciona perfecto.
> 
> Una vez que la comunicacion estaba funcionando, se me ocrrio desconectar el cable de comunicacion. Entonces en LabView se genero un error que me colgo la aplicacion.
> 
> Ahora, mi pregunra, ¿es posible en base a ese error se pueda detener la comunicacion antes que el programa se cuelgue?
> 
> Si me pueden ayudar con respecto a esto estare muy agradecido, gracias.



Primero y dependiendo del loop que estes usando podrìas monitorear la línea de error usando el unbundle cluster, cuando la variable de error cambie de estado a verdadero puedes direccionar tu programa a una parte donde obligues a la aplicaciòn finalizar la comunicación sin colgar tu computador.

Por otro lado aqui tengo ya una versiòn preliminar del prorama que elaboré con la ayuda de este foro y el de "control de dispositivos por medio del modulo del pic18f2550", la siguiente meta es usar un ADC de 12 o 16 bits  a una velocidad de mìnimo 3Ks/s. En cuanto tenga algo con gusto se los comparto.


----------



## marwuin

Tienes toda la razón, agradezco tu respuesta. Gracias. Esto fue lo que hice:

Ya lo solucione con el CLUSTER UNBUNDLE, conectado a ERROR OUT, desconecte el cable y vi el código del error con el SIMPLE ERROR luego con esa información la compare con el código generado CLUSTER UNBUNDLE y si el código era el mismo, definitivamente cable había sido desconectado y le envío el mensaje al usuario. Objetivo cumplido.

Saludos y de verdad muchísimas gracias por tu respuesta


----------



## pkdos

Hola a todos. Soy nuevo en esto, tengo un problema Labview no me reconoce el USB, por más que miro el código de labview veo que esta correcto, pienso que el error radica en las librerías del pic. A continuación dejo el código c del pic. Utilizo el labview 2009, el ejemplo de jokelnice del adc.
He cambiado en el PicUSB.h
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8)
0x88,0x04, //vendor id (0x04D8 is Microchip)
0x11,0x00, //product id, me gusta el 11 
Y en el vi introduzco: la identificación de vendedor y del producto vid_04d8&pid_0011


----------



## pkdos

Hola mi problema es que no me consigue ubicar el USB, tras instalarlo me aparece siempre el mismo problema y no se como solucionarlo.

Saludos


----------



## william2100

Saludos,la duda que tengo es donde van conectados los cable del usb,gracias








jokelnice dijo:


> ah ok entonces ahi va si alguien lo necesita en 8.2 avisen
> bueno pues aca va el codigo , esto solo es el codigo para probar el adc
> 
> 
> Código:
> 
> 
> #include <18F4550.h>
> #DEVICE ADC=8
> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
> #use delay(clock=48000000)
> 
> #define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
> #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
> #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
> #define USB_EP1_TX_SIZE 2 //size to allocate for the tx endpoint 1 buffer
> #define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer
> 
> #include ".\librerias\pic18_usb.h" //libreria suministrada por picc para el manejo de pic 18fxxx
> #include ".\librerias\PicUSB.h" //Configuración del USB y los descriptores para este dispositivo ,ademas la identificacion del dispositivo ( id - vendor)
> #include ".\librerias\usb.c" //handles usb setup tokens and get descriptor reportsç
> 
> void main(void) {
> int8 recibe[2]; //declaramos variables
> int8 envia[0];
> int8 x,y,i;
> int16 dato;
> /*set_tris_b(0x00);
> //set_tris_d(0x7f);
> output_b(0x00);*/
> 
> usb_init(); //inicializamos el USB
> usb_task(); //habilita periferico usb e interrupciones
> usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
> //es decir esperar hasta que el dispositivo lo reconozca el pc
> setup_adc_ports(ALL_ANALOG);
> setup_adc(ADC_CLOCK_INTERNAL);
> 
> while (TRUE){
> if(usb_enumerated()){//si el PicUSB está configurado
> if (usb_kbhit(1)){//si el endpoint de salida contiene datos del host
> usb_get_packet(1,recibe,1); //cojemos el paquete de tamaño 1bytes del EP1 y almacenamos en recibe
> if( recibe [0]=='1'){//  si llego un "1" entonces activa el conversor
> set_adc_channel(0);
> delay_us(4);
> dato=read_adc();
> delay_us(10);
> envia[0]=dato;
> usb_put_packet(1,envia,,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC**/
> }
> }
> }
> }
> }
> 
> este es el codigo para enviar el valor leido del conversor fue el primer ejemplo conversor a 8 bits despues lo mejore a 10 y se vio cierta mejoria
> 
> y en cuanto a los vi despues de hacer varios codigos pude concluir que es mejor utilizar el codigo , en si es decir sin llamar subvis a no ser que claro se invoquen dinamicamente que funciono igual , tambien me di cuenta que directa o indirectamente influye el pc en el que estamos corriendo ya que por experiencia una cosa era lo que yo observaba en la casa y otra lo que veia en la "u" cuando haciamos pruebas con otro equipo saludos y *comenten sus experiencias para mejorar *


----------



## jokelnice

en la hoja de datos especifica el d+ y el d- del conector usb


----------



## MORGA

hola, que tal.. 
Quisiera que me apoyaran para poder compliar esto codigos basic,,,
Los codigos ya estan hechos pero me marca un error de sintaxis quiera saber en donde esta mi error o porqu eno me lo complia.. 
Gracias a todos..
Subi los cogidos  en rapidashare este es el link:


----------



## Pichuquy

Hola a todos. No puedo recibir los datos que me envia el labview, creo porque estan en diferentes formatos, te adjunto la parte del programa del pic que hace esto: Bueno simplemetne cuando recibo el caracter x o a desde el labview me tendria que responder, pero nunca lo recibe. no entiendo el porque. Para probar esto estoy usando el ejemplo qeu trae labview que se llama "Basic serial Write and read". 
Gracias.

do{
      usb_task();
      if (usb_enumerated()){  // Espera a que el dispositivo sea enumerado por el host.
         if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
            if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
               printf(usb_cdc_putc, "Se recibe el caracter x.\n\r"); 
               //si, entonces envía una cadena hacia el PC
             }
            if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
               printf(usb_cdc_putc, "Se recibe el caracter a.\n\r");
               //si, entonces envía una cadena hacia el PC               
             }
         }
        }
       }while (TRUE); // bucle infinito.

Hola otra vez. Estoy realizando los ejemplos de este foro, con un pic182550 y no puedo hacer funcionar la escritura, no me compara los datos. Yo puedo enviar perfectamente datos desde el pic al labview pero al reves no... Tengo que activar algo para que funcione?? Gracias.


----------



## adrianjpc

Hola a todo el foro!! 

Quiero compartir el proyecto completo de usb y labview 
en donde hice un subvi de manera que puedas manipular al usb de manera facil

Comparto el proyecto completo

http://uelectronika.blogspot.com/2010/04/picusb-y-labview.html


----------



## jokelnice

adrianjpc dijo:


> Hola a todo el foro!!
> 
> Quiero compartir el proyecto completo de usb y labview
> en donde hice un subvi de manera que puedas manipular al usb de manera facil
> 
> Comparto el proyecto completo
> 
> http://uelectronika.blogspot.com/2010/04/picusb-y-labview.html



bueno , bueno . compañero


----------



## Pichuquy

Muy bueno felicitaciones!!!


----------



## adrianjpc

Cualquier duda que tengan pueden comentarlo aqui


----------



## Edson3003

Hola a todos y felictacionjs a @jokelnice  les comento que hace una semana empeze a realizar una tarjeta la que  publico elector en su revista de Novoembre del 2007 el cual trabaja con  el visual c++ 2005 expres edition; yo lo junte todo y la subi en  rapidshare en incluso le rediseñe el circuito impreso en Orcad y ahi les  mado todo para que la desarrollen 

Bueno ahora si mis peros, espero @jokelnice me pueda ayudar con la experiencia que ha adquirido.
La tarjeta que presente ahora la quiero usar con el labVIEW y ahi consegui un totorial en NI http://zone.ni.com/devzone/cda/tut/p/id/9019 usando claro el NI VISA y logre que el NI VISA me reconociera el sipositivo; bueno lo que no he podido hasta ahora es configiara las entradas y salidas claro que como ya vieron cuento con los descriptores con el firmware y el dirver de Microchip pero El sasitente de VISA  me pide Requeste Type, Request, Value e INDEX; y no he podido configurar esto ahi encontre un ejemplo en la pagina de NI http://zone.ni.com/devzone/cda/epd/p/id/3637 claro como ya se dieron cuenta estoy en el modno USB CLASS RAW, espero sus resupuestas lo más pronto posible y asi terminar con este proyecto para qeu los demas no tan expertos como yo la pueda usar; ah y lo que quisera es no modificar el firmware si es necesario, vaer si em dan otra salida, estre al tanto de sus respuestas


----------



## dpancheins

Compañeros del foro tengo un inconveniente con un equipo, puedo recibir los datos en el hiperterminal pero al momento que quiero hacerlo en el labview me sale basura, adicional a ello se que el equipo me envia la información en ASCII, cualquier ayuda sería de fundamental para resolver este pequeño inconveniente.


----------



## darktiger

Saludos Amigos.. Espero esten bien.. He estado de foro en foro.. Jeje.. Buscando ayuda pues soy nuevo en el uso del Labview y me tan pidiendo una aplicación, ya he hecho avances presto q he investigo mucho.. Pero aun estoy encerrado en muchas cosas  y pss..  La aplicacion trata de diversas pruebas que se le hacen a la una señal generada de un PLC's basado en control logic, a esas señales se le deven aplicar unos parametros, un limite maximo y un minimo asi como unos criterios de convergencia, fiscalizacion o de no convergencia.. Ya yo eso lo hice y todo esta correcto... Mis dudas son..

Bueno, como establecería el tiempo de duración de una prueba en labview.. Es decir, establecer un control donde yo ingrese el tiempo determinado que durara la prueba.. Todos lo que he provado solo me dice el tiempo q va corriendo durante el transcurso de la prueba.. y bueno.. a parte de eso..!!

Al determinar un criterio de convergencia, como le hago para establecer un periodo de duracion para una señal nada mas.. Es decir; q el criterio de convergencia se le aplique a esa señal durante un perido determinado.. 20 Min por ejemplo.. Lo intente con estructuras for anidadas pero no me resulto.. 

Espero me puedan ayudar..!!


----------



## slash9010

ola jokelnice como vas bueno primero q todo queria pedirte un favor y es el siguiente tu me posria ayuidar a conseguir un manual mas omenos completo para labview o recomendar un libro y q posiblemente tenga el tema de comunicaciones con serial o usb y antemano muchas gracias me parece un software muy poderoso para electronica mecatronica y comunicaciones 
 pd yo se que es muy loko pero ps solo por curiosidad estarias interesado en hacer un manual como el que esta desarrollando jhonatahan moyano o meta son muyy buenos aunque el de moyano no esta completo y no creo que no complete en un buen rato 

viva colombia!!


----------



## CARLIO22

Buenas compañeros 
quiero decirle que esta excelente el foro y que me ha ayudado bastante
En este momento tengo un problema , estoy realizando la comunicacion por el metodo cdc , queme mi programa todo perfecto y lo probe en un equipo de escritorio el cual es bastante viejito y me sirvio la comunicacion usb con labview muy bien.
Pero en el momento de porbarlo en un portatil me reconoce el dispositivo pero no hace nada el programa no responde a ninguna orden que le doy en labview, quisiera saber si con los portatiles esta comunicacion no sirve .
Adicional a esto detecte que el program en labview me esta generando en el error out el siguiente mensaje . (en status sale una x y en la casilla este numero de error 27777600236 )
Agradesco que me pudieran colaborar


----------



## el pipo

que onda soy principiante en esto y la verdad me gustaria enseñarme a usar labview donde lo podria descargar gratuitamente? y conseguir un tutorial en español? que conocimientos devo de tener para empesar en esto.


----------



## kaller

el pipo dijo:


> que onda soy principiante en esto y la verdad me gustaria enseñarme a usar labview donde lo podria descargar gratuitamente? y conseguir un tutorial en español? que conocimientos devo de tener para empesar en esto.



lo bajas desde la pagina oficial de national instruments, pones en el google "ni" te vas a la seccion labview luego a download :B, te bajas directo el programa, lo puedes usar gratuitamente por 30 dias o puedes comprarlo. Investiga para mas opciones.

En el mismo labview trae una introduccion al programa muy buena, lo demas depende de lo que quieras hacer porque aprender todo, pues lleva mucho tiempo. 

En español, mejor te recomiendo que aprendas ingles porque con estas cosas el idioma va a ser una barrera que te seguirá siempre en este caso no se necesita un alto nivel para manejarlo, puedes descargar manuales en otros foros, etc.


----------



## el pipo

gracias y chido


----------



## Alber Moremont

Hola a todos, hace un ratilloque no escribia en este foro.

Espero me puedan ayudar, tengo que medir el voltaje de la linea de AC, que aqui en México es de aproximadamente 120 volts a 60 Hz, y metrlo a unos comparadores para activaro desactivar alguna craga según si el voltaje este mas alto o mas bajo de la referencia. 

El detalle es que no debo de utilizar un transformador para bajar el voltaje porque voy a tener lecturas erroneas, por lo tanto, tengo que recificar directamente de la linea y filtrar para que me de un valor de DC, esto es sencillo, lo que no se es como puedo bajar este voltaje "tan alto" (de aproximadamente 150V)y meterlo a los comparadores o a un amplificador operacional  o incluso a un PIC y transmitirlo por USB.

Segun yo habia visto que alguien del foro habia graficado la señal directamente de la linea de AC, por eso pregunto.

Si me pueden ayudar les agradeceria.


----------



## EinSoldiatGott

Hola, mi problema esta siendo con el reconocimiento del puerto, apenas trato de correr tu ejemplo o los incluidos me manda un error de un dispositivo ViSA¡¡¡  veo que a ustedes no les dió problema.







Uso Labview 8.2 pensé que era pro eso pero tu también lo usaste, pero como has hecho si este en los dispositivos IO solo incluye a VISA serial y no a serial solo??


Saludos y gracias


----------



## HADES

Ya probaste si los controladores de tus puertos de salida estan bien instalados?lo podes ver en el panel de control

y hacia que interface estas transmitiendo?porque no sera que traia drivers claro dependiendo que estes haciendo!

un gusto de volverte a ver EinSoldiaGott!

SONIUS


----------



## EinSoldiatGott

SONIUS dijo:


> Ya probaste si los controladores de tus puertos de salida estan bien instalados?lo podes ver en el panel de control
> 
> y hacia que interface estas transmitiendo?porque no sera que traia drivers claro dependiendo que estes haciendo!
> 
> un gusto de volverte a ver EinSoldiaGott!
> 
> SONIUS



Que tal SONIUS saludos, te diré que si era relacioando con drivers, pero no de mi compu sino de NI.

Dejo el link de descarga para quien le ocurra lo mismo, son gratuitos.

NI-VISA

Saludos y Gracias


----------



## AndreiM

> Hola a todo el foro!!
> 
> Quiero compartir el proyecto completo de usb y labview
> en donde hice un subvi de manera que puedas manipular al usb de manera facil
> 
> Comparto el proyecto completo
> 
> http://uelectronika.blogspot.com/201...y-labview.html



Hola adrianjpc,

He estado mirando este blog, esta interesante pero me parece poco profesional y etico de tu parte no mensionar al verdadero autor de este trabajo que es el amigo J1M (http://www.hobbypic), todo los codigos del pic y el labview el los ha desarrollado y lo unico que tu has hecho es copiarlos, talvez tienes el merito de haber modificado las linea de codigo de la entrada analogica, pero realmente te mececes el diploma de reconocimineto? cual es tu aporte?
Ademas la comunicacion del Pic con el labview es muy lenta, no es de alta velocidad como tu afirmas, como se esto? por que ya tambien baje los mismos archivos que tu de la pagina de J1M.


----------



## dilmer

Hola jokelnice, bueno creo que eres muy buena en programacion(Vi varios ejemplos tuyos), pues casi todos te piden ayuda... Pues quiero usar pwm y controlarlo desde labview y no logro hacerlo, de hecho ya aprendí la comunicacion usb, pero necesito ayuda con esto(PWM)....gracias

hola alguien podria ayudarme a controlar un motor con pwm desde labview


----------



## atricio

hola amigos una pregunta alguien a realizado alguna aplicacion usando proton IDE y easyhid wizard para manejar el USB y Labview...alguien me podria suministrar alguna ayuda sobre esto por favor y tambien como se debe usar las dll que tanto hablan muchas gracias de antemano


----------



## thunder2

Hola amigo, tengo una humilde respuesta en cuanto al PIC18F2550, puede realizar conversion de analogo a gigital con una señal muy debil analoga (por ejemplo un electrodo de pHmetro), muchas gracias y hasta luego.


----------



## atricio

gracias por reponder pero lo que queria saber como debo usar bien las dll y la comunicacion en labview


----------



## memowwe

thunder2 dijo:


> Hola amigo, tengo una humilde respuesta en cuanto al PIC18F2550, puede realizar conversion de analogo a gigital con una señal muy debil analoga (por ejemplo un electrodo de pHmetro), muchas gracias y hasta luego.





lo minimo que puede detectar es 5/1024        //si  tu conversor es de 10bit, y si la referencia es de  5v,
puedes amplificar la señal con operacional, multiplicandola x10,X20,etc,
puedes configurar el pic que tenga un voltaje de referencia externo, mas chico, asi por ejemplo  1V/1024....


----------



## megatron

Hola jokelnice estoy haciendo un pequeño proyecto en el que pretendo enviar una serie de bytes al pic (modo cdc desde labview), estos bytes se corresponden con una frecuencia para generar una onda cuadrada. La base es esa.

Me servirían de mucha ayuda tus VI, (Aun no me los he descargado) pero indicas que algunos son solo de ejecución y no permite visualizarlo. Pero que tienes una contraseña para poder visualizarlo, te agradecería me pasases esa cotraseña y así poder aprender.

Gracias.

P.D. Si tengo exito postearé los resultados


----------



## thunder2

Hola Memowwe, no entendi la respuesta, por favor podrias aclararme si eso de 1024 es de bits o que podria ser?. Lo que entiendo es que podria con un amplificador operacional amplificar la señal que genera el electrodo. Pero hasta ahi nada mas. Gracias y por favor podrias aclarar mi duda.


----------



## leonardo1969

Disculpen pero les hago una pregunta, esta targeta admite labview, Placa USB de adquisición de datos modelo: DI-148U marca: DATAQ

La usaria con un adaptador usb a 232.


----------



## megatron

thunder2 dijo:


> Hola Memowwe, no entendi la respuesta, por favor podrias aclararme si eso de 1024 es de bits o que podria ser?. Lo que entiendo es que podria con un amplificador operacional amplificar la señal que genera el electrodo. Pero hasta ahi nada mas. Gracias y por favor podrias aclarar mi duda.



Te explico un poco de conversion AD. Estos conversores (El ue incorpora un PIC 18) tienen una resolución de 10bits, por lo tanto pueden diferenciar 2^10=1024 medidas, como se emplea una tensión de referencia de 5V, pueden medir de 0 a 5V y diferenciar 1024 (o 1023, había por ahí un pequeño detalle), por lo tanto su resolución es Vpp/(2^10 - 1)=5/(1024-1)=0.0049V=4.9mV es decir:
0=0V
1=4.9mV
2=9.8mV
3=14.7mV
....
1022=4.9951V
1023=5V

Si tu medidor de PH tiene una señal entre 0mV y 15mV, solo vas a poder distinguir cuatro escalones, pero no todo está perdido. Puedes emplear un amplificador (Tipo operacional o lo que desees) para amplificar la señal, si la señal de 15mV la multiplicas por 300 se convierte en una señal de 4.5V la cual se puede medir con mucha precisión mediante el conversor AD.




> Disculpen pero les hago una pregunta, esta targeta admite labview, Placa  USB de adquisición de datos modelo: DI-148U marca: DATAQ
> 
> La usaria con un adaptador usb a 232.


Nunca he usado estos componentes, pero mira lo que he encontrado...
Si lees su página web pone esto:

*New!* Learn how to use the DATAQ ActiveX controls. Here you can find example programs for Visual Basic, LabView, C++, Visual Studio.NET and more. Also take a look at the Programming Support from UltimaSerial.

Si buscas en google encuentras esto:
http://support.dataq.com/viewtopic.php?f=3&t=673

Conclusion: Se puede perfectamente usar en Labvew.


----------



## leonardo1969

Te agradesco por responder, yo tambien busque en google, y encontre lo mismo, pero nada mejor que la respuesta de gente que sabe.


----------



## megatron

leonardo1969 dijo:


> Te agradesco por responder, yo tambien busque en google, y encontre lo mismo, pero nada mejor que la respuesta de gente que sabe.


Perfecto, pues eso, que yo nunca he usado esos dispositivos, pero por lo que he leido parece que no tendrás ningún problema en emplearlos, eso sí, he leido algo de una limitación en la frecuencia de muestreo si no tienes un software pro y no se que más. La limitación creo que eran 200Hz.


----------



## thunder2

Te agradezco megatron por tu molestia. Estoy tratando implementar USB en vez de serial, pero lo que me respondiste me eleva la moral un monton, muchas gracias. Si sale el proyecto lo dejare en post para otros como yo tengan las mismas dudas.


----------



## megatron

thunder2 dijo:


> Te agradezco megatron por tu molestia. Estoy tratando implementar USB en vez de serial, pero lo que me respondiste me eleva la moral un monton, muchas gracias. Si sale el proyecto lo dejare en post para otros como yo tengan las mismas dudas.



Yo estoy haciendo algo también en USB CDC (Que es lo que dices de emular el puerto serie por usb) He utilizado como referencia estos archivos, y de momento me esta funcionando.

https://www.forosdeelectronica.com/posts/143987/


----------



## haifer

Hola jokelnice, te doy las gracias por el aporte esta muy completo. Me gustaría que despejaras mis dudas pues no entiendo bien algunos términos ya que la mayor parte de los pic que he programado lo he hecho a bajo nivel y no había usado hasta a hora el compilador ccs picc  por lo que el código del programa que esta al principio lo entiendo pero los dos  siguientes códigos para modificar las librerías:

;===========================================================================
    0x00, //subclass code ==5
         0x00, //protocol code ==6
         USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7

         08,0x04,           //vendor id (0x04D8 is Microchip)
         0x01,0x00,           //product id yo quise el 0001      nota : es el mismo vendor y id de el driver que modificaron 

// RR2 cambiado para       0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ?)  ==8,9
// compatibilidad con .inf 0x33,0x00, //product id   ==10,11
// de Microchip
;=============================================================================

    8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'D',0,                                                                                        // modificable 
         'C',0,[/b]
   //string 2 --> nombre del dispositivo
         22, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         '*',0,
         'J',0,
         'O',0,
         'N',0,
         'A',0,
         'T',0,                                                                                           // modificable 
         'H',0,
         'A',0,
         'N',0,
         '*',0
};
==============================================================================

No me quedan claros del todo... estos codigos van sobre el mismo programa o como se modifican las librerias con esto, te pido disculpas pues soy nuevo en esto y no entiendo muy claramente algunas cosas.. 
de antemano muchas gracias.....


----------



## megatron

haifer dijo:


> Hola jokelnice, te doy las gracias por el aporte esta muy completo. Me gustaría que despejaras mis dudas pues no entiendo bien algunos términos ya que la mayor parte de los pic que he programado lo he hecho a bajo nivel y no había usado hasta a hora el compilador ccs picc  por lo que el código del programa que esta al principio lo entiendo pero los dos  siguientes cód.................



Hola, si modificas el vendorid o el product id debes modificarlo tanto en el firmware (PIC) como en el driver (PC).

Lo del nombre CDC JONATHAN también lo puedes modificar, en el firmware, y es el  mensaje que sale al conectarlo al USB.

Esta página te servirá para aclarar muchas dudas:
http://www.muchotrasto.com/USB2Microchip.php

saludos.


----------



## drako1809

baste buena tu aportacion

una pregunta no saben donde puedo encontrar en visa para puerto serial???


----------



## JLPF11

Encontre una forma de comunicarme con el puerto USB facilmente con LabVIEW y es con la libreria de microchip mcusbapi.dll revisen este video 
	
	




		Código:
	

[URL="http://www.youtube.com/watch?v=Lj2I5-ocLkw"]http://www.youtube.com/watch?v=Lj2I5-ocLkw[/URL]

 y le dan en descripcion se meten al enlace que aparece ahi. ahi esta el software y un subIV para trabajar con usb, muy facil..


----------



## jokelnice

claro el colega adrianjpc a estado trabajando por estos lados , la idea es que no se pierda el foro y sigan compartiendo sus esperiencias


----------



## Charly

Hola jokelnice tenia una cuenta y quien sabe de un dia otro desaparecio, y esta es mi cuenta nueva, tengo ganas de realizar este proyecto ya contacte a adrianjpc si tengo alguna duda espero y me puedan ayudar, gracias porque el enlace de adrian ya no sirve para ver la información , saludos


----------



## Charly

AndreiM dijo:


> Hola adrianjpc,
> 
> He estado mirando este blog, esta interesante pero me parece poco profesional y etico de tu parte no mensionar al verdadero autor de este trabajo que es el amigo J1M (http://www.hobbypic), todo los codigos del pic y el labview el los ha desarrollado y lo unico que tu has hecho es copiarlos, talvez tienes el merito de haber modificado las linea de codigo de la entrada analogica, pero realmente te mececes el diploma de reconocimineto? cual es tu aporte?
> Ademas la comunicacion del Pic con el labview es muy lenta, no es de alta velocidad como tu afirmas, como se esto? por que ya tambien baje los mismos archivos que tu de la pagina de J1M.



Hola amigo yo no sabia eso pero ya el enlace de ese proyecto ya no sirve alguien tiene los archivos de adrianjpc que hizo de la DAQ si alguien fuera tan amable de subirlos se lo agradeceria mucho.


----------



## Rey55

hola, una disculpa por no haber leido todo el tema primero pero quisiera saber si tambien funciona para windows 7 o si tiene q ver q sea de 32 o 64 bits, aun soy algo nuevo en esto de programacion by te agradeceria me pudieras ayudar gracias ....


----------



## zanchez

BUENAS AMIGOS ALGUIEN TIENE EL DIAGRAMA DE ESTA TARJETA PARA PODER COMENSAR APRACTICAR CON LABVIEW LES AGRADESERIA UN MIL SI ME PUDIERAN PASAR EL CODIGO DEL PIC Y DRIVER,.VIs PARA LABVIEW 2009


----------



## segioing

jokelnice dijo:


> no colega simplemente crangel17 pregunto el tamaño del endpoint  en otras palabras en realidad cuantos bytes podriamos enviar o recibir practicamente al mismo tiempo ( sabemos que no es al mismo tiempo si no que es muy rapido ) ese se muestra aca :
> 
> 
> 
> 
> 
> 
> Código:
> 
> 
> #define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
> #define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
> #define USB_EP1_TX_SIZE    128               //size to allocate for the tx endpoint 1 buffer
> #define USB_EP1_RX_SIZE    128
> 
> 
> lo que quice decir es que hasta aca llego la prueba y se envia perfectamente
> 
> saludos espero que haya quedado claro .......



hola jokelnice 
tengo una duda, e probado 

#define USB_EP1_TX_SIZE    128 

en winxp y funciona perfecto pero cuando lo pruebo en win7 no reconoce el usb del pic, e hecho pruebas y me reconoce el puerto usb solo si programa el pic así

#define USB_EP1_TX_SIZE    64

me interesa usarlo a 128

no cambio la programación solo la parte de transmisión

gracias


----------



## jokelnice

compañero no hice nunca pruebas en windows 7 , pero seria interesante que deja hacer y que no


----------



## thunder2

Hola jokenilnice, queria preguntarte si esos drivers en XP, pudieran ejecutarse en wondows 7 ultimate, supongo que esta ultima version del windows 7 no se ve limitada como la Home o Home Premium. Estoy trabajando con serial pero me gustaria migrar a USB. Gracias por tu interes.


----------



## Gaby

Moyano Jonathan:
Hola buen día, mi nombre es Gaby soy estudiante de ingenieria en electrononica.

Oye solo que tenemos muchas dudas yo y mi compañera de proyecto, acerca de la comunicación serial por medio de Labview y un pic 18f2550

Mira tenemos un programa que realizamos en MikroC para la comunicación utilizando un cable serial. La comunicación fue un éxito utilizando la herramienta UART que nos ofrece el MikroC, el problema aquí es que el profesor nos pidió que hiciramos el mismo programa pero ahora implementando Labview.

No somos muy buenas utilizando el Labview pero lo intentamos. Hicimos una interfaz en labview 8.6, sabemos que si envia y recibe el datos ya que conectamos el cable serial e hicimos un puente en los pines 2 y 3, con esto observamos que la comunicacion serial con los Visa si funciono, pero, al conectar nuestra placa con el pic no hace lo que queremos, se supone que tenemos programado el pic para que encienda un led medio segundo cuando haya comunicacion serial. Sabemos que si le llega algo por que enciende el led pero no sigue con el proceso que queremos que haga.

No sabemos si el problema esta en el codigo de mikroc o en la 
interfaz del labview. 
Estamos mas inclinadas al hecho de que sea el código en mikroc, debido a que no estamos muy seguras de la comparación que se hace con la ventana de mikroc donde antes realizábamos las practicas y que hemos cambiado por la interfaz creada por nosotras en labview, que en caso del serial seria en mikroc TOOLS/USART Terminal y con eso ya aparece esta ventana que reemplazamos, he de ahí donde sale la parte del código que creemos que reemplazar porque en el archivo de .h , nosotros lo llamamos UART1_Read() o en UART1_Write(), entonces para utilizar la interfaz del labview ¿cual seria?

Crees que podrias ayudarnos, te paso el código que tengo en mikroc , para que lo revises y nos digas si puedes ayudarnos.

De antemano muchisimas gracias por tu tiempo. 

_Codigo MikroC_


> char uart_rd;
> 
> void main() {
> 
> ADCON1 |= 0x0F;                 //Configura AN pins as digital
> CMCON  |= 7;                    // Disable comparators
> TRISB=0;
> TRISC=0;
> UART1_Init(9600);              // Initialize UART module at 19200 bps
> Delay_ms(100);                  // Wait for UART module to stabilize
> 
> UART1_Write_Text("GRACIAS");
> PORTC.B0=0;
> PORTC.B1=0;
> PORTC.B2=0;
> 
> while (1) {                     // Endless loop
> if (UART1_Data_Ready()) {      // If data is received,
> uart_rd = UART1_Read();      //   read the received data,
> 
> PORTB.B1=1;
> Delay_ms(500);
> PORTB.B1=0;
> 
> 
> 
> while (uart_rd == 'E' ) {
> if (uart_rd =='E')
> {
> PORTC.B0=1;
> PORTC.B1=0;
> PORTC.B2=0;
> Delay_ms(750);
> 
> PORTC.B0=0;
> PORTC.B1=0;
> PORTC.B2=0;
> Delay_ms(750);
> 
> PORTC.B0=1;
> PORTC.B1=0;
> PORTC.B2=0;
> Delay_ms(750);
> 
> PORTC.B0=1;
> PORTC.B1=1;
> PORTC.B2=0;
> Delay_ms(2000);
> 
> PORTC.B0=1;
> PORTC.B1=0;
> PORTC.B2=0;
> Delay_ms(750);
> 
> PORTC.B0=1;
> PORTC.B1=0;
> PORTC.B2=1;
> Delay_ms(1000);
> 
> 
> 
> UART1_Write(uart_rd);
> 
> uart_rd = UART1_Read();
> 
> if (uart_rd =='M') {
> 
> PORTC.B0=0;
> PORTC.B1=0;
> PORTC.B2=0;
> 
> break;
> }
> 
> }
> }
> UART1_Write(uart_rd);        //   and send data via UART
> }
> }
> }


----------



## thunder2

Hola, creo que tenemos las mismas dudas. Pues estoy por implementar pero hay varias paginas sobre como implementar la lectura de serial. Creo que deberias leer un poco mas sobre el uso del VISA (el modulo de comunicacion que tiene LabVIEW). Me ha funcionado y estoy programando con Pro Basic Pro, es mas fácil y voy a pasarme a USB. Saludos y buena suerte


----------



## Gaby

Hola muchas gracias, pero ya lo resolvimos.
El problema estaba en la configuracion del COM en Labview, es que era necesario agregarlo para poder utilizarlo. Esto lo hicimos primero abriendo la interfaz en Labview y seleccionamos Tools/Measurement & Automation Explorer.../ Devices, ya ahí seleccionamos el COM con el que se va a trabajar y se selecciona Save. Con esto ya se puede utilizar la comunicación serial sin ningun problema... 

De todas maneras gracias por tu respuesta


----------



## jokelnice

un feliz año para todos , y bueno que el foro no termine aqui , miraremos que mas ponemos


----------



## javierandres

Saludos a la comunidad, deseo plantear un problema que tengo con Labview. Se trata de un proyecto, en el que simulo un proceso determinado. Lo que deseo es que a mi proceso pueda accederse desde internet y pueda ser controlado desde ahí, he seguido los pasos que se indica en la ayuda para usar el web publishimg tool.

Los pasos que seguí fueron:

1. Activé el web server en Options Web Server: Configuration
2. En el Web Publishing tool, escogí la Opción Embedded, y seleccioné el VI que deseo publicar. 

Sin embargo cuando pongo la opción preview in browser, la página que se me abre en el explorador me saca el siguiente mensaje:

Your internet address (pc01.cpe.satnet.net) is not allowed to retrieve documents from this server.

Deseaba saber si alguien con experiencia en el manejo de Labview puede ayudarme a resolver este problema, saludos.


----------



## jhr

hola jokelnice me parece que este un buen foro ya que aporta mucho a uno como estudiante

quisiera saber si me puedes echar una mano con un programa en labview el cual adquiera el voltaje de ra0 
del pic18f4550 apartir de un potenciometro conectado a dicho pin (de 0 a 5v).

la comunicacion mediante la clase cdc ya la logre y envio los datos utilizando hyperterminal (funciona bien  aunq ps como ya saben en la hyperterminal los datos van llenando la pantalla jajajajaj)

lo que quiero es que en el labview cuando yo varie el pot se refleje inmediatamente el valor en un indicador. trate de hacer el programa pero ps me fallo jejejej ya configure el VISA serial, instale el driver visa etc de hecho si existe comunicacion pero no se como tatar los datos de forma adecuada para lograr
lo que quiero.

este es el programa del pic para un cristal de 4 MHz a la entrada:

//  se adquiere una señal analogica via USB CDC la cual se visualiza en labview

#include <18F4550.h> // Definición de registros internos.
#device ADC=10 //eleccion de la resolucion del ADC en este caso 10 bits
#fuses XTPLL,PLL1,CPUDIV1,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,VREGEN,NOPBADEN
#use delay(clock=48000000) // Frecuencia máxima de trabajo.

#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.

float resolucion=5.0/1023.0; //se declara la variable resolucion la cual almacenara el valor de la resolucion del adc
float voltaje=0;


void main() {

   setup_adc(adc_clock_internal);  //frecuencia a la cual se van a tomar la muestras en este caso la misma del reloj
   setup_adc_ports(AN0);   // RA0 se configura como entrada analogica
   set_adc_channel(0);      //Selección del canal 0 (RA0)

   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
   while(!usb_cdc_connected()) {}  // espera a detectar una transmisión de la PC (Set_Line_Coding).

   do{


   usb_task();

   if (usb_enumerated()){  // Espera a que el dispositivo sea enumerado por el host.


   delay_ms(1);             //estabilizacion del adc
   voltaje=resolucion*read_adc();//se guarda el valor leido en el canal 0
   delay_ms(1);             //estabilizacion del adc
   printf(usb_cdc_putc,"%f",voltaje);



         }

tambien adjunto el vi realizado

de antemano gracias

este es el vi lo habia olvidado

por cierto hay alguna instruccion en especifico para adquirir una cadena de caracteres provenientes de

la pc como en la comunicacion res232 que gets(); ?¿ :S jejjej disculpen pero soy nuevo en esto


----------



## memowwe

thunder2 dijo:


> Hola Memowwe, no entendi la respuesta, por favor podrias aclararme si eso de 1024 es de bits o que podria ser?. Lo que entiendo es que podria con un amplificador operacional amplificar la señal que genera el electrodo. Pero hasta ahi nada mas. Gracias y por favor podrias aclarar mi duda.



Beuno ya te  lo explico megatron mas abajo, para amplificar la señal con  opamp, te recomiendo un INA128, INA129,(de  instrumentacion) etc, o los amplificadores  operaciones tipo opa27 de bajo  ruido, son muy buenos , en fin hay un monton, yo te recomiendo estos  porque los he usado


----------



## rcarlos81

Hola a todos

Estoy trabajando en un proyecto parecido a los acá expuestos, le estoy trabajando a las salidas digitales con el pic18f4550 y labview, por medio de la librería MPUSBAPI.DLL el inconveniente que tengo es que la respuesta no es en tiempo real se demora de 1 a 2 seg adjunto diagrama labview para su colaboración.


----------



## memowwe

rcarlos81 dijo:


> Hola a todos
> 
> Estoy trabajando en un proyecto parecido a los acá expuestos, le estoy trabajando a las salidas digitales con el pic18f4550 y labview, por medio de la librería MPUSBAPI.DLL el inconveniente que tengo es que la respuesta no es en tiempo real se demora de 1 a 2 seg adjunto diagrama labview para su colaboración.



bueno  ami  tambien me paso,  es  Labview, es muy lento, ya que con otros  lenguajes responde mas  rapido.
Suerte ¡¡


----------



## rcarlos81

quien tiene ubn ejemplo de un codigo con entradas diitales para el pic18f4550


----------



## rcarlos81

este es el codigo que tengo para trabajar el puerto d coom salida y el b como entrada las salidas me funcionan bien, pero las entradas la verdad nose por que no he podido crear el programa en labview espro una ayuda

#include <18F4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)



#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    4                
#define USB_EP1_RX_SIZE    3                 

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports




#define modo      recibe[0]
#define param     recibe[1]
#define entrada_0   envia[0]
#define entrada_1   envia[1]
#define entrada_2   envia[2]
#define entrada_3   envia[3]
#define entrada_4   envia[4]
#define entrada_5   envia[5]
#define entrada_6   envia[6]
#define entrada_7   envia[7]


void temp (void);
int8 recibe[2];                 
int8 envia[4];



void main(void) 
{
   set_tris_d(0x00);                
   output_d(0x00);                 
   set_tris_b(0xff)
   setup_timer_0(RTCC_INTERNAL);   
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   disable_interrupts(GLOBAL);     //deshabilitamos todas las interrupciones


   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado



   LED_OFF(LEDR);                   //Apagamos el led Rojo
   LED_ON(LEDV);                    //encendemos led verde

   while (TRUE)
   {
      if(usb_enumerated())          //Si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //Si el endpoint de salida contiene datos del host
         {  
            usb_get_packet(1, recibe, 2); //Cachamos el paquete de tamaño 2bytes del EP1 y 


           if (modo==1)
            {      
             output_d(param); //El dato param recibido lo mandamos al puerto o registro d
             entrada_0=input(PIN_B0);
             entrada_1=input(PIN_B1);
             entrada_2=input(PIN_B2);
             entrada_3=input(PIN_B3);
             entrada_4=input(PIN_B4);
             entrada_5=input(PIN_B5);
             entrada_6=input(PIN_B6);
             entrada_7=input(PIN_B7);

             usb_put_packet(1,envia,4,USB_DTS_TOGGLE);

            }


----------



## memowwe

aqui  etsa tu  codigo, si requieres el proyecto  completo  dime,, se reciben 2 bytes,  el  byte
[0], es el 'comando', para  poner en el puerto B, lo  que biene en el byte [1], en total, d ela pc  envias 2 bytes, un comando  y  otro que es data,
la aplicacion en labview, esta algo  en desorden, porque  yano la he usado, pero es simple,  te adjunto  todo hasta el  driver, si te falta algo  avisa, mero arriba en  pdata,  de izquierda a derecha, en el byte 0, pon un 1,,  quedara asi, (0  y el otro campo en 1) esto representa que ne el  byte 0 pongas  un  1, que es comando  para que el micro  ponga en el puerto B,lo que recibe en el byte 1, ahora  modifica podata asi (1 XXX) donde las x son el byte a representar en puerto B. espero ser claro  y que te sirva, modificarlo para entradas es muy facil

#include <main.h>
//#include <usbadc.h>
#include <pic18_usb.h>
//#define USB_CON_SENSE_PIN PIN_B2
#include <pic18_usb.h> 
#include "usb_desc_scope.h"   //USB Configuration and Device descriptors for this UBS device
#include <usb.c>        
#include <PIC18F4550_registers.h>



void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   //setup_pp(PMP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
trisb = 0x00;
int8 recibe[2];                  //declaramos variables
int8 envia[3];

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

while (1)
{
   if(usb_enumerated())          
   {
      if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
      {usb_get_packet(1, recibe,2);


         if(recibe[0]==0x01)
            {

          PORTB = recibe[1];   // read_adc();
                               //envia[0]=ADRESL;
                                 //envia[1]=ADRESH;

             //usb_put_packet(1, envia,2, USB_DTS_TOGGLE);
           }
      }
   }




}







   //TODO: User Code

}


----------



## atricio

Disculpen la pregunta alguien ha realizado la coneccion entre el Labview y un PLC que sea Mitsubishi les agradeceria mucho un poco de informacion me pueden dar una pista de como se debe hacer muchas gracias de antemano


----------



## tiago13

disculpen!! 
si quisiera hacer un circuito que midiera la presion sanguinea por medio de un diodo led emisor y un fototransistor receptor, ¿como podria hacer la lectura de los valores del voltaje en el pc, para luego clasificarlos? 

ya tengo el circuito, es este:

http://www.picotech.com/experiments/...ng_heart_rate/

no se si la salida a la interface es serial o paralelo

de antemano muchas gracias


----------



## memowwe

bueno, el enlace  no encuentro  ningun diagrama, no tengo ni idea de como leer presion sanguinea por medio de led y fotroansistor, semease que eso mas  bien lo usaras  para mandar  los datos que leiste, por una entrada analoga.
 podrias plantear  de  nuevo  tu problema


----------



## JOSUEAPA

adrianjpc dijo:


> Cualquier duda que tengan pueden comentarlo aqui



hola amigo adrian, quisiera preguntarte tu tarjeta tiene las 4 entradas analógicas que mencionas al principio, necesito tomar 3 entradas analógicas para proyecto con acelerómetro. de antemano muchas gracias por todo lo que has hecho


----------



## thunder2

Hola Memowwe, despues de mucho tiempo, agradezco tus respuestas. Me ha dado excelentes resultados las tarjetas con FTDI, en especial el FT232RL, una placa que compre aqui en Bogota D.C, solo es instalar el drive. En cuanto labview resolvi la conversion analoga digital, recurriendo a uno de los PIC clasicos, el PIC16F877A y luego lo logre con el PIC16F876A. En vez de romperme la cabeza con el PIC18F4550 (hasta ahora lo estoy conociendo), no pude arrancarlo en Windows 7.

Gracias a ti y a Megatron.


----------



## memowwe

Sale ¡¡¡ que bueno que  puedas terminar tu proyecto. salu2


----------



## JOSUEAPA

jokelnice dijo:


> bueno , bueno . compañero


k tal amigo el enlace que pusiste ya esta roto, podrás subirlo de nuevo?


----------



## Bdragon

Hola a tod@s estoy programando el pic 18F4550 como dispositivo HID en labview y me gustaria preguntarles si saben como direccionar los comandos a un puerto en concreto, porque estoy utilizando varios puertos como salidas y uno como entrada y al programarlo no me realiza un buen funcionamiento.

Muchas Gracias!!


----------



## Ricardo_c

hola jokelnice que tal he leido tu foro y me resultado muy interesante y de gran ayuda para la implementacion de mi circuito lo que deseo hacer es una adquisicion de datos mediante usb con el pic 18f4550 y mostrarlo en labview asi como tu en tu video varias un potenciometro de la misma forma yo deseo hacer esa prueba. 
del trabajo de otro colega en el foro adrianjpc me he basado para hacer la programacion del pic la tarjeta de adquisicion la programacion en labview lo he hecho tal como el lo explica para no tener ningun problema. lo probe me reconocio el usb y cuando lo probe con labview encendi los led todo estaba bien luego quise probar la lectura del potenciometro y no se pudo mostrar en la pantalla no varia nada y ya he intentado hacer algunas cosas pero sin resultado alguno, no se si es problema del codigo o del harward . para que lo revices te adjunto todos los archivos y me puedas dar una ayuda en que me estoy equivocando porfavor, de antemano te agradezco por la ayuda y disculpame si te molesto

Atte: Ricardo Cordova 

si algun otro amigo lee este mensaje y me pueda ayudar se lo agradeceria bastante gracias


----------



## bondadoso

yo cree un driver con visa driver development wizard, puse los vid y pid de los descriptores que vienen en ccs y lo instale y conecto el pic y si lo reconoce , pero no se como hacer la parte de labview utilizando visa, busque en ejemplos y hay un vi que se llama USB RAW -Bulk.vi pero no entiendo como puedo utilizar este para leer el pic lo que quiero hacer es enviar un 1 desde labview y leer el valor del adc, pero estoy en ceros no tengo ni idea de como hacerle, espero me puedan ayudar con cualquier ayuda les dejo el firmware de ccs.

#include <18F4550.h>
#DEVICE ADC=8
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    2                 //size to allocate for the rx endpoint 1 buffer

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <usb_desc_scope.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports


//Asignacion de variables 
#define LEDV    PIN_C1
#define LEDR    PIN_C0
#define LED_ON  output_high
#define LED_OFF output_low

#define modo      recibe[0]
#define Temperatura   envia[0]

//declaramos variables globales
void temp (void);
int8 recibe[1];                 
int8 envia[1];
int8 dato;


void main(void) 
{
   setup_timer_0(RTCC_INTERNAL);   
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   disable_interrupts(GLOBAL);     //deshabilitamos todas las interrupciones

   LED_OFF(LEDV);                   //Apagamos led Verde
   LED_ON(LEDR);                    //Encendemos led Rojo   

   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   setup_port_a( ALL_ANALOG );      //habilitamos el puerto a para entrada analogica
   setup_adc(ADC_CLOCK_INTERNAL);   //Utilizamos el reloj interno 

   LED_OFF(LEDR);                   //Apagamos el led Rojo
   LED_ON(LEDV);                    //encendemos led verde

   while (TRUE)
   {
      if(usb_enumerated())          //Si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //Si el endpoint de salida contiene datos del host
         {  
            usb_get_packet(1, recibe, 1); //Cachamos el paquete de tamaño 2bytes del EP1 y almacenamos en recibe

           if (modo==1)//modo salida digital d1,d2,d3,d4,d5,d6,d7,d8
            {      

              temp(); //Adquirimos la señal analogica
              usb_put_packet(1,envia,1,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
            }
         }  
      }
   }
}

void temp (void)
{
              set_adc_channel(0); // Tomamos datos del canal 5 (Pin4 RA2/AN2)
              delay_us(4);        // Hacemos un retardo de 4 ms
              dato=read_adc();    // Leemos el dato
              delay_us(10);       // Hacemos un retardo de 10 ms   
              Temperatura=dato;   // El dato leido lo almacenamos en Temperatura

}

consegui este vi pero no funka


----------



## eloboy

les tengo una pregunta, como evitar que los paquetes o datos recibidos en labview 
se corran por ejemplo si recibo 0408 el valor del ADC, se corre a 4800
les paso los archivos para que me digan en que estoy fallando si funciona la comunicacion y todo el detalle es con la recepcion no se si se pueda limpiar el buffer o enviar mas "0"
saludos espero me auxilien


----------



## Juxn3

Me gustaria comenzar a trabajar sobre este tema, es posible que me suministren el Picc y el labview que usan en mediafire, gracias.


----------



## nietzche

Hola chicos, de acuerdo a la pagina del Labview:  
http://zone.ni.com/devzone/cda/tut/p/id/7907 
viene un ejemplo que se debe de comunicar un micro con el labview pero lo hice y me tira un error, mi version es la 8.2 y la verdad no encuentro el indicador donde dice que puerto escojer, ojala me ayuden, anexo foto. gracias


----------



## huvi

hola soy nuevo en el foro es la primera vez que entro, quisiera que alguien me ayudara soy autodidacta y estoy buscando algun libro en el que se mencione como diseñar interfaces para nicrocontroladores, de antemano gracias.
saludos.


----------



## Bdragon

hola buenas tardes;

  Estoy intentanto realizar el control de un motor paso a paso con un microcontrolador de la serie 18f de Microchip(modo HID), el micro me lo reconoce el programa Labview, pero no consigo realizar un programa que me mande una señal para que el motor se mueva.

   Alguien tiene idea de como se podría hacer, muchas gracias.


----------



## ston10

hola Ricardo yo ando en lo mismo tengo que haser este proyecto para la escuela vi el circuit de pura casualidad encontraste el diagrama completo yo estoy utilizando este 

circuito usb homemade

espero saber de ti gracias


----------



## atricio

he tenido casi nada de experiencia en realizar este tipo de cosas pero logre entablar la comunicacion usb con labview usando visas y el easy hid con proton hay un foro dedicado a esto talvez te sirva inclui la programacion y algo del vi en este foro lo malo no se donde usa el buscador


----------



## ston10

si logras encontrar el foro mencionado te lo agradeceria.


----------



## diegoroman17

jokelnice dijo:


> que tal amigos para no dejar perder el hilo del foro , logre hacer las diferentes funciones de la mpbuspapi para que las puedan integrar en cualquier codigo ademas se puede ver el codigo para que sea mas comprencible .
> para poder llamarlas desde labview esta  carpeta  la tienen que dejar en el siguiente ubicacion :
> 
> C:\Archivos de programa\National Instruments\LabVIEW 8.6\user.lib
> 
> despues de esto la pueden llamar desde aqui en labview



Hola jokelnice estaba viendo tu aporte de la migracion de la dll de microchip a labview y es un gran aporte. Yo manejo labview tengo la version 2010 de 32 bit pero mi SO es Win 7 de 64 bit quisiera saber si esta libreria podria funcionar bajo esta plataforma???


----------



## ston10

hola diegoroman17  el labview de 64bits es igual ala de 32 no cambia en nada el dll si funciona igual. La unica forma que no funciona es cuando lo transportas a mac ya que mac no maneja dll. y los archivos dll de microchip son universales solo tienes que decir que pic andas usando tengo las VIs paque puedas usar el 18f4550 en labview si quieres te los paso..


----------



## diegoroman17

Hola ston10 yo me baje las librerias que jokelnice compartio pero no se si tiene algo q ver el pic que utilice con labview...Ahora estoy utilizando principalment dos tipos pic el 18f4550 y el 18f2550 para aplicaciones mas pequeñas para ahorrar recursos...Lo que necesito hacer es una transmision usb bulk entre el micro y labview para una tarjeta de adquisicion de datos de alta velocidad...Estoy pensando implantarle ADC externas con altas velocidades de muestreo para leer la señal y necesito la transmision usb tipo bulk que segun he leido es la que mas bits por segundo transporta...Lo que quisiera hacer es una aplicacion en labview para que me reconozca como una tarjeta de adquisicion propia de la national instrument digo por cuestion de estética mas que todo..


----------



## ston10

Ok mira aki esta mi pagina ai ando publicando todo tmb ando haciendo un DAQ para una materia que estoy llevando  ai encontraras los datos aki esta el link http://www.ston10.com

ve a la zona de labview esta tarjeta demo es facil de usar or lo ke veo y tiene un programa hecho en c para probar que funciona bien la tarjeta aurita lo ke ando viendo es conseguir la libreria dll para oder usarla en labview tmb voy a subir el VIs hecho el que voy a uar ai me dices si te funciona.


----------



## diegoroman17

jokelnice publicó la libreria de labview para manejar el pic en labview. Es decir migró la dll propia de microchip a codigo G d labview. En la pagina 5 de este foro esta ston10 si deseas revisalo ahi puedes descargarla. La DAQ que me propones no alcanzaria la velocidad que necesito, yo estoy muestreando señales de 10 MHz y por el teorema del muestreo de Shannon necesito un ADC de 20 MHz minimo para poder recontruir la señal en digital.


----------



## ston10

Gracias diego el demo board que deseo usar no me funcionara para 20 MHz pregunto..

Oigan ando viendo lo ke me comentaron sera posible utilizar el dll en Mac Os Labview o solo en windows ya que dll no funciona en Mac gracisa


----------



## diegoroman17

Ston10 El microcontrolador puede ir a 48 MHz que es la velocidad maxima del oscilador,con esa velocidad el tiempo que necesita el conversor analógico digital del microcontrolador es de 64Tosc es decir mas o menos 1.4 us y a eso agrega 3Tad hasta que se reestablesca el puerto para la siguiente conversion lo que nos da mas o menos una frecuencia de muestreo de la señal de maximo 500KHz y eso yendo el el microcontrolador a toda madre. Los convertidores analógicos digitales de los micros son de muy baja velocidad, es decir si yo tengo una señal que quiero visualizar en labview de mas de 250KHz ya no podra ser muestreada por el ADC del micro ya que el teorema de Shannon dice que para muestrear una señal necesitamos al menos el doble de su frecuencia mas alta para la frecuencia de muestreo fs. Para obtener datos de un potenciometro y eso van bien esos conversores pero para aplicaciones mas complejas lamentablement se quedan cortos. Ahi se necesita un convertidor externo de alta velocidad de los que se utiliza para dsp y esos datos si adquirirlos con el microcontrolador para ser procesados.


----------



## ston10

after a long look at the files con you tell me if any body got it to work in a mac or do i have to make it work in windows thanks


----------



## diegoroman17

lamentablement yo no he trabajado jamas en MAC OS, todo en windows y un poco en Ubuntu de Linux pero he escuchado que MAC OS no trabaja con librerias dinamicas dll.


----------



## ston10

asi es las librerias dll no son compatibles en mac ando en este momento viendo como hacer una libreria compatible para mac o aver si ya estan hechas


----------



## walandinez

Estoy trabajando en un proyecto donde me toca ver temperatura, humedad y luz lo tenemos que programar el labview pero tenemos un error al crear el case para que nos maneje las tres variables alguien nos puede ayudar . gracias


----------



## diegoroman17

hola walandinez,claro con gusto t ayudo con tu proyecto. Que error especifico tienes con el case???mira lo que tienes q hacer para testear las tres variables enviar desde el microcontrolador antes del dato medido un codigo unico que indentifique a cada dato por ejemplo:
T10.5 ------dato temperatura
H1.1-----dato humedad
L4.5-----dato lumenes
cabe decir que luego de cada dato le envias el assci del enter y en labview habilitas el end of file en la configuracion del puerto serie.
Cuando esos datos ya lleguen al pc en labview debes hacer una funcion que separe los identificadores inciales y el dato numerico...Envias el identificador inicial al case para que de acuerdo a cual sea T,H o L le asigne a cada una de las casillas de texto donde quieras visualizar o simplemente envias a tres waveform char para que se grafique


----------



## walandinez

Diego gracias pero esa es la parte que me tiene confundido estoy trabajando con labview 2009 soy muy nuevo en estos temas y me toca presentarlo mañana ya intente hacer lo que me comentaste ahi ya añadi el case pero no me quiere funcionar te adjunto el vi del labview a ver si me puedes colabrorar gracias


----------



## ston10

diegoroman17
 Ando tratando de meter la señal de un TSL251R-LF al pic18f4550 para poder verlo en labview ya tengo el demobord pero el profe me comento algo de que tenia que poner un comparador en la programacion del pic espero me puedas ayudar gracias


----------



## kuropatula

Hola, implementé la comunicación con CDC y no hubo problema.
En modo bluk, el código del PIC me llega sólo hasta kbhit(), luego no me llega la información bien, o sea, llega algo pero no es lo que envío. 
Alguien sabe que puede ser?
Muchas gracias


----------



## lonely113

Hola, estuve probando algunos programas que encontre en el foro (cdc pic18f2550 con labview) pero no logro hacer que funcionen. 
en uno de los programas aparentemente labview envia un dato al pic, el pic deberia encender un led cuando lo recibe pero esto no sucede.
en otro programa cuando envio una "x" desde labview el pic debería enviar una cadena a la pc pero no sucede esto. el programa da error timeout y se detiene. 
Estoy usando labview en windows 7. quizá debo configurar el puerto COM virtual desde panel de control o desde "VISA interactive control"???


----------



## human24064

hola alguno de uds me podría ayudar tengo que enviar por usb un adc cada 5 minutos como lo ago es que intente hacerlo con un rtc y no pude alguno de uds tiene un cogido q me pueda servir de guía les agradezco la ayuda un saludo =)


----------



## jorje

Hola a todos
soy principiante en esto de la programación en labview  por lo que les estaré muy agradecido si me pudieran facilitar cualquier manual, tutorial, libro en .pdf  o cualquier ayuda con la que pudieran ayudarme (de preferencia en español y pero también en ingles es aceptada), uso la versión 2009.

de antemano doy gracias por toda la ayuda que puedan aportarme.


----------



## GATOMCY

kaller dijo:


> Que tal bueno, aca les traigo un pequeño proyecto con cdc, se trata de una señal con PWM para un ventilador, para el control de temperatura mediante un sensor DS1620.
> Este sensor tiene una precision de 0.5°C por lo que es aceptable, tiene un termostato en el chip, con alarmas de temperaturas altas y bajas, segun se configure mediante el PIC18F4550.
> 
> 
> HOLA KALLER , me interesa tu proyecto ya que requiero hacer uno similar un poco mas complejo y espero que quieras ayudarme guiandome y enviado el codigo del VI de labview que realizaste.


----------



## GATOMCY

jokelnice dijo:


> a *thoranaga *  venga pachito ese milagro encontrarmelo  por aca , venga y alcon8212 es quien yo creo que es , pero venga para resolverle la duda hay va el usb tiene varias clasificaciones , una es la forma como trabaja o algo asi
> entonces una explicacion sencilla
> *usb - cdc* ( comunication device class) : Es una comunicacion de baja velocidad , se caracteriza por emular si es asi que se dice un puerto serial  un puerto *"com" *es decir que si se hace bien nos podemos como cualquier comunicacion serial precisamente
> *
> usb-hid* ( human interface device ) : Tambien es de baja velocidad su principal caracteristica es que no se necesita ningun tipo de driver para que funciones ya que funciona gracias al _plug and play_ es el utilizado en los mouse , los joystick etc
> *usb- msd *( mass storage device ) este es el protocolo con el que funiconas las memorias usb _no _es el bulk como crees de este si no eh averiguado nada solo el nombre
> *usb-bulk* ( transmisión por bolcamiento ) es la mas rapida de todas ,  si necesita driver para realizar la comunicacion es la mas estable  .
> Una explicaion sencilla . Pero consisa colegas
> venga y lo del *principio kiss*  cierto muy cierto , no lo habia escuchado bueno . Bueno.
> 
> A* juan_d*  si se esta manejando por bulk transfer con la api proporcionada por microchip y para comenzar ah entenderlo hay unos ejemplos publicados anteriormente muestra la explicacion de sencilla de como la podemos hacer funcionar  y en cuanto al sotware para poder y enviar los datos se puede en cualquiera , visual basic  , c++ , c#, etc... Solo mente depende de poder integrar la _api de microchip_
> 
> a *adrianjpc* ok estoy preparando los ejemplos ya que yo tengo la version 8.6 y casi nadie la tiene entonces estoy pasando los ejemplos a la 8.2 para que la mayoria lo pueda ver  .......
> 
> saludos



como tomo labview en cada caso de las clasificaciones del usb ??


----------



## electronicjohndeacon

Hola tengo un problema con el ejemplo de envio de datos usb cdc al correr la aplicacion me aparece un error espero que alguien me pueda explicar


----------



## ston10

Si no estoy en lo incorrecto tienes prole de comunicación con el pic por el purgo usb y labview no se comunica con el me paso eso antes así ke revisa que haya comunicación con el pic..

si estoy en lo incorrecto me corrigen


----------



## gomes

Ricardo_c dijo:


> hola jokelnice que tal he leido tu foro y me resultado muy interesante y de gran ayuda para la implementacion de mi circuito lo que deseo hacer es una adquisicion de datos mediante usb con el pic 18f4550 y mostrarlo en labview asi como tu en tu video varias un potenciometro de la misma forma yo deseo hacer esa prueba.
> del trabajo de otro colega en el foro adrianjpc me he basado para hacer la programacion del pic la tarjeta de adquisicion la programacion en labview lo he hecho tal como el lo explica para no tener ningun problema. lo probe me reconocio el usb y cuando lo probe con labview encendi los led todo estaba bien luego quise probar la lectura del potenciometro y no se pudo mostrar en la pantalla no varia nada y ya he intentado hacer algunas cosas pero sin resultado alguno, no se si es problema del codigo o del harward . para que lo revices te adjunto todos los archivos y me puedas dar una ayuda en que me estoy equivocando porfavor, de antemano te agradezco por la ayuda y disculpame si te molesto
> 
> Atte: Ricardo Cordova
> 
> si algun otro amigo lee este mensaje y me pueda ayudar se lo agradeceria bastante gracias




Good Afternoon,
I am working on University project, and having problem with comunication between labview and pic 18f2550 becouse the windows is win7x32/64. And i would like to see better how you comunicate with your custom drive USB by picusb.vi of  folder CONTROL CON LABVIEW 1.
I cant see the remote panel  becouse is unlock, can you send me the key here or PM me?

Thx
Gomes, Diego


----------



## xpancho666x

Hola a todos, ya muchas veces e entradoa  este foro y siempre me a sido de ayuda. Bueno ahora quisiera contribuir tb en algo.. He hecho un proyecto dodne puedo adquirir hasta 8 señales analogicas, 8 salidas digitales, y 8 entradas digitales. Bueno todo trabajado por medio del subvi de PICUSB , el que esta colgado tb en youtu... Bueno.. la velocidad es de algo de 250 muestars por segundo.. eso creo.. pero quisiera reemplazar ese subvi por otro subvi que yo mismo pueda crear y que tenga uan mayor velocidad....Si alguien a conseguido una mayor velocidad.. se lo agradeceria mucho.. y una vez terminado todo lo subiria al post.. Muchas gracias.


----------



## GATOMCY

Podes probar con rs485  que es muy veloz,  podes pasarme el vi que hiciste??


----------



## xpancho666x

Bueno.. como es la primera vez que subo algo al foro.. me estoy demorando..aqui les adjunto un par de imagene.. del panel frontal y del codigo.. En la parte derecha dl codigo se encuentra el subvi del usb...este lo puedn descargar del internet.. en paginas anteriores de este mismo hilo lo han recomendaddo... pero capas si pudieramos saber como se contruyo podriamso mejorarlo y tb su velocidad de transmisicion.... luego aveces podran ver que el codigo es un poco extenso.. bueno eso es porque estoy utilizando 12 puertas analogica ademas que un ADC de 12 por ello que necesito de 2 bytes para su recepcion.


----------



## GATOMCY

Podes subir el archivo .vi para poder detallarlo en esta imagen no se ve nada. En cuanto al sub vi del usb en paginas anteriores se puede ver como se hizo por completo


----------



## xpancho666x

A ver si me puedes decir porfavor en que pagina esta com ose hizo el subvi... Y co nrespectoa  subir un archivo no se como.. x ello solo e puesto la imagen..com odigo es al primera vez que toy posteando.. pero quiero de alguna forma ayudar =D


----------



## GATOMCY

El mensaje #46.  El vi lo puedes adjuntar como un archivo comprimido


----------



## ston10

Esta bien fácil o lo que puedes hacer es subirlos a un servidor prestado mandame un pm y lo ago por ti.


----------



## xpancho666x

Por fin logre subirlo.. espero que sea de ayuda para todos los presentes =9


----------



## RockKaiser2

Saludos compañeros! Tengo una situación para plantear, que de solucionarse, podría significar un gran avance pionero en el uso de LabVIEW y adquisición de datos!

Resulta que estoy realizando un proyecto de grado en el cual debo tomar una señal de audiofrecuencia con el ADC (AN0) del PIC18F4550, enviarlo por USB BULK TRANSFER a la PC, donde LabVIEW toma el dato mediante el subVI picusb.vi, y de ahí le aplica el Spectral Measurements para así poder observar las componentes espectrales de la señal adquirida.

A continuación, el problema:






Como se observa en la figura de arriba, se adquiere la señal con el subVI picusb.vi, y el dato es convertido en decimal, y mientras se grafica dicho dato en una _Waveform Chart_, este mismo se toma como componente para el Y array en el _Build Waveform_. Ahora, el único problema que queda antes del análisis espectral es el hecho de que no he logrado hasta ahora agregar el resto de los componentes al _Build Waveform_, de tal manera de reconstruir la señal de audio adecuadamente...

Alguno en este foro sabe cómo usar el módulo _Build Waveform_?

Sólo esto me falta para terminar definitivamente el proyecto. Una vez terminado, postearé! Ya que yo mismo he sufrido un calvario buscando ayuda con respecto a este problema!

Adjunto al mensaje en un .rar:

Programación del PIC en PIC-C
Esquemático del circuito en Proteus
Driver del dispositivo USB BULK TRANSFER
subVI picusb.vi
VI del proyecto

Gracias por tomarse el tiempo!


----------



## nicolas8702

hola a todos los del foro he estado siguiendole el hilo a todo lo del bulk transfer pero veo que solo lo hacen en ccs mi pregunta es alguien lo ha realizado con c18  bueno mi inquietud  es que tengo que realizar un trabajo pero debe ser en c18 y no logor entender muy bien los ejemplos de este si alguien lo ha realizado les agradeceria su ayuda gracias


----------



## fernandoae

Yo necesito hacer algo con la clase HID, como leo y escribo datos? el pic ya lo tengo enviando y recibiendo pero a traves de visual basic...


----------



## diegmv

Hola a todos tengo una pregunta no se si me pueden ayudar al emplear el modulo visa para el envio de datos y lo recibo mediante el comando usb_cdc_getc en el pic pero solo me funciona para 8 bits es decir del labview mando un caracter en ascii por ejemplo mando el numero 49 entonces visa write me envia el caracter 1. Ahora mi problema radica que quiero enviar mas de 8 bits

con comunicacion usb_cdc como hay la posibilidad de enviar una cadena de caracteres y de ser asi como lo recibo en el pic

gracias por susr espuestas de antemano


----------



## nicolas8702

hola diegmv lo que tienes que hacer es encontrar una manera para separar el dato que quieres enviar en n datos de 8 bit yvolver a concatenarlos en labview por que el puerto serial solo recibe y envia 8 bits


----------



## Risslock

Hola muchachos, yo tengo un problema con los drivers de usb, cuando los instalo me sale codigo 10 y no me reconoce el pic.... alguien me puede ayudar??


----------



## Risslock

Ya pude arreglar el problema de los drivers, simplemente no querian funcionar en mi portatil...

pero ya se me presenta otro problema en labview:
Cuando lo pongo en modo paso a paso funciona perfectamente, pero cuando lo pongo a correr continuo me sale error de timeout!
Otro problema que he tenido es que cuando vario la entrada al conversor analogo digital me sale "Could not perform operation because I/O error."

Alguna sugerencia?


----------



## vistroni

Hola, jokelnice escribió al abrir el tema:


jokelnice dijo:


> el protocolo usb se puede trabajar en modo cdc ( Communication Device Class) *que no es mas que utilizar nuestro micro junto con unas librerias proporcionadas por picc* ...
> 
> pero recuerden que hay que personalizar nuestro dispositivo h*ay entran las librerias de picc una es la usb_cdc.h que son para que funcione y otra llamada picUSB_CDC.h* que si es la que editamos para personalizar el dispositivo y se modifican las siguientes lineas



Yo tengo una duda que no he podido despejar. Si esas librerías necesarias vienen con el compilador CCS y si sólo pertenecen a la versión de pago del compilador.
Ya wansi me contestó que se podrían armar esos archivos, pero si alguien me puede responder si esas librerías vienen con la versión completa de CCS o de dónde se pueden obtener. 
...En este tema jokelnice dice que son proporcionadas por picc, es decir CCS. Pero si alguien sabe dónde las puedo encontrar *EN* picc? Gracias.


----------



## jokelnice

si en PICC se encuentran son solo archivos .h y .c si no los tienes cualquiera te los puedes pasar y los pegas en la carpeta indicada.


----------



## vistroni

jokelnice dijo:


> si en PICC se encuentran son solo archivos .h y .c si no los tienes cualquiera te los puedes pasar y los pegas en la carpeta indicada.



Gracias jokelnice. Entonces los voy a buscar. Tal vez en la versión de prueba no los incluyen, así es que voy a buscar por ahí si obtengo todo completo el CCS.

Muchas gracias, ya me despejaste la duda y sé que deben venir en las carpetas de ese programa. Con eso me basta para proceder al paso siguiente.


----------



## TECNICO 93

hola jokelnice estuve viendo el tema que posteastes y quisiera saber como puedo activar entradas digitales del puerto rb 0,1,2,3 de mi tarjeta y la dos salidas analogicas  ya que solo tengo las salidas digitales del puerto rd y las entradas analogas  y como tendria que modificar en labview a qui te dejo el codigo para aver si me puedes ayudar te lo agradeseria mucho


----------



## jokelnice

Que tal compañero bueno pues ya no manejo  los pic pero si quieres sacar datos por el puerto b es sencillo solo cambia 
set_tris_b(0x00); //Configuracion para el puerto b como salida

solo verifica si ese puerto no esta ocupado en algo 

while (TRUE)
{
if(usb_enumerated()) //Si el PicUSB está configurado
{
if (usb_kbhit(1)) //Si el endpoint de salida contiene datos del host
{ 
usb_get_packet(1, recibe, 2); //Cachamos el paquete de tamaño 2bytes del EP1 y almacenamos en recibe

if (modo==1)//modo salida digital d1,d2,d3,d4,d5,d6,d7,d8
{ 
output_b(param); //El dato param recibido lo mandamos al puerto o registro b

}
 de todos maneras te recomiendo que leas bien la documentación del microcontrolador, como te digo ya no manejo los pic   en cuanto al programa en Labview no se tendria que cambiar nada ya que la comunicacion sigue siendo igual USB , labview recibiria datos , lo que debes configurar es el micro


----------



## camilomoreba

Hola Jokelnice

Muy buenos aportes

Tengo un inconveniente, estoy tratado de realizar la comunicacion usb por medio del mpusapi basado en uno de tus archivos "version 4.0 foro", esto debo hacerlo en labview 7.1, pero no recibe datos del adc. Supongo que el problema es la version de labview que me recomiendas.

Nota:no puedo migrar a una version superior debido a que la licencia en la u es para 7.1


----------



## TECNICO 93

muchas gracias jokelnice por responde lo voy a intentar aber que pasa.


----------



## jokelnice

bueno compañeros mañana se cumple 3 años del inicio de este foro que nació de un proyecto de grado , espero que les haya servido en sus trabajos. éxitos en lo que se propongan colegas. y ojala que estos y otros espacios donde se comparta conocimiento no se acaben .


----------



## TECNICO 93

hola jokelnicepues pues enserio fue un exito este proyecto esta muy bueno ya que conoces gente con amplio conocimieto en lectronica y programacion  y lo mejor es que te transmiten su experiencia por este medio para lograr que tu comprendas...
cambiando de tema  ise la prueva con el codigo y funciono pero haora me gustaria saber como las hago entrdas digtales para verlas en labview


----------



## TECNICO 93

hola xpancho666x  tendras el codigo de tu tarjeta y el codigo de labview en 8.6 que me puedas proporcionar





xpancho666x dijo:


> Bueno.. como es la primera vez que subo algo al foro.. me estoy demorando..aqui les adjunto un par de imagene.. del panel frontal y del codigo.. En la parte derecha dl codigo se encuentra el subvi del usb...este lo puedn descargar del internet.. en paginas anteriores de este mismo hilo lo han recomendaddo... pero capas si pudieramos saber como se contruyo podriamso mejorarlo y tb su velocidad de transmisicion.... luego aveces podran ver que el codigo es un poco extenso.. bueno eso es porque estoy utilizando 12 puertas analogica ademas que un ADC de 12 por ello que necesito de 2 bytes para su recepcion.



hola amigo me i ntereza mucho  aver si puedes pasarme tu codigo y el codigo de labview en 8.6


----------



## wansi

TECNICO 93 dijo:


> hola xpancho666x  tendras el codigo de tu tarjeta y el codigo de labview en 8.6 que me puedas proporcionar
> 
> 
> 
> 
> 
> hola amigo me i ntereza mucho  aver si puedes pasarme tu codigo y el codigo de labview en 8.6



AMIGO TECNICO 93.... En el comentario #327... xpancho666x, subio los archivos:




xpancho666x dijo:


> Por fin logre subirlo.. espero que sea de ayuda para todos los presentes =9



te aconsejo que antes de pedir leas todo el tema, todo se explica y viene en el...
SALUDOS.


----------



## apocalypsys

hola buen dia no se si me puedan ayudar estoy realizando un proyecto escolar  con labview+pic18f4550+motor a pasos +coneccion eternet jaja 

bueno es conectar 2 computadoras por puerto eternet  ya tengo el servidor y el cliente   ya ise la comunicacion del cliente con el pic y del pic al motor 


mi problemas es que tengo q poner un boton q me mande señal al pic y este detenga mi motor a pasos 

si me podrian decir como colocar la resepcion de datos de pic a labview  


gracias


----------



## venturl

Finalmente solucione los problemas con el driver y la placa funciona correctamente.

Tengo este codigo metido en el pic:

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CP UDIV1,VREGEN
#use delay(clock=48000000)
#include ".\libreria\usb_cdc.h"
#rom int 0xf00000={1,2,3,4}
#define led PIN_A0
void main() {
int8 x;
set_tris_b(0x0);
output_b(0);
usb_cdc_init();
usb_init(); 

while(!usb_cdc_connected()) {} 
do{usb_task();
if (usb_enumerated()){ 
if(usb_cdc_kbhit()){
x=usb_cdc_getc();
output_b(x);
output_high(led);

}
}
}while (TRUE); // bucle infinito.
//// jokelnice_cdc_enviar
}


Mediante labview tengo un .vi con unos simples pulsadores de dirección (arriba, abajo...) y por el puerto B sale 0000 0000 sin embargo, al arrancar el labview (run) la combinacion por el puerto B continuamente es (0110 1101) incluso sin haber pulsado nada (tan solo iniciando el labview y RUN). Y no cambia sea cual sea lo que pulsemos.

P.D. el led se enciende al hacer run en el labview.


----------



## venturl

Hola
Os mando el archivo .vi que estoy usando, son solo 4 simples direcciones,pero por el puerto B siempre recibo la misma combinación:
0110 1101


----------



## yevrah

buenos días
lo que ocurre es que estoy elaborando un proyecto en donde deseo leer un dato del  adc y enviarlo via usb a labiew, la idea es que cuando cambie el valor del adc debería hacerlo en labview, pero lo que ocurre cuando lo pruebo es que el dato se envía una sola vez, es decir labview solo muestra una vez el dato y no entiendo por que, la verdad no se mucho de comunicación usb, es la primera vez que lo intento, si alguien me pudiera colaborar.
este es el código del pic



		Código:
	

#include <18f4550.h>
#device adc=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#use delay(clock=48000000)         // clock  a 48Mhz
#include "usb_cdc.h"

  
#define ledrojo  PIN_C0                                 
#define ledverde  PIN_C1

char p;

void main()
{                                       
   set_tris_c(0b00);  
   setup_adc_ports( AN0_TO_AN5 | VSS_VDD );    //Asignamos puertos Digitales al puerto A.
   setup_adc(ADC_CLOCK_INTERNAL);
  

//********* CONFIGURAR EL HOST Y VISUALIZAR MEDIANTE LEDS************//   
   output_high(ledrojo);                                     
   output_low(ledverde); 
   usb_cdc_init();
   usb_init();                            // inicializamos el USB
   usb_task();                            //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();            //esperamos hasta que el PicUSB sea configurado por el host
   output_high(ledverde);
   output_low(ledrojo);

// ************** INICIO DEL PROGRAMA *************************************

while(!usb_cdc_connected()){}        // espera a detectar una transmisión de la PC {}                       
 
while (TRUE)
   {
      //usb_task();  
      if(usb_enumerated())          //Si el PicUSB está configurado
      {

         
            set_adc_channel(0);
            delay_ms(10);
            p=read_adc();
            delay_ms(10);
            usb_cdc_putc(p);
            delay_ms(10);
                   
        }
    }
}


el pc ya me reconoce el pic el problema es el adc

gracias de antemano


----------



## ston10

lo bueno de labview es que te deja bajar todo por http sin tener que meter usuario sol navega así es como si lo viaeras los archivos de su servidor sin problema

http://download.ni.com/support/softlib/labview/labview_runtime/


----------



## GNM

Hola amigo veo que tienes mucha experiencia en labview y te queria pedir tu ayuda para saber si tu sabes la forma de poner un filtro en labview para recibir una señal analoga es decir mi señal la tengo acondicionada para que me de de 0 a 5 volts en labview pero al entrar me entra con algo de ruido como de 10mV y quisiera saber si tu saber como añadirle un filtro para que mi señal no tenga tanto ruido... de antemano gracias amigo


----------



## Brayan Lavao

Ayudenme, por favor, ¿por qué me sale ese aviso?


----------



## sin4416

Hola a todos, primero que nada exelente post, me ha sido de mucha utilidad en un trabajo que estoy haciendo para comunicacion entre pic y labview. Me interesaría saber como es que esta hecho el subvi que recomiendan para la comunicación usb, mas que nada para entender como es que se diseñó y ver como es que funciona. Si alguien fuera tan amable de proporcionarme la contraseña para poder ver el diagrama de bloques se lo agradecería mucho. Me lo pueden mandar a mi correo, si es que quieren, para que sea de forma mas privada 


*Como no respeto las politicas del Foro me moderaron el mensaje @ PoliticasDelForo.Com*​


 Saludos.


----------

