Jag har labbat med en gammal PIC16F627 med intern 4MHz-oscillator. PORTB.3 (PWM-utgången) är kopplad till en piezohögtalare (traditionella högtalare går nog också bra) via ett 220 ohms motstånd.
Koden borde funka på alla PIC som har TMR0, TMR2 och PWM-modul. Ifall INTRC är på 8 MHz behöver man ställa in prescaler 2 på TMR0.
Med mindre ändringar borde koden även funka på PICar med bara en TMR0. Då får man använda två utgångar, med varsitt motstånd kopplad till högtalaren.
Koden är skriven för CC5X, men borde gå att använda med andra kompilatorer utan några större ändringar. Kompilerad med CC5X tar den 184 word programminne och 37 bytes variabelminne.
Vore kul med ett program där man kan rita linjer i ett spectrogram och sen genererar den kod utifrån det.
edit: Med en vanlig adderare byggd av en opamp borde man kunna använda flera PWM-utgångar till att spela flera frekvenser samtidigt va? Eller finns det enklare sätt?
Visst är det kul med ljud ur uC:n!
Du får visa hur det låter sen!
E85 skrev:edit: Med en vanlig adderare byggd av en opamp borde man kunna använda flera PWM-utgångar till att spela flera frekvenser samtidigt va? Eller finns det enklare sätt?
Enklare är att bara dra ett motstånd per utgång till högtalaren.
Eller göra en lite mer avancerad tongenerator i mjukvaran, och addera allt ljud i mjukvaran istället. Det borde gå utmärkt att få till fina sinusvågor (eller andra vågformer, olika tabeller bara) i flera frekvenser samtidigt, med. t.ex. en ATtiny85, som ju har 16 MHz INTOSC. Om generatorinterrupt går i 31250 Hz blir det 512 cykler per interrupt, och det borde räcka gott för att skapa i alla fall 4 stämmor samtidigt, tycker jag.
Jag gjorde en gång ett program som spelade melodin och basgången från introlåten till Björnes magasin, i mjuka sinustoner. Den satte mig i en sorts meditativ stämning. Kunde inte sluta lyssna.
Kände detsamma när jag la gamla nintendolåtar som Zelda m.fl. på minneskort och spelade upp på en liten högtalare mha en 1W förstärkare genom AVR. Det blir annat än att lyssna på hifi-systemet från datorn.