1.5.0 - Fix n' feature roundup prior to 2.0.0
It has become apparent that the changes I'm currently developing are quite substantial - and I've decided to release the changes currently checked into master as a 1.5.0 Interim version, as it has been faaaar too long since I did a release, and there are far too many small and medium improvements and fixes that you all are missing out on if you're using the board manager releases. I'd also like to make sure I get bug reports on the stuff going into 1.5.0 (I'm sure I've written some bugs), so it will be fixed for next release!
Before we go any farther, I want to give a huge thank you to @yumkam and @cburstedde for the great enhancements they contributed! Yumkam's pseudo-fast digital I/O improvements are a great middle-ground between Fast Digital I/O (which can't be done automatically without breaking compatibility, since stuff depends on them not being near-instantaneous - but that is not a universal free pass for slow, inefficient digital I/O. ) and the agonizingly slow stock implementations. @cburstedde's improvements are less visible, but no less important: millis() and micros() drift is now essentially as accurate as the clock, on all frequencies, even the wacky ones! These are probably two of the most visible changes in the release - and all I had to do is merge them :-)
Also, a lot of people have worked to get the Micronucleus usb upload tool rebuilt and available for all Arduino supported platforms; this should address issues installing via board manager on ARM platforms (which previously didn't have a Micronucleus tool) - big thanks to them as well; I certainly am not qualified to deal with software that runs on a desktop machine - if I can't address all of it's ram with 16 bits, programming it is above my pay grade :-)
Beyond that, I'm just gonna copy-paste the changelog:
- Dramatic improvement in execution time and flash use with constant pins for digitalWrite/etc (thanks @yumkam!)
- Improvements to millis and micros timing, as well as delayMicroseconds particularly for oddball frequencies. (big thanks to @cburstedde!)
- Update to Micronucleus 2.5 upload tool, now available for all Arduino platforms (#465, #477)
- Add new rationalized pinout for x61
- Correct bug with pin definitions for I2C pins on the ATtiny x61 series (#455)
- Improve timing calculations for Wire on USI devices (#455)
- Correct critical regression introduced in 1.4.0 where PWM controlled by timer 1 would have 1/4th of the expected duty cycle and frequency
- my apologies that this has been uncorrected so long (#470)
- Fix Serial RX on parts that use tinySoftSerial - LTO broke this because the ring buffer was updated in the ISR but none of the variables were declared volatile... (#472)
- Correct name of bootloader file for 841 Micronucleus
- Add missing bootloader options for 841/441 parts
- Correct documentation for x313 parts to correctly reflect number of available PWM pins
- Clarify USBTinyISP programmer options (#507)
- Add several missing programmers, improve programmers list
- Fix Timer1 PLL clock source menu option on x5, x61 (1.4.0 fix still didn't do it!)
- Fix x313 pinout image to reflect OC0B's existence
- Add in new Adafruit_NeoPixel functions to tinyNeoPixel
- Add Serial.setTxBit() for parts that use tinySoftSerial. Call it before Serial.begin() to move the Tx pin to another pin/bit on the same PORT (#443)
- Correct PWM frequency on ATtiny x5 and x61 parts operating below 3 MHz (#463)
- Move PWM on pin 1 (PB1) on x5 to timer1 instead of timer0
- Select /32 prescaler where available when operating with a system clock between 3 and 8 MHz, moving PWM on those pins back to the targeted 500 Hz to 1 kHz range
- Correct WGM for Timer 1 PWM on x7 to phase correct (0b0001) rather than fast (0b0101) pwm modes