Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/07/2011 #1


Envio de datos de pic 18f4550 al pc usando cdc
Hola a todos mi nombre es juan soy nuevo en el foro, necesito la colaboracion de alguien que entienda mejor este tema, para ver si me puede guiar con un proyecto que estoy intentando desarrollar en la universidad, el asunto es que no tengo mucha experiencia en programacion, pero la idea es que como logre una comunicacion inalambrica entre dos pic 18F4550 por medio de los transceptores TRF-24G, en donde uno de los pic esta adecuado para adquirir datos de varios sensores (temperatura, nivel de humedad en el suelo y nivel de agua de un tanque) hasta ahora solo estoy trabajando con temperatura con el lm35, y por medio de un transceptor envio la informacion a distancia donde es recibida por un segundo transceptor que pasa la informacion al segundo pic, hasta aqui todo esta funcionando, entonces quiero que mediante comunicacion por dispositivos de clases este segundo pic envie la informacion al pc y por ahora ser visualizada en el hiperterminal de windows, pero al momento de querer hacer la comunicacion con el pc no es posible y ademas deja de funcionar la comunicacion inalambrica entre los dos pic.


si alguien domina el tema me gustaria saberlo para enviarle la programacion que tengo hasta el momento y que me colabore diciendome cual puede ser el o los posibles errores. muchas gracias.
21/07/2011 #2


Hola, hay un tema entero y muy grande que comenta sobre lo que necesitás. Sólo buscalo con el buscador del foro, creo que se llama control de dispositivos con el PIC18F2550.
El 2550 y el 4550 son muy similares, así que buscá por los dos.
Saludos
21/07/2011 #3


Hola gracia por responder, si rebice de ese tema y he tratado de aprovechar ese codigo, pero no he logrado adaptar esto a lo que necesito, ahi va el codigo que tengo para que me digas si debo reacomodarlo o cual es la falla.

Osea este es el codigo que tengo para el segundo pic, el que va comunicado al pc; si le suprimo todo lo que tiene que ver con cdc, enumeracion, y todo ese proceso pues el recibe los datos que se le envian a una distancia de unos 50 mts. pero asi como esta ni reconoce el dispositivo ni recibe los datos que le envian a distancia.

#include <18F4550.h>
#device adc=10
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV, PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#include <usb_cdc.h>
#include <C:\Users\ALBERTO\Documents\DISPOSITIVO CDC\usb_desc_cdc.h>
#include <TRF_24G.c> //libreria de los transceptores


float valor, constante=0.4855;
int recibir, nivel1=20, nivel2=40;
Void main()
{
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
do{
usb_task();
if (usb_enumerated()){

RF_24G_initPorts();
RF_24G_Config();

output_low(pin_b6); //led rojo
output_low(pin_b7); //led verde
output_low(pin_b5);
RF_24G_SetRx(); // switch back to receive
delay_ms(1);
buf[0] = 'A';
//buf[1] = 127;
//buf[2] = 127;
//buf[3] = 127;
//buf[4] = 127;
delay_ms(10);
for(;{
if(INPUT(RF_24G_DR1)) {
getBuffer(); // Get packet
//led = buf[0];
recibir=buf[0];
//if(led==0x55){
valor=constante*recibir;
if(valor>=nivel2){
output_low(pin_b6); //led rojo
output_high(pin_b7); //led verde
output_low(pin_b5);}
delay_ms(1000);


if(valor<=nivel1){
output_low(pin_b6);
output_high(pin_b5);
output_low(pin_b7);
}
delay_ms(1000);


if(nivel1<valor && valor<nivel2){
output_low(pin_b7);
output_high(pin_b6);
output_low(pin_b5);}
delay_ms(1000);
}




printf(usb_cdc_putc, " %f",valor );
printf(usb_cdc_putc, "\n");
delay_ms(1000);
}
}
}while (TRUE);
}

Saludos
21/07/2011 #4

Avatar de Basalto

Acuerdate de poner un condensador de 1 microFaridio en la patilla de Vusb y el USB necesita un refresco cada 100ms creo recordar, por eso no puedes dejarlo en un delay de 1 Seg. Pero para no desordenar el foro debería de escribir en el otro Post, para que alguien que tenga al mismo probrema lo pueda solucionar sin volver a preguntar lo mismo. Un saludo
21/07/2011 #5


Hola gracias por responder a mis dudas, pero si lo de la parte de hardware esta correcto, se me habia olvidado escribir que como tal ya el pc reconocio el dispositivo, con sus descriptores y todo ese cuento pero osea cuando quiero enviar la informacion al pc, nada no lo reconoce y deja de funcionar tambien la transmision rf, este era el codigo inicial para que el dispositivo fuera reconocido por el pc, ahi todavia no le habia puesto nada de lo del transceptor.

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

#include <usb_cdc.h>
#include <C:\Users\ALBERTO\Documents\DISPOSITIVO CDC\usb_desc_cdc.h>

char c,d;


void main() {

usb_cdc_init();
usb_init(); //inicializamos el USB

while (!usb_cdc_connected()) {}
while (true)
{
usb_task();
if(usb_enumerated())
{
if (usb_cdc_kbhit())
{
c = usb_cdc_getc();
putc(c,RF);
}

if (kbhit(RF))
{
d=getc(RF);
usb_cdc_putc(d);
}
}
}
}

asi tal cual el dispositivo fue reconocido por el pc, entonces ahi comienza el dolor de cabeza, como pongo el resto del programa osea que lo que llega por radiofrecuencia sea capturado y pase al pc.

Saludos
22/07/2011 #6

Avatar de Basalto

Creo que es por lo que te puse arriba, necesita refresco el USB y no puedes dejarle un delay de 1 seg.
22/07/2011 #7


OK voy a modificar en el programa, cualquier cosa los vuelvo a molestar, gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.