Retro Raygun: förverkliga en prop genom CAD (12 / 15 steg)
Steg 12: ljud
Alla ljud genererades från en ATtiny84. Det fanns inget utrymme för en annan ombord. ATtiny var det hur som helst, läsa trigger och selector ratten och skickar PWM till LED-drivrutinerna.
I själva verket belånade jag en styrelse som jag har jobbat på för denna; den har en ATtiny84, ett ICSP programmering huvud och fyra LC135 konstant-aktuella drivrutiner. De senare är en cool liten chip som kommer att leverera en reglerad 350 milliampere till en hög effekt ledde, tar PWM, och kan staplas (eller, snarare, köra parallellt).
Styrelsen hade att vara kraftigt modifierad för detta prop, naturligtvis.
Det är relativt enkelt att göra toner på en ATtiny. Det kommer att köras (med några viktiga varningar) tone() bibliotek för Arduino. Den er också skicklig av wavetable syntes. Teorin är enkel nog. En av ombord hårdvara timers är inställd för analog spänning produktion; Fix frekvens, variabel cut-off (PWM, i princip). En andra timer används för att generera ett maskinvaruavbrott. När avbrottstjänstens rutin anropas, plockar upp nästa värde från en wavetable och justerar den inställda Matningsspänning på första timern.
Detta trick kräver ett par saker. Det krävs andra timern använder frekvens X längden på wavetable. Det kräver den första timern körs flera order snabbare (annars blir det roliga aliasing pågår). Och det kräver programmet inte spendera en massa cyklar göra något annat än att vara redo för nästa avbrottet ska bearbetas.
Att senare visat sig vara svårt. Jag sprang programvara PWM för LED (det var ingen mer hårdvara timers tillgängliga på att chip), jag hade gå ta trigger avläsningar och analoga avläsningar av ratten och typer av ljud som jag ville ha behövs för att utvecklas över tid. Så jag gav upp på tabellen full våg, och generera enkla kvadratiska eller sawtooth vågor. Och som innebar att jag kunde avvara program cykler för att addera eller subtrahera tal frekvens (det vill säga basräntan som vilka ändringar görs till den önskade analog utgången av timer1.)
Det innebar ändå att ljuden förändrats radikalt varje gång jag sätter i en ny "Om" uttalande, och de var också starkt beroende av bas frekvensen valt för PWM. Men med en hel del av försök och misstag kunde jag få några kvittrar, drillar och klick för olika skott och funktion låter (power up, selector dial motion, etc.)
I själva verket var de aliasing och allmänna "grus" en fördel. Använda liknande tekniker till wavetable syntes ovanför en kan göra vit eller rosa brus av olika smaker, men som visade sig vara onödiga. Om jag var med en snabbare och mer kraftfull chip, som finns i en Arduino Nano, skulle jag förmodligen vara digitalt kombinerar olika wavetables och bearbetning innan du skickar det till den slutliga analog utgången.
All programmering gjordes nominellt i Arduino IDE. För att utnyttja hårdvara timers på det sätt jag hade gå, jag med dem direkt utan hjälp av någon Arduino bibliotek. Men fördelen med programmering på en propeller som denna är du kan tänka dig "skiss", kasta tillsammans oavsett rörig koden arbeten, och kalla det bra nog.