Usb y labVIEW , entre otros

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
 
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

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
 
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);
               }
       }
   }
}
 

Adjuntos

  • alexandra1_209.rar
    6.4 KB · Visitas: 334
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
 
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;
 
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 ......
 
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... :cry:
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);
               }
      }
  }
}
 
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.
 
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?
 
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
 
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
 
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
 
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.
 
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?
 
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 ?
 
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..
 
Atrás
Arriba