V2.0.0. ATtiny85 Delay() too long at 4MHz and 2MHz internal OSC speed
hmeijdam opened this issue · 1 comments
While playing with the ADC clock and the USI 4-bit timer, I noticed odd things at 4MHz clock speed when using V2.0.0. Then I noticed that delay() was also off at 4MHz.
This sketch should demonstrate the issue, as it's supposed to produces 100Hz on PB1 at 16, 8, 4, 2 and 1MHz
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() { // 100Hz on pin PB1
digitalWrite(LED_BUILTIN, HIGH);
delay(5);
digitalWrite(LED_BUILTIN, LOW);
delay(5);
}
The results are:
16MHz PLL : 100Hz
8MHz internal osc : 100Hz
4MHz internal osc : 25Hz
2MHz internal osc : 50Hz
1MHz internal osc : 100Hz
I looked in wiring.c if i could see something obvious going wrong with the clock prescaling but could not find a cause.
I suspected it has to do with clock prescaling, because the ADC clock (manually prescaled by me) also slowed down by a factor 8 while I expected a factor 2 when I switched from 8MHz to 4MHz.
On the board managers release 1.5.2 the delay worked fine and I got 100Hz on all clock frequencies.
Took some time during lunch to narrow this down. Breaking change seemed to occur @ e8209f4
If you can get passed the compilation error on the '85 here, you'll see bad clocking. But not at the commit previous:
579388e
Please use supplied patch and confirm things are working again. I don't know if the patch is technically what we want, but it sure makes the waveforms better. Note the boards.txt changes- it requires a restart of the IDE and a reflash of the bootloader to set the fuses.
0001-Fix-up-clocks-4mhz.patch