hello everybody
I was trying to get a LED blinking without using most of the computing time with some delay(), and when reading the tone() documentation, I did'nt find there is a lower limit to the frequency it can generate.
Just in one of the exemples, minimal frequency is set to 10Hz, but as the goal here is to produce a sound, that looks normal.
So I said to myself ok, this will do the trick.
Some experiments later, deception... under about 100Hz, the frequency I get is different from the one asked, for exemple here is what I get for a frequency set to 10Hz :
void setup(){
tone(9,10);
}
void loop(){
}
something with a period of 0,513ms, that means... 1,9kHz. Oops.
And where I really don't understand anything, it's when I ask for a 1Hz frequency, this is what I get :
And that really looks like a 1Hz square wave (well, 0,92Hz, but not so bad) ! Ok, very good... but wait, the LED connected to the pin delivering this signal keep lighting, not blinking at all...
In fact, when I change the oscilloscope time base, this is what I get :
Somewhat a square wave, but with some small stairs during the high an low fronts, forming like a triangle modulation.
According to the oscilloscope, this signal is about 60Hz.
And when I reduce more the time base, I get this :
A nice 60Hz square. If I reduce more the time base, it keeps showing this 60Hz square. So its normal I don't see the led blinking, 60Hz is a too high frequency.
I quite puzzled with the fact oscilloscope shows first a 1Hz square, but I suppose this is somawhat related to interference between it's sampling frequency and the small ticks that looks like making a triangle modulation.
I made these test with a Uno R2 and a Nano V3, result is the same.
The oscilloscope is a DSO quad DS203.
Arduino IDE is 1.0, on Ubuntu linux 12.04.
I don't know if this is a bug of the tone() function, but obviously something is not going well.