Autor Tema: Encender un LED con el PIC18F4550 vía USB  (Leído 118892 veces)

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

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #30 en: 16 de Abril de 2008, 03:44:11 »
Hola Akone, lo más probable es que tengas problemas con el driver, una posible solución sería esta

Prueba y nos cuentas por aquí porfa.

PD: Akone tiene un problema y es que el windows no le reconoce el dispositivo y me lo hizo saber por MP, pero por aquí es mejor porque muchos otros le pueden aportar soluciones y más rápido  :wink:

Saludos.

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #31 en: 16 de Abril de 2008, 19:44:00 »
gu1llermo ya había leido esa posibilidad, repasé bastante los foros buscando si a alguien le pasaba tambien, gracias de todas formas.

Empiezo a desesperarme, ya no se que puede ser, os comento, cuando inserto el cable  windows directamente no me dice nada de que detecta un dispositivo, el problema no es que no reconozca que dispositivo es, si no que no "sabe" que hay ninguno, así que descarto que sea un problema de drivers, repito windows no hace ni el amago de haber detectado nada.

Para que os hagais una idea la placa que e desarrollado es similar a la  RRBOARD2 del compañero de foro RedPic, salvo que yo uso fuente de alimentación externa (tambien con puente diodos sus condensadores y lm7805, nada del otro mundo) y le tengo añadido el conector usb directo en la placa, con unos jumpres escojo si uso alimentacion del usb o de la fuente, también puedo usar o no los dos pines del usb.

Entre Vdd y Vss tengo 4,48V ya que el diodo de protección para placa y fuente se come los 0,52, pero mirando el datasheet veo que esto no supone demasiado problema. Uso un cristal de 20Mhz.

Utilizo el programador Eclipse, que no me reconoce automaticamente el dispositivo, pero si hago pruebas tipo borrar, leer, programar, leer, borrar.... parece que está bien.

El programa que le meto es exactamente el mismo que hay aqui pero cambiando el device por 4450. Revisando una y otra vez la placa, creo que esta está bien, con lo que pasé a algo más básico, probar los ejemplos de "Mis primeros pasos con el 18F4550", (ejemplo 1) cambio el dispositivo y elimino las lineas de opciones que el 4450 no trae para que pueda compilar, esto tampoco me funciona. los puertos permanecen siempre a 0, hago modificaciones sobre ese programa y tampoco ocurre nada.

Uso el ccs c compiler 4.014, creo nuevo archivo, copio el codigo y le doy a compilar.

No se que más os puedo contar, si se os ocurre cualquier cosa, aunque os parezca una tontería comenarmelo, seguramente sea eso y no me doy cuenta.

De todas formas mañana iré a por un 4550 y con unos pocos de rezos más quizá este si funcione.

Gracias
« Última modificación: 16 de Abril de 2008, 19:49:25 por Akone »

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #32 en: 16 de Abril de 2008, 20:39:30 »
Tranquilo Akone, ya verás cuando todo te funcione y te sentirás mejor, ya pasé por allí y sé que eso.

Mide el voltaje de la pata Vusb (pin 18) tienes que leer 3.3V.

Qué valores de capacitancia estás usando allí?, yo tengo dos: uno de 470nF y otro de 47uf.

Yo utilizo el winpro, no el eclipse, así que hasta allá no puedo llegar, si usarás el winpro quizás te pueda echar una mano, lo más que puedo hacer es invitarte a chequear la configuración que esté en éste programador, será problema de un perro guardián? no sé.

Chequea la continuidad de los cables, especificamente del usb, te adjunto una imagen de como tengo conectado el usb:



Espero que se entienda, el conector usb me lo cree yo, tienes que asegurarte que tengas correctamente conectado D-, D+, yo la primera vez hasta los invertí por error y no me pasó nada, pero no es lo correcto, lo ideal es que estemos seguros que todo está bien conectado  :wink:

Verifica todo y nos cuentas.

Saludos.

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #33 en: 16 de Abril de 2008, 21:32:32 »
Bueno fallos que he detectado, de conexión creo que va bien, lo que no tengo son las  resistencias en las lineas de d+ y d-, creía que eran necesarias para 1.0 y no para la 2.0 que es a la velocidad que tengo entendido trabajamos.

