Inspired by the minimalists I tried this out on the arduino:
int speakerPin = 11;
void outp(byte value) {
analogWrite(speakerPin, value); delayMicroseconds(200);
}
void setup() {
pinMode(speakerPin, OUTPUT);
// Set up Timer 2 to do pulse width modulation on the speaker
// pin.
// Use internal clock (datasheet p.160)
ASSR &= ~(\_BV(EXCLK) | \_BV(AS2));
// Set fast PWM mode (p.157)
TCCR2A |= \_BV(WGM21) | \_BV(WGM20);
TCCR2B &= ~\_BV(WGM22);
// Do non-inverting PWM on pin OC2A (p.155)
// On the Arduino this is pin 11.
TCCR2A = (TCCR2A | \_BV(COM2A1)) & ~\_BV(COM2A0);
TCCR2A &= ~(\_BV(COM2B1) | \_BV(COM2B0));
// No prescaler (p.158)
TCCR2B = (TCCR2B & ~(\_BV(CS12) | \_BV(CS11))) | \_BV(CS10);
}
void loop() {
int t;
for(t=0;;t++){ outp(t\*((t>>12|t>>8)&63&t>>4)); }
}
It does sound somewhat similar. So right now it’s just a hack in order to try it out.
Note:
The code above is corrected with a little help from Davey at forsken.
Do you want to send a comment or give me a hint about any issues with a blog post: Open up an issue on GitHub.
Do you want to fix an error or add a comment published on the blog? You can do a fork of this post and do a pull request on github.
Comments