DIY USB DJ Controller (9 / 16 steg)
Steg 9: Firmware - primära mikrokontroller
Nu kan vi programmera primära mikrokontroller. Placera den andra MSP430G2553 i startfönstret och Anslut den till datorn. Energia bör alla uppsättning upp redan.
Main mikrokontroller ansvarar för läsa olika knappar, resten av de analoga kontrollerna (6 totalt), tolka indata från rotary encoder och passerar seriella data från sekundära mikrokontroller via den anslutna datorn.
Förstå koden
Jag kommer att först diskutera vad den viktigaste microcontroller gör med den sekundära Microcontroller meddelanden eftersom det är det enklaste. Den sekundära Microcontroller meddelanden kommit redan in på RXD pin förformaterad, så huvudsakliga mikrokontroller ska helt enkelt skicka det mottagna meddelandet på sin egen TXD stift till datorn. Koden för detta finns i huvudloop längst ned. Det är allt som finns på tangentbordet meddelanden för nu.
Nu ser vi till toppen av programmet, kommer du att märka att jag definierar en klass som kallas AnalogControl. Denna klass är nästan identisk med SPI_Control i den sekundära microcontroller firmware, men det läser den inbyggda ADC istället för att be MCP3008 för ett värde. Den har inbyggd i genomsnitt och jämna ut koden. Att göra detta en klass kan du enkelt konfigurera valfritt antal analoga kontroller. Du kan ange vilka kontroll-ID är, de stift som ADC värdet tas prov från och känsligheten för kontrollen.
Nästa är klassen Rotary Encoder. Här kan du enkelt konfigurera valfritt antal roterande pulsgivare också, men för mig en är nog i detta projekt. Klassen Rotary Encoder måste helt enkelt veta vad stift för att använda. Två första är faktiska rotary encoder och tredje är den integrerade knappen input.
I slingan, vi kallar isNew för varje kontroll och använda sitt returnerade värde för att avgöra om vi ska skicka en kontroll förändring eller inte. Funktionen isNew innehåller inbyggda utjämning för analog kontroller så att ett nytt värde inte är skickas varje slinga (uppmätt motstånd kan vara något instabil av olika skäl som temperatur och vibrationer), Detta förhindrar kontroll jitter.
Vi kontrollerar också en matris med booleska värden som indikerar om en digital kontroll har förändrats staten. Denna flagga ligger i avbryta tjänsten rutiner för en viss knapp. Återigen, detta görs eftersom skicka seriella data i en ISR är ineffektiva.
För en förklaring av hur rotationsencoder koden fungerar, kolla in denna tutorial.
Tack till bildr handledningen ovan, det är vad jag grundar min rotationsencoder kod bort av!
Ladda upp koden
Nu när du förstår den huvudsakliga microcontroller koden, kan vi ladda upp den till mikrokontroller! Kopiera min kod till ditt Energia fönster och klicka på knappen kontrollera. När byggprocessen är klar och utan fel, kan du ladda upp koden till mikrokontroller.
Denna microcontroller stannar i startfönstret i avslutade projektet så kan du bara lämna det där det är när du är klar programmering.