En VUSB tengo .... 0 V  :x :( nada de nada, lleva un condensador de 470nF de plástico. En los esquemas que he visto por ai llebaban esos, tambien tengo dos de 100nF entre Vdd y Vss y los que lleva el cristal son de 15pF cerámicos.

Pasa ademas algo raro, con este programa, los pines del puerto C (menos los del usb) estan a 5v...mientras que en el resto tengo 0,20 más o menos.

El conector usb es uno standar tipo b para montarlo en placa. Lo he revisado bastante y creo que no está mal.

¿Son necesarias esas resistencias?¿Qué es lo que hace que no tenga tension en Vusb? (por cierto que cuando lo alimento via usb tengo 5v clavaos entre vdd y vss)

Ya queda menos!!! pero hasta mañana va a esperar que ya me han dado las 2 y media de la madrugada y esto no puede ser bueno.. a dormir!!!!

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #34 en: 17 de Abril de 2008, 00:20:22 »
Me dá la impresión de que es el programador que usas, pero claro puedo estar equivocado, es solo una suposición, no te es posible utilizar el winpic800? éste trabaja bien con el CCS, porque lo más probable es que el programador que uses te cambie los fuses.

Una configuración te hace tener ese voltaje usb o no, es el VREGEN, pero repito el programador que usas lo más probable es que te cambie ese fuse, entre otros no sé, como dije estoy haciendo hipótesis que traducido a criollo: tirando flechas  :roll:

No he trabajado con USB2 aún, según tengo entendido esto es USB1 a 1.5Mbps, mirando el datasheet del pic está todo bien especificado de todas formas.

Con respecto a las resistencias creo que (estoy hablando de memoria) en el datasheet dicen algo, hay que ver, porque allí está todo.

Yo tengo condensadores de 22pF en el cristal de 20Mhz.

PD: Revisa la configuración del programador ese, porque lo más probable es que te la esté cambiando, algo parecido me pasó con el icpro y por eso me cambié.

Saludos.

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #35 en: 17 de Abril de 2008, 05:26:41 »
No me es posible usar el Winpic 800, ese programador no lo reconoce, el programador tiene un software especifico, es gratuito. Pero según leo da buenos resultados, el problema es que si cojo el 4450 la opcion config se ve como quedan configurados pero no puedo modificar nada (sin embargo si cogiese el 4550 si.) os digo como se ve:

     Configuration:

1: 0E24
2: 1E3E
3: 8200
4: 0081
5: 4003
6: 6003
7: 4003

nose muy bien a que  se refiere eso.

Puse las resistencias pero sigue sin mejora, el VUSB sigo teniendo 0v.

Una cosa que me he dado cuenta... en OSC1 si mido con el polimetro siempre tngo 0,93V, mientras que en OSC2 depende, hay veces que son 1,67 y otras cerca de 3v. ¿esto es normal?

¿como puedo saber como han quedado los fuses una vez ya programado el pic? este programador no tiene implementado esa opcion, hay alguna otra forma? porque en mplab si veo que los bits de configuración son como debe esperar.

Gracias a to@s

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #36 en: 17 de Abril de 2008, 08:45:18 »
Hola Akone, bueno miranado la página del amigo RedPic él especifica que es para los pic 877 y 4550, no sé si es para ellos nada más ó quizás se pueda probar con otro pic, porque viendo el datasheet de ambos (4450 y 4550) el pinout es similar.

El programador que yo propuse en éste mismo hilo es de fácil montaje, son unos pocos elementos, si después de llegarte el pic 4550 no te funciona, bueno podrías montarte éste programador y probar tu circuito en un protoboard normalito ó donde quieras.

Te compilé éste archivo, usando el 4450 y modificando #define LED PIN_E0:

Código: [Seleccionar]
#include <18F4450.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

/////////////////////////////////////////////////////////////////////////////
//
// CCS Library dynamic defines.  For dynamic configuration of the CCS Library
// for your application several defines need to be made.  See the comments
// at usb.h for more information
//
/////////////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    5                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    5                 //size to allocate for the rx endpoint 1 buffer


/////////////////////////////////////////////////////////////////////////////
//
// If you are using a USB connection sense pin, define it here.  If you are
// not using connection sense, comment out this line.  Without connection
// sense you will not know if the device gets disconnected.
//       (connection sense should look like this:
//                             100k
//            VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
//                     |
//                     +----/\/\/\/\/\-----GND
//                             100k
//        (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_CON_SENSE_PIN PIN_B2  //CCS 18F4550 development kit has optional conection sense pin

/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries.  See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////
#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports


#define LED       PIN_E0
#define LED_ON    output_high
#define LED_OFF   output_low

#define comando   recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define param3    recibe[3]
#define param4    recibe[4]
#define eco       envia[0]// Hace un eco del comando recibido
#define result1   envia[1]
#define result2   envia[2]
#define result3   envia[3]
#define result4   envia[4]



void main(void) {

   int8 recibe[5];                  //declaramos variables
   int8 envia[5];

   LED_OFF(LED);                   //Apagamos el LED

   usb_init();                      //inicializamos el USB

   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   while (TRUE)
   {
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 5); //cojemos el paquete de tamaño 5 bytes del EP1 y almacenamos en recibe

            eco = comando;  //Regresa el comando recibido
            result1 = param1*2;
            result2 = param2*2;
            result3 = param3*2;
            result4 = param4*2;
           
            switch (comando)
            {
               case 1:// Enciende LED
               LED_ON(LED);
               break;
               
               case 2:// Apaga LED
               LED_OFF(LED);
               break; 
            }
            usb_put_packet(1, envia, 5, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 5 bytes del EP1 al PC
         }// Fin if (usb_kbhit(1))
      }// Fin if(usb_enumerated())
   }// Fin while (TRUE)
}

Adjuntado el .hex

Pero no creo que te sirva de mucha ayuda si el programodr te cambia la palabra de configuración, como me lo hacía el icprog, es más hasta el mismo winpic800 me cambiaba la palabra de configuración de los .hex que yo generaba con el mplab, por lo que siempre tenía que estar pendiente de eso.

