2.6.7 - Doubleheader release, combined 2.6.6 (which was skipped) and 2.6.7
2.6.7
- Add menu to select which set of PWM pins to use (there are a huge number of configurations on 24 pin chips, a few on 20 pin ones, and like 3 everywhere else. This covers both the TCA0 and TCD0 pins and allows setting the TCA pins to operate in buffered mode (with only 3 channels).
- Fix issue with the change to the comparator and logic libraries so it actually lets you make your own ISR.
- Bugfix - Change clockCyclesToMicroseconds, microsecondsToClockCycles, and clockCyclesPerMicrosecond back into macros instead of inlinable functions, as some libraries depend on them being valid constexprs (which an inlinable function is not)
- Bugfix - pinModeFast will now turn off pullups if they're on when a pin is set to output. otherwise, the result could be highly problematic. For example, a situation I ran into: I had a keypad matrix, 4x4, rows set input pullup, columns set output, low. The device woke up when a button was pressed, which pulled the row down. At that point (while the button was still pressed - wake is slow on computer timescales, but very fast on human ones), I would read the pins, and then swap the pin modes, so the rows were output-low, and the columns were input pullup. One of the columns would thus be pulled low through the depressed switch, I'd read the columns, combine the two. Since this was happening in an ISR, hence should be fast, I used the pinModeFast function (and direct port reads, since I cared about a whole nybble of each port). Then I'd set the rows back to input_pullup and the columns back to output, low, and then enter power-down sleep mode. However the pullups on the columns (output, low) were still on. While the effect on battery life was non-catastrophic (it had a several hundred mAh rechargeable battery, and the excess load was a little under half a milliamp, so the battery life would be expected to be nearly a month. But without the driven-low, pullup-enabled pins, the current was below my ability to measure (datasheet says typical 0.2uA - so it was about 2000 times expected). This is no longer possible - pinModeFast(pin, OUTPUT) will turn off the pullups on the pin if they're on. pinModeFast is now a 6 word 7 clock function in this case, which is disappointing, but I think this would catch more people than the number of people who need e
- Remove optimization menu as it was found to be incompatible with our implementation of Serial, and I had not a clue how to fix it but could see well enough that this would have required generating horrendously bad code. At some future time, a menu might go in there, but the options have to work. ()
- Enhancement: Choose PWM mapping pins from tools menu!
- Bugfix: printHexln was spelled printHexLn in keywords.txt
2.6.7 addendum (stuff belived released with 2.6.6 which was never a release)
Enhancement/bugfix: 2.6.5 was intended to add an optimization level submenu. Due to a typographical error, the menu was not shown (though no harm was done). That menu is now actually available.menu has been removed, it caused issues- Enhancement: Add a few more macros for getting information on peripherals and updated define reference.
- Critical Bugfix Correct regression in Wire.h regarding master+slave mode
- Bugfix: Attached pin interrupts on parts with less than 128k of flash were wasting 2 clocks before the user code was called and 3 clocks after, as well as 4 bytes. Small potatoes compared to the overall overhead of that abomination, but there's no need to push RAMPZ if there isn't a RAMPZ register (it reads as 0 and writes to it are ignored - so there was a donothing in/push and pop/out on parts without RAMPZ. And no tinyAVR parts have a RAMPZ.
- Bugfix: pinConfigure would under some circumstances fail because of a misspelled variable
- Bugfix: gcse was incorrectly left off at one step (whereit had little if any impact on flash use) regardless of the menu setting (which coulod not be changed anyway)