A Trinket, a button and a servo. Looking for help making them talk to each other

Hoping for some help with a project I’m working on. I’m using an Adafruit Trinket, a couple of servos and a button to make a high(er) tech ventriloquist dummy out of a cheap craft store stuffed bird. I created a small circuit with the Trinket mounted on a board along with all the connections. I triple checked the connections with a multimeter, made sure the servos both worked and ran a bunch of simple sketches on the Trinket to make sure it’s working as well.

I want it to do two things, randomly rotate the neck (which I’ve commented out for the time being) and most importantly, open the mouth when a button is pressed, close it when it’s not. What I see happen is mostly nothing. I can attach the button press to the onboard LED successfully, but when I try using either of the servos, nothing happens, though they seem to stutter whenever the servo interrupt refresh Adafruit calls out is included (Arduino Code | Trinket (& Gemma) Servo Control | Adafruit Learning System).

I’m not 100% sure I didn’t mess something up on the board connections, but I can’t help but think it’s code. Would someone mind taking a look to see if I’ve made an error?

#include <Adafruit_SoftServo.h>  // SoftwareServo (works on non PWM pins)

#define mouthButton 4
//#define LED 1
#define MOUTHPIN 3
#define HEADPIN 2

Adafruit_SoftServo neckServo, mouthServo;

int neckTime = 2000;
int currTime = 0;
int defaultDelay = 15;

void setup()
  // initialize the LED pin as an output.
  //pinMode(LED, OUTPUT);
  // initialize the SWITCH pin as an input.
  pinMode(mouthButton, INPUT);
  // ...with a pullup
  digitalWrite(mouthButton, HIGH);

  // Set up the interrupt that will refresh the servo for us automagically
  OCR0A = 0xAE;

  mouthServo.attach(MOUTHPIN);  // attaches the mouth servo

  //neckServo.attach(HEADPIN);  //attaches the head servo


void loop(){
  if (digitalRead(mouthButton) == HIGH) {
    //digitalWrite(LED, LOW);
  } else {
    //digitalWrite(LED, HIGH);

    currTime = 0;
    neckTime = (random(250,3000));
    currTime =  currTime+defaultDelay;


// The SIGNAL(TIMER0_COMPA_vect) function is the interrupt that will be
// Called by the microcontroller every 2 milliseconds

volatile uint8_t counter = 0;
  if (counter >= 20) {
    counter = 0;

and here’s a fritzring: Puppet fritzring diagram - Album on Imgur

I left the LED stuff in there to show what I had working but ONLY when the interrupt code was commented out. I’ll snap a photo of the actual circuit if it’ll help.

If this was a regular Arduino such as an Uno or Leonardo I would know how to give advice. But I have no knowledge of the Trinket or the Adafruit libraries you are using.

Several Things at a Time

Admittedly, I was gonna post over at Adafruit's forums first, but there seem to be people here that are more knowledgeable.

In my experience stuttering servos often indicates insufficient power.

Your Fritzing diagram suggests you are running two surveys off a 3.7v battery which I doubt is enough power.

I thought about that, but I tested that theory by running an Uno off the same battery with similar hookups and it worked great. I'd use the Uno, but it's too big to shove up the bird's... sternum to hide.

I'd use the Uno, but it's too big to shove up the bird's... sternum to hide.

The Nano is an Uno in a small package


The Nano is an Uno in a small package


Sure, but I didn't have one on hand for this project.

Regardless, I figured out my problem. I knew it was a dumb oversight on my part, I just didn't know where. Turns out, I was accidentally overclocking the Trinket. I'm using a 3v running at 8mhz, but I had my board selection in the IDE set to the 16mhz 5v board. Since it doesn't use dual communication freeways, I suspect it has no way of telling me "dude, wrong board".

Anyway, mouth is flapping, neck is spinning, I is grinning.