Děkuji za článek a těším se na pokračování.
S Rasberry jsem zatím nic nedělal, mé zkušenosti jsou hlavně s AVR ať už přímo v assembleru nebo jako Arduino. Načekal jsem že jsou PIO tak "vymakané".
Když ukazuji žákům jak se v assembleru ovládá sériový port (nic na tom není : nastavit pár konfiguračních registrů a IN / OUT s datovým registrem), nebo jak využít čítače, tak dostanu odpověď: "Na Ardinu je to jednodušší." No jasně, využiji knihovny, který napsal někdo přede mnou. Na druhou stranu tím ale přijdu o většinu výkonu procesoru, protože skoro vždy musí počkat až se daná operace dokončí. V assembleru lze snadno s využitím přerušení operaci spustit (například načtení analogové hodnoty) a přerušením se nechat informovat že je hotovo. Jenže pořád někde čtu nebo slyším, že assembler je nemoderní, překonaný,... Můžu to programovat v C, ale pokud půjdu na úroveň registrů tak už se to zas od assembleru zas tolik neliší, stejně musím nastudovat jak co funguje.
A tady si kladu otázku na kterou nějak nemohu nalézt uspokojivou odpověď: Mikrořadiče obsahují spoustu periferních modulů: čítače-časovače, sériové linky, řadiče displejů, AD převodníky, generátory signálů, tady teď vidím u RPi PIO. Jak se tyhle moduly využívají při programování ve vyšších jazycích? Respektive jak je dokáže využít programátor co využívá jen knihovny a netuší co se za nima skrývá. Nebo je to tak, že u velké části aplikací jsou tyhle moduly nevyužité a celé se to vyřeší softwarově hrubou silou hlavního procesoru (něco jako dopadla konzole Atari Jaguár)?
PS: na 8.bitovém Atmelu (ATMega32) dokážu využívat a v assembleru ovládat většinu modulů. Co jsem zatím nedal je I2C (přiznávám moc jsem tomu nedal, několikrát jsem s to to pokusil a vždy po pár hodinách bádání jsem to vzdal/odložil a radši se I2C vyhnul). Máte s tím někdo zkušenosti? Nebo třeba nějaké knihovny pro assembler? (Něco jsem si z internetu stahoval, ale když jsem to pak zkoumal, tak v několika případech, pokud jsem to správně pochopil ta implementace I2C byla dělaná softwarově na obyčejných pinech)
Přesně toto bych chtěl probrat příště. Protože PIO umožňuje zkombinovat třeba ten MicroPython s assemblerem těch stavových strojů. Poměrně zajímavé řešení - low level věci se opravdu řeší low level (bez bit bangingu) a zbytek klidně může běžet souběžně v tom interpretru (tedy MicroPython umí i vkládat assembler Cortexu, to je možná pro výuku taky zajímavé).
My jsme kdysi museli pracovat na úrovni strojáku (PMI-80), ale to by dneska asi neprošlo :)
(osobně mi připadne ten přístup RP Pico dobrý - může se použít Python pro začátku, u toho se vysvětlí GPIO a potom se může jít do céčka. Je to IMHO lepší a levnější, než micro::bit a další podobné věci. Navíc když se připlatí dolar či dva, je v tom i WIFI).
Wifi je vyhoda. Bezi mi na tom budik u postele, a sice tam je modul pro hodiny realneho casu, ale ten se kontroluje vuci NTP serveru. Takze to je uplne bezudrzbove - kdyz nejede wifi, drzi cas velmi dobre. A kdyz jede wifi, tak cas drzi jeste lepe.
(Mozna se nekdo divi proc mam budik u postele co bezi na RP2040 - ale nenasel jsem komercni budik ktery by bylo mozno docasne vypnout. Napr. vzbudim se o deset minut drive, takze vstanu hned ale nechci aby budik zbytecne vzbudil deti. Takze zmacknu tlacitko, a jeden nasledujici budik se nespusti. Druhy den budik funguje zase jako vzdy. Mohl bych si vzpomenout a znovu zapnout budik, ale na to jsem zapominal. Tuhle funkci mam treba i na mobilu, ale me se nechce porad tahat mobil do loznice. Jo, jeste existuji 'chytre' budiky co muzu ovladat hlasem, ma to vlastni cloud, napojeni na google ucet, a mozna by takovou funkci umely, ale takovehle piiiiip veci fakt nemusim, protoze az vyrobce prestane podporovat cloud pro tenhle typ tak by z toho byla leda cihla.)
mam tenhle displej:
https://www.waveshare.com/wiki/Pico-Clock-Green
ale ukazkovy kod je slabsi, i kdyz funkcni, takze pouzivam tohle:
https://github.com/astlouys/Pico-Green-Clock
Plus tam mam nejake vlastni malou modifikaci tlacitek.
Uplne nejlepsi je sensor jasu, takze ve dne je displej citelny i pri slunci a v noci slabounce sviti takze nerusi.
Nevím jaká je spotřeba u Pico, PicoW a druhých verzí, kde to navíc může běžet na RISC-V a ARMu. WiFi modul se dá vypnout a zapnout, když se dá samotné Pico do režimu spánku, tak se zastaví interní RTC a vypne se komunikace přes USB, dál jsem si s tím moc nehrál.
Nevím jestli na baterky je Pico vůbec vhodné řešení nebo je lepší Arduino Pro Mini s odpojenou LEDkou a nebo nRF52840 - to se dá blbě sehnat, prodává se u nás s přiřážkou 100% nebo na Mouser/Digikey kde je zase minimální hodnota objednávky.
Podľa Power switching RP2040 for low standby current applications má RP2040 v najnižšom deep sleep režime odber ~180 μA. A áno, reálny čas v tomto prípade bohužiaľ jedine externe – RTC modulom alebo iným low power MCU, ktorý bude RP2040 preberať.
Pre porovnanie trebárs ESP32 má v najnižšom hibernation režime (so stále aktívnym jedným RTC časovačom) odber 5 μA, v najbližšom vyššom 10 μA:
https://deepbluembedded.com/esp32-sleep-modes-power-consumption/
To sice ano, ale když na ESP zapneš rádio, tak i turbíny v Dukovanech začnou pěkně hučet... Špičkově si to vezme i 400mA.
Mám věci postavené na ESP32 na baterky - používám espnow. Zařízení mám většinu doby v deepsleep a rádio zapínám jen když potřebuji vysílat (probouzím jednou za minutu a data posílám jen při změně nebo 1x za 10 minut). Ale i tak 2500mAh baterka vydrží 2-3 měsíce.
V příští generaci se vykašlu na espnow... Na druhou stranu, je to levné.
Díky za tip! Vypadá to perfektně. Hned jsem to musel objednat. S RPi Pico jsem si chtěl hrát už dlouho, ale zatím jsem nenašel vhodný účel.
Mít konečně dot matrix hodiny, jejichž software můžu editovat, zní skvěle. Zatím jsem měl jen pár z Aliexpresu, které vždy přišly s naprogramovaným mikrokontrolérem bez jakékoli dokumentace.
kdyz uz to na me vyskocilo na YT, tak hodim i sem, dalsi alternativni FW :-)
https://github.com/arnaud-j4k08/PicoClockGreenEasy
Jo, tech firmware jsem pred rokem a pul napocital asi 6 (forky nepocitam), v ruzne mire dodelanosti :)
Tady se moc hodilo ze se da obycejnym kabelem nahrat firmware do Pico z jakehokoliv pocitace, a kdyz se nelibi tak se to prehraje snadno zpet. Netreba jakykoliv prevodnik. Moc to usnadnuje testovani, da se to delat klidne na gauci u televize.
Záleží jak moc vysokoúrovňové jsou ty knihovny.
Arduino je hodně vysoko a neumožňuje skoro žádné optimalizace, ale na většinu uměleckých a blikacích věcí to bohatě stačí.
Ještě se dá celkem snadno použít superloop a polling, to už stačí skoro na všechno a má to výhodu známého časování (teda ne v Arduinu s busy loop waitem všude možně).
Interrupty a DMA jsou potřeba až u věcí co jsou hodně rychlé nebo potřebují šetřit energií. Ale zase je tam větší problém garantovat časování, protože interrupty přerušují běh hlavního "vlákna" atd.
Jinak I2C je hodně složitý protokol, hlavně když dojde na podporu clock stretchingu a odsekávání stavu sběrnice. Třeba STM32 čipy mají u i2C i docela dlouhou erratu.
Co se praxe týče, tak ty moderní mikrokontrolery jsou hodně o nastavení pár registrů a nechat to dělat svoji práci. Stejný přístup jsme používali u nějakého DSP od Motoroly (myslím) už před 20 lety v předmětu Mikropočítačové řízení na VUT.
Prakticky jsem kombinoval všechno.. Arduino knihovny na prototypování, C/C++ s přístupem k registrům i kusy assembleru na speciality nebo workaround bugů (ale málo, C přístup k registrům obvykle stačil).
V Rustu jsem ještě assembler použít nemusel, stm32 knihovny maji nízko i vysokoúrovňovou část, takže se to dá dobře kombinovat. A superloop mám schovanou za async abstrakci s vlastním jednoduchým executorem (interrupty jen probudí danou úlohu a hned skončí).
I2C neni slozite.
Da se to rozpadnout cca na 4 operace (ktere maji HW podporu) a vyse resit uz softwarove. Ja to delam tak, ze mam takto dvovrsve, a ten lowlevem mam jak bit bang, tak abstrakci na STM a pak svoji FPGA IP.
proble s tim je, kdyz je prilis inteligence v HW. Typicky tam pak nekdo neco nedomysli a musi se to ruzne obchazet.
Uplne tedy neberu napr. multimaster, ale to jsem nikdy nepotreboval.
6. 2. 2025, 13:04 editováno autorem komentáře
Takže je to tak jak jsem čekal: složitý a náročný. Musím umět vyšší jazyk, chápat jak funguje hardware, nastudovat jak fungují knihovny, umět aspoň základy assembleru a pak to celý spojit.
Když jsem přemýšlel jak je co složitý, tak pokud je programování ve vyšším jazyku (obecné C, wiring pro arduino) obtížnost 1, psaní čistého assembleru pro mikrořadiče je úroveň 2-3, a celý to spojit pak úroveň 4-6 možná i víc. Aspoň tak to vnímám.
Na střední škole, kde učím, se i ti nejlepší žáci přiblíží někde k úrovni 2 (ve 3. a 4. ročníku dvě hodiny týdně teorie kde musím začít od nuly (ALU, přerušení, sběrnice, paměti, paralelní rozhraní, sériové rozhraní, čítače, mikrořadiče,... končím stručně u programovatelných obvodů) plus k tomu asi 25 dvojhodinových cvičení na assembler AVR (paralelně s tím jedou s kolegou cvičení na Arduino). Myslím že to jak to učím, je dost podobné kurzům co jsou tady na rootu - postupně společně vytváříme program, který mám odzkoušený a kometuju co a jak. Sami by to nevymysleli, ale většina alespoň pochopí jak to funguje. Slibuju si od toho, že tahle dám aspoň nějaký základ pro ty co se budou chtít tomu věnovat dál. Docela by mne zajímalo kolik (kolik procent programátorů) se dostane na ten vyšší level (sám sebe vidím tak někde 3-4).
Jinak dříve jsem používal hodně spojení TurboPascal + asm (neboli jak jsme tomu říkali "GreenPascal". Tam se to opravdu hodně povedlo. Když jsem před časem četl články jak vkládat assembler do microPythonu a jak se tam předávají parametry, moc se mi to líbí. Zatím jsem se nedostal k tomu zkusit si to nějak prakticky, ale na první přečtení mi to dávalo smysl.
Strašně záleží, co od toho člověk chce. Arduino se mi moc nelíbí - originál má výrobní cenu asi dolar a prodává se za pár stokorun, všechny věci se řeší stylem kup si modul, stáhni knihovnu. Super pokud člověk chce něco na ovládání LED pásku nebo jednoúčelovou věc nebo jako start pro dvanáctileté děti protože se rychle dostaví výsledek. Jestli má smysl se učit Arduino a Wiring API těžko říct - na hobby projekty fajn, ale o tom, že by to někdo používal na komerční projekty nevím.
RPI Pico jsem zatím popravdě používal pouze s MicroPythonem právě jako levnější Arduino s WiFi a BLE, protože jsem nepotřeboval výkon ani provoz na baterky a navíc se část kódu dala odladit na PC. Co vím, tak se dá programovat v MicroPythonu, CircuitPythonu, C a C++ přes RPI Pico SDK a navíc asi použít FreeRTOS a Zephyr.
Psaní v ASM, C, C++ vidím tak, že assembler je ukecaný a psaní v něm není těžké, ale je to opruz (skládání všeho do registrů, tabulka syscallů, linkování knihoven) a znalosti jsou nepřenosné. C je podstatně menší opruz, ale přijde mi, že minimálně půlka kódu je obsluha chyb a management zdrojů jako paměť a otevřené soubory a v C++ se píše nejpohodlněji díky existenci unique_ptr, shared_ptr, ofstream apod. které zavírají soubory a uvolňují paměť, když se zavolá destruktor, což snižuje prostor pro chyby. Jenže C++23 je tak složitý jazyk, že se všechno nedá naučit a věci nemají jednoznačné řešení. Vyšší jazyky mají velkou výhodu v tom, že celá logika se dá odladit na PC zatímco ladit assembler na jiné platformě je vyšší dívčí.
Co se týká učení, tak za půlrok to dělá pár hodin. Tady je asi nejlepší do žáků nalít nějaké základy a principy, které mají obecnou platnost, učit se knihovny, které fungují na jednom mikrokontroleru nemá smysl. Sám se chci trochu podívat právě na FreeRTOS a Zephyr, které se používají na tučnějších mikrokontrolerech. Podle mě se sem moc programátorů nedostane, protože je to úzká specializace na průmyslové a řídící aplikace, regulaci a zpracování signálů. A každý programátor se dnes úzce specializuje. Někdo na web, javascript a specifické frameworky, databáze, někdo na mikrokontrolery a hradlová pole, integritu dat, regulaci, někdo na PC aplikace a grafiku, k tomu možná nějaké části matematiky, fyziky, optimalizační úlohy. Někde jsou průniky, někde vůbec.
Pane Tišnovský, zase jste nezklamal. :-) Super článek plný informací. Má to jenom jednu chybu, že Vy dokážete tvořit články v takovém záběru, že nemám šanci to pobrat. Asi už jsem starej a blbnu. Jo, nedávno jsem si koupil klon RP2040 (YD-RP2040) na ALI, protože jsem si řekl, že za ty prachy si to musím zkusit. Snad nebude vadit link https://vi.aliexpress.com/item/1005007625223000.html. Navíc to má 16MiB flash a RGB ledku. Bacha ta RGB led se musí fyzicky připojit proletováním jednoho spoje označeného jako Rněco na destičce, aby tam nepřekážela někomu, kdo o ní nestojí na i/o pinu. Trochu mě překvapilo způsob programování (uploadu). Normálně USB mass storage a tváří se to jako 128MiB disk a soubor se na disk normálně nahraje. Žádné kejkle. Existuje také nástroj picotool. Nahrál jsem do toho CircuitPython od Adafruit a zablikal LEDkou a fakt to fungovalo. Konzole přes /dev/ttyACM0 přes minicom a REPL smyčka toho CircuitPythonu. Prostě komfort. To mě v první fázi uspokojilo a raději jsem to založil, protože bych si s tím hrál a nedělal zas jiné věci. Nestíhám a tak rád bych si s tím hrál... Ale přiznám se, že o těchdle úžasných featurách RPi Pico jsem netušil a vypadá to skvěle. Určitě si s tím pohraju ve volné chvíli. Na nějakou sériovou komunikaci to bude bomba. Díky moc za skvělý článek!
Musim rict ze tohle nechapu, a vlastne mi to neskutecne vadi.
Misto toho koupit normalni Raspberry Pi Pico W, tak koupis neco z ciny za 25 Kc, kde cinska vlada dotuje postovne, a pri vyrobe museli asi obetovat kozla aby cenu srazili tak nizko. Presneji nemuseli platit vyvoj, a ti delnici ve skladu maji mizivou mzdu.
A to jenom proto abys usetril 164 Kc.
A jeste budes travit cas a hledat co tam vyrobce ojebal aby to bylo levne a proc ti to nefunguje podle manualu stahnuteho ze stranek raspberry foundation.
Jako je mozne ze 164 Kc je pro tebe tak strasne moc penez, ale to by bylo lepsi neztracet cas vykecavanim na rootu a zacit makat. V opacnem pripade ojebavas vsechny kolem.
Postovne nedotuje cinska vlada, ale skladaji se jim na to vsichni ostatni clenove postovni unie, protoze cina si nesmyslne drzi statut rozvojove zeme tretiho sveta - proste jsou na urovni nejakeho africkeho zapadakova, kam posta chodi jednou mesicne jako z letadla shazovanej balik :D
Tohle je taky jeden z duvodu, proc Cinu nemit rad - proste nepriznaj barvu a zneuzivaji cely svet.
Kdyby postovni unie ten statut zmenila - hned by ubylo tech vyhodnych korunovych dealu z ciny, meli by zakaznici platit klasickou trzni vysi postovneho.
K tomu dotování poštovného: ve skutečnosti většinu ceny dotujeme "my", ne čínská vláda. Ceny mezinárodní pošty reguluje Universal Postal Union (UPU), kde Čína ještě nedávno figurovala jako slabší rozvojová země, a měla podle toho výrazně nižší sazby. Většinu nákladu na přepravu tak nese last-mile dopravce (u nás třeba Česká pošta), protože na něj připadne malý zlomek z celkové (už tak výrazně prodělečné) ceny za dopravu.
V roce 2019 se to konečně začalo řešit na výjimečném sjezdu unie, shodli se na postupném růstu sazeb, ale pořád platí že dopravu za miliony malých balíčků z "levných" zemí nese z většiny státní kasa země cílové.
Takže ta Vaše poslední věta platí ještě víc :-)
Nevim jak Temu, ale puvodni odkaz byl na aliexpress. Kdyz jsem objednal z aliexpressu, tak mi to domu dorucovala ceska posta. A pokud aliexpress pro nektere zbozi tvrdi, ze cena postovneho je treba 1 USD (pri cene vyrobku 1 USD), tak je jasne ze ta doprava byt jen po CR asi nelze zaplatit z pouheho 1 USD, natoz cela cesta z ciny.
Jo a v tom je prave ten vtip hledani odpovedi na otazku, kdo tu dopravu realne plati.
Protoze od doby zavedeni vyberu DPH za kazdou zasilku to realne uz nechodi primo z Ciny. Cinan to priveze do EU, zaplati DPH (protoze kdyby to mel zarizovat zakaznik, zakaznik se na to ... a skoro nic neobjedna). A teprve EU to nastoupi do mezinarodni postovni prepravy. U Aliexpresu je typicky "Odesílatel: Cainiao (Netherlands) B.V.". Takze nepochybne plati za dopravu "evropskou" cenu, byt samozrejmen s mnostevni slevou.
Spousta veci dokonce ani z te ciny nejde ale posilaji to z predzasobeneho EU skladu (nejcasteji Polsko, Spanelsko, Italie). Takze navic naskoci "evropsky" plat skladnika.
Dotace čínské vlády mě fakt nedojímá. A na té výrobě ten Číňan ještě vydělá a vydělá i prodejce. Na vnitřním čínském trhu to ostatně neprodává za pětadvacet ale za patnáct. Nikoho neobětovalo, jen prostě vyrábějí v sériích s činským měřítkem, tedy milion sem, milion tam. A jetli vás tak trápí mzda dělníků ve skladu, raději neřeště odkud máte polovinu elektroniky, baterií a materiálů v nich o tom, co máte na sobě ani nemluvě.
A čas je to jeho. Někoho zkoumat podobné věci prostě baví. Vám po tom není dokonale nic. Zajímalo by mě, kde vůbec berete tu drzost mluvit mu do života a do toho, jak využívá svůj čas.
Moc děkuju za článek. jak už tu v diskusi padlo, Vy ty články píšete s neuvěřitelnou kadencí, to není ani možné. Kde na to berete čas a sílu?
Jinak taky přidám svou trošku do mlýna. Když se objevilo první pico tak jsem si říkal, not bad. Dvě jádra M0, 2 Mega flashky a za ty prachy? Proč ne. A pak jsem objevil ve výčtu periferek tohle PIO a věděl jsem, že to prostě musím mít doma a zkusit si to. Když jsem se prokousával příkladama, mile mě překvapila možnost spojení s DMA a umožnit tak přenos dat přes PIO až na frekvenci jádra. To je supr. Ale první věc co sem s tím udělal bylo one-wire rozhraní pro DS18B20. Zrovna one-wire je takové zajímavé cvičení, protože se musí zajisit oboustraný přenos na jednom pinu. Doporučuju všem :). Na netu se dají najít i další zajímavé příklady. Jako třeba VGA nebo ethernet. PIO je prostě moc pěkná věc a chlapcům z Raspberry se tohle opravdu povedlo.
Co přesně se stalo? Zničil jsi čip, nebo jsi pouze pojistkama změnil režim ve kterým jsi s ním komunikoval a tudíž se ti už atmel neozval?
Mne se před časem povedlo zablokovat si dvě ATMega 168, když jsem se je pokoušel přepnout do režimu DebugWire. Muselo se vypnout ISP. Bohužel mi to nějak nefungovalo a nevím proč, a čip nekomunikoval. Možná proto že co mám programátor JTAG ICE2 nemám originál, ale asi to bude nějaký klon. Nakonec jsem přišel na to, že když ho připojím přes fyzický COM, tak pomocí AVR DUDE dokážu pojistky znovu nastavovat, přes USB to nešlo. Dneska už mám k dispozici i paralelní programátor (pro EPROM, FLASH, vybraný mikrořadiče) a v tom by to mělo jít vždycky - zatím jsem to nezkoušel.
Ta komunikace JTAG-ICE2 přes USB je taková "USBčková". Ve WIN XP to funguje bez problémů, na WIN 10 jsem odzkoušel všechny ovladače a nic. Přes COM to jde bezproblémů i na WIN 10 - USB kabel slouží jen jako napájení.
Jednodušší programátor JTAG-ICE-USB od Olimexu mi funguje bez problémů i ve WIN11, ISP MK2 jen ve WIN XP.
Povedlo se mi to dvakrát. Poprvé zdroj hodin, ale to šlo ještě zachránit připojením externího zdroje hodin. Po druhé to bylo něco co mi zablokovalo ISP, ale vyřešilo se to druhou megou a metodou "doktor/pacient". Jedna mega měla v sobě "doktor" program a k té poškozené se připojila přes paralelní programovací rozhranní. Megy měly možnost buď ISP nebo paralelně a oba režimy fungovaly out-of-the-box. No a vlastně dotkor nahrál nějaký jendoduchý hello-world example s defautlním nastavením pro pojistky a jelo se dál.
Chybne nastavené fuse bity zvyčajne šli s trochou snahy fixnúť. V jednoduchšom prípade stačilo priviesť externé hodiny s vhodnou f prípadne adekvátny kryštál, v komplikovanejšom sa pohrať s časovaním signálov pri programovaní. Ak aj človek nemá po ruke žiadne dielenské vybavenie, ide to v princípe vybaviť prepojením s inou tiny/mega s jednoúčelovým programom.
Akurát RSTDISBL (uvoľnenie RESET pinu pre GPIO) môže byť zapeklitejší prípad, tiež ale ide fixnúť paralelným HV programátorom. A potom SPIEN, ten ale myslím nejde vypnúť cez SPI.
jo ty ceny jsou divoké. Třeba 8051@33MHz s 1kB RAM (jo jeden kB, ne MB - a to je obsluha RAM v padesát jedničce strašně přes ruku) pořád stojí cca stovku. A od stejného výrobce čip s Cortexem M0+ nebo i vyšším a opravdu se stovkami kB RAM, je za stejnou cenu. To RP2040 vychází hodně dobře i v kombinaci v RPI Pico.
Ale přepdokládám, že pokud někdo udržuje design s 51, tak to prostě zaplatí...
Nevim zda bych to oznacil pimo procesory, treba zde se jim rika "State machines" :)
https://github.com/lawrie/fpga_pio
Me by spis zajimalo jak to zapada do ARM reseni - obsahuje RPI i klasicky fancy ARM GPIO blok, nebo ho plne nahrazuji vlastnim resenim?
Pěkné,
vzhledem k tomu že tyto články čte dost našich "studentů" z kroužku a mají dost dotazů k názvosloví, potřeboval bych vysvětlit proč
- stavový stroj (vůbec jsem zatím nikde nenašel), již dříve jsem si všimnul že v německých článcích je "Statemachine", já ale vycházím u nás zavedenému pojmenování PIO coprocesor (tedy česky PIO koprocesory - vycházím z toho že když je to samostatně programovatelné, aniž bych tím musel využívat nějakého jádra procesoru samotného MCU - funguje to jako koprocesor
- mikrořadič - používáme MCU nebo české mikrokontroler, což se používá desítky let jak v odborné, tak amatérské (články, návody) literatuře. Slovo řadič používáme k popisu HW který funguje opravdu jako řadič
Děcka v tom pak mají docela bordel a jelikož to každý papouškuje z jiného zdroje - co je správně ?
Píši totiž hlavně pro začínající jakési "Pracovní" listy, kde podobný problém/úkol děláme v C v Python i v ASM (zde se zase interně dohadujeme zda psát jako dříve Assembler (zvyk už z dob Z80 a pod.), nebo Assembly.
- state machine používají přímo autoři RP2040 v https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf Popravdě bych taky asi používal PIO coprocesor, protože to má vlastní instrukční paměť, vlastní instrukce a něco jako triviální ALU. Proč to nazývají state machine asi vychází z toho, jak to interně implementovali.
- mikrořadič/mikrokontroler tyjo to je asi jedno dneska. Já jsem zvyklý na mikrořadič (takto to používali v BENu, kde o nich vycházely knihy, později taky přesli na mikrokonrolér). Já mám kontrolér spojený se zapínáním velkých proudů v lokomotivách a tak :-) [SPŠE]
Děkuji,
tak pomohlo toto nasměrování, vlastně se tyto coprocesory zabývají jen stavy (state) tak state machine, a i sekvenční automaty se často nazývají machine nebo state machine. V manuálu jsem to nějak pominul, zatím nejsem tak daleko, doháním děcka podle toho co kde vyčtou a zkouší si to ....
Přizpůsobím se, abych jim v tom nedělal hokej. I když toto se asi bude týkat starších svěřenců, tu u nás (12-13 let) jedou v C nebo spíše ve velice oblíbeném Pythonu.
Ty starší už vládnou AN, tak spíše čerpají z originál manuálů.
Pěkný den
Z meho pohledu je rozdil v absenci RAM.
Procesor je neco, kde mate (typovane) promenne a muzete k tomu pristupovat nahodne, dle vlastniho uvazeni.
Stavovy / sekvencni automat (potazmo mikroradic jako pojem spjaty s rizenim toku mikroinstrukci v CISC procesoru - "microsequencer") je pak neco, co dela jen tupou praci - ma to sice instrukcni tok klidne i vetveni.. ale nema to samostatnou pamet.
Na zdejsim prikladu jsou to tedy jen dva registry, pak FIFO a fyzicke piny => stavovy automat.
Prave z duvodu zameny mikroradice/mikrosequenceru bych fakt preferoval se vyhnuti tomuto pojmu pro oznacoani MCU - a pouzivat mikrokontroler, nebo mikroprocesor. Byt jakykoliv MCU v dnesni dobe hrave strci puvodni ryzi procesory do kapsy, pac mcu jsou dnes uz SOC :) a to se pak dostavame uz do rozdeleni na MCU vs AP (application processor), kde je rozdil v tom, zda je to 1 aplikace/system v mcu, nebo nejaky OS + uzivatelske aplikace, v pripade AP.
Nebyla by zde ciste nahodou moznost clanku jak programovat Pico v Rustu?
Začněte ukázkami tady: https://github.com/rp-rs/rp-hal
Článku odpovídá třeba https://github.com/rp-rs/rp-hal/blob/main/rp2040-hal-examples/src/bin/pio_blink.rs#L45
V prvé řadě moc děkuju za tento článek a vlastně slíbený začátek malého seriálu. Vůbec jsem nečekal, že zabrousíte i na toto téma a je to opravdu pomoc, protože to je aktuální věc, co se moc často někde nepíše, neukazuje...
Ohledně low level/high level jazyků a přístupu mohu sdělit vlastní zkušenost. Když jsem se před pár lety dostal úplnou náhodou a bez přípravy k úkolům s Arduinem, byl jsem začátečník jak s programováním pro tuto platformu, tak ještě víc s bastlením HW. Přesto jsem si nechal poradit od kamarádů, že se nemám ničeho bát. Dali mi desetiminutový výklad čtení datasheetů a dokopali mě, abych informace z nich porovnal se zdrojáky těch příslušných knihoven (vlastně lépe řečeno ovladačů). Už sám jsem pak nahradil většinu knihoven vlastním kódem a hlavně jsem v různých chybových případech díky datasheetu tušil, kde je asi chyba.
Proto tvrdím a věřím, že když to zvládnu já, s mozkem pamatujícím souboje mezi Commodore a ZX Spectrum, tak není jediný důvod, aby to nezvládli svěží středoškoláci, pokud budou chtít tomu o své vůli dát víc než jednou týdně. Samozřejmě s motivační podporou učitele, aby je neodradily těžší začátky. Moje další zkušenost říká, že děti (až po -náctileté) zvládnou pod takovým vedením mnohem víc, než bychom kdy čekali.
Samozřejmě se za to "platí" složítou sociáľní situací, kdy se v kolektivu nepříjemně rozevřou nůžky mezi těmi zapálenými a těmi ostatními. Alespoň pro mě osobně je tohle mnohem těžší ukočírovat než někoho se zájmem "posunout" na ten vyšší level.
6. 2. 2025, 22:19 editováno autorem komentáře
Univerzální mikrokontrolery je spíš nemívají, RP je výjimka. Z těch víc populárních mají něco třeba některé řady ESP32, tam se to jmenuje Ultra Low Power coprocessor (ULP) a je to taky stavový automat, taky s velmi jendoduchou instrukční sadou, taky umí manipulovat GPIO, ale umí i např. odečítat z ADC nebo komunikovat po I2C, takže tím lze sbírat data do speciální paměti (slowmem), a jen jednou za čas probudit aplikační procesor, data zpracovat, a třeba někam poslat. Nebo třeba za pár mikroampérů trvale monitorovat baterii, a až když napětí klesne pod práh se tímto probudí hlavní aplikace a zahouká alarm.
Kdyz se posuneme o uroven vejs, tak treba procesor pouzit v BeagleBone Black obsahuje jednotky PRU - programmable realtime unit. Ale to jsou SoCy kde je plnotucny AP (napr. s linuxem) a tyhle pru jsou na urovni mikrokontroleru, kde je vykonavan maly program, jako kdyby to bylo vestavene arduino/rpico.
https://www.beagleboard.org/boards/beaglebone-black
https://www.ti.com/product/AM3358
https://www.ti.com/lit/an/sprac90g/sprac90g.pdf
Velmi pekny clanok. Ocenujem hlavne prehlad instrukcii, ktore PIO podporuju.
PS: Velmi pekny popis rp2040 je od autora simulatoru wokvi. Tusim v poslednej casti tohoto playlistu sa nachadza pekne PIO zadanie spravene. Je to skenovanie matrix keyboard, stlacenych tlacidiel... https://www.youtube.com/watch?v=OLV-TSRTTE8&list=PL_tws4AXg7auiZHZsL-qfrXoMiUONBB0U
Článek je skvělý, jen na mě moc abstraktní. Loni jsem pořídil to výprodejové Pico (za 79 Kč zadarmo) a zkusil na něm zprovoznit mouse jiggler - funguje skvěle, a to na zařízení, kde není Windows. Zkoušel jsem i verzi s WiFi a vážně to fugovalo, s použitím demonstračního příkladu. V micro Pythonu jsem testoval řízení robotické základny, je docela sympatické, že hlavní časovač šlo nastavit na 2ms - to už lze řídit docela přesně. Jen pro motivaci k učení potřebuji nějaký projekt, kde je vidět reálný výsledek.