Mikrokontroléry (MCU) - jak začít a s čím - rady, vaše zkušenosti, názory a tipy

Pontiaq

Zdravím :-)

Rád bych se zeptal zkušenějších ohledně mikrokontrolérů. Mám zkušenosti s řadou 8051 a s jejich programováním v Assembleru. Moc mě MCU zajímá a rád bych se mu co nejvíce věnoval. Jenže nevím, jak bych měl začít. S Arduinem jsem si řekl, že by pro mě bylo lepší spíše samotné MCU, abych se naučil, jak vše funguje samo o sobě. Kterou řadu, propřípadě typ, MCU byste mi poradili? Které mají budoucnost před sebou a vyplatí se s nimi učit?  Jak bych mohl vůbec začít? Plánuji pořizovat potřebné věci z Ebaye. Doporučili byste mi nějaké živé a zvlášť založené fórum na mikrokontroléry? Také záleží na finančních možnostech a návodech.

Jak jste začínali vy? Jak jste se odrazili? Rád bych se co nejvíce sám vzdělával. Na čem rádi programujete vy? Živíte se programováním a vývojem s MCU? Na Arduinu mě konkrétně zaujal ESP32 v poměru výkon/cena. Studuji VŠ Elektrotechniku, tedy potřebnými znalostmi bych měl disponovat.

Za každou radu moc děkuji, jen vás prosím, odpusťte si urážky a napadání. Děkuji

PS: Vedu diskuzi na více fórech, aby se někteří nedivili, hledám odpovědi všude možně ;).


Limec

Nějaký kit s STM32.

Yarda

...Studuji VŠ Elektrotechniku...
Kde a co studuješ a ve kterém ročníku?
IMHO máš štěstí, že jsi přímo u pramene. Nemůžeš se přímo tam zapojit do nějakých aktivit? Když jsem studoval já (to je ale let), zapojil jsem se do studentského vědeckého kroužku (tak se tomu tehdy říkalo) a hodně mi to dalo, dostal jsem se k vědomostem co bych se k nim v normální výuce nedostal ani náhodou. Asi se u vás najde nějaký doktorand co uvítá pomocnou ruku.

srigi

Chod do arduina (Atmel AVR 8bit). Ma hadam najvacsiu komunitu + obrovsku databazu kniznic. Na zaciatok je to vyborna volba. A ako s nim zacat? Myslim, ze neexistuje jednoduchsi sposob ako:

Arduino Basics 101: Hardware Overview, Fundamental Code Commands
Arduino Basics 102: Control Structures, Variables, Interrupts
Arduino Basics 103: Library, Port Manipulation, Bit Math, Faster PWM/ADC
Electronic Basics #30: Microcontroller (Arduino) Timers

Neskor sa da prejst na Atmel Studio, co je skutocne IDE so simulatorom a debuggerom, ktore dalej podporuje novsie AVR32 mikrokontrolery.

Dan

Na začátek určitě arduino. je tu velká komunita, plno knihoven a příkladů. z jednoho vývojového prostředí se dají vytvářet projekty pro různé platformy : klasické arduino, tedy 8bit AVR, ARMová arduina (zero a due), nebo zmíněné ESP8266 nebo ESP32.
Jako bonus vývojové prostředí je multiplatformní. nevýhoda editor vývojového prostředí je na ho..o, nemá inteli sense a není tu debug, takže pro větší projekty asi časem skončíš u atmel studia provozovného pod wine.

Na začátek bych se určitě vykašlal na STM32. kitů je málo, komunita malá, příkladů málo, knihovny pro různé senzory si člověk často musí psát/upravovat sám, kity jsou dražší a člověk se tam hodně potrápí se složitým přerušovacím systémem a DMA.
Pokud si na elektro VŠ podívej se jestli nemáte nějaký předmět na mikrokontroléry nebo embeded programování, základní teoretické znalosti jako co je stavový automat se určitě hodí. Na VUT to byl předmět "Mikroprocesorová technika a embedded systémy"


Ramirez

Kdysi dávno, cca před dvěma desítkami let, jsem na VUT absolvoval předmět Mikroprocesory (nebo tak nějak :)), který se točil hlavně kolem 8051. Pak jsem se po mnoha letech k MCU vrátil a stavěl si různé bastly právě na 8051 od Atmelu. Postupem času jsem přešel na AVR a teď začínám s ARMy.

Co se týče Arduina, je to dobré pro naučení se základů. Spousta lidí u něj zůstane, ale pro serióznější použití bych ho nedoporučoval, zvlášť, pokud budeš uvažovat o náročnějších aplikacích. Pro důvod mrkni třeba na https://www.youtube.com/watch?v=648Tx5N9Zoc

