Regnbåge Ring väggklocka (9 / 13 steg)
Steg 9: Låt programmering börja
Innan jag ens hade tänkt på höljet jag programmering ringen. Men eftersom jag började jobba på höljet jag hade lämnat den programmering sidan till slutet, det är därför jag var tvungen att inkludera en programmering socket. Kan du föreställa dig om det fanns en bugg i min kod och jag hade inget sätt att fixa det!
Här är där ett annat problem visade sig själv. En trasig LED! Jag hade skrivit ett litet testprogram som skulle visa ett mönster på lysdioderna när power kopplades, detta mönster skulle cykel även om färger för att berätta att allt fungerade som avsett. Men jag bara testar varje andra LED på den yttre ringen. När jag hade programmerat för att använda den inre ringen upptäckte jag att endast första hälften arbetat, skulle inte andra hälften Visa något. Konstigt nog, om lamporna drevs från 3.6volts istället för 5, data skulle passera genom denna LED, men det fortfarande Visa inte något. Men färgerna avges genom att lysdioderna är mycket bättre på 5v. så jag bestämde mig att minska min förluster och bara använda 60 lysdioder av min ring.
Detta är faktiskt en välsignelse i förklädnad, eftersom jag hade bara gjort en snabb kalkyl bakhuvudet medan val hjärnor av denna klocka. Valt MCU MSP430G2553 har bara 512bytes ram. Ja, byte. Jag hade programmerat en buffert för att lagra alla LED värden, de skulle sedan överföras i en snabb explosion till alla lampor, denna buffert tar upp 360 byte av våra värdefulla resurs, som är drygt 70% av RAM-minne gått rätt där.
Som det visar sig, en av de coolaste funktionerna av denna klocka är en kapacitiv touch sensor arrangemang som jag bäddat in in i kanten av PCB, ärligt talat jag ens vet inte om det skulle fungera, jag har aldrig gjort kapacitiv givare så innan. Men de arbeta, och fungerar bra. TI, tillverkning av MSP430 mikrokontroller, skapa ett API för att läsa kapacitiv givare, kapacitiv touch programvarubibliotek. Det är fantastiskt, men på grund av allt det arbete det har att göra, det använder sig av en massa RAM. De 12 delarna jag behövde för att mäta använder 48 byte, att lagra aktuella åtgärden värden och ett utgångsvärde. Sedan anropar funktionen förbrukar utrymme på stacken, jag debuggade några bibliotek samtal, och hittade ca 30-40 bytes användes.
Om du är obekant med dator minne layout, och du är intresserad av det, föreslår jag att du tittar som. Satt rakt på sak när STACKEN träder i högen är känd som stackspill. Det som hände för mig, jag höll får konstiga oförutsägbara resultat, eftersom två delar av min kod tillgång till samma plats i minnet, åsidosätta varandras information. Utan att behöva buffra den mellersta ringen hade jag frigjort upp mer än tillräckligt RAM för min kod.