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

No HID todavía estoy tratando de entender el protocolo y como comunicarme con visual basic.

PD: Estoy viendo el tema de las librerías de fat32 con pic en CCs pero ocupan mucha memoria.
 
Disculpen mi ignorancia pero soy ultra nuevo en esto, pero como conecto el pic al usb? :S para poder programarlo? onda cargar firm y extras?

Espero no molestar...

Gracias.
 
hacktek dijo:
Disculpen mi ignorancia pero soy ultra nuevo en esto, pero como conecto el pic al usb? :S para poder programarlo? onda cargar firm y extras?

Espero no molestar...

Gracias.

Buenas:

Lee paso a paso desde el primer post que te lo dice.

Mira los manuales en PDF aquí. hay un manual sobre RS232 puerto serie que funciona.

Ver manuales

Saludo.
 
Hola a todos , bueno acá les traigo el último post del día.

Lo que les pongo a continuación es la teoría del conversor ADC del PIC18F250, esta primera parte de la explicación trae lo básico a saber sobre la conversión analógica / digital aplicada en el PIC.

Si tienen dudas o sugerencias , haganmelo saber.

PD: Luego voy a postear los ejemplos de control
 

Adjuntos

  • teora_de_funcionamiento_del_mdulo_de_conversin_ad_del_pic18f2550_118.pdf
    223.8 KB · Visitas: 1,586
hey que onda mucchachos soy nuevo en el foro me gustaria aportar acerca del tema , les comento que yo he sacado la comunicacion por usb usando tambien la .dll de microchip pero con otro software diferente a los nombrados aqui, utilice ......... labview ....... y pues hablando del conversor analogo con la serie 18f no he mirado , pero no creo que tenga mucha diferencia con los dela serie 16f.
un saludo amigos .
 
