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

Temas similares

02/06/2009 #361

Avatar de Ardogan

Kuropatula, yo estoy haciendo armas con la versión 2.3 del framework USB para C18 (aunque ya salió el 2.4 ) y si bien en algun momento probe algunas cosas con versiones anteriores, no me acuerdo mucho.

A ver que pasa con ésto:

En hardwareprofile.h levantá sacá este comentario:

Código:
/*#if !defined(DEMO_BOARD)
    #if defined(__C30__)
        #if defined(__PIC24FJ256GB110__)
            #define DEMO_BOARD PIC24FJ256GB110_PIM
            #define EXPLORER_16
			#define PIC24FJ256GB110_PIM
            #define CLOCK_FREQ 32000000
        #endif
    #endif

    #if defined(__18CXX)
        #if defined(__18F4550)
            #define DEMO_BOARD PICDEM_FS_USB
            #define PICDEM_FS_USB
            #define GetSystemClock()        48000000
        #elif defined(__18F87J50)
            #define DEMO_BOARD PIC18F87J50_PIM
            #define PIC18F87J50_PIM
            #define GetSystemClock()        48000000
        #elif defined(__18F14K50)
            #define DEMO_BOARD LOW_PIN_COUNT_USB_DEVELOPMENT_KIT
            #define LOW_PIN_COUNT_USB_DEVELOPMENT_KIT
            #define GetSystemClock()        48000000
        #endif
    #endif
#endif*/
La parte que interesa es que quede el #define PICDEM_FS_USB porque a partir de eso se configuran pines de entrada/salida más abajo, a partir de #if defined(PICDEM_FS_USB).

También te diría que, por las dudas, saques estos comentarios:
Código:
   #endif
    /*aca comente esto*/
    // External Transceiver Interface
   // #define tris_usb_vpo        TRISBbits.TRISB3    // Output
   // #define tris_usb_vmo        TRISBbits.TRISB2    // Output
   // #define tris_usb_rcv        TRISAbits.TRISA4    // Input
    #define tris_usb_vp         TRISCbits.TRISC5    // Input
    #define tris_usb_vm         TRISCbits.TRISC4    // Input
   // #define tris_usb_oe         TRISCbits.TRISC1    // Output
    
    #define tris_usb_suspnd     TRISAbits.TRISA3    // Output
Porque eso no va a importar siempre y cuando en usb_config.h esté la línea #define USB_TRANSCEIVER_OPTION USB_INTERNAL_TRANSCEIVER sin comentar. Es decir, ahí uno ya le está diciendo que se usa en el transceiver usb interno.

Y si con eso no anda, probá comentando la línea (en hardwareprofile.h):

#define PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER

para que no meta un bootloader en el código del pic. Así nos quedamos tranquilos de que no sea un error de bootloader (improbable, pero....).

Bueno, de las correcciones que marqué la más crítica es la primera, comenzá por ahí.

Saludos
03/06/2009 #362


Lo probé pero no me funcionó. Muchas gracias igual Ardogan!
03/06/2009 #363

Avatar de Moyano Jonathan

Kuropatula trata de hacer como te dije programa tu ejemplo en C de CCS que te va a ser mas facil.
03/06/2009 #364

Avatar de Ardogan

Estaba viendo los #includes, veo que el procesador definido en el proyecto es el p18f2550, sin embargo usás el p18f4550.h
A ver si poniendo el p18f2550.h y sacando el p18f4550.h cambia algo...
Ahh!, y el linker script también
03/06/2009 #365


Hola Moyano Jonathan, ya no habia escrito nada en este foro, pero te informaciónrmo que para el primer ejercicio que hiciste de HID (el de alternar el estado de un led) pude ya controlarlo con labView sin usar conversion a puerto serie, lo manejo directo como USB de HID.

Ahora, el firmware del pic dice que checa el data[0] y si es igual a 1, el led cambia de estado, eso no es problema, pero si le mandas un dato distinto de 1, el led sigue alternando. Por ejemplo, en labView le mando un "0" o un "2" o cualquier otra cosa y sigue cambiando el led.

¿Que debo hacer para que cuando el dato sea distinto de 1, ya no haga nada?

te dejo la parte del codigo donde me queda la duda

