I'm working on a project that uses a Teensy 3.1, TFT display and an si5351 breakout board.
Everything seems to work fine with the encoder changing the frequency and the button(switch) on the encoder changing the tuning steps. Originally, I had the display and the si5351 breakout board powered from the 3.3v pin of the Teensy 3.1. When the first Teensy died I changed this and powered both from an external 3.3v regulator, thinking this might have caused the problem. A week later the second Teensy 3.1 died. At this time both boards draw about 380ma and have no 3.3v output. I assume the processor is fried. I ordered two more but before I try them, I would like a little advise.
The wiring and code can be seen here. Any help would be appreciated.
Code:
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_S6D02A1.h> // Hardware-specific library
#include <SPI.h>
#include <Wire.h>
#include <si5351.h>
//#include <Encoder.h>
#include <Rotary.h>
#include <Bounce2.h>

// This examples uses the hardware SPI only. Non-hardware SPI
// is just too slow (~8 times slower!)

#define  BACKLIGHT  0  // backlight control signal
#define sclk 13 // Don't change
#define mosi 11  // Don't change
#define cs   2
#define dc   3
#define rst  1  // you can also connect this to the Arduino reset
#define ENCODER_BTN  16  //I use this instead of TuneSW

Adafruit_S6D02A1 display = Adafruit_S6D02A1(cs, dc, mosi, sclk, rst);  // Invoke custom library

Rotary tune(15, 14); //pins 15 and 14 used for encoder
Si5351 si5351;
//const int8_t TuneSW =18;    // low for fast tune - encoder pushbutton(I don't use this)
volatile uint32_t vfo = 1420000000ULL / SI5351_FREQ_MULT; //start freq - change to suit
volatile uint32_t LSB = 899950000ULL;
volatile uint32_t USB = 900150000ULL;
volatile uint32_t bfo = 900150000ULL; //start in usb
volatile uint32_t radix = 100;
volatile uint32_t lastVFO;
int myOldList[9]= {0,0,0,0,0,0,0,0,0};
uint32_t Bands[] {
 1800000L, 3500000L, 7000000L, 10100000L, 14200000L, 18065000L, 21000000L, 24890000L, 28000000L
}; //not used at the moment
boolean changed_f = 0;
String tbfo = "USB";

void setup(void) {

  Serial.begin(9600); // debug console
  Wire.begin();
  pinMode(BACKLIGHT, INPUT_PULLUP); // yanks up display BackLight signal 
  pinMode(ENCODER_BTN, INPUT_PULLUP);  // tuning rate = high "radix"
  attachInterrupt(14, chk_encoder, CHANGE);  //I attach interrupts to encoder pins
  attachInterrupt(15, chk_encoder, CHANGE);  //but use the same Interrupt Service Routine                                                                                           //(chk_encoder())
  si5351.init(SI5351_CRYSTAL_LOAD_8PF,0);
  //si5351.set_correction(157);
  // Set CLK0 to output vfo plus IF frequency with a fixed PLL frequency
  si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
  si5351.set_freq((vfo * SI5351_FREQ_MULT) + bfo, SI5351_PLL_FIXED, SI5351_CLK0); 
  //volatile uint32_t vfoT = (vfo * SI5351_FREQ_MULT) + bfo; //test stuff
  tbfo = "USB"; //for lower left display display
  // Set CLK2 to output bfo frequency
  si5351.set_freq( bfo, 0, SI5351_CLK2);

  display.initR(INITR_BLACKTAB);   // initialize a S6D02A1S chip, black tab
  SPI.setClockDivider(SPI_CLOCK_DIV2); // crank up the spi
  uint16_t time = millis();
  display.setRotation(1); // 0 - Portrait, 1 - Lanscape
  display.fillScreen(S6D02A1_BLACK);
  display.setTextWrap(true);
  delay(500);
  //testdrawrects(S6D02A1_GREEN);
  delay(500); 
  setUpDisplay();
  display_frequency();
  display_radix(); 
}

