USB-inomhus/utomhus termometer (eller "Min första USB-enhet") (2 / 4 steg)
Steg 2: Firmware
Den fasta programvaran används klassen CDC USB för att emulera en seriell port. Enheten visas som en virtuell com-port på en PC. Firmware är indelade i tre sektioner:1. USB-drivrutinen hand tar om enumerating enheten på en dator och efterlikna en COM-port.
2. en rutin växelvis läser temperatur värdena och omvandlar dem till ett läsbart format. Gör båda dessa operationer på en gång orsakade i USB-enheten lös anslutning PC (tid hogging). Konvertera den flytande punkten värden till en sträng i tjänst cykeln efter konverteringen uppklarat anslutning problem.*
3. Slutligen, en huvudsaklig rutin tar emot byte som skickats från PC och returnerar de önskade mått. Flera åtgärder är avgränsade med kommatecken, linjer avslutas med en null tecken (hex 0x00)
Demonstration firmware accepterar följa kommandon:
HEX värde returnerar
0x00 inomhus temperatur (ombord sensor)
0x01 utomhustemperatur (externa sidhuvud)
0x02 båda temperaturer (kommaseparerade)
Temperaturen beräknas baserat på 2.5 volt referens och mikrochip TC1047A offset och lutning. Andra temperaturgivare kan ha olika egenskaper. TC1047A databladet finns här:
http://WW1.microchip.com/downloads/en/DeviceDoc/21498c.pdf
Firmware är skriven i MPLAB med demonstration PIC C18 kompilatorn.
Den faktiska USB firmware kommer från Microchip. Den ursprungliga miljön finns här:
http://www.microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en021631
Redigera firmware: extrahera hela katalogstrukturen i källan till din rotkatalog (c:\MCHPFSUSB). Du kan sedan ladda arbetsytefilen i MPLAB.
* Flötet till sträng rutin är en resurs galt. För att komma runt anslutningsproblemet USB kallas rutin på olika punkter i rutinen float2string. Detta skulle bäst åtgärdas av service USB kringutrustning på ett avbrott. Jag Använd hacket så att firmware bodde så nära referensversion som möjligt.