⚡ Descuentos en cursos en video - Lleva tu aprendizaje técnico al siguiente nivel y aprovecha precios especiales antes de que termine la oferta. 🔥 Aprovechar oferta ahora 🔥
Microcontroladores y sistemas digitales

comunicación usb con pc usando pic 18f4550

Ghozt143
hace 3 años
hace 3 años
hola, buenas tardes a todos, electrónicos.
esta última semana estuve realizando pruebas para la comunicación con el pic18f4550 y el pc, el cual les dejo el código en ccs versión 5 que mide las entradas analógicas para pasarlas por usb a la pc y visualizarlas.
sin embargo, al momento de hacer la transmisión me dice que el dispositivo no se reconoce, tanto la implementación como en simulación en proteus, por lo cual sospecho que debe ser por los controladores, por ello hago uso de los controladores que me ofrece microchip, pero al instalarlo no me deja, debido a mi sistema operativo que es windows 10 de 64 bits, cosa que tiene que ser necesariamente en este sistema operativo.
ya intenté cambiar la instalación de controladores no firmados y aún así no me deja instalar.
si alguien encontró una solución del problema o similar, para que me pueda ayudar, por favor.
c:
///////////////////////////////////////////////////////////////////////////////

/// programa v2.0 ///

///////////////////////////////////////////////////////////////////////////////

#include <18f4550.h>
///////////////////////////////////////////////////////////////////////////////
/// configuracion del pic ///
///////////////////////////////////////////////////////////////////////////////
#device adc=10 // 10 bits de conversion
#fuses hspll // oscilador de cristal: >4mhz (20mhz)
#fuses nowdt // watch dog timer deshabilitado
#fuses noprotect // proteccion contra la lectura de la memoria

                                        // flash deshabilitada
#fuses nolvp // programacion en baja tension deshabilitado
#fuses nodebug // modo debug para icd deshabilitado
#fuses usbdiv // clock del modulo usb: pll/2 (48mhz)
#fuses pll5 // divisor de pll: 1 (4mhz)
#fuses cpudiv1 // clock del procesador: pll/2 (48mhz)
#fuses vregen // regulador interno de 3.3v habilitado
#fuses nopbaden // configura el puerto b como e/s digitales
#fuses mclr // pin master clear habilitado

#use delay (clock=48mhz) // frecuencia del oscilador: 48mhz
#include <usb_cdc.h> // libreria de funciones para usb-cdc

int16 canal1,canal2,canal3,canal4; // variable de lectura del adc
float v1,v2,v3,v4,muestra=5; // variable de tension de y de
                                       // cantidad de lecturas por canal
int i; // variable contador
char dato; // variable de dato recibido

///////////////////////////////////////////////////////////////////////////////

/// firmware ///

///////////////////////////////////////////////////////////////////////////////
void main() { // menu principal
   // configuracion conversor ad
   setup_adc_ports(an0_to_an3); // canal an0 analogico
   setup_adc(adc_clock_div_64); // fuente de reloj para la conversion
   // inicializacion puerto usb-cdc
   usb_cdc_init(); // inicializa puerto virtual com
   usb_init(); // inicializa el hardware usb
   usb_wait_for_enumeration(); // espera hasta que sea enumerado
   while(!usb_cdc_connected()){
   }
   do{ // blucle infinito
      usb_task(); //
      if (usb_enumerated()){ // ¿el dispositivo esta enumerado?
         if (usb_cdc_kbhit()){
            dato=usb_cdc_getc();
            if (dato=='a'){
               v1=0;
               v2=0;
               v3=0;
               v4=0;
               // lectura de v1
               for (i=1; i<=muestra; i++){
                  set_adc_channel(0); // habilita canal 0
                  delay_us(20); // retardo de tiempo de 20us
                  canal1=read_adc(); // canal 1 igual a lectura en an0
                  v1=v1+5.0*canal1/1023.0; // calculo para v1
               }
               v1=v1/muestra; // promedio de v1
               // lectura de v2
               for (i=1; i<=muestra; i++){
                  set_adc_channel(1); // habilita canal 1
                  delay_us(20); // retardo de tiempo de 20us
                  canal2=read_adc(); // canal 1 igual a lectura en an1
                  v2=v2+5.0*canal2/1023.0; // calculo para v2
               }
               v2=v2/muestra; // promedio de v2
               // lectura de v3
               for (i=1; i<=muestra; i++){
                  set_adc_channel(2); // habilita canal 2
                  delay_us(20); // retardo de tiempo de 20us
                  canal3=read_adc(); // canal 1 igual a lectura en an2
                  v3=v3+5.0*canal3/1023.0; // calculo para v3
               }
               v3=v3/muestra; // promedio de v3
               // lectura de v4
               for (i=1; i<=muestra; i++){
                  set_adc_channel(3); // habilita canal 3
                  delay_us(20); // retardo de tiempo de 20us
                  canal4=read_adc(); // canal 1 igual a lectura en an3
                  v4=v4+5.0*canal4/1023.0; // calculo para v4
               }
               v4=v4/muestra; // promedio de v4
               // transmision de datos
               printf(usb_cdc_putc,"%2.2f%2.2f%2.2f%2.2f",v1,v2,v3,v4);
            }
            else if (dato=='b'){
               printf(usb_cdc_putc,"b");
            }
         }
      }
   }while(true);

}
IMG-20220505-WA0012.jpg IMG-20220505-WA0011.jpg

¿Conoces una solución?

¡Aprende a reparar con estos cursos YoReparo!

4.25
(8)

Reparación de Placa Main TV LED con el Ing. Picerno

Ing. Alberto H. Picerno
$ 40 USD
$ 20 USD
4.73
(22)

Curso Reparación de Fuentes Conmutadas de PC y Equipos Electrónicos

Maximiliano Resch
$ 40 USD
$ 20 USD
4.6
(10)

Curso Localización de Fallas en Refrigeración en Heladeras/Neveras On/Off

Yamil Alarcón
$ 29 USD
$ 12 USD
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos?
Regístrate gratis