Fattig mans AVR speldosa
DISCLAIMER: Detta projekt är vad man skulle kalla en SMOP, "en enkel fråga om programmering". Det innebär att det är av trivial komplexitet men långa... så om du kan tolerera tristess i den mån där det gränsar self-annihilation, du kommer att finna detta smärtsamma att arbeta på.
Kunskap om assembler, grundläggande elektronik och microcontrollers antas. Detta är inte enkelt, men det är inte rocket operation heller.
Speldosa har 4 faser: låten lagring, sund generation, förstärkning och makt.
Det kan ge en fullständig 8 oktaver fyrkantsvåg musik, som är strax under 100 anteckningar på en logaritmisk skala från 5 kilohertz till strax under 20 hertz. Kvaliteten är ungefär som gamla spelkonsoler eller de första MIDI-ljudkort.
Sund generation:
Det finns inte så mycket att beskriva. Den accepterar parallellporten inmatningar från PORTB, och utgångar en variabel frekvens fyrkantsvåg på PORTA, PIN1. Kör på en attiny26l-8pu, på 1 Mhz. Dubbling klocka hastighet höjer noterar en oktav högre, användbart om du har gjort en felbedömning, som jag gjorde (Jag dubblade det till 2Mhz, sista låten lät mycket bättre).
Låg strömförbrukning och enkelhet var det viktigaste i detta projekt, det är därför jag inte utforma någon slags följetong/parallell DAC att ge mig riktig sinusvåg utdata. Jag också var inte villig att skräp en mp3-spelare (andra design alternativet för detta projekt) för något jag kunde göra tillräckligt med 10 dollar värt av delar.
Den är utformad så att en andra AVR sitter precis bredvid det, och innehåller låtinformationen.
Låt förvaring:
En atmega16 skickar 8-bitars nummer ut är det PORTA för set löptider, varje nummer som motsvarar en anteckning på andra AVR... i princip det enklaste möjliga ljud formatet, det finns inte ens volymkontroll just nu, men om jag lägga till det jag skulle använda PORTB på "song info" chip att ge mig 8 nivåer av volym, varje pin upp högt skulle orsaka "låten tolk" chip att använda en extra stift som utgång. De skulle alla ansluta till en opamp genom en resistor nätverk, så att fler pins--> mer spänning på amp input.
Jag ursprungligen användes som en annan attiny26l-8pu sång, men minnet (2k) var inte tillräcklig för låten av 313 anteckningar (~ 2800 kodrader). Den enda fungerande chip hade jag ljuger om oanvända var en atmega16.
Förstärkning:
En tvåstegs förstärkare konstruerades med 2 x N2222 NPN-transistorer (darlington par). Det skickar utdata till en piezo Summer. Jag märkte några buzzers arbetat, andra inte... hörlurar/högtalare alltid arbetat.
Djupt magi: om du ansluter pin0, port A till basen av den första transistorn i darlington paret, du få ljud ut. Om du också ansluta pin7 till den första etappen av darlington paret, blir utgång mycket högt. Jag misstänker att jag av misstag definieras stift 7 som produktionen i källan... men darlington paret är tillräckligt känslig för att plocka upp några läckage någonstans och det fortfarande fungerar bra men lite tyst. Jag slutade ansluter den första etappen av darlington paret till pin0, och den andra etappen att både produktionen av den första etappen och PIN7. Detta producerade den optimal volymen för mina syften. Se redigera i den första källkod fil, nära början.
Effekt:
Inget fancy här. Ett 9v batteri och en TL780 spänningsregulator.