Co se týče Atmel studia, osobně s ním mám velmi špatné zkušenosti, konkrétně pro procesor ATmega644P nebylo schopné vygenerovat funkční kód. Problém byl se špatně generovanými skoky, program skákal ne na definovaná místa, ale náhodně někam do kódu. Po několikadenním trápení se s hledáním chyby a prolézání diskusí jsem našel podobně postižené jedince, kteří bug reportovali před několika lety a ten nebyl dosud opraven. Řešením pak byl přechod na jiné (placené) IDE.

Budu nesouhlasit s jedním, z předřečníků, že pro STM32 je málo kitů a jsou drahé.
Pro základní seznámení (a i spoustu aplikací) Ti vystačí https://www.aliexpress.com/item/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module/32656040083.html za necelé $2, ze kterého jsi schopen si postavit i nástroj pro debuggování v aplikaci viz. https://github.com/blacksphere/blackmagic/wiki

Dál nesouhlasím s tím, že se musíš trápit s přerušovacím systémem a DMA. Nemusíš, zdrojů je dost :)

Já osobně mám objednaný kit http://cz.farnell.com/stmicroelectronics/stm32f429i-disc1/dev-board-advanced-line-mcu/dp/2506924?CMP=i-ddd7-00001003 protože si chci pohrát s rozhraním pro kameru a displej. Cena je včetně dopravy 937,- Kč. Nemyslím, že je to nějak strašné.

A úplně obecně si chci postesknout, že všude v tutoriálech se používá funkce delay, která na určitý čas prostě zastaví procesor. Nikde ale není naznačeno, že se to dá dělat i jinak, a že můžeš pseudoparalelně komunikovat třeba po sériové lince, provádět měření na převodnících, refreshovat display, komunikovat s pamětí a cojávím co ještě.

dustin

Ramirez - zkus se mrknout na chibios, vyvíjí jej chlápek, který dělá přímo pro ST v Itálii, a STM32 má v tom "OS" vynikající podporu.

Vladislav

Ahoj,

studuji též VŠ elektro, můj obor se ale zabývá konkrétně MCU i když klasické analogové elektrotechniky je tu i tak až až.

Na začátek bych si asi ujasnil co chci dělat. Chci si hrát? Nebo se tím chci živit? Pokud bych se tím chtěl živit šel bych jednoznačně do STM32. Když se podíváš různě po nabídkách práce embedded sw tak je to většinou právě STM32. Pokud hrát tak asi komunita kolem Arduina bude fajn, i když i kolem STM32 se motá taky spousta nadšenců a myslím si že lidem kteří rádi vidí více do HW bude spíše vyhovovat to STM32.

Další zajímavá cesta může být FPGA + softcore CPU, tam už ale většinou může jeden zapomenout na open source no. Možnosti jsou pak ale skoro nekonečné.

Co se týká nějakých kitů pro STM32. Tak na ebay se válí děsná hromada extrémně levných kitíků s STM32F103 ... to může prozatím stačit, ale asi bude potřeba nějaký programátor přihodit. Nebo pak discovery kity přímo od ST. Jsou fajn, je na nich úplně všechno potřebné a taky nestojí svět.

Jenda

Které mají budoucnost před sebou a vyplatí se s nimi učit?

ARM, protože za stejnou cenu dostaneš podstatně výkonnější hardware (výkon jádra, paměť, množství periferií i jejich rychlost, např. Hi-Speed USB). Jenže ten je na rozdíl od Arduina nebo AVRek obecně prostě komplikovanější (jednak je to složitější architektura, jednak nevím o existenci nějakých knihoven a návodů pro lamy jako je kolem Arduina/AVR. Existují porty Arduina na některé ARMy, ale většinou je to nedotažené).

(+ pokud si koupíš jakoukoli populární periferii, většinou k tomu je driver právě počítající s Arduinem)

Jak jste začínali vy? Jak jste se odrazili? Rád bych se co nejvíce sám vzdělával. Na čem rádi programujete vy? Živíte se programováním a vývojem s MCU?

Začal jsem před 7 lety s Arduinem, mikrokontroléry se zabývám spíš okrajově, a měl jsem několik komerčních zakázek na AVRkách s Arduinem, LUFA i surovým Cčkem bez ničeho (custom bootloader, žádné knihovny se tam nevešly; totéž bych udělal pro nějakou aplikaci s kritickým časováním, jak píše Ramirez).

Pozn. Arduinem ve svém příspěvku nemyslím to „IDE“ ani ty předražené desky, ale ty knihovny pro abstrakci hardwaru.

aaaa

