Ki mire esküszik?
Igények:
- lehessen használni alapvető I/O illesztésre, pl. LED villogtatás, de kicsit komolyabb dolgokat is hozzá lehessen tenni, pl. wifi
- legtöbb célra házilag forrasztható legyen (tehát devboarddal együtt jön, esetleg breadboardba lehet rakni és kevés komponens kell mellé)
- ne legyen olyan bonyolult, hogy OS kell rá, de olyan buta se, mint pl. régen a PIC16
- ami a legfontosabb: kulturált fejlesztőkörnyezet (rendes csomagból települ, debug lehetőség, Linux alól)
Kifejezetten nem számítógép kell, tehát nem Raspberry és sok más ARM chipes cucc is kiesik. Amennyire gyors keresésből kiderült, ESP32 és Arduino a nagy versenyzők, de biztos van sok más is, és főleg tapasztalatok érdekelnek, hogy melyikkel kevesebb a szívás.
- 2049 megtekintés
Hozzászólások
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
A Wemos D1 mini szerintem is jó, de én úgy tudom nincs debug lehetőség (programfutás leállítás, lépésenkénti végrehajtás, stb.), csak printf a soros portra...
- A hozzászóláshoz be kell jelentkezni
azzal amugy is jo, ha megbaratkozol :) nekem gyakran meg a soros port is haldoklik: "szemetel", upload csak kozvetlen reset utan megy, 2-3x probalkozasra.
- A hozzászóláshoz be kell jelentkezni
Azért írtam a debuggolás hiányáról, mert a kérdező "Igények" listájában szerepelt és ha valaki tanulni szeretne (vagy csak gyorsan haladni), a debuggolás nagyon sokat segít. Tudom, mert 20 évvel ezelőtt nekem sem volt debuggerem, és lassan haladtam mindennel: a kitűzött cél elérésével is és a tanulással is...
- A hozzászóláshoz be kell jelentkezni
Ez változó. A gyakorlatban a debugger belövése szinte sose zökkenőmentes, gyakran vannak vele elsőre nem észrevehető nyűgök is.
Akkor jó a debugger, ha a mikrokontroller bizgetésével egyidőben tanulod a programozást is. Ha a kódolás már igazából gyerekjáték (mert lássuk be, a mikrokontrollerek kódja nem épp egy algoritmuselméleti diplomamunka; de ha mégis, akkor PoC rendes számítógépen amúgy is kellene előtte), akkor a printf, bár nem elegáns, de nem különösebben zavaró, inkább csak lassú(bb).
UPD: a masik, ami miatt a debugger kiesik, az az, hogy mikrokontrolleren gyakran kell idozites-erzekeny dolgokat muvelni - ott meg nem lehet suspend-elni, csak a printf jo.
- A hozzászóláshoz be kell jelentkezni
Aztán a printf is képes belerondítani az időzítésbe. Sokszor meg kell gondolni, mit muszáj, és mikor kiírni.
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
Mivel mikrokontrollereken bármi lehet az stdout, úgy oldják meg, hogy a printf() callback függvénye a void putch(char c); oda meg az ember írhat például bufferelt I/O-t is, és akkor gyors lesz a printf(). Na persze akkor sem végtelen gyors, de legalább nem kell megvárni, amíg a karakterek kivánszorognak a soros porton, vagy az LCD-re, vagy akárhová.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Pontosan. És pont ez az egyik problémám az ATMEGA328-ra készült alap Arduino libbel, hogy a Serial.print bevárja ameddig kicsorognak a bájtok az UART-on, ezért bármilyen valós idejű dolognál felejtős. Az első dolgom minden programozásnál, hogy tisztességes UART libet csinálok. Kivéve, ha az online memóriadump alapon működő debugger amit csináltam elegendő a nyomkövetéshez.
- A hozzászóláshoz be kell jelentkezni
Én nem vagyok software-es, így nekem sokszor nagyobb a tanulási görbéje annak, ha kész libeket használok. Legtöbb esetben megírom magamnak, ami kell, azt legalább ismerem, ha nem tetszik, javítok rajta. Nyilván nem USB stack-et írok, de bufferelt I/O-t bármikor. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
...vagy, amikor kliens-szerver kommunikáció megy mondjuk TCP/IP felett, amit nem lehet megakasztani.
Ha meg annyira időzítés-kritikus a dolog, akkor előkerül az oszcilloszkóp is...
Egyébként az STM32 debuggere mostanság elég jól működik különösebb szenvedés nélkül Linuxon STM32CubeIDE alatt.
- A hozzászóláshoz be kell jelentkezni
Sohasem használtam debuggert, mert az időt nem tudom megállítani. Megszakításokat, DMA-kat, külső kommunikációs folyamatokat nem lehet megakasztani következmények nélkül. Mindig csak logolok, nekem annyi elég a hibakereséshez.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igen, ezeket nem igazán lehet debuggolni. Mondjuk egy szabályzást is érdekes lenne. :)
Jellemzően én is logolok (bufferelten), de azért segítség tud lenni egy debugger időnként - ha rendelkezésre áll az adott környezetben.
...és lehet bizonyos C kódrészeket PC-n is tesztelni.
- A hozzászóláshoz be kell jelentkezni
Volt már ilyenben részem jó régen. De most fontosabb, hogy kényelmes legyen. De mintha az rémlene, hogy a PIC programozója is tudott rendes debugger lenni.
- A hozzászóláshoz be kell jelentkezni
Kb. ezt a kettot ajanlottam volna en is, az ESP-nek vannak mindenfele boardjai wifivel, az Arduino meg eleg kenyelmes fejleszteshez. Ami jo lehet meg, az STM32, a 8 bites Atmeleknel valamivel tobbet tud, de arban hasonlo.
Lehet kombinalni is, az ESP8266 alapbol olyan firmware-rel jon, aminel a wifi sima UARTon keresztul elerheto. Bar az ESP joval erosebb, szoval felesleges melle egy kisebb mikrokontroller, de ha nem akarod azt is megtanulni, es keves projectedhez kell wifi, ez is egy lehetoseg.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
ESP-hez nem sok mindent kell Arduino-hoz képest pluszban megtanulni az átlag dolgokhoz. Ugyanabban az IDE-ben, átbillented, hogy ESP-re foduljon a program...
- A hozzászóláshoz be kell jelentkezni
Uhm, ez kicsit osszetettebb.
Alapvetoen az ESP -khez van egy sajat ESP framework. Ritka bonyi amugy, semmihez sem hasonlit. Anno csinalt nehany jofej ember egy lib-et, ami gyakorlatilag 100%-ban arduino SDK kompatilitast ad az ESP SDK felett.
Erdekessege, hogy ha ESP-n arduino "SDK" -t hasznalsz, akkor az ESP libek is elerhetoek, tehat tudsz pl. thread-et inditani meg mutex-elni.
En is arduino SDK-t hasznalok a portabilitas miatt, meg mert tenyleg _nagyon_ egyszeru (imadom az ilyeneket), es legfokepp, elkepeszto mennyisegu lib van arduino SDK-hoz, kvazi barmilyen aliexpress-es komponenshez van, neha tobb is :)
en vscode + platformio -t hasznalok egyebkent, nagyon jo.
- A hozzászóláshoz be kell jelentkezni
Persze, pongyolán fogalmaztam (szándékosan). Teljesen igazad van, amire utalni akartam csak, hogy nem feltétlenül kell az arduino-hoz képest sokkal másabbat megtanulni (esp framework-öt), sokminden megoldhato esp-re az arduino ide-ben 'arduimo tudással'.
Poén, hogy az új arduino nano esp32 alapú:-)
vscode + platformio már kicsit bonyibb talán kezdőnek, cserébe pl. a debug nagyon hasznos lehet ESP-prog board-dal
- A hozzászóláshoz be kell jelentkezni
Szerintem az ESP-IDF sokkal közelebb áll egy ipari környezethez, mint az Arduino. Korrekt cmake alapú build rendszer, bináris és forrás modulok támogatása ... stb. Az alap OS FreeRTOS, afelett van az ESP-IDF API.
- A hozzászóláshoz be kell jelentkezni
Én most munkához PIC32MZ sorozatból használok. Megszerettem. Nem kell hozzá oprendszer, elég sok a FLASH (2 MiB) benne ahhoz, hogy eleresztheted a fantáziádat C-ben, nem tudod teleírni. Én egy műszert megírtam benne, aztán még a tárhely töredéke van kihasználva. A RAM az már feszesebb, konkrétan 512 kiB, de azért az is elég, pláne, ha ésszel csinálja a dolgait az ember. Például lehetőleg pointert adsz át, nem egész buffereket, meg ilyesmi. 32 bites MIPS architektúra. Van hozzá Harmony, sajnos megúszhatatlan, mert a hardware nem egyszerű. Ha az initen túlvan az ember mondjuk egy hónap alatt, a többi gyerekjáték. :D
Ha viszont egyszerűbbre vágysz és assembly-ben programoznád, akkor PIC16 sorozat, ha C-ben, akkor PIC18 szerintem. PIC16-ot is lehet C-ben, de hamar tele fog szaladni a FLASH is és a RAM is. A PIC18 utasításkészlete alkalmasabb a C-ből való fordításra.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Én is használtam ilyet, de az MPLAB X IDE felér egy büntetéssel. A legutóbbi IDE, amit használtam Netbeans alapú volt, és iszonyat lassú, a debuggolás kínkeserves... Alig vártam, hogy leszedhessem a gépről...
A többi ARM magos MCU gyártó Eclipse alapú ingyenes IDE-t ad, azok között is van jobb-rosszabb... Az STM32-hez adott IDE az STM32CubeIDE használható (szerintem).
- A hozzászóláshoz be kell jelentkezni
MPLAB X IDE felér egy büntetéssel
Tudom, ennek ellenére használom Intel N4200-val szerelt notebookon is, illetve Ryzen 7-tel szerelt desktop gépen is. Nyilván ez utóbbin egész jól használható. Az viszont valóban kellemetlen, hogy nem kevés alkalommal exception-nel indul a fejlesztői környezet, a syntax highlight néha nem működik, egyes library-kat nem lát, így azt hiszi, hiányzik #include, de a legkellemetlenebb, amikor indulás után belehal valamelyik process-ébe, s bezárás után pkill java paranccsal tudom rendezni a sorait, majd próbáljuk meg újra.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Én STM32-t és ESP32-t nézném meg, mindkettőhöz találni fejlesztőpaneleket.
- A hozzászóláshoz be kell jelentkezni
STM32 mikrokontrollerekhez a Nucleo sorozat. Mindent tud azok kozul amit irsz, sőt, van egy plusz extra featuraja amit ugyan nem irtál de nagyon jó (avagy ha megszokod és nincs akkor már hiányzik): van benne beepitett programozo interface (ST-Link, nyilt cucc) _és_ emellett USB-n a programozo mellett kapsz egy virtualis soros portot is ami a cél-mikrokontroller egyik U[S]ART portjara rá van kötve. Ezekbol a Nucleo-kbol van mindenfele méret a 16k flash - 1k RAMtól kezdve a sok mega flash - sokszáz k RAM-ig, és bare metal módon is jól programozhatóak.
Minden van hozza linux alatt: arm-none-eabi-gcc, newlib, binutils, openocd. Ezutobbi gdb-vel is osszekotheto.
A PIC16 nem feltetlen "buta" onmagaban de a memoriabankozasos technikaja miatt nem igazan C/C++ barat, mondjuk ugy. Szoval ha C/C++/barmi-ami-nem-assembly a cel akkor mindenkeppen valodi folytonos cimtartomanyu eszkozt nezz, ne bankozosat.
- A hozzászóláshoz be kell jelentkezni
Az STM32 Nucleo-ra +1: az STM32CubeIDE-vel jól lehet debuggolni. Ez alatt azt értem, hogy ha leállítod a program futását és nyomsz egy "step"-et, akkor nem kell 5-15 másodpercet várni, amíg meg is történik a művelet. (A Xilinx FPGA-s soft processzoroknál, MPLAB X IDE-nél, meg még egy-két másik IDE-nél is volt ilyen élményem: borzasztó.)
Az STM32CubeMX-el lehet generálni egy függvénykönyvtár környezetet és projektet, amit be lehet tölteni az STM32CubeIDE-be és el lehet indulni. Hátránya: alapból ebben nincsenek Arduino library-k, kevesebb információ, segítség a neten.
- A hozzászóláshoz be kell jelentkezni
> van egy plusz extra featuraja amit ugyan nem irtál de nagyon jó (avagy ha megszokod és nincs akkor már hiányzik): van benne beepitett programozo interface
Hát pedig én azt hittem, hogy ez manapság már magától értetődő, de a debugger kapcsolatból minimum következik. De akkor vegyük úgy, hogy ez is követelmény :).
> A PIC16 nem feltetlen "buta" onmagaban de a memoriabankozasos technikaja miatt nem igazan C/C++ barat, mondjuk ugy.
10+ éve PIC-eztem, és már nem tudtam volna nevén nevezni a dolgot, de ja, az kellene, hogy rendes C menjen vele.
- A hozzászóláshoz be kell jelentkezni
Hát pedig én azt hittem, hogy ez manapság már magától értetődő, de a debugger kapcsolatból minimum következik. De akkor vegyük úgy, hogy ez is követelmény :)
Nem feltetlen, mert miert pont UART, miert pont egy, es hogyan oldod meg azt kvazi-felhasznalobarat modon hogy mi van akkor ha arra a lab-parra is valami mas funkciot kotnel ra inkabb ha arra van szukseg... Meg ugye lasd Arduino, ott sincs emlekeim szerint (foleg a kicsiken, ahol csak egy sima egycsatornas FTDI illeszto van). De ettol fuggetlenul igen, azokon a dev boardokon amikkel jatszottam mostanaban (Nucleo sorozat, MSP430/Launchpad, ICE40HX boardok, Xilinx Digilent boardok) mar mind van ilyen. Meg sajat cuccokra is teszek hasonlo okokbol :)
10+ éve PIC-eztem, és már nem tudtam volna nevén nevezni a dolgot, de ja, az kellene, hogy rendes C menjen vele.
A PIC-ben az a nehez hogy van hozza ugyan C fordito de nagyon unhatekony a lesz kod. Az AVR-ekkel osszehasonlitva nekem ugy tunt hogy pointer-dereferenciat tartalmazo "atlagos" programok eseten a kodmeret kb 3x nagyobb, de meg ha nincs is annyi intenziv pointer-aritmetika a kodban akkor is azert kellemesen-merhetoen nagyobb. Meg ugye egy csomo minden mas is korlatoz (veges hw stack es a stack framing ugrik be elsore ami a paging/bankozas mellett meg olyan hogy nem teszi igazan C/C++ baratta a cuccot).
Valojaban olyan MCU-t erdemes nezned amire egyszeru-de-nagyszeru oprendszereket tudsz portolni - pl. FreeRTOS-t - es mar letezik hasonlo portja ottan. Persze ez nem azt jelenti hogy muszaj oprendszert hasznalnod, de egy eleg indikativ dolog hogy tudsz oprendszert hasznalni ha akarsz.
- A hozzászóláshoz be kell jelentkezni
Wemos d1 mini, ESP-32-Cam
Informatikus vagyok, elektronikát próbáltam megszeretni az egyetemen, mert amúgy az építés vonz, de nem lettünk barátok. Ez a két cucc megoldotta a kérdést, már csak program kellett hozzájuk és a perifériák illesztése. Egy hosszabb este elég volt az első sikerélményhez.
Amire oda kell figyelni a vásárláskir, hogy a lapon alapból legyen usb, ami egyben megoldja a programozás és a táp kérdését, a LED villogtató "hello world" így az első 10 perc ismerkedés után már működött. Egyszer belenyúltam egybe usb nélkül, hát azzal sem lettünk barátok.
- A hozzászóláshoz be kell jelentkezni
Abszolut +1
Egyszer belenyúltam egybe usb nélkül, hát azzal sem lettünk barátok.
Ali-n van CH340 alapu USB<->serial adapter; amelyik lapkan van ilyen 5 tuskes "serial header", oda ra lehet kotni.
De 100% egyetertek, igy anno 2023-ban vegyel siman usb-s lapkat es kesz. Ma mar egy esp32 is par eurobol megvan.
- A hozzászóláshoz be kell jelentkezni
> elektronikát próbáltam megszeretni az egyetemen, mert amúgy az építés vonz, de nem lettünk barátok
Nálam is ugyanez. Egy LED-et tudok ellenállással méretezni és forrasztani, meg egy szájbarágós adatlap alapján be tudok kötni egy kristályt kondikkal, de ennél komolyabb dolgokhoz inkább előre gyártott breakout board meg buszok kellenek, mert ennél jobban nem tudok most belemerülni.
- A hozzászóláshoz be kell jelentkezni
Kifejezetten nem számítógép kell, tehát nem Raspberry és sok más ARM chipes cucc is kiesik.
Itt gondolom nem a raspberry pi pico-ra gondolsz, hanem a raspberry pi 3-4-5-re pl., A pico is jó lehet neked.
Az STM32-hez pl. a blue pill. Érdemes rá bootloadert tölteni, szerintem alapból nincs rajta.
- A hozzászóláshoz be kell jelentkezni
Én is valamilyen ESP-t javaslok, méghozzá NodeMCU firmware-el. Ezt azért szeretem, mert van egy írható filerendszere, így nem kell minden apró változás után nulláról újra flash-elni az egész kütyüt, elég csak a módosított file-t felülírni. Nagyon kényelmes, van egy build rendszer is, itt látható mennyi perifériához van hozzá modul.
Nálam az a menet, hogy WemosD1-el elkészül a project, aztán megy ESP-01-be, eddig az elég volt mindenhez. Ezzel működnek a szenzoraim, meg a villanyórára dugott cucc, ami soros porton kommunikál a mérővel. Mindegyik project-be beteszem a telnet modul-t, így ha a WIFI-re kapcsolódás megy, akkor a végleges helyén, soros port nélkül is tudok módosítást végezni a kódon, nem kell lehúzni az ESP-t, rádugni pc-re, flash, majd vissza a helyére.
A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.
- A hozzászóláshoz be kell jelentkezni
Én sokáig (10+ évig) használtam NodeMCU-t a saját kis házi kütyüimhez, de kinőttem. Nálam a HTTP szerver és az MQTT kliens együtt nehezen fért el. Csak azért nem sajnálom, hogy használtam a NodeMCU-t, mert már tudom, hogy ha jól szeretnéd kihasználni a szűkös erőforrásokat akkor C/C++-ban programozod az ESP-t, nem script-nyelven.
Flash-elés után is megmaradó fájlrendszer az Arduino keretrendszernél is van. A távoli firmware upgrade is megy az Arduino library-kkal HTTP-n keresztül.
- A hozzászóláshoz be kell jelentkezni
Miért nem ajánlotta még senki az Raspberry Pi Pico W-t? Rendes ARM Cortex-M0+ mikrokontroller, a boardon van Wifi (2.4 GHz 802.11n) és Bluetooth 5.2.
- A hozzászóláshoz be kell jelentkezni
Mert relative uj, tehat kevesebb google talalat lesz felmerulo problemak eseten, illetve az elerhetosege meg 1 eve elegge esetleges volt. Harmadreszt az ara magasabb, mint egy bejarottt esp32 alapu lapkae.
De en is szemezgettem vele, mert tenyleg nagyon korrekt lapkanak tunik.
- A hozzászóláshoz be kell jelentkezni
Meg sok feladathoz ágyúval verébre. Nekem is van egy project-em, ami pico-val készült, mert kényelmes voltam, de nagyon hajlom rá, hogy átírom ESP-re. Pazarlás, hogy ott figyel a raspberry-n egy komplett grafikus rendszer, ami csak egyszer az elején volt használva.
A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.
- A hozzászóláshoz be kell jelentkezni
Imho te a PI zero-ra gondolsz, a pico w-n egy deka grafikus rendszer sincs. Ja és 3000Ft kb 1 kontroller...
- A hozzászóláshoz be kell jelentkezni
Bocs, igazad van, kevertem.
A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.
- A hozzászóláshoz be kell jelentkezni
Az STM32 Nucleo boardon nekem is bejött a beépített ST-Link és UART Out Of the Box működik Linuxon. És a toolok is mind free and open source-ok. STM32 debuggolást én csak kereskedelmi környezetben próbáltam eddig (Keil), de elvben megy Eclipse-be építve például ingyenes eszközökkel, ha összerakod.
Én az Arduino szoftver rétegét nem kedvelem, mert azért mikrokontrollerezik az ember, hogy real-time legyen, viszont az Arduino ennek folyton útban van. De amire elég, arra jó mert egyszerű elindulni.
Egyszerűbb feladatokra én Arduino UNO-t szeretek használni (ATMega328p), mert már jól ismerem és van belőle egy rakás itthon. A toolchain pedig avr-gcc+Makefile kézzel+avrdude, tehát Arduino nélküli. Ugye te írtad, hogy ennél újabb dolgot akarsz, de mégis érdemes megfontolni szerintem már csak az ezer létező példa miatt is.
Használtam a legújabb ATtiny Series0/Series1 csipeket is, az tetszik benne, hogy minden benne van magától, csak tápot kell rákötni és működik. Felületre forrasztani sem kunszt, mert annyira nem kicsi a legnagyobb változat. Hestore-ból lehet DIP illesztőt is venni hozzá. A tápra kell egy kondit tenni, azt én még az illesztőre teszem, és utána már bedugom breadboardba, 5V neki és már működik is! A beépített rezonátora elég pontos az UART-hoz is. UART-tal lehet programozni, és egy UART illesztőt lehet használni fejlesztés közben, aztán amikor kész a cucc, akkor 1 darab csip van csak beépítve. Debuggert ehhez sem használok, de csináltam hozzá egy trükkös rendszert, amivel a debug interfészen keresztül pollozza és megjeleníti a változók, vagy akár a periféria regiszterek értékeit egy konzol ablakban. Ezzel a módszerrel a legtöbb programhoz egyáltalán nem kellett UART loggolást se csinálnom.
Ha pontos időzítésekre van szükséged, akkor sokszor a kisebb egyszerűbb csipek jobban teljesítenek mint a modernebb nagyobbak. Például az interruptba lépés gyorsabb, az óra alrendszer jobban átgondolt, és alkalmasabb szinkron vezérlésre. Ezért a választás a feladattól is függ, nem olyan egyszerű, hogy újabb->jobb.
- A hozzászóláshoz be kell jelentkezni
A toolchain pedig avr-gcc+Makefile kézzel+avrdude, tehát Arduino nélküli. Ugye te írtad, hogy ennél újabb dolgot akarsz, de mégis érdemes megfontolni szerintem már csak az ezer létező példa miatt is.
Ez hogy "a toolchain lehet egy sima gcc + makefile + programozo" teny inkabb azert lehet fontos ha a kollega jo IDE-t keres, mert ugye ebben az esetben biztos hogy talal(hat)sz hozza jo es testreszabhato IDE-t. Forditva, ha csak a gyarto sajat IDE-jet hasznalhatod, akkor nagyon meg van kotve a kezed. Eszi, nem eszi, nem kap mast, ha az szar es/vagy unhatekony akkor az szar es/vagy unhatekony (lasd: Microchip/PIC/MPLAB, amit fentebb is emlitettek).
Ha pontos időzítésekre van szükséged, akkor sokszor a kisebb egyszerűbb csipek jobban teljesítenek mint a modernebb nagyobbak. Például az interruptba lépés gyorsabb, az óra alrendszer jobban átgondolt, és alkalmasabb szinkron vezérlésre. Ezért a választás a feladattól is függ, nem olyan egyszerű, hogy újabb->jobb.
Igen, ez hatarozottan igy van. A Cortex-M-es ARM magoknak hatarozottan koltseges az interrupt belepes/kilepese. Konkret timing analysis szinten csak Cortex-M0-ra vannak adataim igy fejbol, ott is 16+16 orajel, es afole jon meg a szoftvernek a context mentese-visszallitasa igy desszertnek. Ehhez kepest mondjuk egy RISC-V, nagyjabol ugyanaz a performance/komplexitas szinten levo cuccnal meg 2 orajel alatt megvagy befele meg kifele is (gyk egy unconditional J koltsege az egesz). AVR-nel meg 3 orajel befele, 4 orajel kifele, pont annyi mint egy CALL. Persze az ARM-nel ezert a sok oraciklusert cserebe megnyered azt hogy a fuggvenyhivas (E)ABI az ugyanaz lesz mint az interrupt handler interfacing... dehat valamit valamiert.
- A hozzászóláshoz be kell jelentkezni
Igen, a Cortex-M specifikáció miatt menteni kell regisztereket már az IRQ belépés előtt. Az AVR viszont beléphet minden nélkül. Persze ezt kihasználni előnyként főleg akkor tudjuk, ha meg tudjuk úszni az IRQ handlerben is a regiszterek stackre mentését, ami nem triviális C-ben programozva. De szerintem ha 1-2 regisztert mentünk és visszaállítunk még akkor is megmarad némi előny.
Egy A7-es procit is programoztunk, ott egy belépési pontja van minden IRQ-nak és emiatt még el is kell belül ágazni aszerint, hogy mi jött. Ezzel már rengeteg a kötelező overhead sajnos.
- A hozzászóláshoz be kell jelentkezni
Persze ezt kihasználni előnyként főleg akkor tudjuk, ha meg tudjuk úszni az IRQ handlerben is a regiszterek stackre mentését, ami nem triviális C-ben programozva.
Ugy latom hogy a gcc azert nem general annyira rossz kodot, bar persze lehet(ne) hatekonyabban nehany esetben is. Foleg ha SBI/CBI-re visszavezetheto az egesz. De ha ennyire ki van centizve a dolog akkor igyisugyis marad a naked handler + assembly :]
- A hozzászóláshoz be kell jelentkezni
esp32: debug nincs, wifi van bt van, ram 520k
stm32 nucleo: debug van, wifi nincs, bt nincs, ram lofasz
rpi pico w: debug nincs, wifi van, bt van, ram 260k
- A hozzászóláshoz be kell jelentkezni
stm32 nucleo: debug van, wifi nincs, bt nincs, ram lofasz
https://www.st.com/en/evaluation-tools/nucleo-h563zi.html: 640k-ba minden belefer! :)
- A hozzászóláshoz be kell jelentkezni
Ez a ram lófasz mit jelent? Az az érdekes, hogy a Nucleo devboard adatlapokon nem is írják, mennyi van benne, vagy csak nagyon el van dugva.
- A hozzászóláshoz be kell jelentkezni
Egen... ezt en sem ertem hogy miert nem irjak oda. Az adatlapon rajta van az MCU egzakt tipusa, tehat egy klikkantas es megvan az MCU adatlapja is, minden adattal... szoval full egyertelmu mindig, de igen, azert oda is lehetett volna irni az biztos :)
- A hozzászóláshoz be kell jelentkezni
Nucleo-H7A3ZI-Q: 2 MiB flash ROM, 1.4 MiB RAM (ebből 1 MiB összefüggő SRAM, a többi DTCM, ITCM, meg még valami amire nem emlékszem).
- A hozzászóláshoz be kell jelentkezni
Én most az L476RG modellt néztem ki, ez a Nucleo-64 sorozatból a legjobb, onnan az STM32L476RG adatlapjára ugorva kiderül, hogy "Up to 128 KB", ami ki tudja mit jelent, de külső memóriát is lehet csatlakoztatni állítólag.
- A hozzászóláshoz be kell jelentkezni
STM32L476=Ultra-low-power Arm® Cortex®-M4 32-bit MCU+FPU, 100DMIPS,
up to 1MB Flash, 128 KB SRAM, USB OTG FS, LCD, ext. SMPS
Az adatlap szerint 128 KB SRAM van az MCU-ban. Elég sok STM32-höz lehet külső SRAM-ot, SDRAM-ot csatlakoztatni, de azokat akkor sem triviális beindítani, ha az SDRAM IC rajta van a PCB-n. Szerintem először a belső SRAM-ot használd.
Szerk: a 128 KiB SRAM nem összefüggő. 96 Kbyte a 0x2000 0000-s, 32 Kbyte a 0x1000 0000-s címen érhető el. Ez kezdőként kicsit zavaró lehet, mert #pragma-val, section attribútummal vagy valamilyen linker varázslással lehet innen foglalni memóriát.
Egyébként ilyen STM32L476-os Nucleo-m nekem is van, ha ilyet veszel segíthetek. Ezen kívül van még 4-5 Nucleom, Cortex-M7, Cortex-M7F-ig. Én ár/érték arányban az NUCLEO-F722ZE-t tartom legjobbnak: 512 KiB flash ROM, 256 KiB RAM van benne és most bruttó 10 ezer HUF a Farnell-nél.
Szerk: a STM32F722-ben is van valami kavarás, de a linker fájlom szerint összefüggő a 256 KiB RAM.
- A hozzászóláshoz be kell jelentkezni
Köszi a sok választ. A developer experience alapján az STM32 Nucleo tűnik a legjobbnak.
Úgy látom, hogy ez ráadásul kompatibilis Arduino perifériákkal is (pl. ebbe a lapba bele lehet tenni ezt a wifi modult). De az ST-nek vannak saját perifériái is. Gondolom, hogy ebből többet is egymásra lehet tenni.
Még egy kérdés. Kell-e valamire figyelni, ha pl. egy ilyen kijelző modult akarok rátenni? Remélem, nem nagyon kell kompatibilitás miatt aggódni (jelszintek/pinek első ránézésre stimmelnek). Nem kifejezetten Doomozni szeretnék rajta, de kíváncsi vagyok, hogy van-e olyan teljesítményű STM32, ami ezt meg tudja hajtani.
- A hozzászóláshoz be kell jelentkezni
Igen, a Nucleonak Arduino kompatiblis pin headerje van, ami Arduino shield 3.3V kompatibilis (ami 5V-ot vár, vagy 5V-ot ad az nem lesz jó), az kell hogy működjön vele. Úgy tudom a szoftvert is meg lehet Arduino IDE-n belül írni - én nem csináltam ilyet.
A kijelzőre: ehhez a kijelzőhöz egyetlen kép a memóriában 480x320x2=307200 bájtot foglal el. Ha nem fér el a teljes kép egyszerre, akkor macerásabb kezelni mintha elférne. És a teljes kép frissítéséhez ennyi pixelt át kell tolni a data vonalon, ami idő. Emiatt én inkább monokróm kijelzőt szoktam mikrokontrolleren használni, ezt: https://www.hestore.hu/prod_10036444.html 8192 pixele van. Ennek a képét az ATMEGA328 és az Attiny1624 is kezeli "fejben" - 1024 bájt. Szövegesen 4 sor fé el rajta. Egyszer kimértem, több mint 20FPS-sel tudom frissíteni az interrupt vezérelt SPI libbel amit faragtam hozzá. Az I2C változatot is használtam, teljesen hasonló.
- A hozzászóláshoz be kell jelentkezni
> Ha nem fér el a teljes kép egyszerre, akkor macerásabb kezelni mintha elférne.
Egy Arduino Uno rev3-ban csak 2 KiB RAM van. Ezen a videón látszik, hogy soronként rajzolja a képet, de a már kirajzolt rész nem tűnik el, nem villog. Valahol el van tárolva, talán magán a kijelző modulon?
- A hozzászóláshoz be kell jelentkezni
Igen, a kijelzőnek van egy memóriája, amiben egy frame-et tárol, és onnan frissíti a képet folyamatosan. Szerintem van olyan is, amin van double buffering. Az, hogy az egész memóriába fér, akkor kényelmes, ha random módon akarsz rajzolni. De meg lehet lenni enélkül is, csak bizonyos műveletek bonyolultabbak lesznek és minden lassabb lesz. Én saját rajzoló könyvtárat is csináltam, emiatt az egyszerűségre törekedtem.
- A hozzászóláshoz be kell jelentkezni
Arra kell figyelni, hogy a Nucleo 3.3V-os feszültséget szeret az I/O portokon, míg a klasszikus Arduino Uno 5V-al ment. (Egyes Nucleo-kat át lehet jumperelni 1.8V-ra, gondolom ez az I/O feszültséget is változtatja, de utána kell nézni.)
A 3.3V-os I/O miatt a shield-ek kapcsolási rajzát érdemes tanulmányozni, hogy visszajuthat-e 5V az I/O-ra, mert az kinyírhatja az adott I/O-t, vagy az MCU-t.
Igen, a shield-eket lehet tornyozni. Nagyobb fogyasztású shield-eknél lehet probléma a táppal, az USB 2.0-ás portból a szabvány szerint 500 mA-t lehet kivenni. De át lehet jumperelni a Nucleo-kat, hogy pl. a VIN-ről kapjon tápot. Ha valami nagyobb frekvenciával (10-20 MHz felett) működő dolgot építesz, gond lehet még a sok csatlakozásból és a hosszú vezetékekből, amik a shield-ek miatt alakulnak ki. Ezeket a klaszzikus tüskesorokat nem sok MHz átvitelére találták ki.
- A hozzászóláshoz be kell jelentkezni
A két board, amit linkeltem, állítólag 3.3/5V compatible. Viszont az érdekes, hogy magán a csatlakozósoron 3.3V és 5V láb is van külön.
- A hozzászóláshoz be kell jelentkezni
"magán a csatlakozósoron 3.3V és 5V láb is van külön."
Az de facto Arduino szabvány.
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
ha pl. egy ilyen kijelző modult akarok rátenni?
Hat, ha egy Arduino/ATMega jellegu MCU meg tudja hajtani ezt akkor egy STM32 rohogve :) Nagyjabol a legbeleposzintubb STM32-esek vannak olyan szinten mint a kozepes-nagy ATMega-k. Szoval a teljesitmeny miatt nem aggodnek. Viszont csatlakozom az elottem szolokhoz mert jelszint (3.3V vs 5V) miatt mar annal inkabb aggodnek. Vannak ugyan az STM32-es IC-knek olyan "bankjai" amik 5V-toleransak (pl a CAN_RX CAN_TX labacskai), de az elegge kontroller-fuggo, masreszt meg akkor sem baziroznek erre.
- A hozzászóláshoz be kell jelentkezni
https://jaycarlson.net/microcontrollers/
Ezt csak úgy minden nélkül. Lehet szemezni. Mondjuk annyira nem friss.
- A hozzászóláshoz be kell jelentkezni
Elég sok marhaságot olvashatsz benne. ;)
- A hozzászóláshoz be kell jelentkezni
Nem szentírásnak tituláltam, de véleményem szerint jó áttekintő ahhoz, hogy valaki ismerkedjen a témával. Megismerje a nagyobb gyártók termékeit, fejlesztő környezeteket. Aztán ha érdekli, majd utána olvas az adott terméknek.
- A hozzászóláshoz be kell jelentkezni
Én az ESP32-C6 -ot javaslom, mert ebben már RISC-V mag van és a wifi + BLE mellett már Thread / Zigbee radio is van benne.
A hivatalos DevKit tök szépen bepattan egy szabványos breadboardba (mi BB830-cal használjuk), és drótozhatsz össze bármit, amit akarsz. Az ESP-IDF tényleg professzionális fejlesztőkörnyezet, nem egy Arduino szintű játékcucc.
Az ára nagyon baráti, szerintem érdemes lehet többet venni belőle (2-3), és akkor az egymás közti kommunikációt, mesh network építést is tudod próbálgatni.
- A hozzászóláshoz be kell jelentkezni
Amin OS fut, azt semmiképp nem nevezném mikrokontrollernek. Ezzel az erővel lehtne venni egy mini-ITX alaplapot, vagy egy router-t, amire fel kell tenni egy OpenWRT/LEDE-t, aztán készen vagyunk. Csak ezek egyike sem mikrokontroller.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Szerintem itt valami félreértés van. Nem csak a BSD, a Linux meg a Windows OS. Vannak beágyazott rendszerre készült OS-ek, amik általában csak ütemezőt, semaphore-, event-, mutexkezelést tartalmaznak, minden más a fejlesztőre hárul (nincs fájlrendszer, TCP/IP stack, stb.). A munkám során ilyen OS-ek szoktak futni a mikrokontrollereken: FreeRTOS, SafeRTOS, ThreadX, uCOS-II, uCOS-III, MQX, Keil RTX, RTXC Quadros, Sciopta, stb. És ezeken kívül van még egy rakással.
A FreeRTOS-t elvileg futtathatod 8051-esen is, legalábbis létezik a FreeRTOS-nak 8051-es portja, de GHz-es Cortex-A9-esen is futhat.
- A hozzászóláshoz be kell jelentkezni
Ez olyan, mint amikor valami elveszíti közpénz jellegét. Szerintem amire OS-t tesznek, az elveszíti MCU jellegét. Amire hivatkoztam, az éppen a FreeRTOS volt. Az MCU-kban az a pláne, hogy mindent magadnak csinálsz az inittől a zamatos részekig. Bár nyilván nem szívesn implementál az ember pl. USB vagy TCP/IP stack-et, de akár a libc dolgai - pl. memset(), memcpy(), printf() - is jöhetnek valamilyen előre létrehozott könyvtárból.
Bár értem, hogy hardware-es megközelítéssel azért MCU valami, mert egy rakás periféria van a CPU köré rakva a chipen.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Na jo, de hol huzzuk meg a hatart a PIO + baremetal -> interrupt driven -> context switch library -> FreeRTOS-like -> PMP -> PMMU -> Unix-like/Win-like/stb atmenet soran, hogy "na, ez mar oprendszer, de elotte levo meg biztos nem az"?
- A hozzászóláshoz be kell jelentkezni
A mikrokontrollert a hardver teszi azzá, ami. Szoftvert vagy oprendszert írhatsz bármire, hiszen a linux egy üres gyufásdobozonis fut. ;)
Amit locsemege ír, a memset(), memcpy(), printf() - azok olyan implementációk, amelyek magasszintű nyelv és gyakran számítógépszerű perifériák felhasználását sugallják.
Pedig nem mondhatod, hogy egy klaviatúrában NEM mikrokontroller van, vagy egy 30B ram+512B flash kiépitettségű, vagy akár egy 4 bites eszköz NEM mikrokontroller. Sajnos a fejlesztőeszközök milyensége sem perdöntő.
Ehhez képest az i80186 is mikrokontroller, hiába lehet blőle Windows futtató pécét építeni.
A mikrokontroller környezetet főként az integrált perifériák adják, de azok a lib-ek, amelyeket úgy valósítottak meg, hogy operációs rendszer-szerű rendszerhívásokként használhatod, az inkább az embedded rendszerek felé mutat. Pl. egy egyszerű programban nem feltétlenül szükséges az usb-t legalább kettős buffereléssel használni, hiszen nem multitasking operációs rendszert futtatsz. Az se baj, ha a printf() nem thread-safe. :-D
A "mikrokontrollerezni szeretnék" számomra azért tréfás, mert első a feledat és ahhoz választunk mikrokontrollert. Ehhez a nézethez a PIC családok a legjobbak, bár az a topicnyitónak büdös.
(Kiegészítés: Manapság azt választjuk, ami van a boltban és legalábbb az egy éves gyártás darabszámát fedezi. ;))
- A hozzászóláshoz be kell jelentkezni
Ezzel nagyon egyet tudok érteni.
Szerintem ha egy FreeRTOS fut is a mikrokontrolloren az még mikorokontroller. Úgyanúgy tudnod kell mit csinálsz és nagyon tisztában kell lenned HW-rel.
Azzal is nagyon egyet tudok érteni, hogy feladathoz választunk kontrollert(illetve ami kapható).
Bár az otthoni hobbiban én már elfogatam, hogy ESP+Arduino-val nagyon könnyen és gyorsan lehet megcsinálni egyszerű dolgokat, de munkában éles környezetben az arduino no-go.
Otthonra van is állandó jelleggel pár ESP32-s boardom, ha kell valami csak előkapom és mehet.
Egyébként vannak free, reentrant(thread-safe), szépen configolható és megírt printf library-k.
- A hozzászóláshoz be kell jelentkezni
> Szoftvert vagy oprendszert írhatsz bármire
Én ezt úgy mondanám, hogy mindenre lehet, de nem mindenre kell OS. Mondjuk a Linux pont egyre válogatósabb, hogy min fut el.
> A "mikrokontrollerezni szeretnék" számomra azért tréfás, mert első a feledat és ahhoz választunk mikrokontrollert.
Nincs feladat, ez hobby, játék. Elég jól körbehatárolható a scope szerintem. És ehhez kaptam jó ajánlásokat, szóval a többségnek sikerült értelmeznie.
> Ehhez a nézethez a PIC családok a legjobbak, bár az a topicnyitónak büdös.
Ez azért nem jó a feladathoz, mert több munka és kevesebb élmény :).
- A hozzászóláshoz be kell jelentkezni
Ha Ethernetre és Wifire megelégszel egy UART-Wifi, vagy egy UART-Ethernet modullal, akkor pedig lehet, hogy tényleg jobban jársz egy PIC-kel. (És lehet, hogy van Ethernetes vagy Wifis PIC is, nem ismerem.) Én az AVR-es ATTiny Series 1 sorozattal vagyok így mint Bucko, szerintem az a legtutibb. Sokszor az egyszerűbb a jobb, azzal lehet gyorsabban haladni. A bonyolultabb processzor jobbnak tűnik agészen addig, amig először nem találkozol valami UFO jelenséggel, amit csak úgy lehet megérteni, ha elolvasod a többszáz oldalas doksikat az ARM bugyrairól. Például csak az IRQ alrendszere is elképsztő bonyolult már egy STM32-nek is. Ehhez képest a 8 biteseket ezerszer könnyebb felfogni, hogy mi történik és miért. Én is erre beszélnélek rá inkább.
- A hozzászóláshoz be kell jelentkezni
Ez azért nem jó a feladathoz, mert több munka és kevesebb élmény :).
Na jó, de akkor neked nem MCU kell, hanem valami embedded bigyó, valami Raspberry PI féleség.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
ESP32 bármelyik board (köztük a Wemos D1 mini klón is), amit USB-n rá tudsz dugni a számítógépre.
VSCode, PlatformIO. Nagyon szép build file-t is lehet írni a projekthez, a lib függőségek is meghatározhatók, így bárhol lefordul utána.
Kis Python ismerettel kibővíthető a build folyamat és csodákat tudsz művelni vele.
A Bluetooth és a Wifi elérhetőség miatt nem is kell plusz eszköz adott esetben, hálózati dolgok implementálásával simán el lehet indulni, mondjuk egy okosizzót http-n vezérelni.
- A hozzászóláshoz be kell jelentkezni