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

Temas similares

18/08/2011 #1

Avatar de ferdaube

Conexion pc-pic por usb y pic-pic por rf
Hola a todos, soy nuevo pero tengo años leyendo el foro y me ha servido de mucha ayuda.... pero justo ahora tengo un gran problema! Estoy con mi tesis de grado, y tengo un problema con la comunicacion rs232, les explico mas o menos.

Tengo un pic 18f2550 conectado a la pc por usb y por medio de visual basic 2010 hice la interfaz, funciona todo bien, recibo y envio sin problemas! Tambien le tengo conectado un LCD 16x2 y funciona bien con usb, recibo de la pc y muestra en la lcd sin problemas.

Ese pic tiene conectado unos modulos RF LAIPAC en los pines RX y TX del rs232 y se comunica con otro pic 16f873 con modulos RF LAIPAC sin problemas, yo probe su funcionamiento aparte (sin usb) y funciono sin problema alguno.

El detalle esta es cuando tengo conectado el 18f2550 con los 2 a la vez, es decir el usb y el rs232.. el usb me funciona sin problemas, pero al recibir un comando del usb y tratar de enviar el comando por rs232 no funciona :S.

Le conecte a los pines de RX y TX el pickit2 en el modo UART TOOL para ver si envia algo, y pues resulta que no envia nada! probe de todo, cambiando los baudios del rs232, el cristal, los comando que si printf o putc y nada :S no envia y tampoco recibe por rs232 mientra esta conectado al usb! he llegado a pensar que no se pueden trabajar los 2 juntos!

Si alguien sabe mas o menos como arreglar el problema o como ayudarme les agradeceria un mundo, ya que tengo como 2 semanas arrancandome los cabellos por no dar con el problema.

Ojo no puedo agregar otros modulos o integrados, como requisito me pidieron eso asi!

muchas gracias de antemano!


Les anexo partes del codigo del PIC 18f2550 para entiendan un poco mejor


Código:
#include <18F2550.h>
   #fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
   #use delay(clock=20000000)
   #use rs232(baud=1200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include <stdlib.h>
#include "usb_cdc.h"
#define LCD_RS_PIN      PIN_B0
#define LCD_RW_PIN      PIN_B1                                 
#define LCD_ENABLE_PIN  PIN_B2
#define LCD_DATA4       PIN_B3                                
#define LCD_DATA5       PIN_B4                                
#define LCD_DATA6       PIN_B5                               
#define LCD_DATA7       PIN_B6
#include <lcd.c>
#use standard_io(a)


void main()
{
   SETUP_ADC(ADC_OFF);
   SETUP_ADC_PORTS(NO_ANALOGS);
   lcd_init();
   delay_ms(5);
   lcd_gotoxy(3,1);
   printf(lcd_putc,"INICIANDO...");
   delay_ms(2000);
   printf(lcd_putc,"\f");
   char rx_usb,rx_rs232;
   usb_cdc_init();
   usb_init();
   while(!usb_cdc_connected()) {}
   do
   {
      usb_task();
      if (usb_enumerated()) 
      {         
         if(usb_cdc_kbhit())
         {
            rx_usb=usb_cdc_getc();
         }
         if(rx_usb=='r')
         {
            putc('m'); //AQUI RECIBO DEL USB Y TRATO DE ENVIAR POR RS232 PERO NO ENVIA
         }
         .
         .
         .
         .
         if(rx_usb=='a')  //AQUI RECIBO DEL USB Y MUESTRO EN LA LCD Y FUNCIONA PERFECTO
         {
            printf(lcd_putc,"\f");
            lcd_gotoxy(4,1);
            printf(lcd_putc,"Respuesta:");
            lcd_gotoxy(5,2);
            printf(lcd_putc,"OPCION A");
         }
         .
         .
         .
         .
         if(kbhit())  //AQUI TRATO DE RECIBIR DEL RS232 PERO NO RECIBE NADA
         {
            rx_rs232=getc();
            if(rx_rs232=='a')
            {
                   printf(usb_cdc_putc,"a");
            }
         .
         .
         .
         .
         if(!input(pin_a1)) //AQUI ENVIO POR USB SI SE PULSA Y SI LO ENVIA PERFECTO
            {
               while(!input(pin_a1)){}
               printf(usb_cdc_putc,"1");
            }
         .
         .
         .
         .
}
18/08/2011 #2

Avatar de Basalto

Ten cuidado con el tiempo de refresco del USB.
18/08/2011 #3

Avatar de ferdaube

Basalto dijo: Ver Mensaje
Ten cuidado con el tiempo de refresco del USB.
eh no entiendo? dices sobre el el tiempo que tardo en leer del usb? S:

la verdad no entiendo mi problema... porque yo envió y recibo sin problemas del usb pero cuando trato de enviar algo por rs232 no pasa nada, ni se cuelga el pic ni nada, sigue enviando y recibiendo y mostrando en la lcd... como que ignora el rs232.
18/08/2011 #4

Avatar de Basalto

En cada ciclo que hace el Do que esta dentro del main creo que el comando usb_task(); necesita un refresco creo que mínimo de 100 ms. igual te afecta algo para el rs232, es lo se me ocurre.
18/08/2011 #5

Avatar de ferdaube

Basalto dijo: Ver Mensaje
En cada ciclo que hace el Do que esta dentro del main creo que el comando usb_task(); necesita un refresco creo que mínimo de 100 ms. igual te afecta algo para el rs232, es lo se me ocurre.
mm ya te entiendo, yo lo tengo con un DO{... }while(true) osea siempre esta refrescandose...

creo que mi problema no es el usb, ya que siempre me funciona bien, desde la pc recibo y envio caracteres, pero cuando envio desde la pc al pic para que éste envie algo por rs232 no envia nada, no hace nada el rs232. Pero igual el usb sigue funcionando a pesar de eso! y el pic no se cuelga ni nada!
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.