LAKI PINGVINI Malina u Svetu čuda
Pre izvesnog vremena, na našem sajtu najavili smo jedan zaista značajan novitet u svetu mikrokontrolera. Nismo hteli da prejudiciramo stvari, jer nismo bili sigurni kada će pre-order stići. Ispostavilo se da je stigao na vreme da ploču izgustiramo i napišemo koji red za ovaj broj „Sveta kompjutera”. Raspberry Pi Pico jeste novost sam po sebi, ali još veća je novost ulazak Maline u svet mikrokontrolera. Kao što i RPi kaže, mikrokontroleri povezuju svet hardvera sa svetom softvera i omogućavaju developerima pristup fizičkom svetu. Taj segment je Malini nedostajao. Do sada. Ovaj model jeste novost sam po sebi, ali još veća je novost ulazak Maline u svet mikrokontrolera... Pico pokreće mikrokontroler iz Raspberry kuhinje sa oznakom RP2040, izrađen u 40-nanometarskom procesu. Sama oznaka označava Raspberry Pi mikrokontroler sa dva jezgra, a naredna nula govori da je u pitanju, zapravo, M0+. Naredne dve cifre se odnose na količinu RAM-a i fleš memorije. Sumirano, RP2040 je dvojezgarni ARM Cortex M0+ mikrokontroler sa taktom na 133 megaherca. MCU na raspolaganju ima 264 kilobajta SRAM-a u šest nezavisnih celina. Preko QSPI možemo da dodamo do 16 megabajta fleš memorije. Zanimljivo je da će se u slučaju Micro/CircuitPythona fleš memorija deliti između korisničkog programa koji će raditi svoj posao i svakog drugog fajla koji će ovi programski jezici koristiti. U proseku, za korisnički program ostaje nam na raspolaganju oko jednog megabajta. Kod C/C++, ceo fleš nam ostaje na raspolaganju. Raspberry je implementirao razne tehnike u čip, pa tako imamo programabilan LDO preko kog generišemo napon jezgra, dva ugrađena PLL koja generišu taktove USB i jezgra, kao i AHB. Naglašava se jedinstveni programabilni I/O (PIO) podsistem koji uz UF2 bootloader spušta lestvicu potrebnog predznanja za početnike i hobiste. U pitanju je takozvano drag’n’drop programiranje. RP2040razume jezik „Zmija” (MicroPython i CircuitPython) i C/C++. RP2040 nudi čak 30 GPIO, gde se četiri mogu koristiti kao analogni inputi. U pitanju je 12-bitni analogno-digitalni pretvarač. Jedan od analognih ulaza je povezan sa ugrađenim temperaturnim senzorom. Od ovih GPIO, RP2040 na raspolaganju ima dva UART-a, dva SPI-a, dva I2C-a i osam state machine interfejsa. PWM je moguća na čak 16 pinova, a i sam USB 1.1 interfejs ide preko ovih perifernih IO. Za eksterni fleš namenjeno je čak šest IO (SPI). Da dodamo još da MCU radi na 3,3 volta i dolazi u QFN56 pakovanju, malo težem za ručno lemljenje, ali ne i nemogućem. Oni veštiji će ga bez problema zalemiti čak i običnom lemilicom, s tim da sam čip još nije dostupan mejkerima. Piko Malina je razvojna ploča neznatno veća od Arduino Nano, sa dimenzijama 21 puta 51 milimetar. Pico je prijateljski nastrojen prema prototipskim pločama, a pride ima i kastelacije za svaki pin, pa se može direktno lemiti na PCB. Izuzetak čini šest padova sa donje strane, koji namenskoj ploči omogućavaju direktan pristup apsolutno svim segmentima Picoa. Govorimo o D- i D+ linijama USB-a, zatim, GND, PS pinu naponskog regulatora, liniji za ugrađenu LED, kao i BOOTSEL tasteru. Imajući ovo u vidu, možemo da koristimo apsolutno sve mogućnosti ove ploče kroz neku našu custom ploču. (Dokumentacija je, naravno, izuzetna.) Na ploči imamo mikro-USB konektor, LED na pinu 25, RP2040 sa kristalom od 12 megaherca, kao i 16 megabita (dva megabajta) fleš memorije. Sa strana je raspoređen pinout, gde od svih koje smo pomenuli da RP2040 poseduje, ovde na raspolaganju imamo 26 digitalnih GPIO i tri analogna. Svi SPI, I2C i UART su dostupni. Kao i na nekim sličnim rešenjima, i ovde I2C i SPI nisu vezani za određene pinove, već mogu da se mapiraju po želji. Kontroleri za ove interfejse nisu fiksno vezani za određene pinove. Isto važi i za UART, ali na manjem broju pinova. Od zanimljivih, pomenućemo još i pin 30 (RUN), što je zapravo, enable pin sa ugrađenim pull-up otpornikom. Dovođenjem LOW na ovaj pin, resetujemo Pico. VBUS ne treba pojašnjavati, međutim, treba znati da se korišćenjem ovog pina i VSYS, uz par komponenata može dodati baterijski power menadžment ili neki drugi izvor napajanja, za šta, takođe, postoji detaljna dokumentacija. I na kraju, tu je tropinski SWD debaging interfejs koji se sastoji iz SWDIO, GND i SWCLK. Reći ćemo i to da su oznake svih pinova i padova sa donje strane. Zanimljivo je da GND pinova ima više i da se oblik GND pedova razlikuje od ostalih, te su lako uočljivi. Za sada ne postoji podrška za Pico u okviru Arduino IDE, što će, nadamo se, biti rešeno u narednom periodu. Mi ćemo vas provesti kroz nekoliko načina programiranja ove ploče. Podrazumeva sa da je Python već instaliran na računaru. MicroPython Prvo što nam je potrebno jeste da preuzmemo UF2 fajl sa zvanične Raspberry Pi stranice. Ovaj fajl će nam omogućiti lako instaliranje MicroPythona na Pico. Sve što treba jeste da prebacimo Pico u BOOT mode, tako što ćemo pre povezivanja sa računarom da držimo ’BOOTSEL’ taster. Na taj način će se Pico prijaviti kao drajv (USB Mass Storage). Fajl kopiramo na Pico, nakon čega će se on restartovati i to je to. Dobili smo MicroPython firmver na Raspberry Pi Pico. Za dalje nam je potreban neki interaktivni prompt (REPL - read evaluate print loop) koji će izvršavati komande direktno kroz USB serijski interfejs. Za početak, radi primera ćemo koristiti CoolTerm koji možete preuzeti sa adrese freeware.the-meiers.org. U pitanju je veoma jednostavan serijski terminal. Prvo biramo port, kao što bismo radili u Arduino IDE, i to tako što idemo na tab Options. Dok smo ovde, možemo pod Terminal izabrati Line Mode, radi preglednosti. Ako je sve kako treba, klikom na tab Connect trebalo bi da se povežemo sa Pico. Prilikom svakog ponovnog povezivanja potrebno je ponoviti korake. CoolTerm neće pamtiti ova podešavanja, kao ni port. REPL je interaktivan u meri da uživo možemo pratiti izvršavanje komandi. Rekli smo da je ugrađena LED na pinu 25. Ispod je „Blink” skeč pisan u MicroPythonu. from machine import Pin, Timer led = Pin(25, Pin.OUT) vreme = Timer() defblinker(timer): global led led.toggle() vreme.init(freq=1, mode = Timer.PERIODIC, callback= blinker) Nećemo se puno osvrtati na razlike „Blink” skeča kakvog standardno znamo i ovog ovde; uostalom, MicroPython zaslužuje zasebnu priču. Ipak, pojasnićemo da uvozimo Pin i Timer. Dodeljujemo pinu 25 led objekat, i postavljamo ga kao OUT(put). Pravimo objekat vreme, a zatim i funkciju blinker, preko koje omogućavamo objektu led da menja stanje. Pokrećemo funkciju vreme gde dajemo frekvenciju promene stanja, mode i callback. Sve kucamo u liniji za komande, gde bi nakon poslednje linije kôda, ugrađena LED trebalo da počne da trepće. Međutim, ako resetujemo Pico, LED neće treptati. To je zato što program nije prebačen na Pico, već se izvršava simultano, kroz CoolTerm serijski terminal. Program na Pico možemo da prebacimo preko komandne linije koristeći rshell. Da bi Pico pokretao program i nakon restarta (ili odvajanja sa računara na poseban izvor napajanja), bitno je to da program pisan u microPythonu mora da nosi naziv „main.py”. Možemo da imamo više korisničkih programa (ili drugih PY fajlova) prebačenih na Pico i da ih pokrećemo ručno, ali samo će se „main.py” pokretati sam. U svetu MCU, ovo nije strano. Ako se sećate, kada smo pisali o WiFiMCU (SK 6/2018, i.sk.rs/15125) koji se programirao u LUA programskom jeziku, takav program se morao nazvati „init.lua”. S obzirom na to da Raspberry preporučuje Thonny (thonny.org) softver za upload korisničkog programa na Pico, taj i koristimo. Prvo što moramo da uradimo jeste da odaberemo ploču, što radimo preko Run -> Select Interpreter i tu biramo „MicroPython (Raspberry Pi Pico)”. Radi preglednosti, dodajemo prozor Files sa leve strane, tako što idemo na View i čekiramo ga. U komandnoj traci iznad imamo tabove Run i Stop koje ćemo koristiti za pokretanje i zaustavljanje programa. Središnje mesto zauzima prozor gde kucamo program. Highlighter radi dosta dobro za MicroPython. Ispod je Shell, gde možemo da kucamo linije programa, ali i da čitamo feedback Picoa; nešto poput serijskog terminala na Arduino IDE. Sa desne strane, pod Files, imamo izlistan direktorijum Users<user>, ali i sadržaj fajlova na Picou. Da bismo omogućili da Pico radi samostalno, imenujemo fajl kao „main.py” i idemo na Save. Thonny će nas pitati da biramo između računara i povezanog mikrokontrolera. Nakon prebacivanja na Pico, dovoljno je resetovati ga pritiskom na taster, odvajanjem od računara, sa ’Ctrl+D’ ili Start-Stop koje pomenusmo. Dodaćemo još jedan zanimljiv primer. Rekli smo da Pico ima ugrađen temperaturni senzor na analognom pinu 4. Uvozimo module machine i utime, dodeljujemo analogni pin objektu, a zatim sledi konverzija koja se odnosi na naponsku logiku, ADC i zaokruživanje. Tek, za tili čas, temperatura će početi da se prikazuje u Shell polju. import machine, utime picoTemp = machine.ADC(4) konverter = 3.3 / (65025) while True: read =picoTemp.read_u16()*konverter temperatura = round(27 - (read - 0.706) / 0.001721,2) print("Temperatura: ",temperatura) utime.sleep(0.1) Eksterni moduli, senzori i aktuatori rade bez problema sa Pico. Ovo je primer za OLED I2C ekran. from machine import Pin, I2C from ssd1306 import SSD1306_I2C i2c = I2C(0,sda=Pin(0), scl=Pin(1),freq=40000) oled = SSD1306_I2C(128,64,i2c) oled.fill(0) oled.text("SK",0,0) oled.text("RULEZ",0,20) oled.show() S obzirom na to da Thonny nema sve biblioteke instalirane, to je prvo što radimo. Idemo na Tools -> Manage Packages i u polju kucamo „ssd1306”. Search on PyPI nam daje pogotke gde biramo biblioteku koja nam je potrebna i instaliramo je. Potrebno je još da mapiramo I2C pinove sa kojima smo povezali naš ekran. Ostalo ne treba pojašnjavati. CircuitPython CircuitPython je jako sličan MicroPythonu, ali postoje razlike. Razvijen od Adafruita za potrebe svojih proizvoda, ovaj softver ima svu moguću podršku u vidu modula koje proizvodi Adafruit. Ovo je dobro za nas, jer ćemo uglavnom imati sve na jednom mestu. Razlike se ogledaju u tome što se ovde fajlovi korisničkog programa kopiraju kao na bilo koji USB drajv, a isto tako se i brišu. Nije potreban REPL kao što je Thonny. Čim se prebaci na Pico, on će se restartovati i pokrenuti program. Jednom napisan program radiće na bilo kom mikrokontroleru koji, inače, može da radi sa ovim programskim jezikom. Neophodan UF2 bootloader preuzimamo sa zvaničnih Adafruit stranica i prebacujemo ga na isti način kao i kod MicroPythona. Nakon restarta, Pico će se pojaviti kao „CIRCUITPY” drajv. Možemo da prebacujemo biblioteke, Python fajlove ili slike kao na bilo koji USB fleš drajv i Pico će raditi. S obzirom na to da govorimo o malo drugačijoj filozofiji ova dva Pythona, koristićemo Mu editor koji možete preuzeti sa codewith.mu, a koji je i preporuka Adafruita. Mu se po koncepciji ne razlikuje mnogo od Thonnyja: tu je meni sa tabovima, editor u sredini, dok je u donjem delu konzola/REPL. Za razliku od Thonnyja, ovde se fajl koji će se automatski pokretati mora nazvati „code.py”. Mu, kao editor, ima dosta veću pomoć pri pisanju programa, a tu je i highlighter. Jednom napisan program se sa Save bukvalno kopira na Pico, kao na bilo kakav USB drajv. Pico će uraditi soft reset i program će se pokrenuti. Prilikom svakog pisanja korisničkog programa, prvo što moramo da uključimo u program jesu moduli. Recimo, board je modul koji se tiče specifičnih objekata hardvera, kao što su pinovi. Ako nam je potrebno da povežemo neki I2C uređaj, tada nam osim I2C treba i busio modul. Ovaj modul se, inače, koristi i uz Adafruit biblioteke u Arduino IDE sistemu. Evo i „Blink” programa u CircuitPython varijanti: import time, board, digitalio led =digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5) C/C++ ![]() A šta je sa programskim jezikom koji smo navikli da koristimo na Arduino pločama? Kada pogledamo koliko smo raznih Arduino i Arduino-kompatibilnih ploča opisali na ovim stranicama, a sve su bez pogovora radile sa Arduino IDE ili PlatformIO, neko bi pomislio da će jedna Malina raditi out-of-the-box. Autor ovih redova ima iza sebe projekte na skoro svim Arduino-ATmega čipovima i ESP i do uploada skeča, stajala su dva klika. Ovde će C/C++ odbiti i najupornije. I to ne zbog samog programiranja, već zbog dovođenja Visual Studio softvera u stanje da uopšte možemo da napišemo „Hello World!” za Malinu. Pomoći nema ni kod koliko-toliko detaljnog uputstva na „Getting Started” stranicama Raspberryja. Razlog tome je taj što je pojašnjenje malo konfuzno, a i potrebno je instalirati poveći toolchain: Python, ARM GCC compiler, Cmake, Build Tools VS, Visual Studio Code i Pico-SDK tools. Dodatno, kod svakog treba voditi računa o putanjama. Opisivanje ovog redosleda u časopisu nema smisla, jer bi nam tako nešto sa slikama oduzelo i previše prostora. Postoji nekoliko pristojnih step-by-step pojašnjenja na mreži, koja vam mogu pomoći. • • • Raspberry Pi Pico, i ovakav kakav je, sada je i više nego upotrebljivo parče hardvera. Malo je reći da smo zadovoljni. RP2040 ima dovoljno procesorske snage, memorije i, generalno, lako se programira. Prelazak sa Arduino IDE na MicroPython je prilično bezbolan (a kao bonus - ne moramo da mislimo o tačka-zarezu) i mišljenja smo da će se mnogi držati MicroPythona do pojave prvih Arduino RP2040 ploča koje će, prirodno, imati svoju podršku u okviru IDE. Kontakt: GalagoMarket (www.galagomarket.com)
|
||||||||||
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Intel Core i9-14900K i Core i7-14700K Nema zime uz Intelove mašine Da li je Raptor Lake Refresh samo još vrelija i neznatno brža verzija prethodne generacije? Apple iPhone 15, iPhone 15 Pro i iPhone 15 Pro Max Petrovača, ajdared i zlatni delišes iPhone 15 je „prepakovana” verzija modela 14 Pro, sa Appleovim čipsetom A16 Bionic „ispod haube”... High tech igračke i razvoj naučnog razmišljanja M’mera mpoyamba Visokokvalitetne, a povoljne edukativne igračke postoje za svaku sferu interesovanja vašeg deteta... Dell Alienware AW2724DM Ponos na vašem stolu Odličan monitor. Vrhunski! Međutim, kao što verovatno znate, Alienware je neka vrsta statusnog simbola... Hisense 43A7KQ VIDAA sa više smisla Neobičan brak pametnog i tradicionalnog televizora, koji se lako koristi i bez ijedne napredne opcije za gledanje TV programa... Finansijske tehnologije Turbulencije ne prestaju Da li nas očekuje recesija ili „meko prizemljenje”? Ključne kompanije sektora finansijskih tehnologija ne čekaju previše... EmulationStation Desktop Edition 2.1.1 Vizuelna strana emulacije Emulation-Station je frontend za emulatore, koji donosi mogućnost kastomizacije prikaza sadržaja... Super Mario Bros. Wonder Super Mario Bros. Wonder je dragulj u serijalu 2D Mario platformera, na koji se čekalo više od tri decenije... Assassin’s Creed Mirage Igra ima fokusiranu, vrlo linearnu priču kakvu su imali prvi naslovi u serijalu... Forza Motorsport Pre trka nije moguće voziti kvalifikacije, već sami birate startno mesto na gridu... Marvel’s Spider-Man 2 Akciona komponenta Marvel’s Spider-Mana 2 je stravično dobra, mada su Majls i Piter previše slični... |
||||||||||