ATtiny85

Kleiner, achtfüßiger Mikrocontroller mit 8 KByte Flashspeicher.

Pinbelegung

Funktionen Pin Pin Funktionen
PCINT5 / RESET / PB5 1 8 VCC
PCINT3 / XTAL1 / !OC1B / PB3 2 7 PB2 / SCK / SCL / INT0 / PCINT2
PCINT4 / XTAL2 / OC1B / PB4 3 6 PB1 / MISO / OC0B / 0C1A / PCINT1
GND 4 5 PB0 / MOSI / SDA / OC0A / !0C1A / PCINT0

Arduino und ATtiny85

Es gibt noch einen ominösen Linker Bug für Sketches die über 4KB groß sind. Dann muss (auf Windows) die ld.exe ausgetauscht werden.

PCINT

Makros zum Setzen und Löschen eines Bit definieren:

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

ISR definieren:

ISR(PCINT0_vect) {
    ...
}

PCINT anschalten

// Interrupts aus
cli();

// Generell PCINT anschalten
sbi(GIMSK, PCIE);

// Und gewünschte PCINTx anschalten
sbi(PCMSK, PCINT2);
sbi(PCMSK, PCINT3);
sbi(PCMSK, PCINT4);

// Lösche PCINT Flag
cbi(GIFR, PCIF);

// Interrupts an
sei();

PCINT abschalten

// Interrupts aus
cli();

// PCINT abschalten
cbi(GIMSK, PCIE);

// Lösche PCINT Flags
cbi(GIFR, PCIF);

// Interrupts an
sei();

Sleep Mode und Strom sparen

Analog-Digitalwandler aus:

cbi(ADCSRA, ADEN);   

Power Down Modus:

// Schlafmodus anschalten
sbi(MCUCR, SE);
// Power Down Modus
sbi(MCUCR, SM1);
cbi(MCUCR, SM0);
// Schlafen
sleep_mode();
// Nach dem Aufwachen
cbi(MCUCR, SE);

Links