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
- Arduino installieren.
- Arduino-Tiny https://code.google.com/p/arduino-tiny/ herunterladen und entpacken.
- Den im ZIP befindelichen tiny Ordner kommt in den hardware Ordner der Arduino Installation.
- Die Prospective Boards.txt im tiny Ordner in boards.txt umbenennen.
- In boards.txt die entsprechenden [board].upload.using=[programmer] Zeilen abändern oder auskommentieren
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
- Datenblatt des ATtiny85.
- IR mit dem ATtiny85 http://nathan.chantrell.net/20121014/tinypcremote-an-attiny85-based-infrared-pc-remote-control/
- Lib auf Github: https://github.com/nathanchantrell/TinyPCRemote
- Arduino-Tiny auf Google-Code: https://code.google.com/p/arduino-tiny/