USB CDC para PIC18F4550 en CCS

<< < (2/9) > >>

rodrigo_control2009:
Hola, ya  descubrí  mi  problema.  Los archivos usb_desc_cdc.h q usaba los habia  creado con una  versión menos reciente de PICC. Así que  modifique el archivo usb_desc_cdc. de la versión 4.104 y  todo  funciona  bien, también lo probe  con la versión 4.114 y  compila  bien. Probe mi tarjeta en  win 7 64 bit  y   se asigna puerto com. Hice las  pruebas de eco  y  responde  muy  bien.

Prueba este  código  solo  hace  el eco  emulando un puerto com  con USB_CDC

eco_usb_cdc.c

 
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN  //  uso un cristal de 20MHz
#use delay(clock=48000000)
#include <usb_cdc.h>


#define USB_CON_SENSE_PIN PIN_B2  //  puede  ser  aunq deshabilitado  tb  me  funcionó para este  ejemplo en otros  casos  si  es necesario

char s;
char c=0x00;
void main(){

delay_ms(300);
usb_cdc_init();                         //esta  en  usb_cdc   y  configura  los  baudios, bit paridad etc
usb_init();                             // esta en pic18_usb llama  a usb_init_cs() q a su vez  llama a usb_task()
while(!usb_cdc_connected()) {}



do{
 usb_task();
//c=0x00;                         
 if (usb_enumerated())     {
 c=usb_cdc_getc();                     
 usb_cdc_putc(c);
 }
 }                     
 while(true);
         }


Te  adjunto el  archivo usb_desc_cdc.h
Nota: no  uso el VID y PID  de microchip, solo  por antojo jejeje, así q  puedes  usar el q quieras para fines didácticos, no así  para  fines  comerciales.
Verifica que en tu archivo usb_cdc.h  este  esta línea,

#include <usb_desc_cdc.h>   //USB Configuration and Device descriptors for this UBS device

 para que pueda llamar al archivo usb_desc_cdc.h q t adjunto y este  a su vez llame al .inf q tb adjunto  el cual a su vez  llama al driver standard de windows. (no olvides  hacer un respaldo de tus drivers originales si coincide el  nombre o cambia el nombre al q t envio, sin olvidar  cambiar el nombre en la línea antes citada.
modifica  el arch .txt  a  .inf

proyecto2009utu:
Anda bien... ni siquiera me pide para instalar el driver y me genera un com virtual...

No se que aplicacion utilizar para probarlo

Ya que con el hyperterminal me recibe los datos pero no me devuelve nada  :(

Gracias

PalitroqueZ:
proyecto2009ut

al usar CDC, no necesitas driver, porque el windows ya lo trae, pero si necesitas informarle al windows como será la configuración del dispositivo que trabajará como puerto serial virtual y es allí donde debes buscar un archivo con extensión .inf

el que yo he usado es el que proporciona microchip en su MCHPFSUSB Framework  http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044

buscas en la carpeta drivers y cdc y allí deben estar unos 4 o 5 archivos que son los que necesitan,

pero eso si, debes usar el mismo VID y PID para que puedan integrarse correctamente al sistema.



bueno debo corregir mi post anterior, en realidad si necesita un driver, los archivos que te mencioné son estos:




al buscar el inf, el inf copia los .sys a la carpeta del sistema

rodrigo_control2009:
Cuando preguntas   q aplicación uso, t refieres  al  software ??
Con cualquier  visor de puerto  serie  deberías  ver  lo  q envias por el  puerto  com y  lo q recibes  por  el.
Yo hago las pruebas con el Docklihgt 1.6 y  el  monitor de puerto serie  q está en tools del compilador  ccs.
Y el hardaware  es una tarjeta en la que tengo un 18f4550 conectado  al usb, y  su  puerto  serie  a un modulo xbee, admas de una memoria i2c, y otras  cosas.
Creo q  si usas win de 32 bit, puedes simular la  comunicaión usb_cdc  en proteus, asi  no necitaras de una tarjeta  fisica o si ya  dispones de una o  en un proto, mucho mejor.
Y  como  bien dice  Palitroquez  el usb_cdc  no necesita driver pq  windows  ya  lo  tiene, pues  lo  único q uno hace  es  indicarle  cual driver usar, con el archivo .inf
Proyecto2009ut, sube  los códigos q usas, así mas  puden  verlos  y  te  podrán dar buenas  sugerencias.

proyecto2009utu:
Buenas, gracias por su interes...
Si te preguntaba por la aplicacion, yo estaba usando el putty y el hyperterminal, y los dos me hacen lo mismo, me envian lo que escribo pero no recibo nada.... es raro  :?, pero igual yo estoy trancado en un paso anterior ya que la pc no me reconoce el dispositivo  :5]

Lo que estoy intentando realizar es un osciloscopio digital, que se comunique por usb. Ahora bien estoy teniendo ciertos polemas con el PIC...

El codigo que tengo hasta al momento es solo una pequeña parte de lo que quiero hacer...

Código:

#include <18f4550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN,NOPBADEN       
#use delay(clock=48000000)     
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "usb_desc_cdc.h"      // Descriptores del dispositivo USB.     
#include "usb_cdc.h"           // Descripción de funciones del USB.
short estado_usb;      // boolean global, se debe declarar antes de llamar a usb_cdc.h
#define USB_CON_SENSE_PIN PIN_E3
#define  PORTB = busdata   // Defino el puerto B como la entrada de datos
                                       
// Declaracion de funciones

static void adqrap(void); // Defino adquisicion rapida                                                                   
static void adqlen(void); // Defino adquisicion lenta                                               
static void lectur(void); // Funcion Lectura                               
static void escrit(void); // Funcion Esctritura
         
// Declaracion de variables   

int8  var1;
char  var;

void main() {
       
set_tris_b (0xff);     
set_tris_a (00010000);                 

   usb_cdc_init();
   usb_init();                                           
   while(!usb_cdc_connected()) {}                       
   // espera a detectar una transmisión de la PC (Set_Line_Coding)
   do{
      usb_task();
      if (usb_enumerated()){
      usb_cdc_putc(var);
         if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
            if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
               printf(usb_cdc_putc, "Probando comunicacion\n\r");                   
               //si, entonces envía una cadena hacia el PC
             }                                   
            if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
               printf(usb_cdc_putc, "Proximamente datos osciloscopio\n\r");
               //si, entonces envía una cadena hacia el PC               
             }                                                 
         }                               
        }
       }while (TRUE); // bucle eterno
}             


Ahora bien, lo que quiero hacer y no se como  es cargar los datos del PuertoB en alguna de las variables y enviarlo por el USB, como puedo cargar una variable con el valor del puerto?

Gracias

PD: No se si me entienden el codigo, la parte de los caracteres y printf es solo para probar la comunicacion  :oops:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior