TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: eddie1196 en 19 de Enero de 2011, 18:22:05
-
Que tal a todos tengo un proyecto con un pic18f4550 con comunicacion mediante usb como clase CDC, hasta la fecha todo me ha funcionado bien recibir informacion desde Visual C#, asi como envio de datos y que me los reconosca el pc el problema es que trato de configurar el PWM del pic pero no tengo idea de como hacerlo si alguien pudiera ayudarme y de igual manera yo le ayudaria en lo que pueda, Gracias. Utilizo Pic c
-
a que frecuencia queres el pwm y que ciclo de trabajoo... expecifica esoo...
va si quieres... si tienes el pic-c ccs ahi directamente cuando creas un proyecto puedes configurar el pwm y luego t lo escupe en el programa, asi aprendi yo :mrgreen: y anda bn por supuesto :-/
espero poder servirte de ayuda, sino sigue consultando
-
Utiliza el buscador, hay muchos ejemplos y post donde se explica dicho módulo.
Saludos!
-
:-/ q tal al fin termine mi interfaz si alguien necesita ayuda con una tarea similar con gusto podre ayudar la interfaz fue con visual c#, el pic 18f4550 y CCS , como dispositivo cdc sin interrupciones funciono muy bien. MI proximo proyecto sera crear un interfaz para un cnc.
-
:-/ q tal al fin termine mi interfaz si alguien necesita ayuda con una tarea similar con gusto podre ayudar la interfaz fue con visual c#, el pic 18f4550 y CCS
Hola, edddie, yo me apunto. quiero hacer una interfaz en C# para usb, se usar C# pero para usb no tengo idea :oops:. tambien programo en ccs
-
:-/ q tal al fin termine mi interfaz si alguien necesita ayuda con una tarea similar con gusto podre ayudar la interfaz fue con visual c#, el pic 18f4550 y CCS
Hola, edddie, yo me apunto. quiero hacer una interfaz en C# para usb, se usar C# pero para usb no tengo idea :oops:. tambien programo en ccs
Esto seguramente les va a ser muy útil:
http://www.ucontrol.com.ar/forosmf/proyectos-con-pic/manual-de-aplicaciones-usb-hid/msg47040/#msg47040
Saludos!
-
muchas gracias por la info Suky
-
:-/ q tal al fin termine mi interfaz si alguien necesita ayuda con una tarea similar con gusto podre ayudar la interfaz fue con visual c#, el pic 18f4550 y CCS
Hola, edddie, yo me apunto. quiero hacer una interfaz en C# para usb, se usar C# pero para usb no tengo idea :oops:. tambien programo en ccs
Claro companero mira cuando comiences me dices en que punto estas atorado, yo te ayudo con cualquier problema no podre postear mi proyecto por q pretenece a la empresa donde trabajo, te dire q es muy sencillo como dispositivo cdc, funciona como un puerto com en la pc, cualquier duda estoy para ayudar
-
gracias eddie, una pregunta, como cdc se esta emulando un puerto serie no?, cual es la velocidad maxima que se puede usar?
o con que configuracion tendria la transferencia mas rapida?
-
En cuanto al pic no tuve que configurar nada, no encontre documentacion al respecto parece ser que el archivo de cadecera usb_desc_cdc.h es el que describe al pic con el pc, el software en c# tengo configurado el puerto a 9600br, 8 databits,sin bit de paridad, te dejo el codigo para conseguir q sea reconocido el pic por el pc
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN (configuracion de los fusibles para el pic)
#use delay(clock=48000000) (clock para sincronizar el pic con el pc)
#include "usb_cdc.h" (archivo de cabecera para instrucciones si abres este archivo estan todos los comandos que se pueden usar para la comunicaion recepcion y transmision de bytes, cadenas, enteros)
#include "usb_desc_cdc.h"
void main()
{
usb_cdc_init();
usb_init();
delay_us(10);
while(!usb_cdc_connected())
{
output_bit( PIN_B6, 1);
output_bit( PIN_B7, 0);
}
output_bit( PIN_B6, 0);
output_bit( PIN_B7, 1);
do{
usb_task();
if (usb_enumerated())
{
// todo tu programa
}while (TRUE);
}
este sencillo programa encendera el b7 cuando ya este bien comunicado con la pc.
En estos dias me pondre a hacer una simulacion en proteus y la posteo para q veas el funcionamiento
En cuanto pueda te ayudo un poco con lo del pc.
-
muchas gracias, con esto y conectandolo a la PC ya me reconoce la compu el pic?
-
gracias eddie, una pregunta, como cdc se esta emulando un puerto serie no?, cual es la velocidad maxima que se puede usar?
o con que configuracion tendria la transferencia mas rapida?
En Win creo que 115200 es lo máximo que permite :tongue: La configuración la realizar en la ventana de configuración del driver.
Saludos!
-
gracias por la respuesta suky.
ahora estoy trabajando con comunicacion rs232, y la tengo a 115200, entonces si me cambio a usb no cambiaria nada? :(
o lo que mencionas es solo para la configuracion cdc? con que configuracion me comunicaria mas rapido?
-
Mig evaluó eso y por lo que recuerdo lo más rápido es HID, pero hay que trabajar la librería de CCS:
http://www.migsantiago.com/index.php?option=com_content&view=article&id=15:prueba-tu-hid-con-sl-hid-tester&catid=2:articulo&Itemid=27
Saludos!
-
gracias suky, lo leo y lo mas seguro es que regrese con dudas :mrgreen:.
Saludos
-
Hola Rivale, lograste que funcione la comunicación USB CDC?
Estoy trabajando con un PIC18F4550, intentando hacer una comunicación USB CDC con una PC con windows 7 y el programa del PIC lo estoy haciendo con CCS. Cuales serían los pasos que tengo que hacer para establecer está comunicación?
Saludos!
-
Hola marito, no he probado la comunicacion por cdc, ya que yo queria aumentar la velocidad de comunicacion. usa las librerias propias del ccs para usb
-
hola marito, busca un hilo que se llama ”mis primeros pasos con el pic 18f4550”.
-
Jhozate muchas gracias.
Estuve viendo ese hilo, pero no encontré ningún comentario de alguien que haya echo funcionar la comunicación con windows 7.
Hice lo que mencionan en ese hilo pero no logré enviar datos del PIC a la PC.
Me aparece el PIC conectado a un puerto com virtual en la PC, pero no recibo datos ni tampoco ejecuta el programa el PIC. Puse un led a parpadear dentro del bucle de comunicación, pero no se enciende.
-
Hola marito, retome este hilo y te comento que ya hice funcionar el usb en modo cdc en windows 7 de 64 bits, si quieres pega tu programa y te ayudo
-
Hola.
Sería interesante ver el .inf para el Win7 de 64 bits. Yo aún no he podido probar en una máquina de 64 bits, porque no la tengo :(
Saludos
-
pues utilice el que proporciona microchip, creo que es el mismo
-
Rivale probé con el .inf del generador de PalitroqueZ y con el de Microchip. Use el VID 04D8 y PID 0011. Con ambos conecto el PIC al puerto USB y la PC detecta el PIC conectado de un puerto COM. Adjunto el .INF y .CAT que estoy usando en este momento, el de Microchip. En el PID modifiqué el que venía por defecto de 000A por PID=0011. Estos archivos los puse en la carpeta del proyecto.
Con respecto al programa que estoy ejecutando en el PIC, es el que sigue:
#include <18F4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include <usb_cdc.h>
#define CODE_START 0x1000
#build(reset=CODE_START, interrupt=CODE_START+0x08)
#org 0, CODE_START-1 {}
void main(){
SET_TRIS_D(0x00);
usb_cdc_init();
usb_init_cs();
do {
usb_task();
printf(usb_cdc_putc, " 1 ");
output_high(PIN_D2);
delay_ms(5000);
output_low(PIN_D2);
delay_ms(5000);
}while (TRUE);
}
Lo que estoy buscando con este programa es mandar un "1" a la pc par recibirlo en un terminal que estoy usando (probe con el SIOW paro tampoco recibí el valor) pero no consigo recibir ningún valor. Además la idea es mantener un LED parpadeando cada 500mseg, pero tampoco parpadea el LED. Estoy usando un 18F4550 con un cristal de 20MHZ.
Si saco la parte del codigo de comunicación, el LED parpadea correctamente, por lo que el circuito estaría bien. Además estoy usando un bootloader por USB HID, por eso incluyo tres lineas de codigo para proteger el mismo.
Espero que puedas ayudarme!!!
-
Hola, si ya pudiste detectar el micro y la compu te lo reconoce como dispositivo creo que no hay problema con el .inf, sin embargo en tu codigo veo que incluyes:
#include <usb_cdc.h>
si tu archivo esta en la misma carpeta de tu proyecto debes ponerlo enrte "":
#include "usb_cdc.h"
prueba con esto y me dices que tal te fue
-
Hice la prueba colocando las comillas pero cuando compilo me da genera errores de compilación.
Tengo el archivo usb_cdc.hy el usb_desc_cdc.h dentro de la carpeta del proyecto.
-
que errores te genera?.
-
El error me lo genera porque dentro del archivo usb_cdc.h que tengo dentro de la carpeta de mi proyecto, modifique la línea
#include <usb_desc_cdc.h>
por
#include ".\usb_desc_cdc.h"
Para solucionar el error de la compilación normalice el #include <usb_desc_cdc.h> que tengo dentro del usb_cdc.h
El usb_cdc de mi proyecto lo puse entre "". Había leído que tenía que modificar esa línea dentro del usb_cdc.h para llamar al archivo usb_desc_cdc que genere con los valores de PID y VID que quiero usar.
No debo modificar nada dentro del usb_cdc.h?
Gracias!
-
para incluir el archivo dentro del asb_cdc.h lo pones asi:
#include "usb_desc_cdc.h"
si el archivo esta dentro de tu misma carpeta y se llama asi, ahora lo que te esta pasando es que estas usando el .h del ejemplo del ccs.
prueba con esto, si no, sube tu proyecto y le doy una checada
-
Intente como me comentabas pero me genera error.
Te adjunto el proyecto,
* el .cat y .inf los saque del último framework de microchip
* el usb_desc_cdc.h lo genere con el Enumerador v3.1 de Palitroquez
* el usb_cdc.h lo saque de los drivers de PICC
* tengo instalada la versión 4.104 de PICC
* tengo el MPLAB v 8.80
-
el problema es tu usb_cdc.h, le faltan algunas definiciones, sustituye el que tienes por el que adjunto
http://www.4shared.com/file/a05RJ6Yy/usb_cdc.html (http://www.4shared.com/file/a05RJ6Yy/usb_cdc.html)
-
rivale, con el archivo que me pasaste pude compilar sin error, usando el usb_cdc.h y usb_desc_cdc.h de mi proyecto.
El problema sigue siendo que no logro comunicar el valor a la pc, ni tampoco se enciende el LED.
Será un problema de código?
-
tu problema es al enviar datos del micro a la pc, o alrevez?
-
el problema es al enviar, estoy usando el código que te pase en el proyecto, envío un 1 a la pc
-
prueba con este ejemplo, simplemente hace un echo de lo que envies por usb
http://www.4shared.com/rar/ulwZGzei/USB_-_RS232.html
(http://www.4shared.com/rar/ulwZGzei/USB_-_RS232.html)
-
Hola Rivale!
Muchas gracias por el ejemplo. Está tarde voy a conectarme a la placa para probarlo. Estaba viendo que el código para establecer la comunicación es el mismo que estoy usando, la diferencia está en que configuras el RS232, y despúes en las líneas;
usb_cdc_putc(datos_usb);
usb_cdc_putc("--");
Que diferencia hay entre usar esa sentencia sin el printf?
También te quería consultar que versión de compilador estás usando? Porque yo tengo la versión 4.104
Saludos!
-
Hola marito, en la parte de codigo que te envie no uso rs232, la linea de printf se usa para cuando quieres imprimir una variable, por ejemplo
printf(usb_cdc_putc,"envio el dato %i",nombre_variable);en el caso anterior se sustituye el %i por lo que tenga la variable "nombre_variable" que debe ser del tipo entero.
esto no se puede hacer usando solo usb_cdc_putc.
solo te explico para que se usa el printf, aunque en el ejemplo que te puse creo que no imprimo el dato asi que lo puedes substituir por un usb_cdc_putc.
mi version de ccs es la 4.124, no tuve problemas con el envio desde el micro a la pc, pero si tuve problemas alrevez, por lo que cambie las librerias del usb por unas que tenia de una version anterior y funciona a la perfeccion
-
Rivale lo que quise decir es que configuras la comunicación RS232, en esta línea
#use rs232(baud=115200,xmit=pin_c6,rcv=pin_c7)//configuracion del puerto rs232 envia por pin_c6 y recibe por pin_c7
Con respecto al envío de datos, hasta ahora he intentado usando el printf con el usb_cdc_putc.
Voy a probar con el ejemplo que me enviaste. Si no funciona, voy a instalar la última versión del compilador.
-
haa, esque el programa originalmente era un convertidor de usb-rs232, pero para probar solo la comunicacion no necesitas configurar el usart.
haz la prueba y comentas tus resultados
-
Rivale, estuve probando con el proyecto que me pasaste pero lamentablemente no conseguí recibir datos en la PC. Logré ver el PIC en el puerto COM pero no recibi datos.
Tampoco tengo una versión superior a la 4.104 del compilador, por lo que no puedo realizar esa prueba.
Lo que te iba a pedir, es si podrías pasarme el proyecto que te funciona compilado, también el archivo .inf y el .cat que estás usando. Estoy pensando en hacer el proceso inverso, teniendo un proyecto que funciona, comenzar a cambiar por los archivos que yo tengo hasta encontrar cual es el que produce la falla.
Muchas gracias! Saludos
-
Te agrego mio proyecto compilado y archivos
http://www.4shared.com/rar/ulwZGzei/USB_-_RS232.html (http://www.4shared.com/rar/ulwZGzei/USB_-_RS232.html)
-
Rivale quería pedirte si puede ser que me pases los archivos .inf y .cat, muchas gracias
-
te adjunto el .inf, solo con este lo hice funcionar, no use .cat
http://www.4shared.com/file/zCZEkjQc/mchpcdc.html
(http://www.4shared.com/file/zCZEkjQc/mchpcdc.html)
-
Hola Rivale!
Ya estoy haciendo las pruebas con el proyecto compilado que me pasaste. Cree una nueva carpeta con tu proyecto, en la que puse también en archivo mchpcdc.inf. Resulta que cuando cargo el proyecto en el PIC y conecto el mismo a el PC, no veo el PIC conectado a el PC.
Si cargo mi proyecto nuevamente en el PIC, luego de conectar el PIC, aparece el puerto virtualserie COM.
Para hacer una prueba, desinstale el controlador del puerto com; pero no me detecta el PIC con tu proyecto. Si instalo de nuevo el controlador con el PIC conectado con mi proyecto,aparece de nuevo el puerto com.
Es como si el puerto estuviese ligado al PIC con mi proyecto cargado.
-
pero si estas detectando el puerto com?, puedes hacer envio de informacion?
-
Lo que me está pasando que te comentaba, es que windows no me detecta el PIC con nuevos proyectos con USB CDC. Sólo me detecta el PIC si cargo el programa con el primer proyecto que empecé a probar
-
prueba haciendo una instalacion del controlador desde cero, descarga desde aqui (http://www.nirsoft.net/utils/usb_devices_view.html) el USBdeview, al final de la pagina esta el link de descarga, ejecutas y buscas el controlador que corresponde al pic, click derecho y lo desinstalas.
-
Gracias por la info jhozate.
Me sucedió algo muy raro. En el pic estoy trabajando con un bootloader a través de USB HID y luego mi programa comunica datos al pc con USB CDC.
Desinstale como me dijiste. Ahora no consigo que funcione el bootloader, pero comenzo a funcionar el USB CDC!
Será que no puedo usar ambos programas en un mismo PIC?! Hay algún bootloader USB CDC?
-
Hasta el momento logré enviar datos al PC con USB CDC, cargando el programa desde mi programador ICD2.
Ahora si utilizo el bootloader HID, mi programa para enviar datos cpor USB CDC deja de funcionar. Para proteger el bootloader, agrego las siguientes líneas en el programa de envío de datos:
#define CODE_START 0x1000
#build(reset=CODE_START, interrupt=CODE_START+0x08)
#org 0, CODE_START-1 {}
En resumen, el bootloader HID funciona, pero si cargo el programa de comunicación CDC con este bootloader, la comunicación CDC no funciona.
Alguien ha tenido este problema?
P.D. estoy usando una pc con windows 7 64 bits.
P.D2. para el bootloader uso el codigo de HID Bootloader - Firmware for PIC18 Non-J Devices y cargo con el programa HIDBootLoader v2.6b
-
yo nunca he usado un bootloader con usb, pero creo que no puedes combinar los 2 protocolos de usb en un mismo micro, tendrias que programar el micro con un programador para que funcione
-
Rivale, gracias nuevamente por tu ayuda.
Hasta ahora he usado el programador, pero necesito montar el PIC en la placa con la que voy a adquirir las señales que voy a mandar al PC, por lo cual necesito usar un bootloader.
-
no entiendo porque necesitas el bootloader, si vas a dejar fijo el programa y solo necesitas adquirri datos por usb puedes programar con el programador y comunicarte por cdc.
y en alguna de las combinaciones ya haz logrado comunicarte via cdc?, con cual te funciono?
-
Hola!
Lo que sucede es que necesito ir haciendo ajustes al programa, por eso el tema del bootloader.
Ya logré que funcionará la comunicación CDC. Use el proyecto que me pasaste, instale el controlador con el .inf sin usar el .cat. La comunicación funcionó cuando grabe solamente el programa de comunicación sin el bootloader.
Ahora tengo que revisar en que parte del programa estoy cometiendo un error que no deja que funcionen ambos programas.
Muchas gracias!
Saludos!
-
En esa parte no tengo idea, desconozco si puedan trabajar los hid y cdc en el mismo micro.
Habra que preguntarle a alguno de los expertos en usb del foro ;-)
-
Hola!
Rivale estuve depurando el código que me pasaste para comunicar con CDC, finalmente tengo este:
#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include "usb_cdc.h"
char datos_usb=0;
void main()
{
usb_cdc_init();
usb_init();
while(true)
{
usb_task();//habilita periférico usb e interrupciones
if(usb_enumerated())
{
if(usb_cdc_kbhit())
{
datos_usb=usb_cdc_getc();
printf(usb_cdc_putc,"Recibi el dato: %c",datos_usb);//imprimo datos por el usb;
}
}
}
}
El problema que tengo es que el PIC no recibe los caracteres que envío de la PC, por cada caracter que envío, en la PC recibo: Recibi el dato: 0
El símbolo no es un cero, son como dos corchetes muy próximos y enfrentados.
Continúo usando la versión 4.104 del compilador.
Alguna sugerencia?
Saludos!
-
tu problema solo es al recibir datos desde la pc?, si puedes enviar datos desde el pic?
-
Lo que hago es enviar un dato al PIC, y recibo la respuesta en la PC del dato enviado, pero el dato que veo en la PC es erróneo
-
creo que el problema es al recibir desde la PC, pero esto es error del ccs, yo substitui los archivos por los que tenia de una version 4.08 de ccs y con eso se soluciono
-
que archivos debería sustituir? toda la carpeta drives?
-
si, si tienes los drives de una version anterior de ccs sustituyelos todos, para evitar problemas con algunos otros drivers.
los drives que son nuevos de esta version no se borrarian ya que no existian en versiones anteriores,
-
No tengo la versión 4.08, tengo la 4.093 y la 4.023.
Me funciona con la 4.023 envia y recibi los datos correctos. Con la 4.093 no recibo los valores correctos. Voy a tratar de conseguir la versión 4.08 para tener la versión más nueva y probar que me funciona
Saludos!
-
sustituye tus drivers por los de la 4.023, o al menos los de usb, pic18_usb, usb.c, usb.h, y creo que hay otro pero no recuerdo cual es
-
Si, sustitui la carpeta drives por la de la versión 4.023. Sobreescribió 157 archivos. Ya funciona la comunicación, envío y recibo entre el18f4550 y la PC con windows7 64 bits
-
:-/ :-/ :-/ :-/
que bien que funcionó!
-
Rivale muchas gracias por tu ayuda!
Ahora a seguir trabajando con el bootloader!!!
Saludos
-
Finalmente logré instalar un bootloader, y también usar comunicación CDC en el mismo PIC.
No me funcionó con el bootloader HID. Use el bootloader CDC de CCS.
De modo que tengo un bootloader CDC y comunicación CDC.
Saludos!
-
Que bien que funcionó finalmente, por lo visto no se pueden tener los 2 protocolos al mismo tiempo en el mismo micro