LAKI PINGVINI<>
022019<><>

ATmega32u4 ploče

Zapostavljeni Arduino

Kada govorimo o Arduinu, prvo što pomislimo je Uno. Standardna osnovna ploča o kojoj se sve zna, koju svi preporučuju i za koju ima pregršt primera. Uno je „work horse” u Arduino ekosistemu, sa svim svojim prednostima i ograničenjama. Ipak, Uno ne mora biti prvi izbor za projekte. Čak ni za samu razradu projekta. U ovom broju vam predstavljamo ploče zasnovane na ATmega32u4 čipovima, koje su, po nama, neopravdano zapostavljene.

ATmega32u4

 
Atmegin čip koji se nalazi na ovim pločama dolazi u SMD pakovanju i osnovna razlika između njega i 328p koji se nalazi na Unu je što u sebi ima ugrađen USB/Serial interfejs. Drugim rečima, za komunikaciju sa računarom 32u4 čipu nije potreban dodatni čip. S obzirom na to da je u stanju da sa računarom ostvari direktnu komunikaciju, osim kao deo prototipske ploče, 32u4 može uz pomoć biblioteka da koristi USB-HID protokol, to jest, može da emulira periferne uređaje poput miša i tastature. Kao i 328p, i ovde imamo osmobitni mikrokontroler baziran na AVR RISC arhitekturi. Čip 32u4 ima na raspolaganju 32 kilobajta programske fleš memorije od koje je četiri kilobajta zauzeo bootloader. Za razliku od 328p, ovde imamo 2,5 kilobajta SRAM memorije za podatke, što je, iako na prvi pogled deluje malo, ipak uvećanje za čitavih 25 procenata u odnosu na čip na najpoznatijoj Arduino ploči, Uno. EEPROM je u ovom slučaju isti i iznosi jedan kilobajt. ATmega32u4 ima propusnost od 16 MIPS, što ugrubo znači da u jednom ciklusu kloka ima jedan MIPS po jednom megahercu. Ova činjenica se može koristiti za optimizovanje potrošnje struje u zavisnosti od brzine rada. U Atmeginom čipu se našlo mesta i za USB modul koji u potpunosti podržava 2.0 specifikacije. Čip ima čak 44 pina preko kojih se mogu ostvariti jedna UART, dve SPI i jedna I2C komunikacija. Od ovih pinova dvanaest ih ide preko desetobitnog ADC.

Drugi član kraljevske porodice

Iako ne tako čest gost na Arduino kompatibilnim pločama, ATmega32u4 ipak ima svoje adute. Prva i svakako najpoznatija ploča o kojoj će biti reči je Leonardo, koji je prva Arduino ploča koja koristi mikrokontroler sa ugrađenim USB. Vizuelno, Leonardo ima isti footprint kao i Uno. Na prvi pogled možemo ih razlikovati samo po USB portu, gde je kod Leonarda to mikro USB. Naravno, i raspored same elektronike je malo drugačiji, pa je Leonardo nekako prazan u odnosu na Uno. DC priključak kakav viđamo na SBC-ovima Uno ili Mega je na svom standardnom mestu i na njega možemo dovesti regulisan napon u rasponu od sedam do dvanaest volti. Između njega i mikro USB porta su četiri LED od kojih je prva ON, za njom idu L (built-in na pinu 13), TX i RX. Reset dugme je takođe na svom standardnom mestu. Na sredini je ATmega32u4 mikrokontroler, a uz njega i SMD kristal na 16 megaherca.