Código:
:usb_get_packet(1, data, 8);
                        if(data[0] == 1) { // Si el paquete contiene el dato "1"
                         output_toggle(PIN_B1); // Cambiamos el valor del PIN_B1.
03/06/2009 #366

Avatar de Moyano Jonathan

Claro actua solo si el dato es 1 if(data[0] == 1) entonces tenes que cambiar == al dato que queras.
03/06/2009 #367


Pero entonces si es que le mandas otro dato, no deberia de hacer nada.

Como te digo yo le envio un 2 y me sigue alternando el bit.
03/06/2009 #368


Bueno, no se que problema tenía pero empecé todo desde cero y funcionó.
Agradezco a todos por haberme ayudado.
Lo que hice fue tomar la carpeta de Microchip y ejecutar "CDC - Basic Demo - Firmware"
Saludos
03/06/2009 #369

Avatar de Moyano Jonathan

es que esa es la funcion que cumple.
03/06/2009 #370


si, pero a lo que me refiero es que aunque este la condicion: if(data==1) y yo le mande un 2 o cualquier otro caracter me sigue haciendo lo mismo.
03/06/2009 #371

Avatar de Moyano Jonathan

Hola albert

Mirá el código:

Código:
:usb_get_packet(1, data, 8);
                        if(data[0] == 1) { // Si el paquete contiene el dato "1"
                         output_toggle(PIN_B1); }  // Cambiamos el valor del PIN_B1.
Ok en esta parte si le pones
Código:
 if(data[0] == 1
o
Código:
   if(data[0] == 2)
Va a hacer lo mismo.

Vos tendrías que organizar el código de la siguiente manera para hacer cualquier cosa:

Código:
usb_get_packet(1, data, 8);
                        if(data[0] == 1)  // Si el paquete contiene el dato "1"
                              
                                  {
                         
                       // Acá ponemos el código que quiera si recibe 1 o cualquier dato.

                                       }
Ahi está la solución a lo que vos planteas.
03/06/2009 #372


ops: Disculpa que insista Moyano jonathan pero creo que no me he explicado muy bien. Entiendo bien que es lo que el codigo hace, es decir si lo defino como:

Código:
usb_get_packet(1, data, 8); 
                       if(data[0] == 1) // Si el paquete contiene el dato "1" 
                                  {                           
                                      //haz algo
                                  }
el programa hará lo que esta entre las llaves cuando recibe un 1

o si lo defino como:

Código:
usb_get_packet(1, data, 8); 
                        if(data[0] == 2)  // Si el paquete contiene el dato "2" 
                                  {                           
                                      //haz otra cosa
                                  }
el programa hará lo que esta entre las llaves cuando reciba el dato 2.

Pero a lo que me refiero es, si yo defino la condición como if(data[0]==1){acción} y desde el software de control le envio un dato diferente de 1, no entiendo por qué me sigue haciendo la acción entre llaves, si la condición no se cumple

y una disculpa nuevamente, pero espero que ahora si me de a enteder
03/06/2009 #373

Avatar de Moyano Jonathan

Haaaaaaaa ahora si entendi , mirá vos que raro lo que te está pasando......

Fijate utilizando la sentencia switch(dato) y le vas poniendo case's segun el dato que valla entrando.
03/06/2009 #374


Ok, lo checo y te aviso, porque si se me hizo algo extraño eso que pasa, ya que la condicion no se cumple...

Y disculpa la interrupción por este problemilla, pero necesitaba saber si eso era normal...
04/06/2009 #375

Avatar de Moyano Jonathan

No hay drama para eso estamos. Si te sigue sin funcionar decime
04/06/2009 #376

Avatar de Moyano Jonathan

Proximamente manual de usuario del PIC18F2550: USB aplicaciones prácticas programando en VB.net y VC# 2008.

Este manual lo ire desarrollando de a poco conjuntamente con usuarios de este y otros foros y lo pondré aqui para que se pueda consultar todo lo referente al puerto USB de la linea de microcontroladores PIC18Fxx5x con lo que se contará con una guia práctica con ejercicios desarrollados y explicados utilizando las clases más conocidad CDC , HID y Bulck transfer.
04/06/2009 #377

Avatar de Meta

Esperando el manual y felicidades por hacerlo funcionar.
04/06/2009 #378

Avatar de Moyano Jonathan

Ya estoy detectando conexión, ecribiendo datoy y leyendolos desde VB.net

En este momento voy a ver que ejercicicios va a incorporar la guia del manual, luego lo voy a ir posteando de a poco hasta que termine. El manual sospecho que va a llevar su tiempo pero quiero que sea entendible y quede bien.

Los temas principales que se van a tocar son (al principio):

- Principios básicos para programar en VB.net
- Entorno de desarrollo de Visual Basic dentro del entorno IDE de visual studio.
- Crear un formulario donde se van aplicando diferentes controles..

En fin meta al principio sería algo como lo que creaste vos con la misma forma de introducción.

Luego de la parte de programación básica con el PC se va a tomar la teoría de programación del PIC en C para crear nuestras aplicaciones con USB de igual modo que lo hemos hecho en el foro.

Y por último se va a mezclar la programación del PIC con lo de la PC para que vallamos entendiendo como se comunica.

Todo esto es a grandes rasgos ya que van muchas cosas más incluidas que ya se me irán ocurriendo durante el desarrollo del trabajo.

Me he decidido a hacerlo en Power Point y luego lo portare a PDF
04/06/2009 #379


Seria muy bueno eso, pues en loq ue se pueda ayudar ahi estaremos...
05/06/2009 #380


hola amigos, una pregunta, ¿esto funciona tambien con el Pic basic Pro? ¿tienen los codigos para pic basic pro? esta super interesante lo de comunicar el pic con el pc por usb sin tener necesidad de colocar hardware extra .
¿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.