void loop() { 

 if(changed_f)     //this flag is changed to yes(1) when the encoder changes
 {   
    display_frequency();
    //synt.simple_set_frequency(CLK0, frequency*F_MULT); 
    si5351.set_freq((vfo * SI5351_FREQ_MULT) + bfo, SI5351_PLL_FIXED, SI5351_CLK0);
     si5351.drive_strength(SI5351_CLK0,SI5351_DRIVE_8MA);
    if (vfo >= 10000000ULL & tbfo != "USB")
    {
      bfo = USB;
      tbfo = "USB";
      si5351.set_freq( bfo, 0, SI5351_CLK2);
      Serial.println("We've switched from LSB to USB");
    }
    else if (vfo < 10000000ULL & tbfo != "LSB")
    {
      bfo = LSB;
      tbfo = "LSB";
      si5351.set_freq( bfo, 0, SI5351_CLK2);
      Serial.println("We've switched from USB to LSB");
    }
    changed_f = 0;        //and cleared back to no(0) after updates are made to the si5351
 }
 if (get_button())
  {
    switch (radix)
    {
      case 1:
        radix = 10;
        break;
      case 10:
        radix = 100;
        break;
      case 100:
        radix = 1000;
        break;
      case 1000:
        radix = 10000;
        break;
      case 10000:
        radix = 100000;
        break;
      case 100000:
        radix = 1;
        break;
    }
    display_radix();
  }
}

// show frequency
void display_frequency() {
    //lastVFO = vfo;
    char string[80];   // print format stuff  - I always have to look this up :)
    sprintf(string,"%d.%03d.%03d",vfo/1000000,(vfo-vfo/1000000*1000000)/1000,
          vfo%1000 );
    display.setCursor(35, 5);
    display.setTextColor(S6D02A1_GREEN,S6D02A1_BLUE); //full display blanking -
    display.setTextSize(2);                                                              //you really need the
    display.print(string);                                                                  //2nd parameter to keep the
}                                                                                                     //display from flickering

void set_frequency(short dir)
{                                         
  if(dir == 1)                 //This routine is called by the Interrupt Service Routine chk_encoder()
    vfo += radix;            //which sets the vfo to its new value up or down plus or minus the
  if(dir == -1)               //the step size(radix)   
    vfo -= radix;
  changed_f = 1;          //it also sets this yes/no flag to yes to tell the loop that there has been a
}                                  //a change in frequency

void chk_encoder(){                                               //This routine (ISR) is called by the Arduino
   //Serial.println("inside encoder");                       // every time the encoder changes. Interrupts
    unsigned char result = tune.process();               // tell microprocessors, "STOP WHAT YOU
    if (result) {                                                          // ARE DOING!....and take care of me before
    //Serial.println(result == DIR_CW ? 1 : -1);     //going any further"
    if (result == DIR_CW)                                      //calls set_frequency() with a +1 or -1
    set_frequency(1);
  else if (result == DIR_CCW)
    set_frequency(-1);   
  }
}
void setUpDisplay(){
    //display.fillRect(1,1,158,25,S6D02A1_BLUE);
    //display.Color565(245, 179, 190);
    display.fillScreen(S6D02A1_BLUE);
    //display.fillRect(0,5,158,23,S6D02A1_BLUE);
    display.fillRect(1,1,13,24,S6D02A1_RED);
    //display.fillRect(1,1,13,24,Color565);
    display.drawFastVLine(0, 0, 25, S6D02A1_WHITE);
    display.drawFastVLine(159, 0, 25, S6D02A1_WHITE);
    display.drawFastHLine(0,0,160,S6D02A1_WHITE);
    display.drawFastHLine(0,25,160,S6D02A1_WHITE);   
    display.setCursor(1, 5);
    display.setTextSize(2);
    display.setTextColor(S6D02A1_GREEN);
    display.println("A");
//    display.setCursor(1, 90);
//    display.setTextSize(1);
//    display.setTextColor(S6D02A1_GREEN);
//    display.println("USB     RIT off     100Hz");

}

/**************************************/
/* Read the button with debouncing    */
/**************************************/
boolean get_button()
{
  if(!digitalRead(ENCODER_BTN))
  {
    delay(20);
    if(!digitalRead(ENCODER_BTN))
    {
      while(!digitalRead(ENCODER_BTN));
      return 1;
    }
  }
  return 0;
}

void display_radix()
{
  //display.fillRect(0,90,158,24,S6D02A1_BLUE);
  display.setTextSize(1);
  display.setTextColor(S6D02A1_GREEN,S6D02A1_BLUE);
  display.setCursor(110, 85);   
  //display.println("USB     RIT off     100Hz");
  switch (radix)
  {
    case 1:
      display.print("    1");
      break;
    case 10:
      display.print("   10");
      break;
    case 100:
      display.print("  100");
      break;
    case 1000:
      display.print("   1k");
      break;
    case 10000:
      display.print("  10k");
      break;
    case 100000:
      //display.setCursor(10, 1);
      display.print(" 100k");
      break;
      //case 1000000:
      //display.setCursor(9, 1);
      //display.print("1000k"); //1MHz increments
      //break;
  }
  display.print("Hz");
}