Any changes listed at the top, without a version number above thenm, have not been in a release yet, but can be downloaded from github for manual installation.
- Refurbish and standardize all variant files.
- Add defines for all differential channels and gain options
- Remove legacy PIN_xn defines from parts that had them
- Ensure all parts have standard PIN_An and PIN_Pxn defines
- Ensure consistent defines for peripheral pins.
- Convert all PROGMEM arrays that contain PORT/PIN/etc registers to contain uint8_t's (all applicable registers are at address < 256) (this was always done on "modern" core).
- Add defines for the pins used for Serial in a consistent manner.
- Format variant files consistently.
An
(analog channel) defines and differential channels have high bit set, so the core can differentiate them from digital pin numbers.- All reference defines get the bits shifted into position with the ADC_REF() macro, so the reference can be applied with less code at runtime. This saves time and flash (around 30 clocks, 24 bytes)
- Create variant files for 841, 828, 1634, including new pin mapping option for 1634 which is better than that awful old one
- All functions that take a pin number or analog channel will test the high bit. They will interconvert as needed.
- Add support for tuning based on values stored in flash (if bootloader in use - at end just before version number), or at end of EEPROM (if no bootloader - must set EESAVE for this to work)
- Remove the second core that had been used for 841/828/1634
- analogRead():
- Add support for ADC noise reduction mode on parts that have that functionality.
- Add support for analogRead() with differential channels and available gain options.
- analogReference() immediately sets the reference bits (necessary if using XREF option for x7 parts, probably helps whenever cap is used with first few readings, otherwise harmless) *
- Compile-time error checking for passing constants to analogRead() that aren't analog channels or digital pins with ACD input, calling analogRead() on x313 (with no ADC).
- Runtime error checking invalid ADC calls *
- PWM and Timers:
- PWM with 841/441/828 will leave COM bits untouched, and just turn the TOCCMOE bits on and off, so it won't stomp on user code that changes the timer mapping or configuration. (#471)
- Code commenting has been edited for accuracy and improved. In the past, we were always trying to "guess" at what future parts might have for registers, and testing for registers rather than part identities. But this is now a core for a static set of parts (Well, except maybe the ATtiny26, which someone is paying me to add). Though we always should have done this, there's now no excuse for not putting comments indicating what parts these are trying to select for (at least where the #ifdef'ed code is dealing with some idiosyncrasy of specific parts. Which was like, most of the time this was done). This used to make wiring.c in particular very hard to read "Okay, if TCCR1E exists, they're doing some really crazy shit. Which parts does this apply to? I'm here to change something on the ATtiny x5 parts - which pieces of this code should I be looking at?"
- Improve TinySoftwareSerial:
- setTxPin() now works correctly.
- x61 has three options for the RX pin.
- Add option to disable RX. TX is automatically disabled if you don't reference Serial.
- Tighten up the assembly by making use of SBIC, and make sure it waits until the start of the first stop bit always but never longer than necessary.
- Improve overall efficiency of initialization (it was guilty of SBI/CBI macro abuse)
- As of 2/2/22 it now appears to work.
- Todo: Further platform.txt enhancements.
- Adapt digitalI/O functions to use PUE registers if appropriate.
- PWM on third channel on x61
- Support REMAP and USIPP registers on x41 and x61 respectively.
- Add some dumb IO pin related shit to ATTinyCore.h, see that README.md
- Micronucleus
- Design hardware for testing with.
- Add pins to pins_usb.
- Implement new entry condition options.
- Create template bootloaderconfiguration with pins_usb content integrated
- Create configurations for each combination of board and entry condition:
- Both pin options for 84, 841
- Both LED options for 87, 167
- 861, 85, 88, 1634
Optiboot improvementsSupport compile-time specification of soft serial pins, use to support the stock software serial pin options on x61.Support REMAP register of 841/441.Minor general code cleanup to get rid of crap that isn't related to ATTinyCore (ie, stop pretending that it would still work for non-tiny parts)Makefile.tiny and makeall.tiny.bat are now autogenerated by create_boards_txt.py since they should match what boards.txt says.
- Quite possible that optiboot will be replaced with urboot - here's where we really need it.
- Boards.txt refactor.
- Make most boards compile Bare Minimum example.
- Add support for external clock on all parts.
- Add support for 2 and 4 MHz from internal on all parts. This is done by dividing the 8 MHz clock. THE BOOTLOADER RUNS AT 1 MHz IN THIS CASE - I am NOT going to build a million versions of Optiboot Unfortunately it's looking like I will need to build a still ridiculous amount of them.
- boards.txt shallt not be manually edited, it is created with create_boards_txt.py. The file size is untenable to maintain by hand!
- Attend to platform.txt and boards.txt UI constistancy issues from email
- Deal with missing data from header files for some parts:
- SIGRD/RSIG,
- and PCMSK on 4313 which should have been PCMSK0 (#564)
- TIM/TIMER
- Remove bloat from hardware serial due to CBI/SBI abuse; in multiple place the CBI or SBI macro was used in 4 lines back to back... but what they passed to it was a
_BV(member_variable)
. The calculation of the leftshifted value cannot be done ahead of time (classes kneecap the optimizer). That saved around 100 bytes. Saved over a hundred more for the 841, 441, and 1634 by doing the split file trick. - Todo: Optiboot
- Adjust optiboot upload speeds, they were not chosen well previously (sorry, this does mean burn bootloader may be required - that's why it's 2.0.0 not 1.x.x; they will work better, and in some cases, upload more quickly too - particularly where there is no hardware USART.
- Fix issue with ATtiny48 binaries not writing (something is clearly wrong with the size checking, they should not have built like that. (#575))
- Write script to generate new makefile. Each speed for each part needs two builds 1 second (autoreset, no run on POR), and 8 second (no autoreset, do run on POR).
- 441, 841, and 1634 need one for each of their two ports.
- Programmers.txt
- Reorder the entries in descending order of usefulness.
- Add support for FTDI sync bitbang with those chinese adapters with the ISP headers
- ATTinyCore.h now does more than just act as a placeholder.
- Switch to gnu++17 standard instead of gnu++11.
- Fix macros like constrain, min, max, etc so they do not do unexpected things when given arguments with sideffects
- 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 (#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
- Correct severe regression in timekeeping on 841, 441, 1634, and 828 in version 1.4.0 (#445, 447)
- Correct issue with included bootloaders for MH ET tiny88 micronucleus boards actually not working... re-bootload with ISP programmer to fix with the new bootloaders. (#439)
- Add full suite of entry mode bootloaders for tiny88 micronucleus.
- Fix issue with upgrading bootloader with Micronucleus.
- Correct with timekeeping on x61 parts (1.4.0 regression in timer initialization).
- Use learnings from Micronucleus f/w source code to safely change internal oscillator by dramatic amounts on the t841 (and others, but most relevant here)
- Change "USB tinyISP" to "USB tinyISP FAST", and increase bit clock significantly. Previously we had the normal version at 200kHz and the SLOW at 125kHz, which was redundant, and made the USBtinyISP agonizingly slow, even with the tiny memory of these parts.
- Add in ASCII art pinout to pins_arduino.c for TinyX8_MH pin mapping (#434 - thanks @AingeruJM!)
- Add support for MH-Tiny T88 pin mapping.
- Add support for MH-Tiny T88 boards, because I just got a bunch and it didn't look too hard.
- Add support for the DigiSpark Pro pin mapping for the ATtiny87/167 with other bootloader options.
- Trim out references to unsupported parts from Servo library. I am almost positive it did not work on a significant number of parts! I think it should generally work now...
- Servo will clean up after itself if you detach all the servos.
- Fix ATtiny2313/2313A related issues (getting the #defines from the headers for the A, while still being able to upload)
- PLL as Timer1 clock source now actually enables the PLL.
- noTone() now correctly cleans up after Tone().
- Signifiant cleanup in wiring.c
- Included Servo library now works with PLL as Timer1 clock source (trivial fix - I clearly never looked into it when I merged in the 8-bit servo code!). Now it also lets you use Servo if you have external crystal running at unsupported speed if you use the PLL for Timer1...
- Major improvements to part-specific documentation pages.
- Remove the HAVE_BOOTLOADER mechanism, which existed to clean up timer registers that a bootloader may have left configured. Neither Optiboot not Micronucleus do this, so HAVE_BOOTLOADER had no function. Is now commented out in the pins_arduino's where it existed, as is the code it enabled. Saves a small amount of flash, and makes init() in wiring.c far easier to follow once the do-nothing code isn't visible.
- Correct a number of typos in boards.txt
- Fix several missing optiboot bootloaders
- Add support for setting CLKPR so bootloaders off internal at speeds other than 8 and 1 MHz can work at less agonizing baud rates.
- Fix inverted LED blinking on all parts
- Fix LED blinking on x61 family (#264)
- Add support for VUSB uploads to Digispark (t85, t167), Micronucleus/California STEAM (t84a) Wattuino (841). Requires board manager installation, or another compatible board, in order tp pick up the support files.
- Add support for 16 MHz with INTERNAL oscillator on ATtiny841, 441. Support is still experimental; there are a few caveats - see ATtiny441, 841
- Tested voltage dependence of internal oscillator, allowing significant simplification of the bootloader files for the ATtiny841/441,828,1643.
- Support PIN_Pxn notation.
- Document a few really odd GPIO features on ATtiny841, 441, 828.
- Document minimum baud rate of builtin software serial "Serial" for parts without hardware serial.
- Remove TUNED_OSCCAL_VALUE defines from pins_arduino.h for variants; this was set to OSCCAL in those files (despite the fact that we tested for whether it was defined before trying to use it!), leading to compiled binaries copying OSCCAL to a register and then writing it back. (thanks @ArminJo)
- Fix bug when switching between I2C master and slave modes on USI devices (thanks @martin-schmied1)
- Fix pulseIn(), both pulse length, and timeout (the latter is broken in official avr core too) (#384)
- Add pulseInLong()
- (untested) Don't generate .lst unless told to 'export compiled binary' (#379 - though note that that issue also appears to involve a problem with their compiler, or maybe just an extremely perverse username that's breaking things)
- 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 using 32K ULP as clock source on 828.
- A bit of boards.txt cleanup.
- Serial hogged an unnecessary amount of ram on the 841/441/1634. Pulled in the latest version of HardwareSerial from the official AVR core; this sorts out that issue.
- Add printf support to printable class.
- 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)
Prior to 1.3.3, a proper changelog was not kept. See the releases for information about changes introduced during that timeframe.