Ultrasonic hinder att undvika Robot (13 / 16 steg)
Steg 13: Felsökning firmware med allt lagt till
Det bästa skriftligen en firmware är nu när allt fungerar vid första försöket. Jag brukar skriva en hel del kod innan faktiskt gå ut och testa den, så om det fungerar vid första power-on, är det ännu bättre. Tyvärr och naturligtvis detta var inte fallet, jag var tvungen att göra en hel del felsökning för att få programvaran att fungera hur jag trodde det.
Sedan felsökning kommer att kan och ta längre tid än att skriva själva koden - Förbered dig på värst. Det finns en ganska rolig och realistisk bild på webben, som visar stegen i felsökning.
Hur att felsöka
För att räkna ut vart din programpekaren är vid en given tidpunkt, måste man tänka på sätt att få någon form av feedback från PIC. Det enklaste sättet att gå är att använda några lysdioder, och tänds dem vid givna punkter i koden - detta sätt vet du säkert, att koden skrivs där avrättades. Eftersom jag hade ett oanvänt 2 x 4 kvinnliga huvud ombord, konstruerade jag en liten styrelse bara för felsökning, en styrelse som ansluts till detta huvud. Detta sätt kunde jag identifiera huruvida PIC tar rätt beslut i algoritmen. Det var relativt lätt att sätta på plats. Efter ett tag lysdioderna helt enkelt vore inte nog, och jag började tänka på någon form av felsökning port, kanske en SPI-display som visar de inspelade avstånd. Det tog inte lång tid att inse att - av en slump - jag gett ut två mycket viktiga PIC stift till detta 2 x 4 huvud: RX och TX stiften på serieporten! Jag drog ut en serial-USB-omvandlare jag beställde från e-bay ett tag sedan (länk), och ansluten till dessa stift.
Hårdvaran var redo, jag behövde bara några firmware att initiera porten med de obligatoriska parametrarna, och att upprätta kommunikationshastighet. Detta kan göras genom att läsa avsnittet datablad, jag har gjort detta med hand många många gånger, så den här gången bestämde jag mig för att använda en miniräknare för snabbare utveckling. Kolla in bilderna, en av dem har denna prydliga lilla överföringshastigheten (bitar/sekund) generator - bra grejer! Jag använde 48 [MHz] oscillator hastighet, och gjorde beräkningarna för 115200 [bits/sekund].
Efter att jag avslutat den första installationen, skrev jag några gemensamma funktioner jag visste jag behöver, och lägga den till ett test. Den seriella porten arbetade vid första rättegången, min bättre debug port var klar att använda! Jag behövde bara ett terminalprogram för att kunna Visualisera data bilden skickas. Lätt: Jag hämtade Hercules från här: länk.
Fördelarna med att ha den seriella porten
Efter att jag fick den seriella porten igång, blev mitt liv tio gånger lättare. Varje variabel, varje mätning, allt som var skrivet inuti bilden blev tillgängliga via denna felsökningsport. Jag fann snabbt att den variabel som lagras högst 11 avstånd mätningar var "unsigned char", men några avläsningar var större än denna typ passar i, jag bytte till unsigned int med det.
Jag insåg också att det uppmätta avståndet är tillräckligt precis, men jag tog inte hänsyn till det faktum att roboten behöver utrymme för att kunna vända vänster eller höger. Jag subtraheras 8 [cm] från det slutliga "kör framåt" kommandot och löst detta problem.
När roboten började gå rätt distanserar jämfört med distanserar det mätt, jag tog bort den seriell anslutning och sätt LED styrelsen tillbaka inuti.