Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/03/2011 #1521

Avatar de albermillan69

Moyano Jonathan dijo: Ver Mensaje
FIjate en las primeras páginas del hilo creo que aparece...sino en mi manual ...en la última version tambien aparece.
Q tal si colocas la ultima version del manual en el primer post del foro!! asi no estariamos buscando por todo el foro cual es el ultima version y donde esta!!!

Espero q tomes mi sugerencia y gracias!!! pronto dare mis aportes!!
20/03/2011 #1522

Avatar de EINNER C

usb cdc cambio velocidad
albermillan69 dijo: Ver Mensaje
Otra vez yo!!! Jejejejeje como puedo hacer para aumentar la velocidad de transferencia de datos en USB_CDC?? osea superior a 9600 Baudios!!! que o donde debo modificar??? Gracias!!!

mira en el archivo usb_cdc.h donde se encuentra toda la configuracion del puerto...

void usb_cdc_init(void) {
//usb_cdc_line_coding.dwDTERrate=9600;//ORIGINAL
usb_cdc_line_coding.dwDTERrate=57600;
usb_cdc_line_coding.bCharFormat=0;
usb_cdc_line_coding.bParityType=0;
usb_cdc_line_coding.bDataBits=8;
(int8)usb_cdc_carrier=0;
usb_cdc_got_set_line_coding=FALSE;
usb_cdc_break=0;
usb_cdc_put_buffer_nextin=0;
usb_cdc_get_buffer_status.got=0;
usb_cdc_put_buffer_free=TRUE;

alli modificas guardas y compilas y listo,,, tambn cuando se intale tu dispositivo en el pc, debes ir a administrador de dispositivos y ver configuracion del puerto del com generado,,,

alli puedes indicar el com que quieras aasignar y la velocidad que este maneja,,, e

espero te sirva, cualquier duda, con gusto..............

en cuanto a lo del manual, estoy de acuerdo Moyano, ojala publiques la ultima version
20/03/2011 #1523

Avatar de albermillan69

EINNER C dijo: Ver Mensaje
mira en el archivo usb_cdc.h donde se encuentra toda la configuracion del puerto...
Cual seria la asignacion del com??? y gracias ya me habia puesto a ver todas las librerias y me di cuenta q tendria q crear una variable para lo de la velocidad!!

Ah ok ya entendi!!! habia leido mal!! si esa parte de la configuracion del pc lo se! pense q me hablabas q podia asignar de una vez el COM desdes el pic!! jejejeje

Gracias por tu ayuda! la sabre valoras!!! pronto doy mis aportes!!
21/03/2011 #1524

Avatar de Moyano Jonathan

Con el tema del libro del USB ...voy a tardar bastante en terminarlo. En cuanto al manual de aplicaciones con el USB referido a HID va avanzado y proto van a tenerlo listo para la descarga.
22/03/2011 #1525


Hola! aestuve leyendo un poco ya que son bastantes paginas...y me gustaria saber si es posible llegar un poco mas alla de 1Mbit/s ya que necesito leer 1kByte desde un conversor AD (que muestrea a 400kHz) y enviarlo a la pc en menos de 7ms...si alguien me puede ayudar u orientarme les estare agradecido!
22/03/2011 #1526


Hola moyano! Oye como puedo hacer para enviar por usb CDC una cadena y que se guarde en la eprom interna del 2550 o 4550, por tu atencion muchisimas gracias
22/03/2011 #1527

Avatar de albermillan69

eviltools dijo: Ver Mensaje
Hola moyano! Oye como puedo hacer para enviar por usb CDC una cadena y que se guarde en la eprom interna del 2550 o 4550, por tu atencion muchisimas gracias
si mal no recuerdo en la librerias esta una funcion para ello!!! revisa las librerias!!!
22/03/2011 #1528

Avatar de Moyano Jonathan

Hola! aestuve leyendo un poco ya que son bastantes paginas...y me gustaria saber si es posible llegar un poco mas alla de 1Mbit/s ya que necesito leer 1kByte desde un conversor AD (que muestrea a 400kHz) y enviarlo a la pc en menos de 7ms...si alguien me puede ayudar u orientarme les estare agradecido!
Vas a tener que investigar el siguiente link: http://www.todopic.com.ar/foros/index.php?topic=25188.0
24/03/2011 #1529

Avatar de albermillan69

Moyano tengo un problemita haciendo una comunicacion USB_CDC!!!

Tengo tres led que me deberian indicar cuando el PIC:
1.No esta Conectado al PC (ROJO)
2.Cuando esta Conectado al PC (Amarillo)
3.Cuando esta Enumerado (VERDE)

el programa principal en CCS es:
void main() {
set_tris_b(0x0F); // Nibble bajo entradas, el alto salidas
LED_OFF(VERDE);
LED_OFF(AMARILLO);
LED_OFF(ROJO);
usb_cdc_init(); // llamadas necesarias para iniciar el módulo USB.
usb_init_cs(); // inicia el USB y sale. Va de la mano con usb_task().
WHILE(true){
usb_task(); // configura el USB.
while(usb_cdc_connected()){ // Si está conectado entonces....
// Espera a detectar una transmisión de la PC (Set_Line_Coding).
WHILE (usb_enumerated()){ // aquí se enumera el dispositivo por el host y despúes sale.
//WHILE(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer.
//}
TITILA(VERDE);
DELAY_MS(100);
}
TITILA(AMARILLO);
DELAY_MS(100);
}
TITILA(ROJO);
delay_ms(100);
}
}

Estoy usando proteus para simular esto! resuta ser q cuando arranco la simulacion el led rojo titila (me da a entender q esta trabajando correcto), al hacer el sonido de windows (se conecto un USB, en este el virtual de proteus), supongo que ya el led rojo debe dejar de titilar y comenzar a titilar el amarillo (no?) (pues no lo hace). una vez que hago la conexion desde VB comienza a titilar el verde (si se apaga el rojo).

Ahora cuando cierro el puerto el puerto en VB el led verde sigue titilando y los demas siguen apagados.

Preguntas:
Por que el led amarillo no enciende al conectar el dispositivo?
Por que el led rojo no titila ni se apaga el verde al cerrar el puerto en VB?

Ademas: como puedo saber en VB que se a conectado el dispositivo al puerto?

Muchas Gracias. Estare esperando tu respuesta!! OJO ra revise los ejercios anteriores!!

otra pregunta como utilizo el get_string_usb() en el ccs (para recibir cadena de caracteres)??? Gracias...
25/03/2011 #1530

Avatar de Moyano Jonathan

Moyano tengo un problemita haciendo una comunicacion USB_CDC!!!

Tengo tres led que me deberian indicar cuando el PIC:
1.No esta Conectado al PC (ROJO)
2.Cuando esta Conectado al PC (Amarillo)
3.Cuando esta Enumerado (VERDE)
Punto 1: Conecta el led al Vusb con una resistencia de 470R , con esto sabrás cuando estás conectado a la alimentación. (led amarillo).
Punto 2: Usa la función usb_wait_enumeration(){} de la siguiente manera:

enciende led rojo // Conección de alimentación pero no está enumerado.
apaga led verde // no esta enumerado.
usb_wait_enumeration(){} ....espera que se enumere.
enciende led verde // dispositivo enumerado.
apaga led rojo // USB oK....no hay error.

El código va dentro del main pero fuera del bucle infinito...

Para el código que no te funciona, mirá el post #28 de la página 2 del foro. Ahí muestra como usar la función: usb_cdc_connected()

get_string_usb() , nunca lo utilicé tendría que ver como es la función.

Por que el led amarillo no enciende al conectar el dispositivo?
Mal programada la función...la solución: Usar usb_wait_enumeration(){} o fijarse como usar el usb_cdc_coneccted() en la pagina 2.

Por que el led rojo no titila ni se apaga el verde al cerrar el puerto en VB?
El host no le avisa al dispositivo cuando se cierran las comunicaciones. Uno mismo tiene que fijarse cuando no hay comunicaciones.

Cuando vos conectas el dispositivo el host lo enumera. Luego conectas el COM a la aplicación ( El dispositivo no interviene) y por último cerras la comunicación con el COM (el dispositivo no interviene)...por que digo que el dispositivo no interviene: La aplicación en VB cierra el controlador que se comunica con el dispositivo ....el dispositivo ni se mosquea cuando cerras la comunicación....por que sigue conectado a la PC y enumerado.

Ademas: como puedo saber en VB que se a conectado el dispositivo al puerto?
Si hacemos de cuenta que el dispositivo genera un COM4 y la aplicación trata de conectarse con el controlador de dicho dispositivo. El controlador responderá de manera adecuada y nos enlazará.

Ahora si desconectamos nuestro dispositivo y la aplicación trata de conectarse al mismo puerto (inexistente ya que hemos desconectado el dispositivo), mostrará un error que podemos procesar para mostrar "dispositivo no conectado"

También podemos hacer un pequeño subprograma en un timer que se ejecute cada 100ms aprox....o menos... enviando un comando al dispositivo al cual se tenga que hacer eco....si la aplicación no obtiene respuesta del comando...se tomo que se ha desconectado y para la comunicación....

En fin son ideas...


PD: HE TERMINADO DE ESCRIBIR EL MANUAL DE APLICACIONES HID POR LO TANTO PROXIMAMENTE SUBIRÉ TODO PARA QUE LO VEAN.
25/03/2011 #1531

Avatar de Meta

Moyano Jonathan dijo: Ver Mensaje


PD: HE TERMINADO DE ESCRIBIR EL MANUAL DE APLICACIONES HID POR LO TANTO PROXIMAMENTE SUBIRÉ TODO PARA QUE LO VEAN.
Buenísimo.

Vamos haber como está el pedazo de manual que haz hecho. Muchos ánimos campeón.
25/03/2011 #1532

Avatar de COSMICO

Gracias Moyano, que bién!
Ya me imagino la cantidad de cosas que se podran hacer.
25/03/2011 #1533

Avatar de albermillan69

Moyano Jonathan dijo: Ver Mensaje
También podemos hacer un pequeño subprograma en un timer que se ejecute cada 100ms aprox....o menos... enviando un comando al dispositivo al cual se tenga que hacer eco....si la aplicación no obtiene respuesta del comando...se tomo que se ha desconectado y para la comunicación....

PD: HE TERMINADO DE ESCRIBIR EL MANUAL DE APLICACIONES HID POR LO TANTO PROXIMAMENTE SUBIRÉ TODO PARA QUE LO VEAN.
Era lo que estaba pensando hacer! Que bueno por lo del manual y Muchas gracias por tu gran ayuda!!
25/03/2011 #1534


Hola, estoy usando el programa de visual c# que proporciona microchip, la conexion con el usb me funciona, lo que no se como hacer es como enviar datos al pic desde el pc, por lo que veo en el programa tienes un boton toggleleds que este pone a true un boleano y desde el ReadWriteThread envia el dato, en este caso encender un led; mi problema principalmente es que no me entra en el ReadWriteThread, solo entra la primera vez que ejecuto el codigo, ya que si mando la orden de encendido desde el ReadWriteThread despues de la comprobacion de la conexion si que me lo enciende.
Saludos
25/03/2011 #1535

Avatar de Moyano Jonathan

Hola, estoy usando el programa de visual c# que proporciona microchip, la conexion con el usb me funciona, lo que no se como hacer es como enviar datos al pic desde el pc, por lo que veo en el programa tienes un boton toggleleds que este pone a true un boleano y desde el ReadWriteThread envia el dato, en este caso encender un led; mi problema principalmente es que no me entra en el ReadWriteThread, solo entra la primera vez que ejecuto el codigo, ya que si mando la orden de encendido desde el ReadWriteThread despues de la comprobacion de la conexion si que me lo enciende.
Saludos
Estás haciendo la aplicación con CCS o C18 ? El ReadWriteThread es solo por seguridad....no hace falta que lo uses...como dice en la misma aplicación solo estás por "si se llega a colgar la aplicación principal " o por si las comunicaciones necesitan de más velocidad de ejecución del programa...
25/03/2011 #1536

Avatar de Meta

tablet dijo: Ver Mensaje
Hola, estoy usando el programa de visual c# que proporciona microchip...
¿En qué enlace viste eso de www.microchip.com?
25/03/2011 #1537


Gracias por contestar ya logre hacer titilar el led, el problema que tenia era una tonteria, por no fijarme jeje, ahora intentaré recibir datos desde el pic. El programa del pic lo hago en C18 y sobre el enlace ahora no me acuerdo de que parte de la pagina lo saque pero lo que hice fue descargarme un ejecutable y me instalo una carpeta llamada Microchip Solutions v2010-10-19 y ahi es donde esta el programa.
Saludos
25/03/2011 #1538

Avatar de albermillan69

Moyano necesito de tu ayuda nuevamente:P
Dato = Left$(InBuff, 3)

Con esa instruccion leo el buffer y lo limito a 4 caracteres! bien!!
Pero la cadena que manda el PIC es "Ver1.0", que es lo que quiero? comparar los tres primeros caracteres de cada cadena y luego ubicar el resto en sus respectivos lugares de la ventana del VB.

Osea:
Dato = Left$(InBuff, 3)
if Dato="Ver" then
Dato = Left$(InBuff, 3)
label1.caption= Dato
end if

Pero resulta q cuando leo el buffer y lo limito a 3 caracteres, el resto de los datos se borran!
o los estoy pidiendo mal? porque lo que muestra en el label1 es "Ver" y no "1.0"

De estar mal programado, como tendria que hacerlo??

hay alguna forma de pedir byte a byte?
como lo hice en CCS para armar el string (porque get_string_usb() no lo supe usar)

for (i=0;i<3;i++){
recibo[i]=usb_cdc_getc();
}

y luego comparo la cadena para saber que dato es el que se va a mandar al PC

Espero de tu ayuda.... MIL GRACIAS.....
25/03/2011 #1539

Avatar de Moyano Jonathan

Hola albermillán, como estás.

Mirá no conozco como trata las cadenas el Visual Basic ...pero te puedo dar alguna ayuda.

Primero tendrías que usar la función usb_cdc_khbit() en caso de tener datos en el buffer lo añadís al arreglo "recibo".

Algo como lo siguiente:

if(usb_cdc_khbit()){

int x=0;

if(x==8) {

x=0;
} else { x++ recibe[x]=usb_cdc_getc();}
}

Es muy básico pero lo tendrías que probar...en este caso guarda 8 datos...luego reinicia la variable x y comienza nuevamente con el guardado de datos en cuanto se reciben datos...


Con respecto a los string en VB no te hagas mucho drama:

Deja que el programa reciba datos....pero ponele un condicional.....

Como sería esto:

Leo datos del puerto serie..... (pongamosle 8).

Si por alguna casualidad recibo el caracter por ejem "s"....

Para de recibir datos y los muestra en la ventana de VB


Con esto vos no necesitarías en realidad cortar la cadena sino que recibirias los datos hasta adonde vos le decís y no más (usando un caracter de parada).

Igual si querés saber más sobre el uso de cadenas y CCS te recomiendo el siguiente enlace: http://picmania.garcia-cuervo.net/picc.php#COMBUF232

PD: Mejor usar VB.net ...el VB6.0 presenta muchos problemas de compatibilidad con los nuevos sistemas operativos.

Un saludo !

tablet dijo:
Hola, estoy usando el programa de visual c# que proporciona microchip...
¿En qué enlace viste eso de www.microchip.com?
Hablaba del C18 (aplicación para el PIC)

PD: Espero subir el manual este fin de semana. Lo que pasa es que estoy sin internet por que TELEFONICA no me arregla el telefono y dependo del internet ajeno.

Un saludo !
25/03/2011 #1540

Avatar de albermillan69

Moyano Jonathan dijo: Ver Mensaje
Hola albermillán, como estás.

if(usb_cdc_khbit()){

int x=0;

if(x==8) {

x=0;
} else { x++ recibe[x]=usb_cdc_getc();}
}
Por aca todo bien!!

Algo asi como lo q dices es lo que tengo en el PIC.

Ahora en VB:
Supongo que lo que me dices es usando:

Puerto.OutBufferSize = 1 'tamaño del dato a transmitir.
Puerto.InBufferSize = 6 '6 caracteres
Puerto.InputLen = 6 ' Buffer de entrada.
Puerto.RThreshold = 3

Pero como tal no entiendo sus funcionamientos

si me los explicas rapidamente porfa!!!

MIL GRACIAS.......... Saludos....
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.