ATtiny85 i drugi mali mikrokontroleri

ATtiny85 i srodni mali mikrokontroleri: pinovi, memorija, programiranje Unom u Arduino IDE-u i PlatformIO-u, Digispark i rad na gumbastoj bateriji.

Na Arduinu Uno radi jedan čip, mikrokontroler ATmega328P. Sve ostalo na tiskanoj pločici samo mu pomaže: USB čip za vezu s računalom, regulator napona, kristal za takt, tipka RESET i LED-ice. Kad je projekt gotov, a treba mu samo nekoliko pinova, cijeli Uno je prevelik, troši previše struje i šteta ga je ugraditi. Tada se koristi sam mikrokontroler, bez Arduina oko njega. Najpoznatiji takav mali mikrokontroler je ATtiny85: ima samo osam nožica, manji je od nokta, a programira se istim jezikom i istim naredbama kao Arduino.

Na ovoj stranici najviše je o čipu ATtiny85: kako su raspoređeni njegovi pinovi, kako mu Arduino Uno učitava program u Arduino IDE-u i u PlatformIO-u i kako s njim napraviti nešto što mjesecima radi na gumbastoj bateriji. Na kraju su i drugi mali mikrokontroleri, od još manjeg ATtiny13A do novijih čipova kao što su ATtiny412 i CH32V003.

Sam čip nema zaštitu koju ima Uno

Na čipu nema regulatora napona ni ikakve zaštite. ATtiny85 radi s 2,7 do 5,5 V: napajaj ga s 5 V iz Una, iz dvije ili tri baterije AA ili iz gumbaste baterije od 3 V. Bateriju od 9 V nikad ne spajaj izravno na njega. Iz jednog pina čip smije dati najviše 40 mA, a svi pinovi zajedno oko 60 mA. Zato računaj s 20 mA po pinu, kao na Unu, i LED-icu uvijek spoji preko otpornika.

Čip bez Arduina

ATtiny85 dolazi u dva kućišta. DIP-8 ima nožice razmaknute 2,54 mm, pa se utakne u breadboard preko srednjeg razmaka, kao na slici niže. SOIC-8 je upola manji, s nožicama razmaknutima 1,27 mm, i lemi se na tiskanu pločicu. Iznutra su isti.

ATtiny85 u kućištu DIP-8 i u kućištu SOIC-8, Arduino Nano i Arduino Uno odozgo u istom mjerilu, s ravnalom od 10 cm ispod njih. DIP-8 je dug oko 1 cm, SOIC-8 oko pola centimetra, Nano oko 4,5 cm, a Uno oko 7 cm

Na jednom kraju čipa je urez, a pokraj njega točkica koja označava nožicu 1. Gledano odozgo, s urezom gore, nožice se broje oko čipa suprotno od kazaljke na satu: niz lijevu stranu od 1 do 4, pa uz desnu od 5 do 8. Ako čip utakneš okrenut naopako, plus i minus dođu na krive nožice i čip se može pregrijati.

Da bi radio, čipu treba samo napajanje: plus na nožicu 8 (VCC), minus na nožicu 4 (GND). Na pločici koju radiš za stalno stavi i keramički kondenzator od 100 nF između tih dviju nožica, što bliže čipu. On mu daje struju u trenucima kad je treba odjednom mnogo. Program mu ne možeš učitati preko USB-a, jer ga nema. To radi programator, a programator može biti i Arduino Uno.

ATtiny85 i ATmega328P

U tablici je ATtiny85 uz ATmega328P, čip koji radi na Unu:

ATtiny85ATmega328P (Uno)
Nožice828 (u kućištu DIP)
Pinovi za ulaze i izlaze6 (5 ako RESET ostane RESET)23 (20 na Unu)
Memorija za program (flash)8 KB32 KB
Radna memorija (RAM)512 B2 KB
EEPROM512 B1 KB
Analogni ulazi4 (jedan je na RESET-u)6
Izlazi PWM36
Serijska veza (UART)nema, samo u programuima
I2C i SPIpreko jednog sklopa (USI)ima oba
Taktunutarnji 1 ili 8 MHz, 16 MHz s PLL-om, kristal do 20 MHz16 MHz s kristalom na Unu
Napon2,7 do 5,5 V (ATtiny85V od 1,8 V)1,8 do 5,5 V (Uno: 5 V)

Brojevi su iz Microchipovih tehničkih listova (datasheeta). ATtiny85 ima četiri puta manje memorije za program i radne memorije od Una, ali za program koji pali LED-ice, čita tipkalo ili senzor i odlučuje što dalje, to je dovoljno. Program Disanje niže na ovoj stranici zauzme 532 bajta od 8192.

Raspored pinova

Raspored pinova čipa ATtiny85 u kućištu DIP-8, s urezom gore. Lijevo od vrha: nožica 1 PB5, pin 5, A0, RESET; nožica 2 PB3, pin 3, A3; nožica 3 PB4, pin 4, A2, PWM; nožica 4 GND. Desno od vrha: nožica 8 VCC; nožica 7 PB2, pin 2, A1, SCK, SCL; nožica 6 PB1, pin 1, PWM, MISO, RX; nožica 5 PB0, pin 0, PWM, MOSI, SDA, TX

Oznake na slici imaju iste boje kao na stranici Raspored pinova.

OznakaŠto znači
VCCnapajanje, 2,7 do 5,5 V
GNDminus, masa
PB4 4ime pina u datasheetu, pa broj pina koji pišeš u programu
A2analogni ulaz
~izlaz PWM (analogWrite)
MOSIpinovi kojima programator učitava program (MOSI, MISO, SCK i RESET)
SDAveza I2C (SDA i SCL)
TXserijska veza koju radi program (TX i RX)
RESETRESET

Na što paziti:

  • Nožica i pin nisu isti broj. Bijeli broj na čipu je broj nožice. U programu pišeš broj pina, a to je broj iza slova PB: digitalWrite(4, HIGH) pali pin PB4, a on je na nožici 3.
  • Analogni ulazi su A1 (nožica 7), A2 (nožica 3) i A3 (nožica 2). A0 je na nožici 1, koja je RESET: kad napon na njoj padne prenisko, čip se resetira. Zato su za mjerenje praktički samo tri.
  • PWM imaju pinovi 0, 1 i 4. Naredba tone() i biblioteka Servo koriste isti brojač vremena (Timer1) kao PWM na pinu 4, pa dok one rade, analogWrite() na pinu 4 ne radi.
  • Serijske veze nema. ATtiny85 nema sklop UART. Paket ATTinyCore zato ima Serial napravljen u programu: šalje na pinu 0 (TX), a prima na pinu 1 (RX). Da bi to vidio u Serial Monitoru, treba ti USB-serijski pretvarač. Unutarnji oscilator čipa točan je samo na oko 10 %, a serijskoj vezi treba točnost od nekoliko posto. Ako na Serial Monitoru vidiš čudne znakove, kriv je takt.
  • I2C radi s bibliotekom Wire na pinovima 0 (SDA) i 2 (SCL), ali samo s vanjskim pull-up otpornicima, na primjer od 4,7 kΩ prema plusu.
  • MOSI, MISO, SCK i RESET koristi programator. Ako je na njima nešto što ih jako opterećuje, programiranje može ne uspjeti. LED-ica s otpornikom tu ne smeta, ali modul je bolje odspojiti dok učitavaš program.

Takt i fuse bitovi

Čip ima nekoliko postavki koje pamti i kad nema napajanja. Zovu se fuse bitovi. Oni određuju koji takt čip koristi, ostaje li nožica 1 RESET i čuva li se EEPROM kad se učitava novi program.

Nov ATtiny85 radi na 1 MHz: unutarnji oscilator od 8 MHz podijeljen s 8. Program napisan za 8 MHz na njemu bi išao osam puta sporije, pa bi delay(1000) trajao osam sekundi. Zato svakom novom čipu prvo postaviš fuse bitove: u Arduino IDE-u naredbom Burn Bootloader, a u PlatformIO-u naredbom pio run -t fuses. Ponovi to svaki put kad promijeniš takt.

Unutarnji oscilator može raditi na 1 ili 8 MHz, a uz PLL i na 16 MHz. Za točniji takt, do 20 MHz, treba vanjski kristal, ali on zauzme dvije nožice (2 i 3).

Dvije postavke nakon kojih čip više ne odgovara

  • Vanjski kristal ili vanjski takt, a nisi ga spojio. Čip tada stoji i čeka takt, pa ga programator više ne može dosegnuti. Spoji kristal ili izvor takta koji si odabrao, pa ponovno postavi fuse bitove.
  • RESET kao šesti obični pin (postavka RSTDISBL). Neke upute s interneta to rade da dobiju još jedan pin. Nakon toga čip se više ne može programirati Unom, nego samo posebnim programatorom od 12 V (high-voltage).

Programiranje Unom

ATtiny85 nema USB. Program mu učitava programator preko četiri pina: MOSI, MISO, SCK i RESET. Takav način zove se ISP (in-system programming), a koristi istu vezu SPI kao mnogi moduli. Arduino Uno postaje programator kad mu učitaš program ArduinoISP. Spajanje je isto u Arduino IDE-u i u PlatformIO-u.

Uno postaje programator

  1. Spoji Uno, na kojem još ništa nije spojeno na pinove 10 do 13, na računalo. U Arduino IDE-u otvori File → Examples → 11.ArduinoISP → ArduinoISP, odaberi Arduino Uno i učitaj program kao svaki drugi. Ako radiš samo u PlatformIO-u, isti program nađeš u Arduinovu repozitoriju arduino-examples na GitHubu. Učitaj ga u projekt za Uno.
  2. Odspoji USB i spoji ATtiny85 kao na slici i u tablici. Pazi da je urez čipa gore.
  3. Između RESET-a i GND-a Una utakni elektrolitski kondenzator od 10 µF, dužom nožicom (+) na RESET. Kad računalo otvori vezu s Unom, Uno se inače resetira i ne pokreće ArduinoISP na vrijeme. Kondenzator to sprječava. Stavi ga tek nakon što si učitao ArduinoISP, jer s njim se ni Unu ne može učitati novi program.
  4. Na nožicu 3 (pin 4) spoji LED-icu preko otpornika od 470 Ω, za prvi program.
UnoATtiny85
13nožica 7 (SCK)
12nožica 6 (MISO)
11nožica 5 (MOSI)
10nožica 1 (RESET)
5Vnožica 8 (VCC)
GNDnožica 4 (GND)
Arduino Uno i breadboard. ATtiny85 je preko srednjeg razmaka u redovima 15 do 18, s urezom gore. Narančasta žica vodi od pina 13 Una do nožice 7, zelena od pina 12 do nožice 6, plava od pina 11 do nožice 5, a ljubičasta od pina 10 do nožice 1. Nožica 8 spojena je na plus, a nožica 4 na minus. Od nožice 3 vodi otpornik od 470 oma do crvene LED-ice, a od nje žica do minusa. Žuta žica vodi od pina RESET Una do kondenzatora od 10 mikrofarada, čija je druga nožica na minusu
Shema: Arduino Uno U1 spojen je na ATtiny85 U2 pinovima 13 na SCK (nožica 7), 12 na MISO (nožica 6), 11 na MOSI (nožica 5) i 10 na RESET (nožica 1). 5V Una vodi na VCC (nožica 8), a GND oba čipa je zajednički. Od PB4 (nožica 3) vodi otpornik R1 od 470 oma i LED-ica D1 prema GND-u. Kondenzator C1 od 10 mikrofarada spojen je plusom na RESET Una, a minusom na GND

ArduinoISP može pokazivati što radi na tri LED-ice: na pinu 9 polako svijetli i gasi se dok čeka, na pinu 8 svijetli kad nešto ne uspije, a na pinu 7 dok učitava program. Nisu obavezne.

Cijeli programator sa sve tri LED-ice je na shemi. Svaka LED-ica ima svoj otpornik od 470 Ω prema GND-u.

Shema programatora sa svim LED-icama: Arduino Uno U1 spojen je na ATtiny85 U2 kao na prethodnoj shemi, pinovima 13, 12, 11 i 10. Uz to od pina 9 Una vodi otpornik R2 od 470 oma do zelene LED-ice D2, od pina 8 otpornik R3 do crvene LED-ice D3, a od pina 7 otpornik R4 do žute LED-ice D4, sve prema GND-u. Kondenzator C1 od 10 mikrofarada je između RESET-a Una i GND-a, a na PB4 čipa ATtiny85 je otpornik R1 s crvenom LED-icom D1

U Arduino IDE-u

Arduino IDE ne zna sam za ATtiny85. Treba mu paket ATTinyCore.

  1. U File → Preferences, u polje Additional boards manager URLs, dodaj adresu http://drazzy.com/package_drazzy.com_index.json. Zatim u Boards Manageru potraži ATTinyCore i instaliraj ga.
  2. U izborniku Tools odaberi:
    • Board → ATTinyCore → ATtiny25/45/85 (No bootloader)
    • Chip: ATtiny85
    • Clock Source: 8 MHz (internal)
    • Port: port Una
    • Programmer: Arduino as ISP
  3. Odaberi Tools → Burn Bootloader. Unatoč imenu, to ne učitava bootloader, nego samo postavlja fuse bitove za odabrani takt. To radiš jednom za svaki čip i nakon svake promjene Clock Source.
  4. Otvori program i učitaj ga naredbom Sketch → Upload Using Programmer (Ctrl + Shift + U), koja uvijek koristi odabrani programator.

Prvi program: LED-ica na nožici 3 polako se pali i gasi, kao da diše.

// Disanje: LED-ica na pinu 4 (nožica 3) polako se pali i gasi.
// ATtiny85, takt 8 MHz (internal); program učitava Arduino Uno (Arduino as ISP).

const int LED = 4;   // PB4, nožica 3

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  for (int i = 0; i <= 255; i++) {   // sve jače
    analogWrite(LED, i);
    delay(4);
  }
  for (int i = 255; i >= 0; i--) {   // sve slabije
    analogWrite(LED, i);
    delay(4);
  }
}

Ako učitavanje ne uspije i javi Device signature = 0x000000, Uno ne dopire do čipa. Provjeri žice prema tablici, je li čip okrenut urezom gore, ima li Uno kondenzator na RESET-u i je li na Unu ArduinoISP, a ne neki drugi program.

U PlatformIO-u

PlatformIO za ATtiny85 koristi isti ATTinyCore, pa programi izgledaju isto. Napravi projekt za ploču Generic ATtiny85 i u platformio.ini upiši:

; ATtiny85 koji programira Arduino Uno s programom ArduinoISP
[env:attiny85]
platform = atmelavr
board = attiny85
framework = arduino
board_build.f_cpu = 8000000L      ; takt 8 MHz iz unutarnjeg oscilatora

; Uno kao programator (Arduino as ISP)
upload_protocol = stk500v1
upload_speed = 19200
upload_port = COM3                ; port Una (na Linuxu npr. /dev/ttyACM0)
upload_flags =
    -P$UPLOAD_PORT
    -b$UPLOAD_SPEED

; fuse bitovi za 8 MHz iz unutarnjeg oscilatora; postavlja ih "pio run -t fuses"
board_fuses.lfuse = 0xE2
board_fuses.hfuse = 0xDF
board_fuses.efuse = 0xFF
board_fuses.lock_bits = 0xFF      ; čip nije zaključan
  • upload_protocol = stk500v1 i upload_speed = 19200 kažu da je programator Uno s ArduinoISP-om, koji razgovara brzinom od 19 200 bauda.
  • upload_port je port Una. Za ATtiny85 PlatformIO ga ne traži sam, pa ga upiši: na Windowsima je to COM i broj (vidiš ga i u Arduino IDE-u, u Tools → Port), a na Linuxu najčešće /dev/ttyACM0.
  • upload_flags šalje port i brzinu programu koji učitava program u čip (avrdude).
  • board_fuses su fuse bitovi: 0xE2 je takt od 8 MHz iz unutarnjeg oscilatora, a 0xDF i 0xFF su tvornička vrijednost ostalih postavki, s RESET-om koji ostaje RESET.

Program je u src/main.cpp i počinje s #include <Arduino.h>, a ostatak je isti kao gore. Onda:

  1. Jednom za svaki čip, i nakon svake promjene takta, postavi fuse bitove. U terminalu PlatformIO-a upiši pio run -t fuses.
  2. Program učitaj kao svaki drugi: strelicom Upload u donjoj traci ili naredbom pio run -t upload. PlatformIO tada sam koristi Uno kao programator.

Za takt od 1 MHz promijeni board_build.f_cpu u 1000000L i board_fuses.lfuse u 0x62, pa ponovno postavi fuse bitove.

Digispark: ATtiny85 s USB-om

Digispark je mala tiskana pločica s čipom ATtiny85, USB priključkom, regulatorom napona od 5 V i LED-icom. Na čipu je bootloader Micronucleus, mali program koji prima novi program preko USB-a, pa Uno kao programator nije potreban. Izvorni Digispark napravila je tvrtka Digistump, a danas se najčešće prodaju njegove kopije.

  • Za program ostaje 6586 bajtova, jer ostatak memorije zauzima bootloader.
  • Pinovi se zovu P0 do P5 i isti su kao PB0 do PB5. P3 i P4 spojeni su na USB. Dok je Digispark spojen na računalo, ne koristi ih, a imaj na umu da na njima ima dodatnih dijelova za USB.
  • LED-ica je na P1 (na nekim kopijama na P0).
  • Kad ga utakneš, bootloader nekoliko sekundi čeka novi program, a tek onda pokreće tvoj.

U Arduino IDE-u, uz ATTinyCore, odaberi Board → ATTinyCore → ATtiny85 (Micronucleus / DigiSpark) i klikni Upload. Kad IDE napiše Please plug in the device, u roku od minute utakni Digispark. Na Windowsima prvo treba instalirati upravljački program, koji ATTinyCore donosi sa sobom.

Krijesnica na gumbastoj bateriji

Uno troši struju i kad ništa ne radi, jer na njemu stalno rade USB čip, regulator i LED-ica ON. Sam ATtiny85 na 1 MHz i 3 V troši oko 0,6 mA. Kad spava (power-down), troši samo oko 0,2 µA, a oko 4 µA ako ga budi watchdog, mali brojač vremena koji radi i dok čip spava. Zato s njim možeš napraviti uređaj koji mjesecima radi na jednoj gumbastoj bateriji.

Krijesnica: LED-ica bljesne svake četiri sekunde, a između bljeskova čip spava. Spoji je kao gore: LED-ica s otpornikom od 470 Ω na nožici 3. Program učitaj Unom uz takt 1 MHz (internal) (ne zaboravi Burn Bootloader). Zatim odspoji Uno i na nožice 8 (+) i 4 (−) spoji držač baterije CR2032.

// Krijesnica: LED-ica na pinu 4 bljesne svake 4 sekunde, a između bljeskova ATtiny85 spava.
// ATtiny85, takt 1 MHz (internal), napajanje iz gumbaste baterije CR2032.

#include <avr/sleep.h>

const int LED = 4;   // PB4, nožica 3

ISR(WDT_vect) {
  // watchdog je probudio čip; tu ne treba ništa raditi
}

void setup() {
  pinMode(LED, OUTPUT);
  ADCSRA &= ~_BV(ADEN);                 // isključi analogne ulaze, i u snu troše struju
  WDTCR = _BV(WDCE) | _BV(WDE);         // dopusti promjenu postavki watchdoga
  WDTCR = _BV(WDIE) | _BV(WDP3);        // svake 4 s prekid koji budi čip (bez reseta)
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // najdublji san
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(50);
  digitalWrite(LED, LOW);
  sleep_mode();                         // spavaj dok te watchdog ne probudi
}

U setup() program isključi analogno-digitalni pretvornik, koji bi i u snu trošio struju, i namjesti watchdog da svake četiri sekunde napravi prekid (interrupt). Prekid probudi čip, on izvrši prazan ISR(WDT_vect) i nastavi iza sleep_mode(), na kraju loop(). Onda loop() krene ispočetka: bljesak i ponovno spavanje.

Graf: koliko dana radi krijesnica na bateriji CR2032 prema tome koliko sekundi prođe između dva bljeska, od pola sekunde do 8 sekundi. Zelena krivulja, za čip koji između bljeskova spava i troši 4 mikroampera, raste od oko 30 dana do oko 370 dana. Crvena krivulja, za čip koji između bljeskova čeka s delay() i troši 0,6 miliampera, cijelo vrijeme je na oko 14 dana

Graf je izračunat iz struja iz datasheeta: bljesak od 50 ms s LED-icom od 2,6 mA, baterija od 210 mAh. Da program između bljeskova čeka s delay() umjesto da spava, baterija bi trajala oko 14 dana, bez obzira na to koliko je bljeskova (crveno). Uz spavanje i bljesak svake četiri sekunde traje oko 200 dana, a uz bljesak svakih osam sekundi oko 370 dana (zeleno). Stvarna baterija dat će nešto manje, jer na hladnom i pri jakim kratkim strujama gubi kapacitet.

Baterija i Uno nikad zajedno

Ne spajaj bateriju CR2032 dok je na čip spojen Uno. Iz Unovih 5 V struja bi potekla u bateriju, a litijske gumbaste baterije ne smiju se puniti: mogu se napuhati i procuriti. Prvo učitaj program, odspoji Uno, pa tek onda stavi bateriju. Gumbaste baterije drži daleko od male djece.

Ostali mali mikrokontroleri

ATtiny85 nije jedini mali mikrokontroler. U tablici su neki drugi koji se mogu programirati u Arduino IDE-u, uz ATmega328P za usporedbu:

ČipNožicePinoviFlashRAMUARTProgramira sePaket za Arduino IDE
ATtiny13A861 KB64 BneISPMicroCore
ATtiny85868 KB512 BneISPATTinyCore
ATtiny84A14128 KB512 BneISPATTinyCore
ATtiny2313A20182 KB128 BdaISPATTinyCore
ATtiny412864 KB256 BdaUPDImegaTinyCore
ATtiny1614141216 KB2 KBdaUPDImegaTinyCore
CH32V0038 do 20do 1816 KB2 KBdaSDI (WCH-LinkE)WCH-ov paket
ATmega328P282332 KB2 KBdaISPisti kao za Uno
  • ATtiny13A ima isti raspored nožica kao ATtiny85, ali samo 1 KB memorije za program i 64 bajta RAM-a. U to stanu samo vrlo mali programi, kao što je treptanje ili jednostavan mjerač vremena.
  • ATtiny84A je iz iste obitelji kao ATtiny85, ali ima 14 nožica, 12 pinova i 8 analognih ulaza. Odaberi ga kad ATtinyju85 ponestane pinova.
  • ATtiny2313A (i ATtiny4313, s dvostruko više memorije) ima 20 nožica i pravi sklop UART, pa serijska veza radi pouzdano. Analognih ulaza nema.
  • Noviji ATtinyji (serije 0, 1 i 2), kao što su ATtiny412 i ATtiny1614, imaju sklopove UART, I2C i SPI i unutarnji oscilator od 16 ili 20 MHz, dovoljno točan za serijsku vezu. Programiraju se preko jednog pina (UPDI), a programator je obični USB-serijski pretvarač s jednom diodom. Dolaze samo u kućištima za lemljenje (SOIC), pa ih za breadboard treba zalemiti na malu pločicu s muškim konektorom.
  • CH32V003 kineske tvrtke WCH ima 32-bitnu jezgru RISC-V od 48 MHz, 16 KB flasha i 2 KB RAM-a, a radi s 3,3 ili 5 V. Programira se malim programatorom WCH-LinkE preko jedne žice, a za Arduino IDE ima paket tvrtke WCH.
  • ATmega328P može raditi i sam na breadboardu, bez Una. Treba mu kristal od 16 MHz ili unutarnji oscilator od 8 MHz, a program je isti kao na Unu. To je dobar izbor kad ti ATtiny nije dovoljan, a cijeli Uno je previše.

Tvrtka Microchip, koja danas radi ATtinyje, radi i male mikrokontrolere PIC, ali se oni programiraju drugim alatima, a ne u Arduino IDE-u.

Koji odabrati?

  • Za učenje i prvi pokus: Arduino Uno ili Nano. Kad program radi, prenesi ga na mali čip.
  • Mali uređaj s nekoliko LED-ica, tipkalom ili senzorom, na bateriju: ATtiny85. Lako se utakne u breadboard, a programira ga Uno.
  • Bez programatora, preko USB-a: Digispark.
  • Više pinova: ATtiny84A, a kad treba i više memorije, ATmega328P sam na breadboardu.
  • Serijska veza s računalom ili drugim čipom: ATtiny2313A ili noviji ATtiny, kao ATtiny412.
  • Mnogo istih uređaja na tiskanoj pločici koju lemiš: noviji ATtinyji ili CH32V003.
  • Wi-Fi ili Bluetooth: nijedan od ovih, nego ESP32 ili ESP8266.

Što smo naučili?

  • ATtiny85 je mikrokontroler s osam nožica i šest pinova. Programira se istim naredbama kao Arduino, a uz napajanje mu ne treba gotovo ništa.
  • Nožica i pin nisu isti broj: u programu pišeš broj iza slova PB.
  • Programom ArduinoISP Uno postaje programator, u Arduino IDE-u (Upload Using Programmer) i u PlatformIO-u (upload_protocol = stk500v1). Unu tada treba kondenzator od 10 µF na RESET-u.
  • Takt se postavlja fuse bitovima, jednom za svaki čip: Burn Bootloader ili pio run -t fuses.
  • Čip koji spava troši stotinu puta manje struje, pa radi mjesecima na gumbastoj bateriji.

Mali kviz

1. LED-ica je na nožici 3 čipa ATtiny85. Koji broj pišeš u digitalWrite()?
  1. Nožica 3 je pin PB4, a u programu se piše broj iza slova PB: digitalWrite(4, HIGH).
2. Na novom čipu program s delay(1000) trepće svakih osam sekundi umjesto svake sekunde. Zašto?
Nov čip radi na 1 MHz, a program je preveden za 8 MHz, pa sve traje osam puta dulje. Treba postaviti fuse bitove: Burn Bootloader u Arduino IDE-u ili pio run -t fuses u PlatformIO-u.
3. Zašto Unu koji programira ATtiny85 treba kondenzator od 10 µF između RESET-a i GND-a?
Kad računalo otvori vezu s Unom, Uno se resetira. Kondenzator to sprječava, pa na Unu ostane raditi ArduinoISP i on programira ATtiny85.
4. U izborniku si odabrao 16 MHz (external), a kristala nema. Što se dogodilo i kako to popraviti?
Čip čeka vanjski takt i ne radi, pa ga programator ne može dosegnuti. Treba spojiti kristal od 16 MHz (ili drugi izvor takta), pa ponovno postaviti fuse bitove, ovaj put za unutarnji oscilator.
5. Krijesnica koja spava radi oko 200 dana, a ona koja čeka s delay() oko 14 dana. Odakle tolika razlika?
Dok čeka s delay(), čip radi i troši oko 0,6 mA. Dok spava, troši oko 4 µA, više od sto puta manje. LED-ica svijetli samo 50 ms svake četiri sekunde, pa većinu struje troši ono što čip radi između bljeskova.
6. Uređaj treba slati podatke računalu serijskom vezom. Koji mali mikrokontroler odabrati?
Onaj koji ima pravi sklop UART, na primjer ATtiny2313A ili noviji ATtiny kao ATtiny412. ATtiny85 serijsku vezu radi samo u programu, a njegov unutarnji oscilator nije dovoljno točan.
7. Smiješ li spojiti bateriju CR2032 na ATtiny85 dok je na njega spojen i Uno?
Ne. Iz Unovih 5 V struja bi potekla u bateriju, a litijske gumbaste baterije ne smiju se puniti. Prvo odspoji Uno, pa onda stavi bateriju.