[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