Autor Tema: Mis primeros pasos con el 18F4550  (Leído 169732 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado EINNER C

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros pasos con el 18F4550
« Respuesta #150 en: 17 de Marzo de 2011, 23:24:33 »
hola a todos

me parece excelente este post, todo lo que se necesita para aprender usb...

he visto los ejemplos de PalitroqueZ y son muy buenos, y hoy quiero plantearle una inquietud

mi problema es el siguiente, estoy realizando una comunicacion tipo cdc, con muestreo en lcd, pero si meto en el codigo algo que tenga que ver con la lcd no me sirve, si quito lo de la lcd funciona perfecto, no se uqe pasa, en proteus funciona bn, estoy utilizando cristal de 4 mhz y los fuses los configuro asi,,,

#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN

con solo lcd_init(); se me traba el pic, esto en montaje real, ni siquiera se conecta,,, comento lo que tiene que ver con lcd y de una aparece el com y realiza todo bn,,, ya llevo un dia y no he logrado encontrar el error,,,,

habia leido que para poder trabajar con el usb del pic y con otros modulos habia que usar usb_init_cs();, pero igual y no funciona,,, que sera...

aqui esta mi codigo,, lo que hace es que cuando no esta conectado con usb, funciona con bateria y hace el proceso, si esta a usb funciona de ahi y hace lo mismo pero con muestreo en pc,,,, todo eso lo hace bn,,, pero si escribo o inicio la lcd, ya no sirve,,,, yo habia realizado bastantes comunicaciones usb, pero que yo recuerde no tenia este problema,,,

#include <18F2550.h>
#DEVICE ADC=10
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#define use_portb_lcd TRUE

#include <lcd.c>
#include "usb_cdc.h"

float luxsd;
long  temper,luxs;
unsigned int temp,lux[2],recib,modo=0,hini=0,hini1=0,warning=0x0f;
signed int enc=0xff;

void usb_com()
     {
     if(usb_cdc_connected())
       {
        output_high(pin_c6);
        output_low(pin_c7);
        if (usb_enumerated())
           { warning=0;
           if(usb_cdc_kbhit())
             {
              recib=usb_cdc_getc();
              if(recib==0x31)
                {
                 usb_cdc_putc(temp);
                 usb_cdc_putc(lux[0]);
                 usb_cdc_putc(lux[1]);
                }
              if(recib==0x32)
                {
                 output_HIGH(pin_A3);
                 //lcd_putc("\fInt Luz");
                 //lcd_putc("\n Temp:    C lux");
                 enc=1;
                }
              if(recib==0x33)
                {
                 output_low(pin_A3);
                 lcd_putc("\f");
                 enc=0xff;
                }
              if(recib==0x34)
                {
                 usb_cdc_putc(0x0f);
                 usb_cdc_putc(0x0f);
                 usb_cdc_putc(0x0f);
                }
              if(recib==0x35)
                {
                 output_high(pin_c7);
                 output_low(pin_c6);
                }
              if(recib==0x36)
                {
                 /*lcd_putc("\f Inicio de Insp");
                 lcd_putc("\nen Base de Datos");
                 delay_ms(200);
                 lcd_putc("\fInt Luz");
                 lcd_putc("\n Temp:    C lux");*/
                }
              if(recib==0x37)
                {
                 /*lcd_putc("\f  Termino Insp");
                 lcd_putc("\nen Base de Datos");
                 delay_ms(2000);
                 lcd_putc("\fInt Luz");
                 lcd_putc("\n Temp:    C lux");*/
                }
              }
            }
          }
        }

void adquisicion()
     {
     set_adc_channel(0);
     delay_us(10);
     luxs = read_adc();
     delay_us(60);
     set_adc_channel(1);
     delay_us(10);
     temper = read_adc();
     delay_us(60);
     
     luxsd = (((0.00000000000006) * (luxs ^ 6)) - ((0.0000000002) * (luxs ^ 5)) + ((0.0000004) * (luxs ^ 4)) - ((0.0003) * (luxs ^ 3)) + ((0.119) * (luxs ^ 2)) - (26.409 * luxs) + 2632);
     temp= temper*0.48828125;
     
     lux[0]=make8(luxs,0);
     lux[1]=make8(luxs,1);
     /*
     if (temp>=100)
        {
         lcd_gotoxy(7,2);
         printf(lcd_putc,"%d",temp);
        }
       
     if (temp>=10)
        {
         lcd_gotoxy(7,2);
         printf(lcd_putc,"  %d ",temp);
        }
     else
        {
         lcd_gotoxy(7,2);
         printf(lcd_putc,"  %d  ",temp);
        }
     
        //if (luxs>=100000)
        // {lcd_gotoxy(9,1);
        //printf(lcd_putc,"%ld",luxs);}
       
     if (luxs>=10000)
        {
         lcd_gotoxy(9,1);
         printf(lcd_putc," %f",luxsd);
        }
       
     if (luxs>=1000)
        {
         lcd_gotoxy(9,1);
         printf(lcd_putc," %f ",luxsd);
        }
       
     if (luxs>=100)
        {
         lcd_gotoxy(9,1);
         printf(lcd_putc,"  %f ",luxsd);
        }
       
     if (luxs>=10)
        {
         lcd_gotoxy(9,1);
         printf(lcd_putc,"  %f  ",luxsd);
        }
     else
        {
         lcd_gotoxy(9,1);
         printf(lcd_putc,"   %f  ",luxsd);
         } */
      }

void main()
     {
      set_tris_a(0x03);
      setup_adc_ports(AN0_TO_AN1);
      setup_adc(ADC_CLOCK_INTERNAL );

      output_high(pin_c7);
      output_low(pin_c6);
      output_low(pin_A3);
     
       /*lcd_init();//inicializamos el USB
       lcd_putc("\fLuxometroDigital");
       lcd_putc("\n  Mesalud Ltda");*/
   
      while(true)
           {
            if (input(pin_c0) == 1)
               {

               if (input(pin_c1) == 1)
                  {
                  if(warning==0 && hini1==1)
                    {
                     usb_cdc_putc(0xff);
                     usb_cdc_putc(0x36);
                     usb_cdc_putc(0x36);
                     warning=1;
                     }
                   /*lcd_putc("\f Desconecte USB");
                   lcd_putc("\n  o La Bateria");*/
                   delay_ms(2000);
                   /*lcd_putc("\fEl Equipo Puede");
                   lcd_putc("\n  Sufrir Danos");*/
                   delay_ms(2000);
                   hini=0;
                   enc=0xff;
                  }
               else
                  {
                   warning=0;
                   if(hini==0)
                     {
                      //lcd_putc("\fLuxometroDigital");
                      //lcd_putc("\n  Mesalud Ltda");
                     }       
                   hini=1;
                   modo=0x0f;
                  }
               }
            else
               {
                modo=0xf0;
                warning=0;
                output_low(pin_a2);
                if(hini==0)
                  {
                   //lcd_putc("\fLuxometroDigital");
                   //lcd_putc("\n  Mesalud Ltda");
                  }           
                  hini=1;
                  if(hini1==0)
                     {
                      usb_cdc_init();
                      usb_init_cs();
                     hini1=1;

                     }
                  }
                 
             if (hini==1)
                {
                if(input(pin_c2))
                  {
                   delay_ms(200);
                   enc=enc*-1;
                   if(enc==1)
                     {
                      output_HIGH(pin_A3);
                      //lcd_putc("\fInt Luz");
                      //lcd_putc("\n Temp:    C lux");
                     
                      usb_cdc_putc(0xff);
                      usb_cdc_putc(0x32);
                      usb_cdc_putc(11);
                     
                      }
                   else
                      {output_LOW(pin_A3);
                     
                       usb_cdc_putc(0xff);
                       usb_cdc_putc(0x33);
                       usb_cdc_putc(11);
                     
                       //lcd_putc("\f");
                       }
                     }
                   }
   
            if(enc==1)
              {
               if (modo==0x0f)
                  {
                  output_high(pin_a2);
                   adquisicion();
                  }
                if(modo==0xf0)
                  {
                   usb_task();
                   adquisicion();
                   usb_com();
                  }
              }
            else
              {
              output_low(pin_a2);
               if(modo==0xf0)
                 {
                  usb_task();
                  usb_com();
                  }
               }
            }
       }


de antemano muchas gracias,,,, espero que me puedan colaborar...........

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Mis primeros pasos con el 18F4550
« Respuesta #151 en: 18 de Marzo de 2011, 07:44:38 »
Hola EINNER C, aunque suene tonto, has revisado que las conexiones entre el lcd y el pic estén en los pines correctos, postea un esquema del conexionado,real, haber si tienes algo mal. Parece que hay un problema al inicializar el lcd, por eso se queda esperando respuesta del lcd y no avanza.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado EINNER C

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros pasos con el 18F4550
« Respuesta #152 en: 18 de Marzo de 2011, 17:22:57 »
hola.. gracias por responder........ pues la verdad he mirado bn las conexiones y creo que estan bn,,, pero por lo que me dices podria ser que la lcd este danada, no la habia cambiado por que no tenia otra disponible, pero conseguire una y probare,,, gracias,,, luego de probar publicare mis resultados

Desconectado EINNER C

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros pasos con el 18F4550
« Respuesta #153 en: 18 de Marzo de 2011, 21:58:07 »
hola a todos,,,

gracias por su ayuda, problema solucionado, era la lcd, estaba danada, no habia podido probar con otra, pero ya que la consegui, la probe y funciona perfecto,,,
gracias,,,,


 

anything