I have a sketch which works on Teensy 3.0 and fails to compile on Teensy 3.1. The culprit appears to be the Adafruit library for the MCP4725 DAC, which is on Github. I downloaded a fresh copy from github today, the error persists. Its uses TWBR which, it seems, is defined for Teensy 3.0 but not for 3.1.
Here is the relevant bit of the Adafruit library:
Here is the error in full.
I had a look in hardware/teensy/cores/teensy3/avr_emulation.h but didn't see TWBR in there. This thread indicates that Paul was looking at adding it, and of course something must ghave been done since it works with Teensy 3.0 ...
Here is the relevant bit of the Adafruit library:
Code:
void Adafruit_MCP4725::setVoltage( uint16_t output, bool writeEEPROM )
{
uint8_t twbrback = TWBR;
TWBR = 12; // 400 khz
Wire.beginTransmission(_i2caddr);
if (writeEEPROM)
{
Wire.write(MCP4726_CMD_WRITEDACEEPROM);
}
else
{
Wire.write(MCP4726_CMD_WRITEDAC);
}
Wire.write(output / 16); // Upper data bits (D11.D10.D9.D8.D7.D6.D5.D4)
Wire.write((output % 16) << 4); // Lower data bits (D3.D2.D1.D0.x.x.x.x)
Wire.endTransmission();
TWBR = twbrback;
}
Here is the error in full.
Code:
Arduino: 1.0.5 (Windows 7), Board: "Teensy 3.1"
F:\Arduino\arduino-105-td117\hardware\tools\arm-none-eabi\bin\arm-none-eabi-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mcpu=cortex-m4 -DF_CPU=96000000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -mthumb -nostdlib -D__MK20DX256__ -DTEENSYDUINO=117 -fno-rtti -felide-constructors -std=gnu++0x -DUSB_MIDI -DLAYOUT_CANADIAN_FRENCH -IF:\Arduino\arduino-105-td117\hardware\teensy\cores\teensy3 -IF:\Arduino\arduino-105-td117\libraries\Wire -IF:\Arduino\sketches\libraries\Adafruit_MCP4725 C:\Users\Chris\AppData\Local\Temp\build7744858441146534684.tmp\midi2cv_01.cpp -o C:\Users\Chris\AppData\Local\Temp\build7744858441146534684.tmp\midi2cv_01.cpp.o
Using previously compiled: C:\Users\Chris\AppData\Local\Temp\build7744858441146534684.tmp\Wire\Wire.cpp.o
Using previously compiled: C:\Users\Chris\AppData\Local\Temp\build7744858441146534684.tmp\Wire\utility\twi.c.o
F:\Arduino\arduino-105-td117\hardware\tools\arm-none-eabi\bin\arm-none-eabi-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mcpu=cortex-m4 -DF_CPU=96000000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -mthumb -nostdlib -D__MK20DX256__ -DTEENSYDUINO=117 -fno-rtti -felide-constructors -std=gnu++0x -DUSB_MIDI -DLAYOUT_CANADIAN_FRENCH -IF:\Arduino\arduino-105-td117\hardware\teensy\cores\teensy3 -IF:\Arduino\arduino-105-td117\libraries\Wire -IF:\Arduino\sketches\libraries\Adafruit_MCP4725 -IF:\Arduino\sketches\libraries\Adafruit_MCP4725\utility F:\Arduino\sketches\libraries\Adafruit_MCP4725\Adafruit_MCP4725.cpp -o C:\Users\Chris\AppData\Local\Temp\build7744858441146534684.tmp\Adafruit_MCP4725\Adafruit_MCP4725.cpp.o
F:\Arduino\sketches\libraries\Adafruit_MCP4725\Adafruit_MCP4725.cpp: In member function 'void Adafruit_MCP4725::setVoltage(uint16_t, bool)':
F:\Arduino\sketches\libraries\Adafruit_MCP4725\Adafruit_MCP4725.cpp:67:22: error: 'TWBR' was not declared in this scope
I had a look in hardware/teensy/cores/teensy3/avr_emulation.h but didn't see TWBR in there. This thread indicates that Paul was looking at adding it, and of course something must ghave been done since it works with Teensy 3.0 ...