User Tools

Site Tools


Quick Reference

Frequently requested info

  • GPIO output is 20 mA max per pin, same as a regular Arduino.
  • I2C pins are Pin 0 (I2C data/SDA) and Pin 2 (I2C clock/SCL).
  • USB communication uses pins #3 and #4. Using these pins for your circuit can interfere with the USB interface, e.g. reprogramming the Digispark. So it’s a good idea to provide some sort of disconnect ability if you use either of these two pins.
  • PWM output available on Pins 0, 1, 4.
  • LED is on P1 for all Digispark labeled Rev2 or higher., P0 for those with no Rev label.
  • All Rev3 Digisparks are counterfeit! (we never made a rev3)
  • VIN pin takes 7-12v (6-32 may work but over 12 will probably need some heat sinking) and can output 500ma (but over 100-200 might need some heat sinking)
  • 5V pin takes 4.5-5.5v (3v+ may work, but not supported)
  • USB connector takes 5v (4.5-6v may work but not supported)
  • Pin 3 has a 1.5K pull-up (for USB communications)
  • Pin 5 has some limitations it cannot handle as much current is outputs more like 3.6v - but works fine for most non-current sourcing uses

analogRead ADC (analog input/analogRead) pins are 2, 3, 4, and 5. Keep in mind that the digital pin numbers are ”’not”’ the same as the analog inputs! The printed labels on the Digispark are the ”digital” pin numbers.

 Digital 2 is analog (ADC channel) 1
 Digital 3 is analog (ADC channel) 3
 Digital 4 is analog (ADC channel) 2
 Digital 5 is analog (ADC channel) 0

More detailed info here:

Internal Temperature Sensor

Add this code to your sketch (outside of the loop and setup) and then call get_temp to get the temperature in C. Remember the internal temperature sensor is subject to the heat of the chip and not pre-calibrated.

int get_temp() {
  int raw = analogRead(A0+15); 
  /* Original code used a 13 deg adjustment. But based on my results, I didn't seem to need it. */
  // raw -= 13; // raw adjust = kelvin //this value is used to calibrate to your chip
  int in_c = raw - 273; // celcius
  return in_c;

**Get operating voltage without using a pin*

The following will display on the LCD the current voltage coming into the Digispark without having to use a pin to measure it!

#include <TinyWireM.h>                  // I2C Master lib for ATTinys which use USI - comment this out to use with standard arduinos
#include <LiquidCrystal_I2C.h>          // for LCD w/ GPIO MODIFIED for the ATtiny85

LiquidCrystal_I2C lcd(0x27,16,2);  // set address (0x27 is the address of the Digispark LCD modules) & 16 chars / 2 lines

void setup()
  TinyWireM.begin();                    // initialize I2C lib
  lcd.init();                           // initialize the lcd 
  lcd.backlight();                      // Turn on the backlight

  // Print startup message to the LCD
  lcd.setCursor(0,0); lcd.print("Powered by");
  lcd.setCursor(0,1); lcd.print("Digispark!");        

  //delay so we can see the message

void loop()
  //read and convert the voltage to a decimal
  long voltage = readVcc();
  double decimalVoltage = doubleMap(double(voltage),0,6000,0,6);

  //update the LCD
  lcd.setCursor(0,0); lcd.print("Voltage:");
  lcd.setCursor(9,0); lcd.print(decimalVoltage);  
  // delay so this updates approximately 4 times per second

double doubleMap(double x, double in_min, double in_max, double out_min, double out_max)
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both
  long result = (high<<8) | low;
  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
digispark/quickref.txt · Last modified: 2014/12/29 09:01 by joelparks