Control de dispositivos a través del módulo USB del PIC18F45/2550

hola moyano
eso es lo que trato hacer, cambio la libreria del pic y cuando lo intento compilar en CCS C me sale un error.
el error esta en la siguiente imagen. la verdad no se que sea.



y no se como corregirlo

espero y me ayuden

saludos
 
hola que tal.
el programa viene siendo el mismo que publicaste en el control de 8 reles. lo unico que cambia es el #include<18f4550.h>


Código:
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
MCLR: Utilizamos reset por hardware.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB.
NOPBADEN: No utilizaremos el módulo de entradas análógicas del puerto B.
*/
#use delay(clock=48000000) // Frecuencia máxima de trabajo 48 Mhz.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.

// Funciones que indican el estado de la  conexión usb.
void usb_conectado(void) {
output_high(PIN_A0);
output_low(PIN_A1);
}
void usb_desconectado(void) {
output_high(PIN_A1);
output_low(PIN_A0);
}
void usb_enumerado(void) {
output_high(PIN_A2);
}

// Programa principal:

void main() {
set_tris_a(0x00); // Configura al puerto A y al puerto B como salida.
set_tris_b(0x00);

// Configuraciones varias.
setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

// Iniciamos el USB.
usb_cdc_init(); // Funciones necesarias para iniciar el módulo USB.
usb_init(); // Funciones necesarias para iniciar el módulo USB.
while(!usb_cdc_connected()) { // Mientras el USB no esté conectado.
usb_desconectado();
}
usb_conectado();
do{
usb_task();
      if (usb_enumerated()){ // Si el puerto ya fue enumerado por el host :
      usb_enumerado(); // Enciende led de enumeración_OK.
      if(usb_cdc_kbhit()){ // en espera de nuevo(s) caracter(es) en el buffer.
        if(usb_cdc_getc()=='1'){ // ¿lo que llegó fué el caracter 1?
              output_toggle(PIN_B0); // Conmuta el estado del relé 1.
                   }
        if(usb_cdc_getc()=='2'){ // ¿lo que llegó fué el caracter 2?
              output_toggle(PIN_B1); // Conmuta el estado del relé 2.
                   }
        if(usb_cdc_getc()=='3'){ // ¿lo que llegó fué el caracter 3?
              output_toggle(PIN_B2); // Conmuta el estado del relé 3.
                   }
        if(usb_cdc_getc()=='4'){ // ¿lo que llegó fué el caracter 4?
              output_toggle(PIN_B3); // Conmuta el estado del relé 4.
                   }
        if(usb_cdc_getc()=='5'){ // ¿lo que llegó fué el caracter 5?
              output_toggle(PIN_B4); // Conmuta el estado del relé 5.
                   }
        if(usb_cdc_getc()=='6'){ // ¿lo que llegó fué el caracter 6?
              output_toggle(PIN_B5); // Conmuta el estado del relé 6.
                   }
        if(usb_cdc_getc()=='7'){ // ¿lo que llegó fué el caracter 7?
              output_toggle(PIN_B6); // Conmuta el estado del relé 7.
                   }
        if(usb_cdc_getc()=='8'){ // ¿lo que llegó fué el caracter 8?
              output_toggle(PIN_B7); // Conmuta el estado del relé 8.
                   }
           }
      }
   }while (TRUE); // bucle eterno
}

que crees que sea el error que me aparece?
el programa lo quiero para controlar un brazo robotico con 4 motores y sus respectivos puentes H.

saludos
 
Entonces definitivamente es problema del compilador. Acá está tu programa compilado con la versión 4.023 del compilador de CCS.


PD: Esta versión del programa a mi me presento un par de errores, yo más adelante postee una versión que utilizaba el protocolo HID que funciona sin problemas.
 

Adjuntos

  • prueba_212.rar
    5.6 KB · Visitas: 308
Saludos a todos.

Hice el ejercicio del emulador de RS-232, pero me surge una duda de como funciona a bajo nivel, pues en el USB, el periférico no puede enviar a menos que el HOST haga una petición.

En el serial, si lo hace, entonces, acaso el USB esta en un bucle donde infinitamente envía peticiones al periférico, para emular al RS-232 full duplex? Es que me parece que eso consume algo de recursos :-s.

Por cierto, cuál es el baudate máximo que podemos seleeccionar para el Com creado?

Un saludo y gracias
 
Si la transferencia de datos se hace por ping pong donde continuamente se piden datos tanto desde el host como por parte del dispositivo.

La velocidad máxima con el COM creado son 115Kbs , pero no estoy seguro que la comunicación sea muy estable a esa velocidad, habría que hacer la prueba.
 
Hola Moyano, felicidades por el gran trabajo que haz venido realizando con esto del usb, tu guia promete mucho, no puedo esperal a verla terminada.

En fin, hace unos dias empece a realizar los ejercicios que posteas en el foro, desafortunadamente me he quedado estancado en el ejercicio 1, todo parecia ir muy bien, al conectar el cable usb, la computadora reconocia el dispositivo y todo, pero al indicarle la carpeta donde instalar el driver mchpcdc.inf, windows no lo reconocia y no se instalaba :cry: . He seguido tus instrucciones al pie de la letra, los valores de los capacitores son correctos y estoy utilizando un cristal de 20 mhz. No se que pueda estar mal, te llego a pasar eso? hay un paso extra que deba seguir? Gracias por tu atensión.

El programa del micro programa esta compilado con la versión 4.023 del compilador de CCS y uso Windows XP.
 
metal_serch como estás me alegro que te hayan funcionado los ejemplos y estés interesado en lo del puerto USB. Mi libro va a estar terminado dentro de 4 meses aproximadamente o menos depende de como ande de tiempo ya voy llegando a las 100 páginas me puse un poco lento debido a que estoy traduciendo las librerías de control al español y se hace dificil a veces.

PD: Todo aquel que sepa manejar el USB en C18 que ponga ejemplos para poder aprender ese lenguaje tambien.
 
Podrian empezar por bajar el MCHPFSUSB framework, vieni con bastantes ejemplos sobre CDC, HID, MSD, OTG, etc...

Incluye ayuda..

Excelente para empezar, solo que se necesita diseñar alguna tarjeta, o basarse en la que proporciona microchip (PICDEM FS USB, su hoja de especificaciones la encuentran en la pagina de microchip) para correr los ejemplos fisicamente...

Yo estoy empezando con esto pero esta muy bueno, aunque el STACK esta algo largo...
 
Si a mi se me hace complicado con el C18 que ya lo tengo full con las librerías del 2009. Además la estructura en si de C18 no es la misma que la de CCS y además CCS viene con más ejemplos y más drivers para el control de dispositivos.

PD: Ya tengo el MCHPFSUSB framework, están muy buenos los ejemplos. El que más me interesa saber su funcionamiento es el modo MSDC para los PIC18.
 
Hola:
Quiero empezar a poner en práctica lo que voy aprendiendo en este foro y voy consiguiendo cosas,
como el 18F2550 , el compilador CCS, etc, pero al intentar instalar el Visual Basic 2008 express siempre
se para la instalación y me deja colgado. ¿Alguno ha tenido este tipo de problemas? ¿Qué puedo hacer?

Moyano, el libro te está quedando claro, bien expuesto, de cine vamos, igual que los manuales de Meta.

Gracias
 
Atrás
Arriba