Autor Tema: Módulo USB del 18Fx550  (Leído 22827 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Módulo USB del 18Fx550
« Respuesta #60 en: 22 de Noviembre de 2005, 11:04:00 »
Holas:

Pues yo tambien me uno al grupo....! Sonrisa Gigante

Ya me funciono el USB... claro que no e la gran cosa pero antes no me reconocia ni el dispositivo... Llorando

Ahora hice un pequeño ejemplo que encienda un led bicolor, es justamente el del GTP USB LITE que tengo, la aplicacion la hice con PBP y Visual Basic...!

micodigo para el pic es este:

Codigo:
DEFINE OSC 48          

USBBufferSizeMax   con 8  " maximum buffer size
USBBufferSizeTX    con 8  " input
USBBufferSizeRX    con 8  " output

" the USB buffer...
USBBuffer        Var Byte[USBBufferSizeMax]
USBBufferCount   Var Byte
dato             var byte

" ************************************************************
" * main program loop - remember, you must keep the USB      *
" * connection alive with a call to USBService every couple  *
" * of milliseconds or so...                                 *
" ************************************************************

PORTB = 0
TRISB = 0

usbinit " initialise USB...
ProgramStart:
    gosub DoUSBIn
    PORTB = USBBuffer[7]
    goto ProgramStart


PD: Estoy utilizando el EasyHID

Desconectado halcon120

  • PIC10
  • *
  • Mensajes: 5
RE: Módulo USB del 18Fx550
« Respuesta #61 en: 02 de Diciembre de 2005, 06:59:00 »
Hola a todos, queria felicitaros a todos por el trabajo que han realizado y la ayuda que prestana  novatillos como yo.

Actualmente estoy intentado montar algo con un 18f2550, y tras muchos esfuerzos he conseguido programar el PIC con el art2003. El código esta hecho con el c18 y mplab, y es una modificacion dl proyecto sixca, con las modificaciones pertinentes (link de enlace, conexiones, includes, etc.) para cdc. El problema que tengo ahora es el que menciono en su dia kyo_meros, k no me reconoce el dispositivo debido a un mal funcionamiento. Según la cita, él mismo habia encontrado la solucion, asi k le pido ( y aquien lo sepa) que me oriente un poco, que me esta volviendo loco. Actualmente no tengo acceso al pic basic (se puede bajar por la mula?), asi que a ser posible, una que funcione para el c18. Muchas gracias por adelantado, y pido disculpas si me he saltado un post con la solución, pero no lo he visto.


Escrito originalmente por kyo_Meros

Pero bueno... he optado por elaborar mis programas en este PicBasic Pro 2.46, ya que tambien he obtenido resultados satisfactorios con el ejemplo del C18 con el CDC, pero este C18 se me hace mas "complicado"...

Ademas de que el EasyHID, te genera el codigo solo para el PicBasic Pro y para el C18 no...

Espero que prueben este PicBasic Pro 2.46... para intercambiar ideas pronto...

Atte... Oscar M R




PDD: gracias a nocturno por resolverme una duda tonta sobre el art por correo

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Módulo USB del 18Fx550
« Respuesta #62 en: 02 de Diciembre de 2005, 08:22:00 »
Hola:

Cuando me olvidava de hacer lo que josemyzm dice a continuacion... (ajustar PLL) aun asi el programa este bien me salia un erro diciendome que el dispositivo que se a conectado no funciona correctamente, no se si ese pueda ser tu error...


Escrito originalmente por josemyzm
uff, pues ahora que lo vuelvo a mirar no me parece tan facil como antes.

Se supone que tienes DEFINE OSC 48  en el programa (PIC a 48 MHz)
En la configuracion para grabar el PIC:
OSCILLATOR
XT Oscillator, PLL Enabled, XT used by USB  (el problema es que ahora veo dos opciones iguales)

*** Si no seleccionaba XT el cristal no arrancaba.


CPU System Clock
96MHz PLL div 2

Oscillator Selection
No divide-direct (4Mhz input)


El unico problema es en la primera opcion (Oscillator), sea la que sea con "PLL enabled", las otras dos ya se ven facil.

Un saludo.



Desconectado alexander_azuaje

  • PIC10
  • *
  • Mensajes: 1
RE: Módulo USB del 18Fx550
« Respuesta #63 en: 02 de Diciembre de 2005, 08:31:00 »
hola buen dia necesito de su ayuda  necesito realizar un proyecto que me permita enviar datos por el puerto usb de la pc con el pic 18f4550 me podrias enviar si tienes las rutinas y los programas para la comunicacion te lo aSonrisagradeceria saludos....

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Módulo USB del 18Fx550
« Respuesta #64 en: 02 de Diciembre de 2005, 09:02:00 »
Hola:

No nos dices mucho con eso, que quieres hacer exactamente?, y cuales son las herramientas de las que dispones para hacer el proyecto....

Desconectado halcon120

  • PIC10
  • *
  • Mensajes: 5
RE: Módulo USB del 18Fx550
« Respuesta #65 en: 02 de Diciembre de 2005, 09:49:00 »
en mi caso la configuracion del PIC, tanto en el apartado serial (los descriptores del cdc) como en el del propio pic es la siguiente:

serie:

byte cdc_rx_len;            // total rx length

byte cdc_trf_state;         // States are defined cdc.h
POINTER pCDCSrc;            // Dedicated source pointer
POINTER pCDCDst;            // Dedicated destination pointer
byte cdc_tx_len;            // total tx length
byte cdc_mem_type;          // _ROM, _RAM

    line_coding.dwDTERate._dword = 115200;      // baud rate
    line_coding.bCharFormat = 0x00;             // 1 stop bit
    line_coding.bParityType = 0x00;             // None
    line_coding.bDataBits = 0x08;               // 5,6,7,8, or 16

en cdc.c.Tb parametros en cdc.h


PIC:

//Configuración del PIC (según "PIC18 CONFIGURATION SETTINGS ADDENDUM"Giño:
//CPUDIV = OSC1_PLL2 =>[OSC1/OSC2 Src: /1][96MHz PLL Src: /2]
//USBDIV = 2         => Clock source from 96MHz PLL/2
//FOSC = HSPLL_HS    => HS oscillator, PLL enabled, HS used by USB
//PLLDIV = 5         => Divide by 5 (20MHz input)
//                  El esquema de frecuencia esta en la pagina 24 del datasheet
//                  Se deducen 48 MHz de reloj
//VREGEN = ON        => USB Voltage Regulator Enable
//MCLRE = ON         => MCLR Enable         / Reset.Si se desactiva se puede usar el puerto E
//DEBUG = OFF        => Background Debugger disable
//LVP = OFF          => Low Voltage ICSP disable
//WDT = OFF          => Watchdog Timer HW Disabled - SW Controlled
//CCP2MX = ON        => CCP2 input/output is multiplexed with RC1   /CCP2:Capture 2 input/Compare 2 output/PWM 2 output.

los datos "serie" son declaradas como variables, las opciones de configuracion comodirectivas pragama en el c18. El lvp lo cambie al grabar con el art2003, y en las opciones de configuracion no he visto ninguna ams que afecte, por lo que creo

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Módulo USB del 18Fx550
« Respuesta #66 en: 02 de Diciembre de 2005, 10:00:00 »
Hola:

oooops pero yo de C solo C que nada C Avergonzado, pero segun veo tu error no seria el que comento ya que haces la division para un cristal externo de 20MHZ, porque no posteas todo el codigo para que alguien que entienda bien de C te ayude...

Desconectado halcon120

  • PIC10
  • *
  • Mensajes: 5
RE: Módulo USB del 18Fx550
« Respuesta #67 en: 22 de Diciembre de 2005, 04:11:00 »
a ver, que he estado liado soldando el art2003 y con otras cosillas, perdona que haya tardado tanto en contestar. Muchas gracias de todas maneras, lord lafabre. El codigo del programa principal es:

#include <p18cxxx.h>                        //Incluye las definiciones de los registros de configuración
                                       //Esta situado en la carpeta del compilador, al igual que 18F2550.lkr
#include "system   ypedefs.h"                        // Required
#include "systemusbusb.h"                         // Required
#include "io_cfg.h"                                 // Required
#include "useruser.h"                              // Modifiable

//Configuración del PIC (según "PIC18 CONFIGURATION SETTINGS ADDENDUM"Giño:
//CPUDIV = OSC1_PLL2 =>[OSC1/OSC2 Src: /1][96MHz PLL Src: /2]
//USBDIV = 2         => Clock source from 96MHz PLL/2
//FOSC = HSPLL_HS    => HS oscillator, PLL enabled, HS used by USB
//PLLDIV = 5         => Divide by 5 (20MHz input)
//                  El esquema de frecuencia esta en la pagina 24 del datasheet
//                  Se deducen 48 MHz de reloj
//VREGEN = ON        => USB Voltage Regulator Enable
//MCLRE = ON         => MCLR Enable         / Reset.Si se desactiva se puede usar el puerto E
//DEBUG = OFF        => Background Debugger disable
//LVP = OFF          => Low Voltage ICSP disable
//WDT = OFF          => Watchdog Timer HW Disabled - SW Controlled
//CCP2MX = ON        => CCP2 input/output is multiplexed with RC1   /CCP2:Capture 2 input/Compare 2 output/PWM 2 output.


#pragma config CPUDIV = OSC1_PLL2, USBDIV = 2,FOSC = HSPLL_HS,PLLDIV = 5,VREGEN = ON
#pragma config MCLRE = ON,DEBUG = OFF,LVP = OFF,WDT = OFF,CCP2MX = ON

//#pragma config MCLRE = ON,PBADEN = ON,STVREN = ON,DEBUG = OFF,LPT1OSC = OFF
//#pragma config FCMEM = OFF,IESO = OFF,BOR = ON,WDT = OFF,LVP = OFF,CCP2MX = ON

/** V A R I A B L E S ********************************************************/
#pragma udata               //especifica una sección con variables estáticas no inicializadas, que se almacenará en la memoria de datos

/** P R I V A T E  P R O T O T Y P E S ***************************************/
static void InitializeSystem(void);
void USBTasks(void);


/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
 * Function:        void main(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Main program entry point.
 *
 * Note:            None
 *****************************************************************************/
void main(void)
{   
    InitializeSystem();
    while(1)
    {
        USBTasks();         // USB Tasks
        ProcessIO();        // See useruser.c & .h        
    }//end while
}//end main

/******************************************************************************
 * Function:        static void InitializeSystem(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        InitializeSystem is a centralize initialization routine.
 *                  All required USB initialization routines are called from
 *                  here.
 *
 *                  User application initialization routine should also be
 *                  called from here.                  
 *
 * Note:            None
 *****************************************************************************/
static void InitializeSystem(void)
{
    ADCON1 |= 0x0F;                 // Default all pins to digital                  
    mInitializeUSBDriver();         // See usbdrv.h    
    UserInit();                     // See user.c & .h

}//end InitializeSystem

/******************************************************************************
 * Function:        void USBTasks(void)
 *
 * PreCondition:    InitializeSystem has been called.
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Service loop for USB tasks.
 *
 * Note:            None
 *****************************************************************************/
void USBTasks(void)
{
    /*
     * Servicing Hardware
     */
    USBCheckBusStatus();                    // Must use polling method.Ver usbdrv.c
    if(UCFGbits.UTEYE!=1)
        USBDriverService();                 // Interrupt or polling method.Ver usbdrv.c
   
    #if defined(USB_USE_CDC)
    CDCTxService();                     //ver cdc.c
    #endif

}// end USBTasks

/** EOF main.c ***************************************************************/




es decir, practicamente el que viene con el programa sixca. No voy a poner todos los modulos, pq practicamente no los he tocado. Solo el user.c, y el de incializacion de entradas:




#ifndef IO_CFG_H
#define IO_CFG_H

/** I N C L U D E S *************************************************/
#include "autofilesusbcfg.h"

/** T R I S *********************************************************/
#define INPUT_PIN           1
#define OUTPUT_PIN          0

/** U S B ***********************************************************/
#define tris_usb_bus_sense  TRISAbits.TRISA1    // Input

#if defined(USE_USB_BUS_SENSE_IO)      //Seria en usbcfg.h.No definido actualmente
#define usb_bus_sense       PORTAbits.RA1
#else
#define usb_bus_sense       1
#endif

#define tris_self_power     TRISAbits.TRISA2    // Input

#if defined(USE_SELF_POWER_SENSE_IO)   //Seria en usbcfg.h.No definido actualmente
#define self_power          PORTAbits.RA2
#else
#define self_power          1
#endif

/** OUTPUT ***********************************************************/
#define mInitOutput()     LATB = 0X00 ; TRISB = 0X00



/** INPUT *****************************************************/
#define mInitInput()  TRISA=0xFF; ;

#define InPut1              PORTAbits.RA0
#define InPut2              PORTAbits.RA1
#define InPut3              PORTAbits.RA2
#define InPut4              PORTAbits.RA3
#define InPut5              PORTAbits.RA4


/** ADC ***********************************************************/
// AD Clock = Fosc/4, Acq.Time = 6TAD
// Right justified
//Ya que no usare ningún conversor A/D, lo anulo con adcon0 =0
#define mInitADC()          ADCON0=0x00;ADCON2=0x3C;ADCON2bits.ADFM = 1;

#endif //IO_CFG_H


el user no lo pongo (realmente lo unico que hara el pic sera de puente de datos, sin procesamiento, son cosas como LATB = DATA, LATB = PORTA o output_buffer
  • = tempoUsb;
          
           if(mUSBUSARTIsTxTrfReady())
            {
                mUSBUSARTTxRam((byte*)output_buffer,5);
            }
    ) pq ya ocupa mucho, y el tipo de fallo ( su dispositivo ha tenido un mal funcionamiento y puede que no funcione) no creo que tenga nada que ver.

    Les agradeceria mucho su ayuda, o algun consejo sobre a que puede deberse, pq con el tamaño del firmware y demas no se ni por donde empezar(sera el firmware, la alimentacion, los cables de datos....)