[Noisebridge-discuss] [noisebridge-discuss] HELP: Audio playback via uC, Sampling, pwm-DAC

Jake jake at spaz.org
Mon Jul 9 17:57:04 UTC 2012


Robby!  what an awesome thing you're trying to do.

Obviously there's some sort of bug.  I'm guessing it has something to do 
with timing.  I'm not 100% clear on what mode you're using for the timer, 
but since the documentation is so poor in general I always use an 
oscilloscope to look at the output of the chip, to see if it's doing what 
I expect it to do.

You can do some hardware debugging feedback too, in the form of changing 
an output pin when you do something, and feed that into another channel on 
the oscilloscope.

I am guessing that either the interrupt is not happening when you think 
it's happening, or it's skipping the interrupt somehow when you're doing a 
memory read.

use an oscilloscope, find out what's going on once and for all.

Also, consider putting just a bunch of the same number into your lookup 
table for the tests and see what that does.

-jake

Robby wrote:
Hello y'all,
I'm depressed, see, I can't get my micro to play back recorded audio
samples, here's what I've been doing and from what I can tell, the 
internet
says todo:
using an tiny85 I'm using its 64Mhz PWM with a low pass filter to create
analog voltages, I can create a sine wave using a 256 byte lookup table I
use 256 resolution because I do this:

OCR1B = pgm_read_byte[sinWaveTable + TCNT0]; //The timer speed is the 
speed
at which the wave table is played back

And it makes a really good sin wave (used an oscilloscope to verify this).

however, this shows that I can create relatively good analog voltages, I
cannot play back sounds that I've saved in the avr's flash.

to do this, I have converted an arbitrary sound file to .WAV 
(uncompressed)
further converted it to 8bit sampled at 6khz. So each byte in this file
corresponds to a sinusoidal sound wave point, and all i have to do is play
back each analog value at the speed of the sampling rate. (please verify 
me
on this?) makes sense. I open the WAV file in a java program that I wrote
that reads each byte and separates them with commas so that I can make an
array out of the data.

And I just play it back, I tried to use a Compare Match A interrupt to 
read
each array value (at the sampling rate hence the compare match interrupt)
and change analog value coming out of OCR1B but it sounds like SHIT, I
can't even tell what it sounds like.

If anybody has had experience with this approach maybe you can help me?



More information about the Noisebridge-discuss mailing list