Zdar,
záleží co chceš přesně dělat. Ale pokud jen tak na doma, tak bych spíš doporučil nějaký atmel. Konrétní typ si vyber podle toho co potřebuješ, aby mcu měl a uměl (počet UARTu, timeru, přerušení, AD převodníků, počet IO apod.). Programování je pak pořád stejný.
Arduino není nic jinýho než nějaký atmel, který má jen zavedený bootloader, aby šel programovat přes sériovou linku (na desce je před ním jen převodník USB - UART). Takže klidně si kup klon arduina za 200 a nemusíš dělat obvod na nepájivým poli. Stáhni si atmel studio a můžeš začít.
Arduino je jen v podstate sada knihoven, ktera toho ma spoustu nachystanyho. Programovat v atmel studiu se muze i tak jak v IDE arduina (pri vytvoreni projektu nastavis, ze se jenda o arduino).

Arduino je dobry jako deska, pro vyvoj a pak na finalni produkt si udelas svoji desku a program do ni nahrajes.

aaaa

A pokud to chces presne pochopit, tak urcite nedoporucuji jak nekdo psal zacit Arduinem (nemyslim desku, ale jejich IDE a vsechny knihovny). Pokud zacnes solo projektem v C/C++, tak sam zjistis, jak je co provazany, protoze musis vedet k cemu jsou jaky registry pro nastaveni veci.

ehmmm

Jak uz tu psali prede mnou - vymysli si nejakou ulohu a pak muzes premyslet, z ceho to udelat.

A Arduinu bych se nebranil. Sice jsou ke vsemu knihovny, ale stejne je lepsi si nejdriv precist nejakou dokumentaci a projit zdrojak dane knihovny, at vis, co to dela a proc to nedela, co chces ty, aby to delalo. Protoze, co si budeme povidat, spousta tech knihoven je fakt strasnych a nekdy mi z nejake knihovny staci vzit jenom jednu funkci a jeste si ji priohnout. Aspon je z ceho vybirat a nezacinas z nuly.

Slavo T.

Ked mas skusenost s x51, tak by som doporucoval ist do STM32. Su omnoho vykonnejsie, a aj komplikovanejsie proti x51, takze nudit sa nebudes. Discovery kity od STM zacinaju okolo 10 Eur, a je tam vsetko co treba. Staci si vybrat. Najlepsie STM32F0xx alebo STM32F1xx na zaciatok. Navodov je na nete plno aj v cz (vecsinou prave na STM32F103). Okrem toho napr. na mcu.cz alebo mikrozone.sk, je vzdy zopar ludi co s STM32 robia. Isto, "komunita" nie je tak siroka ako u arduina, ale zase ti ludia vecsinou vedia co robia, a nelepia len kniznice ako pride ;)

sova

Ak ste už začali s assemblerom, ani ja by som nešiel opačným smerom (k spomínanému Arduinu a v tutoriáloch obľúbenej funkcii delay, ako tu niekto spomínal). Namiesto toho odporúčam pozrieť si napríklad jeden z kurzov na University of Texas na edX - naučíte sa ovládať periférie (písať jednoduché ovládače), pracovať s prerušeniami, používať semafory apod. Kedysi tu vyšiel na blogu článok o jednom z nich https://blog.root.cz/lubomirpatek/podte-sa-naucit-programovat-mikroradice-arm/

Trocha nevýhodou je, že v kurze používajú dosku s procesorom ARM od Texas Instruments, ale ak to myslíte vážne, cena s poštovným okolo 20 $ by nemala byť až takým problémom.

Odvtedy kurz trocha pozmenili (rozdelili ho na dve časti) a pribudol ďalší diel ktorý sa zameriava na programovanie v reálnom čase (s RTOS) - ale aj tam sa počíta s ďalšou doskou či dokonca dvoma.

Kurz je zdarma a tak si ho môžete pozrieť aj bez dosky, ale bez nej sa nedajú robiť testy (aspoň v minulosti to tak bolo). Platí sa len ak by ste chceli aj certifikát, ale jeho význam sa mi zdá prakticky nulový.

Kurzy nájdete tu:
https://www.edx.org/school/utaustinx
Dnes sú už všetky tri kurzy "self-paced", takže nemusíte čakať na termín. Nenechajte sa odradiť tak trocha neprirodzeným prejavom prednášajúcich ani nie vždy najlepšie editovaným učebným textom (bol to viac-menej len text bez grafickej úpravy - ide o text z učebníc vydaných autorom kurzu) - kurz je inak dobre štrukturovaný a postupuje celkom systematicky.

mixalog

Citace: ""
Existuje (na linuxu) nějaký emulátor Arduina?