Paso 2: Firmware
El firmware utiliza la clase CDC USB para emular un puerto serie. El dispositivo se mostrará como un puerto com virtual en un PC. El firmware está dividido en tres secciones:1. el controlador USB se encarga de enumerar el dispositivo a un PC y emular un puerto COM.
2. una rutina de servicio Lee los valores de temperatura y convertirlos a un formato legible. Haciendo de estas operaciones a la vez causa del dispositivo USB conexión suelta el PC (tiempo acaparando). Conversión de coma flotante los valores a una cadena en el ciclo de servicio después de la conversión aclarada el problema.* conectividad
3. por último, una rutina principal recibe bytes enviados desde el PC y devuelve las medidas solicitadas. Medidas múltiples se separan por una coma, las líneas se terminan con un carácter nulo (hex 0 x 00)
El firmware de demostración acepta los comandos siguientes:
Devuelve valor hexadecimal
0 x 00 interiores temperatura (sensor de a bordo)
temperatura exterior de 0 x 01 (cabecera externa)
0 x 02 ambas temperaturas (separados por comas)
Temperatura se calcula basándose en la referencia de 2,5 voltios y el Microchip TC1047A offset y pendiente. Otros sensores de temperatura pueden tener diferentes características. La hoja de datos de TC1047A está disponible aquí:
http://WW1.microchip.com/downloads/en/DeviceDoc/21498c.pdf
El firmware está escrito en MPLAB con el compilador PIC C18 de demostración.
El firmware USB real es proporcionado por Microchip. El entorno original está disponible aquí:
http://www.microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en021631
Para editar el firmware: extraer la estructura de directorio completo de la fuente al directorio raíz (c:\MCHPFSUSB). Luego puede cargar el archivo de espacio de trabajo en el MPLAB.
* El flotador a la rutina de la cadena es un cerdo de recursos. Para solucionar el problema de conectividad de la USB se llama rutina de servicio en varios puntos de la rutina float2string. Este mejor sea fijo el USB periférico en una interrupción de servicio. Usé el hack que me alojé el firmware a la versión de referencia como sea posible.