Hola denuevo.
Tengo una duda: Se pueden enviar/recibir datos de la PC al PIC de 16 bits ?? Porq creo q eso es lo maximo q puede soportar el PIC (leyendo el pic18_usb.h, en su version history). Bien, pues hice pruebas y solo me recibio (el PIC) el 1er dato.
Para q me ntiendan mejor, aqui esta lo q hice en VC#:
public void Ejecutar()
{
UInt16* send_buf = stackalloc UInt16[3];
send_buf[0] = 1111;
send_buf[1] = 23;
send_buf[2] = 56;
SendPacket(send_buf, 3);
}
Y, claro, cambie el tipo de variable del 1er argumento de SendPacket a:
private void SendPacket(UInt16* SendData, DWORD SendLength)
Bueno, es obvio q en el pic hay q tb cambiar algunas cosas, y pues, hice esto (CCS):
Decir antes q, como mi mayor prioridad es el recivimiento de datos desde el Pic, pues solo cambie eso de la variable recibe[].
.
.
.
void main(void)
{
int16 recibe[3]; //AQUI
int8 envia[1];
printf("\fJEREMY!");
usb_init();
usb_task();
usb_wait_for_enumeration();
while (TRUE)
{
if(usb_enumerated())
{
if (usb_kbhit(1) == 1)
{
printf("\r\n%Lu ", usb_get_packet(1, recibe, 3)); //Aqui cojo y muestro por rs232 la cantidad q cojio (ocea 3).
printf(" %Lu %Lu %Lu", recibe[0], recibe[1], recibe[2]); //Y aqui muestro cada uno d los valores de recibe[].
}
}
}
}
Y lo q me sale en hiperterminal, teniendo encuenta los valores q yo e mandado desde la PC, programadas en VC# (send_buf[]), me sale esto:
(El 3 es el 1er printf q hago, la cantidad de datos cojidos del bufer del pic)
Y, asi como se ve, solo el 1ro llega bien. Creo q tiene q ver con q enviar un dato de 16bits es lo maximo por mensaje, ocupando todo un paquete; y q a 8bits se pueden enviar muchos paquetes en un solo mensaje, o algo asi, q no ntiendo muy bien, porq hay diferencia entre mesajes y paquetes creo haber leido. Bien, pues tb vi el usb_gets pero leer la Nota q dejan, pues, como q uno no se siente muy seguro de usarla...
NOTE: NOT THOUROUGHLY TESTED. I AM NOT EVEN SURE IF THIS IS A GOOD IDEA
Q cosas no?
. Aunq tampoco sabria como usarla.
Espero puedan darme una mano y q haya sido bien explicativo
Hasta luego.
Salu2.
EDITOEhm... creo q no se puede:
int16 usb_get_packet(int8 endpoint, int8 * ptr, int16 max)
16 bits son el numero de datos cojidos del bufer y no puede ser la cantidad de cada uno de ellos, porque el puntero (variable) que contendra tal valor esta especificado en el 2do argumento de esa funcion y pues, ahi indica q solo es de 8bits. Pero es raro, porq:
1- ¿¿ Porq no me botaba error el compilador cuando ponia una variable de 16bits si esa funcion solo permite de 8 (int16 recibe[3]) en el puntero donde alojar los valores ??
2- ¿¿ Porq si podia leerme un valor (el 1111 y cualquier otro), el del 1er valor del buffer a enviar de la PC (send_buffer[]) ??
Todo se torna muy raro
.