Pinout ženskih hedera je donekle kompatibilan sa Unom, što će reći da će veliki broj šildova moći i ovde da se koristi, ali ne svi. Leonardo je iz ATmega32u4 izvukao 20 digitalnih pinova koji rade na pet volti. Za razliku od Una, Leonardo je ovim pinovima omogućio 40 miliampera struje. Struja na pinu 3.3V je ostala na 50 miliampera. Od ovih pinova osmobitne PWM kanale ih ima sedam. Zanimljivo je i da pin 13 ima mogućnost PWM pa se možemo igrati sa ugrađenom LED u „fade-in/fade-out” maniru. Svi GPIO pinovi se mogu koristiti kao digitalni, dok se čak dvanaest njih mogu koristiti kao analogni, iako ih je samo šest označeno sa A. Za njihov raspored treba ispratiti pinout šemu. Iz tog razloga svi pinovi mogu biti i INPUT i OUTPUT. Za razliku od Una, I2C pinovi (SDA i SCL) su na digitalnim pinovima 2 i 3. Leonardo SPI pinove ima samo preko ICSP hedera, koji je na svom standardnom mestu. Ukoliko će se koristiti šild koji koristi SPI interfejs, ali preko digitalnih pinova, Uno je bolje rešenje. Pinovi RX i TX za serijski interfejs su na svojim standardnim digitalnim pinovima 0 i 1. Kod korišćenja biblioteka koje koriste određene pinove, treba obratiti pažnju i eventualno ih korigovati. Takođe, iako su u osnovi digitalni pinovi koji imaju svoje digitalne oznake, pinovi iz analogne sekcije (A0-A5) se u skeču ne mogu označavati kao digitalni. Na primer, ako napišemo pinMode(14,OUTPUT), nećemo dobiti ništa. Potrebno ih je adresirati po oznakama kao na ploči, recimo, pinMode(A0, OUTPUT). Za kraj da dodamo da se neke verzije Leonarda pri pukom resetovanju na računaru prijavljuju pod drugim virtuelnim portom, što nekad ume da bude problem. Naš primerak je bio „zakovan” na isti port, a baš smo se trudili da to proverimo.

Mali od Leonarda

Još manje zastupljena ploča od Leonarda iz ATmega32u4 porodice je Pro Micro. U pitanju je ploča dimenzija nalik Pro Miniju, koja se na prvi pogled od nje razlikuje po mikro USB portu. Kao i kod Pro Minija, i ovde razlikujemo dve osnovne verzije, verziju na pet volti sa kristalom na 16 megaherca i verziju na 3,3 volta i kristalom na osam megaherca. Verzija na pet volti je ugrubo rečeno umanjeni Leonardo i pinout radi na pet volti. Pinovi verzije Pro Micra na 3,3 volta nisu tolerantni na pet volti i na to treba obratiti pažnju, a ovaj model je pogodan za rad na litijumskim baterijama od 3,7 volti. Mi smo nabavili verziju sa TQFP čipom na sebi, kakav je i na Leonardu. Postoje i verzije sa manjim QFN čipom, ali na mreži se može naći veći broj njih kojima je dopao primerak sa spojenim izlazima na samom čipu.

 
Pinout ploče je podeljen u dva reda gde imamo 18 GPIO. U odnosu na Leonardo ovde su izostavljeni pinovi 11-13 i 17, tako da sada na ovih 18 imamo devet analognih, od kojih se pet mogu koristiti za PWM i na ploči su označeni krugom oko samog pina. I2C pinovi su ostali na 2 i 3, dok je SPI interfejs prisutan na pinovima 14-16. Serijski interfejs je zadržao svoje mesto. Osim ovih pinova, tu su i tri GND pina, RAW, RST i VCC. Pro Micro se osim preko mikro USB porta može napajati preko RAW pina neregulisanim naponima do dvanaest volti. VCC pin se može koristiti za regulisane napone od pet volti za naš primerak, ili 3,3 volta za slabiji model. Ukoliko će se ploča napajati putem RAW pina ili mikro USB porta, VCC se može koristiti kao output gde je kod naše ploče na njemu 4,8 volti usled pada napona zbog šotki diode. Pro Micro ima tri LED od kojih je jedna power, a druge dve RX i TX. Ploča nema ugrađenu LED na standardnom pinu 13, a inače nema ni taj pin. Ipak, ukoliko nam treba blink LED, možemo u tu svrhu iskoristiti RX LED koja je inače vezana na pin 17, koji nema svoj fizički GPIO izvod, ali on ipak postoji. TX LED nema svoj pin za uključivanje i isključivanje, ali se u tu svrhu može iskoristiti par macro-a (TXLED1 i TXLED0). Na ovaj način smo uspeli i na Leonardu da upalimo RX LED, ali ne i TX.

int RXLED = 17;

void setup(){

pinMode(RXLED, OUTPUT);

}

void loop(){

digitalWrite(RXLED, LOW); // palimo RX

TXLED0; //uz pomoc macro-a palimo TX

delay(1000);

digitalWrite(RXLED, HIGH); // gasimo RX

TXLED1; //gasimo TX

delay(1000);

}

Baš iz razloga što su mikorkontroler i računar direktno vezani, može se desiti da ne možemo da prebacimo skeč na Pro Micro. Kod Leonarda se ovaj problem lako reši resetovanjem ploče preko tastera, ali Pro Micro takav taster nema, te se problem rešava „RST” pinom. Uz dva brza reseta ploča ide u bootloader mode na osam sekundi.