si jonathan, yo he realizado un curso de pic este año y te comento que he usado el ccp (creo que se llamaba), que es para hacer pwm por hard , lcd 2x20, adc en 8 y 10 bits, eeprom externa, rtc, rs232, entre otras cosas... pero es muy facil y tenes todo en las librerias... no tenes que hacer mas nada que conectar el micro y llamar a las funciones...
yo ni bien pueda me voy a poner con el lcd, rtc,eeprom externa y rs232 en un solo proyecto (todo funcionando juntito :D).
pero antes queria terminar lo de la memoria, vos como andas con ese tema de la memoria?
aunque ahora no tengo a mano el micro para probar lo de la memoria (porque en proteus no anda y en el micro me dijeron que si... :( asique cortamos clavo hasta tener el micro.... ).
y como no tengo el micro ahora voy a ver si me empiezo este proyectito... ya vere que hago...
cualquier cosa que tengas dudas pregunta sobre las funciones que se usan para manejar los perifericos que comente... (fui el unico que aprobo con 10 el curso... asique algo aprendi ) :LOL: :LOL:
 
como buen aporte al tema pienso que es bueno comentarles que proteus en su ultima version lanzo la posibilidad de emular el puerto usb ( es cierto quiere decir que podremos probar los ejemplos sin necesidad de tener lod dispositivos reales y funciona igual yo ya hice la prueba si les interesa habisenme y le envio para que lo descarguen , saludos les envio una imagen
 

Adjuntos

  • usb_819.jpg
    usb_819.jpg
    195.7 KB · Visitas: 714
jokelnice dijo:
como buen aporte al tema pienso que es bueno comentarles que proteus en su ultima version lanzo la posibilidad de emular el puerto usb ( es cierto quiere decir que podremos probar los ejemplos sin necesidad de tener lod dispositivos reales y funciona igual yo ya hice la prueba si les interesa habisenme y le envio para que lo descarguen , saludos les envio una imagen
Cuando puedas sube el esquema y el HEX para su simulacion
 
Ahora ya estoy de vacaciones asi que comenzare a ver todos los ejemplos que aparecen en este tema y si puedo tratare de aportar algo de mi propia cosecha.
 
Jokelnice: Si tenés ejemplos de labview con usb , postealos la verdad hay mucha gente preguntando lo mismo en el foro y les va a ser de mucha ayuda. Lo que planteas de usar el puerto usb virtual de proteus, sirve aunque a mi hay muchos ejemplos de usb que funcionan en la realidad y no en proteus. Además proteus consume demasiados recursos cuando simulo usb (no se porque).

Nutriax: Todos los ejemplos de control con el módulo ccp y demás ejemplos estaría bueno que los postearas a ver si luego en conjunto con lo de usb se puede sacar algún proyecto adelante.

Picman: No te he podido pasar la información que me pediste por mp por falta de tiempo. Igual cualquier cosa que necesites que te ayude con el tema de usb , no dudes en preguntar.

A todos los demás les digo que experimenten y cuenten sus experiencias que nos sirven a todos , yo estoy haciendo un ejemplo en este momento muy sencillo de como se usa el modulo adc del pic18f2550 que luego voy a postear.
 
bueno listo voy a postear un ejemplo en ........... Labview ............,que creo que es el mas facil de los programas y es el que nos ayudara a entender y comprender mejor lo que vendria despues ; el ejemplo consiste en que el programa avise cuando se conecta un dispositivo usb ( prendiendo un led ) y cuando se desconecta se ( apaga ) solo estoy utilizando la funcion de la dll llamada MPUSBGETDEVICECOUNT(PVID_PID) que pide un vid y un pid que retorna '1' cuando el disposotivo co ese vid y pid es conectado , traten de entenderlo cual cosa habisenme y ayudamos cabe destacar que no se esta haciendo ninguna lectura ni escritura del puerto pero debe haber un disposotivo con esas caracteristicas ;
saludos y ojala les sirva
 

Adjuntos

  • detectar_usb_201.rar
    295.7 KB · Visitas: 1,267
Hola a todos.

Bueno despúes de ver la información sobre como trabaja el módulo conversor AD del PIC18F2550, les pongo un ejemplo muy básico que nos muestra el valor de los registros ADRESH y ADRESL. Lo que hace es volcar los valores de dichos registros en el puerto B y el puerto C.

El código fuente del ejemplo:
Código:
// Prueba de funcionamiento del conversor A/D del PIC18F2550.
// Programador: Moyano Jonathan.
// Fecha: 24/12/08.

#include <18F2550.h> // Definición de registros internos.
//#DEVICE ADC=8 // cad a 8 bits, justificación a a la derecha.
#DEVICE ADC=10 // cad a 10 bits, justificación a a la derecha.
//#DEVICE ADC=16 // cad a 10 bits, justificación a a la izquierda.

#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN,NOPBADEN

// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
NOMCLR: Utilizamos reset por software.
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á.
NOVREGEN: deshabilita el regulador de 3.3 volts que usa el módulo USB.
NOPBADEN: Deshabilitamos el módulo de conversión ADC del puerto B.
*/

#use delay(clock=48000000) // Frecuencia máxima de trabajo 48 Mhz.

void main() {
long valor;    // Guardamos el valor de conversión del AD.
int   parte_alta; // Parte alta de la conversión. (ADRESH).

   output_a (0);    // Resetea los puertos.
   output_b (0);   
   output_c (0);
   set_tris_a(0x1);   // configura los puertos como salidas, menos el RA0 que lo configura como entrada.
   set_tris_b(0x0);   
   set_tris_c(0x0);
//-----------------------------------
   disable_interrupts(global);
   disable_interrupts(int_timer1);
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   disable_interrupts(int_ext1);
   disable_interrupts(int_ext2);
   setup_spi(FALSE);

   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);    
   
   setup_adc_ports( AN0 || VSS_VDD ); // Configuramos RA0, como entrada analógica.
   setup_adc(ADC_CLOCK_DIV_64 ); // Configuramos el relog del ADC.
   #asm 
   movlw 0b10111110   ;justificacion_derecha,20Tad,Fosc/64
   iorwf 0xFC0,1      ; direccion de ADCON2   // Configuramos el ADCON2.
   #endasm
   set_adc_channel(0); // Elejimos el canal AN0, correspondiente a RA0.
   while(1){ // bucle infinito
      valor = read_adc();   // toma el resultado del CAD.
      output_b((int)valor);   // envía el byte LSB a portb.
      parte_alta=(int)((valor & 0x300)>>8); // separa los 2 bits MSB de valor.
      output_c(parte_alta);   // y los envia al portc.
   }
}

En el esquemático van a ver que puse un capacitor de 100nF en la entrada, esto lo recomienda microchip en la hoja de datos del integrado, cuando la señal analógica varía a muy baja frecuencia, ejemplo: Cuando aplicamos señal de un potenciómetro.

Bueno lo que queda ahora es ver un ejemplo de aplicación utilizando este módulo y USB.
 

Adjuntos

  • ejercicio_n6_296.rar
    234 KB · Visitas: 1,155
Hola muchachos y picmaniacos llevo varios meses experimentando con el puerto usb y los pic 18f 2550 y 18f4550 he logrago manejarlos en dos de sus formas (cdc y bulk) de transferencia estoy en busca de realizar una aplicacion con hid en c/c++ o java.
cualquier avance sera reportado a ustede y si tienen alguna información se la agradesco.
si les puedo ayudar en algo con mucho gusto, ya desarrolle transferencia de paquetes (bulk) en c/c++ standart y compilado en dev-c++
 
Todo lo que postees sobre el tema será recibido con los brazos abiertos ya que este apartado es para aprender todo lo que se pueda sobre el puerto usb del pic18f2550 y familia...

PD: HID no lo he podido probar aunque esta en mis proyectos futuros hacerlo.
 
Saludos

Antes que nada muchas gracias por compartir tus ejemplos "Moyano"

Estoy dando mis primeros pasos con el 18f2550 y mi custion es la siguiente:

Probe el ejemplo 1 de este foro y no funciona en mi circuito, lo curioso es que en el simulador de proteus trabaja perfectamente por lo que deduje que el problema estaba en el circuito, pero ya revise todas las conexiones y estan bien, pero tengo algunas dudas:

1.-tiene un cristal de 20Mhz pero en el codigo se le indica que la velocidad es de 48, es esto correcto?
2.-la alimentacion del pic la estoy tomando de la misma conexion USB, es correcto?

por lo demas no creo que haya problema, la verdad no es nada complejo, solo las conexiones a vdd y vss, D- y D+, y el reset, no se si me falte algo
 
Atrás
Arriba