Assertfail

Simple noise on the arduino

02 Oct 2011

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.

Tags


Comments

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.