You Got Quacked!

ATmega32u4 može da se programira da se ponaša kao bilo koji USB uređaj. To mogu biti razni igrački kontroleri, miševi, ali i tastature. Ovo poslednje je prilično zanimljivo i dovelo je do pojave raznih varijanti ovog čipa u formi USB stika, nalik na USB fleš memorijske stikove. Uz pomoć biblioteka se ovakvi uređaji mogu isprogramirati tako da kada se ubodu u računar urade razne stvari. Pritom, računar će sve vreme misliti da komunicira sa, recimo, tastaturom. Za to vreme se na ekranu može pojaviti poruka „Srećna Nova Godina” ili slično. Naravno, računar može da uradi i razne druge stvari, svakako ozbiljnije od poruke ispisane u Notepadu.

Mi ćemo vam ovom prilikom predstaviti BadUsb firme LilyGo. Ovaj stik u metalnom kućištu je vizuelno najobičniji memorijski uređaj. Ipak, u sebi krije drugu vrstu elektronike. Osim Atmega32u4 čipa i neophodne elektronike za njega, na PCB imamo šest otvora bez oznaka. Prateći izvode sa samog čipa smo videli da je u pitanju SPI interfejs, uz izvod RESET, što jako zgodno ako ploča „zabode” i reset je jedino rešenje. Poslednja dva bi trebalo da su GND i 5V. Na ploči još primećujemo LED koja je povezana sa PC7 izvodom 32u4 čipa, što je ujedno i izvod digitalnog pina 13. Nije nam baš najjasnije čemu ova LED u zatvorenom metalnom kućištu.

Da bismo ovu priču malo skratili, napomenućemo da se za programiranje ovakvih uređaja mogu koristiti payloads napisani za Rubber Ducky, koji je šrafciger u alatu mnogih hakera. Spisak komandi za „Gumenu patku” se može naći ovde github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads. Skeč se najlakše može pisati uz upotrebu Ducky2Arduino konvertora na ovoj stranici: roothaxor.gitlab.io/ducky2arduino_stable/. Dobijeni skeč se zatim može prebaciti u IDE i eventualno korigovati.

#include <Keyboard.h> // ukljucujemo biblioteku

void setup(){

Keyboard.begin();

delay(3000);

Keyboard.press(KEY_LEFT_GUI); //win taster

Keyboard.press(114); // R taster

Keyboard.releaseAll();

delay(500);

Keyboard.print("notepad”); // kucamo notpad u polju za pretragu

delay(500);

typeKey(KEY_RETURN); // pritiskamo enter

delay(750); // mali zastoj da se notepad pokrene

Keyboard.print("A robot may not injure!!!”);

typeKey(KEY_RETURN);

delay(750);

Keyboard.print("A robot must obey!!!”);

typeKey(KEY_RETURN);

delay(750);

Keyboard.print("A robot must protect itself!!”);

typeKey(KEY_RETURN);

}

// funkcija za pritiskanje odredjenih tastera. na ovaj nacin smanjujemo broj redova u okviru skeca

void typeKey(int key){

Keyboard.press(key);

delay(50);

Keyboard.release(key);

}

void loop() {

}

Skeč koji vidite ovde je prilično jednostavan i sve se izvršava samo jednom u setup funkciji. Možete zamisliti šta bi se dogodilo sa računarom kada bismo komande prebacili u loop funkciju. BadUsb nije svemoguć. Računar u stand-by sa lozinkom je nepremostiva prepreka za njega, ali za neoprezne korisnike može biti i te kako izvor problema. Pored BadUSb, postoje i rešenja sa slotom memorijske kartice koje dodatno povećavaju mogućnosti osnovne verzije.

Penzioner

Na kraju ćemo dodati da je u penziju otišao YUN, ploča koja je kombinovala dva sveta, 32u4 mikrokontroler i SoC, poput Linkita o kome smo već pisali (SK 11/2018) i koji takođe koristi Atmega32u4. Dolazak novih i osetno jeftinijih rešenja je doveo do toga da o YUN-u pričamo u prošlom vremenu.

Dejan PETROVIĆ

 
Fajl sistemi za Linux (1)
Arduino: Senzori za rad sa vodom
ATmega32u4 ploče
Šta mislite o ovom tekstu?
Arduino: DIY – Monitoring temperature peći (1)
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera