uy Pali, pero, ¿cómo aseguro que mi adc lea cada 40us sin retrasos ni adelantos? Mi frecuencia de muestreo debe ser de 25000sps (cada 40us) y el polling (token de la pc) de 1ms lo interrumpiría.
Tengo un plan B, pero no lo quiero usar hasta saber si puedo...
- Medir mi adc cada 40us exactos: 2 bytes por muestra y 20us de tiempo de muestreo, por lo que me sobran 20us para reportar vía usb.
- Reportar la medición sin pérdida de paquetes (20us mencionados arriba pero la realidad es que es 1ms mínimo usando HID o 550us usando CDC).
Si no logro hacerlo, entonces habré de usar 2 pics, un medidor y un transmisor.
Voy a hacer la prueba con HID como tú dices, no pierdo nada.
- La medición ADC se haría cada 40us generando 2 bytes.
- Si la latencia usb hid fuera de 1ms entonces tendría que acumular las siguientes muestras para enviarlas en 1 solo paquete...
1ms / 40us =25 muestras
25 muestras * 2 bytes = 50bytes
~ Puntos a checar en la prueba...
- Verificar si la interrupción de timer que invoca la medición ADC es cada 40us sin importar que lleguen interrupciones usb (a ver si esta vez me quedan bien las prioridades de interrupción)
- Medir el tiempo de envío de los 50 bytes a la pc y determinar si es menor a 20us para que no afecte la medición ADC.
- Verificar que la pc realmente sea capaz de enviar un token cada 1ms. Hemos visto que en sistemas operativos que no son de tiempo real es difícil asegurar tiempos de ejecución menores a 10ms.
Sigue pendiente encontrar un ejemplo isócrono. Voy a ver si encuentro algo en el foro de ccs.