Skip to content

Releases: SpenceKonde/ATTinyCore

1.5.2 - New pinout images - and Micronucleus works on Windows again

11 Mar 16:18
c0a1f40
Compare
Choose a tag to compare

Quick fix to get Micronucleus working on Windows again, because it was broken there, Let me know if this has caused any issues.

This fixes the path to the binaries, and no longer tries to use the old "launcher", and the windows files have been repackaged as .zip files, because the .tar.bz2 files, no matter how I nested the folders before tar-ing, came out wrong. Zip worked fine, and I was getting sick and tired of this crap.

1.5.0 - Fix n' feature roundup prior to 2.0.0

26 Feb 17:09
20464b4
Compare
Choose a tag to compare

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

1.4.1 - Fix timing regressions on 841, 1634, 828 and tiny88 micronucleus bootloader

10 Aug 12:54
Compare
Choose a tag to compare

In the short time since 1.4,0 was released, some serious regressions were discovered: Changes made very late in the development cycle inadvertantly broke all time keeping (millis, micros, and delay) on the ATtiny x61, x41, 1634, and 828 (in different ways - the 861's millis timer simply never got turned on, while the others had interrupts disabled, which apparently causes micros() to behave bizarrely, which in turn leads to delay, which relies on it, passing by lightning fast.

Some users with the MH-ET tiny88 board also tried upgrading the bootloader and discovered the one I packed with the core was non-functional (in my defense, I just used the files that were in common circulation in the micronucleus packages - I shouldn't have assumed that just because they were in a bunch of repos around the internet, that they actually work! D+ and D- were swapped. Rebuilt the bootloader, and in the process, also did all the t88 bootloader building planned for micronucleus, so it now has a set of bootloaders with various entry methods. I came up with what I think is a really clever way of keeping the most convenient entry mode, reset, from bricking the board: You try to read the reset pin. If it's a 0, it could be disabled and LOW, but if it's a 1, you know it is both enabled and the pin is high. Hence the "rescue" procedure if you put this new version of the external reset entry mode on a reset-disabled board is just to apply power with reset tied to Vcc, then put a more appropriate bootloader version on.

1.4.1 fixes these serious issues, and all users - especially those on 1.4.0 - are encouraged to upgrade.

This is the version for board manager install

1.4.1 - Fix timing regressions on 841, 1634, 828 and tiny88 micronucleus bootloader

10 Aug 12:51
Compare
Choose a tag to compare

In the short time since 1.4,0 was released, some serious regressions were discovered: Changes made very late in the development cycle inadvertantly broke all time keeping (millis, micros, and delay) on the ATtiny x61, x41, 1634, and 828 (in different ways - the 861's millis timer simply never got turned on, while the others had interrupts disabled, which apparently causes micros() to behave bizarrely, which in turn leads to delay, which relies on it, passing by lightning fast.

Some users with the MH-ET tiny88 board also tried upgrading the bootloader and discovered the one I packed with the core was non-functional (in my defense, I just used the files that were in common circulation in the micronucleus packages - I shouldn't have assumed that just because they were in a bunch of repos around the internet, that they actually work! D+ and D- were swapped. Rebuilt the bootloader, and in the process, also did all the t88 bootloader building planned for micronucleus, so it now has a set of bootloaders with various entry methods. I came up with what I think is a really clever way of keeping the most convenient entry mode, reset, from bricking the board: You try to read the reset pin. If it's a 0, it could be disabled and LOW, but if it's a 1, you know it is both enabled and the pin is high. Hence the "rescue" procedure if you put this new version of the external reset entry mode on a reset-disabled board is just to apply power with reset tied to Vcc, then put a more appropriate bootloader version on.

1.4.1 fixes these serious issues, and all users - especially those on 1.4.0 - are encouraged to upgrade.

This is the version for manual installation.

1.4.0 - Micronucleus support! 16MHz internal 841! Tons more!

25 Jul 01:52
Compare
Choose a tag to compare

This release introduces the long-awaited, oft-requested support for the Micronucleus VUSB bootloader! When installed through board manager, (manual installs require having already installed micronucleus-using package through board manager), you can now upload to those USB ATtiny85 "Digispark", ATtiny167 "Digispark Pro", ATtiny841 "Nanite", ATtiny88 "MH Tiny" and ATtiny84 boards! This has been a huge update - and there's much more planned to further enhance this functionality. You can also load the Micronucleus bootloader onto these using an ISP programmer, or upgrade the bootloader to the version included with ATTinyCore via USB. All the usual ATTinyCore features and options are available too (provided they make sense)!

This also introduces improvements to the bootloaders for the 841, 441, 828, and 1634 that should help alleviate the issues with the the internal oscillator's voltage dependence, and the >4.5v version no longer requires a different bootloader, and achieves approximately 8 MHz by nudging OSCCAL down, instead of by compiling for a slightly faster clock speed. Adventurous users of the ATtiny841 can now crank the internal oscillator all the way up to approximately 16MHz - some parts can juuuust barely make it - but so far all the ones I've tested were able to do it. There are some significant caveats to this (beyond the fact that we can't guarantee that we actually got right on 16MHz - it's not tuned... serial receiving and transmission won't work while writing the EEPROM).

Finally, we have a MASSIVE backlog of small (and not-so-small) fixes:

  • Servo was almost certainly broken on some parts, and should now work on them. Please report and emergent issues on Servo - breakage is not impossible, and I'm not well set up for testing it.
  • Servo now works parts with the PLL when the PLL is used to ramp up the speed of Timer1 (though this provides no benefit when it's being used for Servo).
  • The option to use the PLL for Timer1 on parts with a PLL (x61 and x5) now actually works.
  • noTone() now cleans up after itself.
  • Bootloaders have been rebuilt to correct the inverted LED flash.
  • The longstanding bug in the ATtiny861 optiboot bootloader's LED flash is fixed, finally.
  • A small number of missing bootloaders are no longer missing.
  • The PIN_Pxn notation which I have been promoting to refer to pins by port and bit now works. Previously I had added PIN_xn defines to do the same thing... and then Arduino added PIN_An constants that refer to the digital pin number of the specified analog pin.
  • pulseIn() now honors the timeout parameter correctly (previously, a bug in the assembly routine - which was or is present in all versions of Arduino that I haven't gotten this fix into and always had been - caused the timeout to count down 16/11ths as fast as it was supposed to before the pulse it was measuring started.
  • pulseInLong() added.
  • digitalRead() no longer turns off PWM. (this differs from the official core behavior, but it's dumb behavior - "read" should not alter the thing it's reading)
  • Improved handling of the oddly named registers in the ATtiny2313 (vs the much more common ATtiny2313A)
  • Removed some useless code that still got compiled in and took up space from several places in the core.
  • Major housecleaning in wiring.c and some other libraries.

There is also more to come for ATTinyCore - a long overdue migration of the four parts that currently use the "tinymodern" core to the main core is coming, there are a number of optimizations to reduce flash usage in the works, plus the "fast digital I/O" functions. The USB libraries to support the micronucleus boards acting as keyboards, mice, and serial ports is coming, as is a suite of new micronucleus bootloader binaries with support for all the entry conditions that look useful, including combinations of them.

Further in the future, you can expect micronucleus bootloader support for all the parts that don't have it, along with hardware from my Tindie store to use it with! Take it for a spin, see what I broke in the process, and report them to me so I can unbreak them in 1.4.1 :-)

This is the version for manual installation.

1.4.0 - Micronucleus support! 16MHz internal 841! Tons more!

25 Jul 01:51
Compare
Choose a tag to compare

This release introduces the long-awaited, oft-requested support for the Micronucleus VUSB bootloader! When installed through board manager, (manual installs require having already installed micronucleus-using package through board manager), you can now upload to those USB ATtiny85 "Digispark", ATtiny167 "Digispark Pro", ATtiny841 "Nanite", ATtiny88 "MH Tiny" and ATtiny84 boards! This has been a huge update - and there's much more planned to further enhance this functionality. You can also load the Micronucleus bootloader onto these using an ISP programmer, or upgrade the bootloader to the version included with ATTinyCore via USB. All the usual ATTinyCore features and options are available too (provided they make sense)!

This also introduces improvements to the bootloaders for the 841, 441, 828, and 1634 that should help alleviate the issues with the the internal oscillator's voltage dependence, and the >4.5v version no longer requires a different bootloader, and achieves approximately 8 MHz by nudging OSCCAL down, instead of by compiling for a slightly faster clock speed. Adventurous users of the ATtiny841 can now crank the internal oscillator all the way up to approximately 16MHz - some parts can juuuust barely make it - but so far all the ones I've tested were able to do it. There are some significant caveats to this (beyond the fact that we can't guarantee that we actually got right on 16MHz - it's not tuned... serial receiving and transmission won't work while writing the EEPROM).

Finally, we have a MASSIVE backlog of small (and not-so-small) fixes:

  • Servo was almost certainly broken on some parts, and should now work on them. Please report and emergent issues on Servo - breakage is not impossible, and I'm not well set up for testing it.
  • Servo now works parts with the PLL when the PLL is used to ramp up the speed of Timer1 (though this provides no benefit when it's being used for Servo).
  • The option to use the PLL for Timer1 on parts with a PLL (x61 and x5) now actually works.
  • noTone() now cleans up after itself.
  • Bootloaders have been rebuilt to correct the inverted LED flash.
  • The longstanding bug in the ATtiny861 optiboot bootloader's LED flash is fixed, finally.
  • A small number of missing bootloaders are no longer missing.
  • The PIN_Pxn notation which I have been promoting to refer to pins by port and bit now works. Previously I had added PIN_xn defines to do the same thing... and then Arduino added PIN_An constants that refer to the digital pin number of the specified analog pin.
  • pulseIn() now honors the timeout parameter correctly (previously, a bug in the assembly routine - which was or is present in all versions of Arduino that I haven't gotten this fix into and always had been - caused the timeout to count down 16/11ths as fast as it was supposed to before the pulse it was measuring started.
  • pulseInLong() added.
  • digitalRead() no longer turns off PWM. (this differs from the official core behavior, but it's dumb behavior - "read" should not alter the thing it's reading)
  • Improved handling of the oddly named registers in the ATtiny2313 (vs the much more common ATtiny2313A)
  • Removed some useless code that still got compiled in and took up space from several places in the core.
  • Major housecleaning in wiring.c and some other libraries.

There is also more to come for ATTinyCore - a long overdue migration of the four parts that currently use the "tinymodern" core to the main core is coming, there are a number of optimizations to reduce flash usage in the works, plus the "fast digital I/O" functions. The USB libraries to support the micronucleus boards acting as keyboards, mice, and serial ports is coming, as is a suite of new micronucleus bootloader binaries with support for all the entry conditions that look useful, including combinations of them.

Further in the future, you can expect micronucleus bootloader support for all the parts that don't have it, along with hardware from my Tindie store to use it with! Take it for a spin, see what I broke in the process, and report them to me so I can unbreak them in 1.4.1 :-)

This is the version for board manager installation.

1.3.3 - 4MHz internal support on all parts, Wire bugfixes for 441/841 and more

15 Dec 04:06
Compare
Choose a tag to compare

This release adds a few requested features, streamlines the burn bootloader process (which may also fix an issue encountered with some programmers that mishandle the reset line between programming operations). All users are encouraged to update to this version. It will be available for board manager later tonight. The full list of changes is:

  • Add support for external CLOCK on 48/88/828. Document how to use external clock on other parts via manual AVRdude step (#355).
  • Fix bug with Wire library (#363)
  • Fix bug with using 32K ULP as clock source on 828.
  • A bit of boards.txt cleanup.
  • Reduce RAM usage on the 841/441/1634 when one but not both serial ports are in use. (#352)
  • Add printf support to printable class. (#367)
  • Add CLOCK_SOURCE define to identify clock source (#358)
  • Add support for 4MHz internal on all boards (#358)
  • Add support for 16.5MHz on x5 and x61 (#349)
  • Documentation improvements (#373, #375)
  • Burn Bootloader now executes as a single command; this should fix issues with some programmers. (#372)

As always report any problems through the Github Issues system - enjoy!
This is the version for board manager installation.

1.3.3 - 4MHz internal support on all parts, Wire bugfixes for 441/841 and more

15 Dec 03:54
7ce9d6b
Compare
Choose a tag to compare

This release adds a few requested features, streamlines the burn bootloader process (which may also fix an issue encountered with some programmers that mishandle the reset line between programming operations). All users are encouraged to update to this version. It will be available for board manager later tonight. The full list of changes is:

  • Add support for external CLOCK on 48/88/828. Document how to use external clock on other parts via manual AVRdude step (#355).
  • Fix bug with Wire library (#363)
  • Fix bug with using 32K ULP as clock source on 828.
  • A bit of boards.txt cleanup.
  • Reduce RAM usage on the 841/441/1634 when one but not both serial ports are in use. (#352)
  • Add printf support to printable class. (#367)
  • Add CLOCK_SOURCE define to identify clock source (#358)
  • Add support for 4MHz internal on all boards (#358)
  • Add support for 16.5MHz on x5 and x61 (#349)
  • Documentation improvements (#373, #375)
  • Burn Bootloader now executes as a single command; this should fix issues with some programmers. (#372)

As always report any problems through the Github Issues system - enjoy!
This is the version for manual installation.

1.3.2 - Bugfix release

25 Aug 20:34
Compare
Choose a tag to compare

This version remedies several problems introduced by 1.3.0 that prevent compiling sketches for x5 and x61 optiboot boards, and with the Servo_ATTinyCore library (which would only build for a small number of boards). All users are encouraged to upgrade.

This is the manual installation version.

1.3.2 - Bugfix release

25 Aug 20:37
Compare
Choose a tag to compare

This version remedies several problems introduced by 1.3.0 that prevent compiling sketches for x5 and x61 optiboot boards, and with the Servo_ATTinyCore library (which would only build for a small number of boards). All users are encouraged to upgrade.

This is the board manager version.