Energiesparen Digispark Attiny85

Hallo.
Habe mich nun zum Handkoffer gesucht bis ich was brauchbares gefunden habe.
Nachfolgender Sketch arbeitet mit watchdog um den Attiny in den Sleep Modus zu setzten.
Das compilieren funktioniert auch auf einem Attiny85.
Habe hier einiges ausgeklammert, was nicht funktioniert hat (diese cbi Sachen)

//****************************************************************
/*
 * Watchdog Sleep Example 
 * Demonstrate the Watchdog and Sleep Functions
 * Photoresistor on analog0 Piezo Speaker on pin 10
 * 
 
 * KHM 2008 / Lab3/  Martin Nawrath nawrath@khm.de
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne
 
 */
//****************************************************************

#include <avr/sleep.h>
#include <avr/wdt.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

int nint;
int pinLed=1;
//int pinPiezoSpeaker=10;

volatile boolean f_wdt=1;

void setup(){

  //Serial.begin(38400);
  pinMode(pinLed,OUTPUT);
  //pinMode(pinPiezoSpeaker,OUTPUT);
  //Serial.println("nightingale");

  // CPU Sleep Modes 
  // SM2 SM1 SM0 Sleep Mode
  // 0    0  0 Idle
  // 0    0  1 ADC Noise Reduction
  // 0    1  0 Power-down
  // 0    1  1 Power-save
  // 1    0  0 Reserved
  // 1    0  1 Reserved
  // 1    1  0 Standby(1)

  //cbi( SMCR,SE );      // sleep enable, power down mode
  //cbi( SMCR,SM0 );     // power down mode
  //sbi( SMCR,SM1 );     // power down mode
  //cbi( SMCR,SM2 );     // power down mode

  setup_watchdog(7);
}

byte del;
int cnt;
byte state=0;
int light=0;


//****************************************************************
//****************************************************************
//****************************************************************
void loop(){


  if (f_wdt==1) {  // wait for timed out watchdog / flag is set when a watchdog timeout occurs
    f_wdt=0;       // reset flag

    light=analogRead(0);  // reading photoresistor
   
   // Serial.print("light: " );
   // Serial.println(light );

    

    nint++;
    digitalWrite(pinLed,1);  // let led blink

   // Serial.print("Sleep " );
    //Serial.println(nint );
    delay(2);               // wait until the last serial character is send
    digitalWrite(pinLed,0);


    pinMode(pinLed,INPUT); // set all used port to intput to save power
    //pinMode(pinPiezoSpeaker,INPUT); // set all used port to intput to save power

    system_sleep();

    pinMode(pinLed,OUTPUT); // set all ports into state before sleep
    //pinMode(pinPiezoSpeaker,OUTPUT); // set all ports into state before sleep


  }

}
//****************************************************************  
// put some whiste sound on piezo
/*
void whistle() {
for (int ii = 0; ii<= 20; ii++) {  
  for (del=0; del <=254; del++) {
  digitalWrite(pinPiezoSpeaker,0);
  delayMicroseconds((ii*5)+(del * 2));
  digitalWrite(pinPiezoSpeaker,1);
  delayMicroseconds((ii*5)+(del * 2));
  }
  PORTB ^= 32;  // toggle pinLed
}
  
}
*/

//****************************************************************  
// set system into the sleep state 
// system wakes up when wtchdog is timed out
void system_sleep() {

  cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF

  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
  sleep_enable();

  sleep_mode();                        // System sleeps here

    sleep_disable();                     // System continues execution here when watchdog timed out 
    sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON

}

//****************************************************************
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
void setup_watchdog(int ii) {

  byte bb;
  int ww;
  if (ii > 9 ) ii=9;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
  ww=bb;
  //Serial.println(ww);


  MCUSR &= ~(1<<WDRF);
  // start timed sequence
  WDTCR |= (1<<WDCE) | (1<<WDE);
  // set new watchdog timeout value
  WDTCR = bb;
  WDTCR |= _BV(WDIE);


}
//****************************************************************  
// Watchdog Interrupt Service / is executed when  watchdog timed out
ISR(WDT_vect) {
  f_wdt=1;  // set global flag
}

Nun möchte ich das ganze auf einem Digispark verwenden, was ja auch ein Attiny85 ist, allerdings mit USB und Spannungsregler.
Leider erhalte ich diese Fehlermeldung:

arduino-1.6.6-windows\arduino-1.6.6\hardware\tools\avr\avr\include\avr\sleep.h:635:6: error: #error "No SLEEP mode defined for this device."

     #error "No SLEEP mode defined for this device."

Nun habe ich mir die Dateien vom Digispark angesehen, dort wird meistens das hier verwendet:

|| defined( __AVR_ATtinyX5__ )

in der sleep.h allerdings

|| defined(__AVR_ATtiny85__)

Also habe ich dieses AttinyX5" einfach mal in die sleep.h eingefügt, direkt hinter Attiny85…leider ohne Erfolg. Ich denke mal, das nur die Bezeichnung nicht gefunden wird. Hatte das gleiche schon mal in der MANCHESTER library, dort musste man das X5 einfach durch 85 ersetzen. Nur die sleep.h ist ja im Hauptverzeichnis und nicht in dem digispark Hardware Ordner. Ein rein kopieren dieser hilft im übrigen auch nicht.

Weiß jemand wie man das beheben kann ?

EDIT:
Was ein digispark ist ist klar ? Heißt richtig : Digispark USB Development Board
http://digistump.com/products/1

Habe gerade ein englisches Forum gefunden, dort geht es um das gleiche Problem.

#define AVR_ATtiny85

Wenn man das einfügt funktioniert das compilieren ohne Fehlermeldung.
Anscheinend ein Bug in der 1.6.6 ?
Mein englisch ist aber nicht so toll, deshalb werde ich dazu nichts weiter sagen, nicht das ich was falsches sage.

Aber schon mal gut das es so (anscheinend) funktioniert.

Bei der MANCHESTER library kommt aber weiterhin die Meldung:
#error "Manchester library only supports 8mhz, 16mhz on ATMega328"
obwohl es sich ja um einen Attiny85 handelt !

Stelle ich auf Attiny85 funktioniert es mit 8 und 16 Mhz. Stelle ich auf 20 Mhz erhalte ich:
#error "Manchester library only supports 1mhz, 8mhz, 16mhz, 16.5Mhz clock speeds on ATtiny85 chip"

Also sollte dieser digispark mit 16,5Mhz (da ja Attiny85) laufen, wird aber als ATMega328 erkannt.
Na ja, das ist jetzt nicht weiter tragisch, da helfe ich mir und stelle auf "Digispark 16Mhz NoUSB)

Ja, die IDE 1.6.6 ist sehr buggi, nimm lieber die 1.6.7. Die soll schon besser sein.