PD: Si te fijas en el circuito esquemático ellos usaron capacitores de 22pF en vez de 15pF como lo dicen (es solo una observación).

Saludos.
« Última modificación: 17 de Abril de 2008, 08:48:11 por gu1llermo »

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #37 en: 17 de Abril de 2008, 09:29:47 »
 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

wewewee!!!!

 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

a que no sabeis que?? funciona!! xD

muchas gracias guillermo por tu paciencia, al final de todo ya he dado con la tecla, el programador que uso no va bien con el 4450, a sido poner el 4550 e ir del tiron!.

Ya habia visto la posibilidad de otro programador, pero mi problema era que dispongo de dos PCs, un portatil y un sobremesa, el más antiguo (el portatil) tiene algo más de año y medio y ya no trae puerto paralelo ni serie.

Bueno gracias por vuestra ayuda, y ahora en menos de 2 semanas tengo que tener listo el proyecto (al menos que medio funcione, ya le iré añadiendo utilidades) tan solo e de adaptar el programa para activar bit a bit cada una de las señales de los puertos, no parece demasiado dificil.

lo que me gustaría es saber si podría hacer lo siguiente. Podamos poner Entrada o Salida (el puerto completo aunque ya si pongo bit a bit sería supremo) y en funcion de la opción leer o escribir lo que quiera....esque con el tema de los fuses ya no se si no me va a dejar, pero bueno voy a ponerme al lio y ya os comentaré mis avances.


Despues probaré el .hex que me has pasado, con el 4450, que putada que no funcione porque me confundí al pedir las muestras y ahora tengo 3 pics que no voy a poder programar, de momento.

gu1llermo eres mi heroe!! jejeje

 :-/ :-/ :-/ :-/ :-/ :-/

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #38 en: 17 de Abril de 2008, 22:34:23 »
Ves como todo cambia  :wink:

Coloca en el buscador "SET_TRIS" y verás muchos ejemplos de como configurar los puertos del pic como entradas o salidas.

Por ejemplo, todo el puerto A como entrada:

SET_TRIS_A(0xFF);// colocando en hexadecimal

SET_TRIS_A(0b11111111);// en binario

SET_TRIS_A(255);// en decimal

Dependendiendo del número que le coloques configuras los pines como entradas '1' ó salidas '0'

Saludos.

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #39 en: 18 de Abril de 2008, 08:38:35 »
si alguna vez andando por la calle te encuentras un monumento a tu persona no te asustes, he sido yo jeje.

Muchas gracias, pronto colocaré la aplicación que estoy haciendo

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #40 en: 18 de Abril de 2008, 08:58:35 »
 :oops: :D :D :D

Saludos. 8)

Desconectado jotapeke

  • PIC10
  • *
  • Mensajes: 1
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #41 en: 17 de Septiembre de 2008, 21:06:53 »
Por favor, necesito ayuda. He bajado este ejemplo completo. Necesito hacer un dispositivo HID, con el pic18f4550. Debería hacer lo mismo que el de este ejemplo pero con la diferencia de no pedir drivers al conectar el dispositivo. Estoy usando el Proteus, y por más ejemplos que pruebo no consigo que me reconozca el cacharro como un HID y funcione sin drivers.
Alguien de aquí ha conseguido hacer funcionar un HID con el Proteus y sin que te pida drivers?.

Nota: el Proteus trae un ejemplo de un dispositivo HID, éste hace que el puntero del ratón gire en circulos. Es el único ejemplo que me funciona, pero sólo viene el .hex. Por otro lado encontré el supuesto código, pero cuando a partir de él creo el .hex, no me funciona y me pide drivers.
Pero aún hay más. Si primero simulo este ejemplo que trae el Proteus, y luego simulo alguno hecho por mí y le pongo el mismo Vid y mismo Pid, me lo detecta como HID y no me pide drivers.... pero en Windows sale con una exclamación y dice q no está bien configurado el dispositivo.

En fin, si alguien me puede ayudar, por favor. Llevo un mes dandole vueltas..... y como digo, a parte del ejemplo del Proteus no he conseguido hacer funcionar ningon ejemplo con USB y HID.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #42 en: 18 de Septiembre de 2008, 14:13:45 »
Hasta donde se, con la versión 6.2 NO soporta esa clase HID

Mira las limitaciones en la ayuda

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado galonsoa

  • PIC10
  • *
  • Mensajes: 2
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #43 en: 10 de Noviembre de 2008, 15:43:47 »
Hola que tal, necesito ayuda, resulta que la aplicacion no me reconoce ningun dispositivo, cuando corro el programa en isis lo identifica como usb de una, sin haber ejecutado el conectorsito usb, entonces no se que error pueda ser, si me pueden ayudar se los agradeceria

Desconectado emula

  • PIC10
  • *
  • Mensajes: 6
Re: Encender un LED con el PIC18F4550 vía USB
« Respuesta #44 en: 27 de Diciembre de 2008, 16:32:31 »
Excelente proyecto gu1llermo.
« Última modificación: 27 de Diciembre de 2008, 17:50:22 por emula »