Ansluta Nokia 3310 LCD till USB med hjälp av AVR (5 / 9 steg)
Steg 5: Förstå USB-koden
Det är här roligt börjar!Om detta har du kommit långt, bör du ha en skärm som säger "Visa initieras" när du slår upp enheten.
Om du inte redan har gjort det, ladda ner källkoden bifogas detta instructable, och vi har en närmare titt på hur AVR kommunicerar med datorn och bildskärmen.
Om du aldrig har arbetat med V-USB innan, det kan vara mycket förvirrande i början. Åtminstone var det för mig. Rulla ned till usbFunctionSetup funktion och vi har en närmare titt på hur det faktiskt fungerar. Det handlar om den enda funktionen måste du hand om redigering förutom huvudfunktionen.
usbFunctionSetup är funktionen där du bearbeta alla data som jag skickade till mikrokontroller via USB. Om du märker om uttalanden, när de alla på ett specifikt nummer på variabeln rq -> bRequest . Detta har jag där begäran koder lagras. Du kan tänka på begäran koder som kommandon. Värd mjukvaran, vi har en funktion så här: SendData (int begäran, i data), det värde som du sätter i begäran parameter kommer att överföras till mikrokontroller och lagras i rq -> bRequest variabel, och du använder denna begäran kod för att göra olika saker i usbFunctionSetup.
Jag har bara lagt 6 begäran koder, men om du vill göra en 7 begär kod helt enkelt skriver in någonstans i funktionen usbFunctionSetup:
Om begäran är 7
om (rq -> bRequest == 7) {/ / kommando 7 - SEND_MYCOMMAND
Göra min kod
}
Om du ringer nu funktionen SendData så här: SendData (7, 0).
OM-uttrycket du just har skapat kommer att köras.
2: a parametern i SendData funktion är de faktiska uppgifter som du skickar till mikrokontroller. Detta nummer kommer att lagras i rq -> wValue struktur. Detta är ett ord (2 byte), men om du bara vill använda 1 2 byte lagras här, du kan göra det med hjälp av byte array, såhär: rq -> wValue.bytes[0]. Om du vill använda hela ordet, kan du öppna det såhär: rq -> wValue.word. Observera att du bör använda en unsigned int om du vill använda hela ordet.
Du bör sätta avancerade funktioner som tar lång tid att göra utanför usbFunctionSetup funktion, och i stället låta huvudloop avrätta dem. Om du har dem i usbFunctionSetup och de använder lång tid för att avsluta (50 ms), kan du förlora USB-anslutning till datorn. Jag valde att ha dem i usbFunctionSetup eftersom att skriva till displayen är mycket snabbare än USB (i själva verket skriver vi en stabil 1, 33Mbit/s till displayen, och displayen stöder upp till 4Mbits/s) så jag inte riskerar att förlora anslutningen av tar för lång tid.
Resten av koden bör kommenteras nog för dig att förstå. Om något är oklart, låt mig veta och jag ska försöka klara saker för dig.