
W roku 2017 pojawiło się na rynku mikrokontrolerów wiele nowych, ciekawych rozwiązań. Zmieniły się też trendy w sektorze – coraz większy nacisk kładzie się na środowiska otwarte i pracujące na wielu platformach. Pojawiają się narzędzia do generowania kodu, które bezszwowo (przynajmniej w założeniu) integrują się z używanymi IDE. Finalnie, nie sposób nie zauważyć, że coraz więcej układów ośmiobitowych wypieranych jest przez mikrokontrolery z rdzeniem ARM Cortex-M0+.
W poniższym zestawieniu porównamy 21 mikrokontrolerów, które łączy tylko jedna cecha – cena poniżej jednego dolara (wg cen na stronie sklepu DigiKey). Niektóre projekty wymagać mogą mocnych układów, taktowanych zegarami po kilkaset MHz, jednakże znaczna większość prac, jakie powierza się mikrokontrolerom może być zrealizowana na prostych, tanich układach.
Jeden dolar to dobra kwota za MCU – dostaniemy za nią w miarę uniwersalny i dobrze wyposażony układ. Jeśli zejdziemy istotnie poniżej tej strefy, to już wpadamy w 6- bądź 8-nóżkowe układy mające kilkanaście bajtów pamięci RAMu i zupełny brak przetworników analogowo-cyfrowych (ADC) czy innych peryferii. Bardzo często mają tylko pojedynczy timer i kilka GPIO. Z kolei, jeśli wydać będziemy chcieli już kilka dolarów, to liczba dostępnych układów urośnie kilkukrotnie i pojawią się nie tylko uniwersalne układy, ale także bardzo wyspecjalizowane kości.
Układy w poniższym zestawieniu dobrane zostały tak, by reprezentować różnorodne rodziny i architektury, z których każda ma swoje wady i zalety. Oprócz danych na temat konkretnego układu dowiemy się także co nieco na temat całej rodziny.
Niestety – finalnie, na dole tego tekstu, ani w znacznie większym tekście na stronie autora tego artykułu, nie znajdziemy informacji, kto wygrał w tym zestawieniu. Ciężko opracować tak uniwersalny test, by zdecydować, jaki układ jest tutaj najlepszy, szczególnie, że jak wszyscy wiemy – najlepszy mikrokontroler to ten, który już znamy (jeśli jesteśmy inżynierem) lub najtańszy (jeśli jesteśmy księgowym). Nie zmienia to faktu, że warto zapoznać się z poniższym zestawieniem i wykorzystać zawarte w nim informacje do własnych potrzeb.
Kryteria
W poniższym zestawieniu uwzględnimy kilka kryteriów – jakościowych i ilościowych; obiektywnych i subiektywnych – opisujących mikrokontrolery. Podzielmy je na kilka kategorii:
Parametry, obudowy i peryferia
Jakie jest najszybsze taktowanie układu? Ile ma pamięci? Jakie peryferia? Ile kosztuje? W jakich wersjach jest dostępny? Im dana rodzina układów jest większa, tym elastyczniej dobierać można peryferia, co oznacza, że nie płaci się za niechciane moduły układu. Będzie to jednym z kryteriów naszej oceny.
Podobnie jak elastyczność doboru elementu, tak i obudowa nie jest bez znaczenia. Jeśli dany mikrokontroler dostępny jest w wielu obudowach – to bardzo dobrze, bo różne są potrzeby. Profesjonalista produkujący system elektroniki noszonej poszukiwać będzie mikroskopijnych obudów np. CSP (2x2 mm), a hobbysta preferować będzie obudowy do montażu przewlekanego, które wykorzystać można na płytce stykowej.
Jeśli chodzi o peryferia, to ich rodzaj i dostępność mocno zależy od architektury i producenta. Niektóre rodziny MCU mają szeroki wybór: DMA, wiele kanałów przerwań, różne poziomy oszczędności prądu, generatory zegarowe, przetworniki etc. Inne z kolei nie mają prawie nic. To, co bardziej nam pasuje zależy znowu od aplikacji układu. Nie ma sensu także oceniać poszczególnych MCU według wszystkich peryferii, aczkolwiek jest kilka punktów wspólnych, które warto pomiędzy poszczególnymi układami porównać.
Komfort projektowania systemu
Żadne porównanie MCU nie może być kompletne bez porównania środowisk pracy z nimi. Oczywiście jest to bardzo subiektywne zagadnienie, ale można wyłuskać szereg ważnych informacji, które da się obiektywnie porównać ze sobą: jaki jest wybór IDE, które sugeruje producent układów, jakie kompilatory wspierają dany układ, ile kosztuje IDE, na jakich systemach operacyjnych działa etc. Wszystkie te kwestie mają wpływ na komfort pracy z danym mikrokontrolerem.
Ciężko jest porównywać poszczególne funkcje różnych IDE między sobą, ale kwestie, takie jak zarządzanie projektami, jakość generowanego kodu czy narzędzia do generacji kodów inicjalizacyjnych, biblioteki do peryferii układu itp. – to wszystko może być porównane pomiędzy poszczególnymi rodzinami mikrokontrolerów.
W zestawieniu skupimy się na IDE sugerowanych przez producentów układów. Często istnieją różne alternatywy, jeśli chodzi o IDE i/lub kompilator, ale to tylko zaciemniłoby przedstawiany obraz.
Finalnie, jeśli chodzi o komfort użytkowania, po krótce ocenimy też dostępność narzędzi deweloperskich: płytek prototypowych, programatorów, debuggerów etc. Ta część pracy jest bardzo ważna, szczególnie na początkowym etapie pracy z nową architekturą układów.
Wydajność
Tą cechę układu najprościej jest ocenić testami – benchmarkami. Autor opracował trzy testy, z czego dwa opiszemy w niniejszym materiale i przedstawimy część uzyskanych wyników.
Pierwszym testem jest proste mruganie diodą – zmieniania stanu pinu wyjściowego w pętli while(1) najszybciej jak się da. Pozwala to na ocenę nie tylko jak szybka jest dana architektura, ale także, jak dobry jakościowo kod generowany jest przez narzędzia dedykowane dla tego układu. Programy uruchamiane na poszczególnych mikrokontrolerach zostały zoptymalizowane pod kątem prędkości, a do ich stworzenia wykorzystano wszelkie możliwe dedykowane funkcje, które przyspieszyć mają GPIO.
Drugim testem jest filtr typu biquad, operujący na 64 próbkach. Jest to doskonały przykład realnej aplikacji, w jakiej pracować musi procesor. Przetwarzając w ten sposób dane, oczekujemy dobrej wydajności, pozwalającej na pracę w czasie zbliżonym do rzeczywistego.
W tym teście 16-bitowe dane przetwarzane są poprzez filtr górnoprzepustowy drugiego rzędu (pasmo odcięcia 400 Hz). Częstotliwość próbkowania sygnału wynosi 8 kHz. Aby uniknąć problemów z porównaniem wyników pomiędzy układami, dane pobierane są z 64-elementowych macierzy w pamięci układu, a nie na przykład z przetwornika ADC. Zakończenie przetwarzania danych sygnalizowane jest zmianą stanu jednego z pinów. Prędkość oszacujemy mierząc, jak szybko zmienia się jego stan.
Autor podczas tego testu mierzył także pobór mocy przez układ. Dane dotyczące tego parametru znaleźć można w źródłowym tekście.
Zawodnicy
W poniższej tabeli znajdziemy podsumowanie wybranych do porównania układów (z zaznaczeniem, z jakiej rodziny MCU pochodzą). Dużą część z tych układów to elementy wprowadzone do sprzedaży w ostatnim czasie, więc warto dokładniej zapoznać się z tą listą.
Porównanie specyfikacji
Rdzeń
Układy podzielić można na dwa rodzaje – te, które wykorzystują własne rdzenie i te, które korzystają z licencji zewnętrznych. Spośród 21 układów w tym zestawieniu aż osiem korzysta z 32-bitowych rdzeni ARM – coraz popularniejszych na rynku, nawet w segmencie najtańszych elementów. Kolejne trzy mikrokontrolery wykorzystują dobrze znany 8-bitowy rdzeń 8051. Pozostałe dziesięć układów korzysta z własnych rdzeni: sześć 8-bitowych, trzech 16-bitowych i jednego 32-bitowego (PIC32MM – jedyny 32-bitowy nie-ARM).
AVR
Rdzeń AVR jest bardzo popularnym układem RISC, znanym ze swojej wydajności. Na rynku obecne są już od 1997 roku. Zestaw instrukcji omawianych tutaj układów, znany jako AVRe, posiada szereg wydajnych instrukcji m.in. do mnożenia w dwóch cyklach zegara, jak i wielu operacji działających w pojedynczym cyklu.
Instrukcje rdzenia AVR są w większości 16-bitowe, a część jest 32-bitowych. W systemie są 32 rejestry, jednakże jedynie 16 z nich nazwać można ogólnego przeznaczenia, jako że nie wszystkie instrukcje korzystać mogą z rejestrów R0-R15.
Rdzeń AVR w momencie pojawienia się na rynku dał ogromny skok jakościowy w porównaniu z układami 8051, będącymi wtedy u szczytu popularności. Mimo wielu usprawnień w rdzeniu 51 AVRy nadal są od niego istotnie szybsze, gdy pracują z dużymi ilościami danych w macierzach, które przechowywane mają być w rozszerzonej, 16-bitowej pamięci RAM.
Warto też wspomnieć, że AVRy zaprojektowano z kompilatorem C na myśli. Dzięki 32 rejestrom kompilator może w dowolny sposób żonglować wieloma wartościami – 8051 ma tylko cztery banki po osiem rejestrów, co jednakże także ma swoje zalety np. podczas obsługi przerwań. Te z kolei w AVRach są dosyć słabo zaimplementowane. Jest tylko jeden priorytet przerwania w tych procesorach i bardzo często wejście do przerwania wymaga odkładania danych z rejestrów na stos.
Inną wadą AVRów są niskie częstotliwości taktowania. Nawet najmocniejsze XMEGA nie pracują z zegarami powyżej 32 MHz, a zaprezentowane tutaj układy taktowane są 20 MHz. Wiele porównywanych tutaj układów korzysta z zegara 48 MHz czy nawet 72 MHz, co daje im dużo większą realną wydajność, nawet po uwzględnieniu wysokiej wydajności w przeliczeniu na cykl zegara AVRów.
PIC16
Gdy spojrzymy na całą rodzinę PIC16, to wydają się one bardzo dziwaczne. Szokuje wręcz, że zdobyły tak ogromną popularność. Procesor ten korzysta z 14-bitowej pamięci programu, mimo że jest układem 8-bitowym. Znacząco upraszcza to jego projekt, ponieważ 14 bitów pozwala na zapisanie wszystkich danych potrzebnych do wykonania instrukcji CPU. Pozostawia też dostatecznie dużego obszaru w słowie na zaadresowanie do 128 rejestrów lub 2K pamięci programu.
Microchip nazywa architekturę PIC16 RISCem, ponieważ każda instrukcja (spośród 49) zajmuje dokładnie jedno słowo. Nazywana jest często architekturą 4T, jako że przetworzenie każdej instrukcji w języku maszynowym zajmuje dokładnie 4 cykle zegara. To nie do końca prawda, bo potrzebne są jeszcze dodatkowe cztery cykle, by uzyskać instrukcje, co daje w efekcie 8 cykli.
Jako że realne układy mają więcej niż 128 bitów rejestrów czy 2K pamięci programu, to układy PIC posiadają dodatkowo rejestr BSR do selekcji banku. Pozwala to adresować więcej banków o takiej wielkości, ale wymaga (częstego) przełączania się pomiędzy bankami.
Z uwagi na to, że PIC16 mają tylko jeden rejestr, nazwany W, programowanie w assemblerze jest proste. Wszystkie operacje polegają na przesuwaniu czegoś do W lub z W gdzie indziej.
Omawiany układ może przechowywać program o długości 8192 14-bitowych słów. Microchip opisuje to, jako 14 KB pamięci flash, ale realnie każdy użytkownik powie, że pamięć ma 8 K – 8192 słów, bo np. przechowywanie 8192-elementowej macierzy zajmie całe dostępne 14 KB pamięci.
PIC24
Układy PIC10, 12, 15 i 18 to 8-bitowe procesowy z 12..16-bitową pamięcią programu. PIC24 to układ 16-bitowy z 24-bitowymi instrukcjami (ma to całkiem spory sens, patrząc na nazewnictwo). Jeśli poprzednie układy określimy jako 4T, to PIC24 to 2T – dwa cykle zegara na operacje.
PIC24 adresuje pamięć w sposób pośredni, zwiększając bądź zmniejszając offset adresu. Ma kilka więcej instrukcji niż PIC16 i trzy, zamiast dwóch, sprzętowe breakpointy. Poza tym niewiele różni się od PIC16.
Układy te charakteryzują się bardzo niskim poborem mocy, podobnie jak PIC16. Niestety nie można ich tak wysoko taktować jak np. MSP430, który z resztą pobiera mniej mocy.
Warto tutaj wspomnieć o rozwinięciu tej architektury o procesor DSP – rodzinie dsPIC. Układy te znalazły swoje zastosowanie m.in. w motoryzacji, ale niestety nie przyczyniło się to do popularyzacji PIC24.
PIC32
Gdy wszyscy przechodzili z własnych rozwiązań na rdzenie ARM, Microchip trwał przy swoich rozwiązaniach. Dopiero w 2007 roku firma dodała do swojej oferty 32-bitowy procesor – PIC32. Wykorzystuje on standardowy rdzeń – M4K oparty na architekturze MIPS. Został on stworzony do aplikacji jednordzeniowych. Posiada 32 rejestry, wektorowy kontroler przerwań i wsparcie dla kodowania 16-bitowych instrukcji.
Jakkolwiek nie jest to ARM, to jest do niego na tyle podobny, że żaden programista zaznajomiony z ARMami nie powinien mieć zbyt wielkich problemów z przesiadką na PIC32.
Układy z rodziny PIC32 programowane mogą być podobnymi narzędziami jak mniejsze mikrokontrolery Microchipa, ale układ posiada też interfejs JTAG, aczkolwiek najpopularniejszy programator JTAG (J-Link od Seggera) niestety wspiera tylko PIC32MX, nie ma wsparcia dla PIC32MM.
ARM Cortex-M0
Jest to najmniejszy rdzeń z rodziny ARM – 32-bitowych układów RISC. Zaprojektowany został przez ARM Holding, który udziela zainteresowanym firmom licencji na jego implementację w swoich produktach.
Historia tego rdzenia sięga dosyć daleko. W zamyśle miał on być procesorem dla komputerów osobistych. Stworzyło go konsorcjum firm, takich jak Acorn, Apple i VLSI Technology. Miał on pracować w 32-bitowych komputerach Acorna, jednakże jego zwiększająca się popularność w systemach zasilanych bateryjnie, spowodowała, że zaimplementowano go także w MCU. Pierwszy rdzeń ARM w mikrokontrolerze – ARM7TDMI-S – nie zdobył ogromnej popularności. Pojawił się w AT91 Atmela i STR7 STMicro.
Poznanie historii rdzenia ARM jest kluczowe, by zrozumieć różnice pomiędzy nim, a innymi układami sprzedawanymi na licencji, takimi jak 8051. Odmiennie niż w przypadku tego drugiego, ARMy to tylko rdzeń – nie konkretny mikrokontroler. ARM7TDMIS nie posiadał GPIO, UARTów, ADC czy timerów – był zwykłym procesorem, bez peryferiów. Te elementy zaprojektowane musiały zostać przez implementatorów rdzenia tak, aby spełniać standard AHB – szyny wyjściowej ARMa.
Podczas tworzenia swoich mikrokontrolerów z rdzeniem ARM każda firma podchodziła inaczej – Freescale wykorzystał sporo peryferiów układów HC08 i ColdFire, Atmel zaprojektował je od podstaw, a STMicro zapożyczyło część elementów z ST7 (prekursor STM8), ale zaprojektował także nowe timery i peryferia komunikacyjne. Jako że w większości projektów mikrokontrolery, przez nawet 90% czasu pracy, wykorzystują peryferia, to kwestia nie do pominięcia. Przez to też każdy układ z rdzeniem ARM różni się od swoich kuzynów.
Układy z rdzeniem M0 obsługują jedynie 16-bitowe instrukcje, jednakże posiadają pełne 32-bitowe ALU z 32-bitowymi mnożnikami, obsługujący takiej samej szerokości wynik. Dzięki temu rdzeń może być o 2/3 mniejszy niż Cortex-M3.
Rdzenie ARM, oprócz zwykłych rejestrów CPU posiadają 13 rejestrów ogólnego przeznaczenia. Układ posiada zagnieżdżony kontroler przerwań, pozwalający na obsługę do 32 przerwań na 4 różnych priorytetach – to o wiele więcej, niż ośmiobitowe rdzenie, ale nie zbliża się do poziomu, jakie osiągają większe procesory ARM – 240 przerwań na 256 priorytetach.
Dodatkowo rdzeń Cortex-M0 posiada pełne wsparcie dla obsługi wyjątków – to kolejna rzecz, jakiej nie uświadczymy w ośmiobitowych układach.
Rdzenie M0+ to rozszerzona wersja M0, którą rozszerzono o operację tworzenia gałęzi (skoków) w dwóch cyklach zegara. Dodatkowo M0+ pobierają mniej prądu oraz mogą być wyposażone w dodatkowe możliwości, takie jak GPIO pracujące w jednym cyklu zegara, wsparcie dla prostych instrukcji bufora MTB i inne.
Jednym z problemów z programowaniem tych układów jest fakt, że dla innych aplikacji niż 16- i 32-bitowa matematyka, ich kod nie jest szczególnie wydatny. Oznacza to, że operacje typowe dla mikrokontrolerów, takie jak wysyłanie danych przez porty komunikacyjne, programowa zmiana bitów na GPIO czy obsługa ADC, tworzą bardzo dużo kodu. Po części jest to spowodowane tym, że peryferia te są o wiele bardziej złożone, ale i elastyczniejsze, niż ich analogi z układów ośmiobitowych.
Kolejną wadą ARMów jest 12-cyklowe opóźnienie w obsłudze przerwań. Jeśli do tego układ będzie musiał zachowywać, podczas przejścia do przerwania, dużo rejestrów na stosie, to opóźnienie przy obsłudze przerwania może być znaczne – do tego stopnia, że taktowany 16 MHz rdzeń 8-bitowy może bez problemu wyprzedzić 32-bitowy mikrokontroler taktowany zegarem 72 MHz.
8051
Ten rdzeń stworzony został przez Intela w 1980 roku. Jest to jeden z pierwszych, szeroko przyjętych ośmiobitowców. Posługuje się zmodyfikowaną architekturą harwardzką i posiada zestaw instrukcji CISC. Dodatkowo procesor ten posiada sprzętowy mnożnik, dzielnik, adresowalną pamięć RAM oraz szereg instrukcji do manipulowania bitami. 8051 posiada cztery przełączalne banki po osiem rejestrów każdy, dwa priorytety przerwań. Może adresować zarówno do 654 KB pamięci programu, jak i pamięci RAMu (rozszerzonego) – podręczny RAM, dostępny z wykorzystaniem szybszych instrukcji (tzw. scratch pad) może mieć jedynie do 128 bajtów.
Układ 8051 to tak na prawdę nie jest rodzina układów – to konkretny element, ale jego nazwa stała się synonimem architektury, zestawu peryferiów czy nawet rozkładu wyprowadzeń. Oryginalny mikrokontroler posiadał 4K pamięci ROM, 128 bajtów pamięci RAM, osiem pełnych 8-bitowych portów GPIO (łącznie 32 piny I/O), interfejs UART, system obsługi przerwań z dwoma priorytetami oraz dwa lub trzy timery.
Procesor 8051 ma w pełni ortogonalny zestaw instrukcji CISC. Oznacza to, że można niemalże każdą operację w układzie zrealizować pojedynczym, bezpośrednim i natychmiastowym mnemonikiem. Te operacje wykonywać można w RAMie, na rejestrach czy w akumulatorze A.
Wielu producentów produkowało zamienniki – klony – procesorów 8051. Intel w 2007 roku zakończył produkcję tych układów, co umknęło wielu z uwagi na to, ile dostępnych jest zamienników. Wiele firm jednakże posunęło rozwój tych układów w przód – oprócz naśladowania funkcjonalności układów Intela, wiele z nich wyposażono w dodatkowe timery, peryferia itp.
Z uwagi na szybką obsługę przerwań i niewielki rozmiar rdzenia, mikrokontrolery te są bardzo chętnie używane w systemach czasu rzeczywistego – w kamerach USB, sprzęcie audio do obróbki DSP a także w układach FPGA do obsługi systemu.
Wiele osób, które w przeszłości pracowało z układami 8051 uważa je za „stare i wolne”. Nie jest to nieprawdą – oryginał był układem 12T – każdy cykl programu wymagał 12 cykli zegara. Pobranie instrukcji zajmowało cykl programu, a by ją wykonać, kolejny cykl etc. Czasami potrzebne było nawet 50 cykli zegara, by zrealizować pojedynczą instrukcję, ale to przeszłość. Obecnie rdzenie oparte na MCS-51 to procesory 1T.
W prezentowanym zestawieniu występują trzy układy wyposażone w rdzeń 8051 – każdy z nich zaimplementowany został trochę inaczej, taktowany może być innej częstotliwości zegarem etc. Stąd też warto przyjrzeć się im wszystkim, gdyż stanowczo nie będą takie same.
STM8
Rdzeń STM8 oferuje sześć rejestrów CPU, pojedynczy akumulator I dwa rejestry indeksujące. Układ ma 24-bitowy licznik programu, 16-bitowy wskaźnik stosu i rejestr warunkowy. Procesor ten zbudowano w architekturze harwardzkiej, ale posiada zunifikowaną przestrzeń adresową. Szyna pamięci programu ma szerokość 32 bitów, większość instrukcji może być przechwycona w jednym cyklu, a duża część z nich także w jednym cyklu wykonana.
STM8 słyną z aż 20 trybów adresowania pamięci – relatywnego, przez wskaźnik, etc. Są trzy „zasięgi” adresów – krótki (jeden bajt), długi (dwa bajty) i rozszerzony (trzy bajty). To, z jakiego korzystamy jest wynikiem kompromisu pomiędzy obszarem obsługiwanej pamięci a wydajnością.
Rdzeń ten znajduje się – jeśli chodzi o sposób adresowania pamięci – pomiędzy procesorami RISC, posiadającymi wiele rejestrów ogólnego przeznaczenia i CISC, które bezpośrednio adresują pamięć, ale płacą za to ogromną cenę w wydajności, gdy adresować muszą pamięć adresem 16-bitowym. STM8 wydaje się osiągać ciekawy kompromis w tym zakresie.
Peryferia
W poniższej tabeli zebrano część specyfikacji peryferii układów. Pozwala to łatwo porównać je ze sobą w przypadku poszczególnych układów.
Rodzina układów | Prędkość (maksymalna częstotliwość zegara) | Pamięć Flash (pojemność) | Pamięć RAM (pojemność) | Timery (liczba punktów) | Wyjścia PWM | Interfejsy komunikacyjne | Przetwornik analogowo-cyfrowy |
ATMEL TINYAVR | 20 MHz | 16 KB | 2 KB | 28 punktów | 9 kanałów | 3 interfejsy | 20 kanały |
ATMEL MEGAAVR | 20 MHz | 16 KB | 1 KB | 17 punktów | 6 kanałów | 4 interfejsy | 8 kanałów |
ATMEL SAM D10 | 48 MHz | 16 KB | 4 KB | 51 punktów | 8 kanałów | 3 interfejsy | 8 kanałów |
CYPRESS PSOC 4000S | 24 MHz | 16 KB | 2 KB | 37 punktów | 4 kanały | 2 interfejsy | 0 kan. |
FREESCALE KE04 | 48 MHz | 8 KB | 1 KB | 50 punktów | 4 kanały | 3 interfejsy | 12 kanałów |
FREESCALE KL03 | 48 MHz | 8 KB | 2 KB | 26 punktów | 3 kanały | 3 interfejsy | 4 kanały |
HOLTEK HT66 | 20 MHz | 8 KB | 0,25 KB | 12 punktów | 3 kanały | 2 interfejsy | 8 kanałów |
INFINEON XMC1100 | 32 MHz | 14 KB | 16 KB | 48 punktów | 1 kanał | 2 interfejsy | 6 kan. |
MICROCHIP PIC16 | 32 MHz | 14 KB | 1 KB | 47 punktów | 1 kanałów | 3 interfejsy | 12 kanałów |
MICROCHIP PIC24 | 32 MHz | 4 KB | 0,5 KB | 17 punktów | 2 kanały | 2 interfejsy | 0 kanałów |
MICROCHIP PIC32MM | 25 MHz | 32 KB | 8 KB | 44 punktów | 3 kanały | 4 interfejsy | 11 kanałów |
NUVOTON N76 | 16 MHz | 18 KB | 1 KB | 31 punktów | 6 kanałów | 3 interfejsy | 8 kanałów |
NUVOTON M051 | 50 MHz | 12 KB | 4 KB | 62 punktów | 8 kanałów | 6 interfejsów | 8 kanałów |
NXP LPC811 | 30 MHz | 8 KB | 2 KB | 45 punktów | 4 kanały | 4 interfejsy | 0 kanałów |
RENESAS RL78 | 24 MHz | 10 KB | 0,768 KB | 54 punktów | 7 kanałów | 4 interfejsy | 6 kanałów |
SANYO LC87 | 12 MHz | 16 KB | 1 KB | 22 punktów | 4 kanały | 3 interfejsy | 20 kan. |
SILICON LABS EFM8 | 72 MHz | 16 KB | 1,28 KB | 42 punktów | 6 kanałów | 4 interfejsy | 20 kanałów |
ST STM8 | 16 MHz | 32 KB | 2 KB | 43 punktów | 9 kanałów | 3 interfejsy | 7 kanałów |
ST STM32F0 | 48 MHz | 16 KB | 4 KB | 40 punktów | 6 kanałów | 3 interfejsy | 16 kan. |
STC STC83 | 30 MHz | 64 KB | 4 KB | 51 punktów | 12 kanałów | 6 interfejsów | 15 kanałów |
TI MSP430FR | 16 MHz | 16 KB | 1 KB | 13 punktów | 2 kanały | 1 interfejs | 8 kan. |
Zestawienie powyżej prezentuje maksymalny zegar danego układu. Jak pokażą dalsze testy, nie jest on miarodajny, jeśli chodzi o wydajność. Dodatkowo, wiele MCU ogranicza częstotliwość zegara peryferiów, co nie jest bez znaczenia, jeśli poszukujemy układu do np. szybkiego operowania bitami na wyjściu.
Dodatkowo zwrócić musimy uwagę, że niektóre układy – takie jak tinyAVR czy megaAVR – nie mogą pracować ze swoim maksymalnym zegarem przy zasilaniu poniżej 5 V. Nie jest to ogromny problem, bo w systemie i tak skorzystamy najpewniej z wbudowanego oscylatora – dodanie do mikrokontrolera nawet najtańszego kwarcu za dolara poważnie zwiększy cenę urządzenia.
Jeśli chodzi o pojemność pamięci Flash, to pamiętać trzeba o tym, że różne układy mają różne potrzeby i inaczej wykorzystują pamięć. Na przykład PIC16 z 14 KB pamięci, z uwagi na 14-bitowy rdzeń, będzie zachowywał się jakby było jej 8 KB, analogicznie HT66, z tym, że ten układ ma 16-bitowe instrukcje czy PIC24 z 24-bitowymi instrukcjami.
Na plus wybija się w tym zestawieniu STC8 – 64 KB pamięci flash w połączeniu z rdzeniem 8051 sprawiają, że może to być bardzo zdolny układ. Na drugim końcu zestawienia będą układy z rdzeniami ARM, które wymagają bardzo dużo pamięci flash do przechowywania swojego obszernego kodu. Szersze omówienie niuansów pamięci w tych układach znaleźć można w artykule źródłowym.
Żadne zestawienie układów nie jest kompletne bez porównania timerów. Najprościej jest przyporządkować każdemu układowi punktację za poszczególne aspekty timerów. W tym zestawieniu autor przyjął następującą punktację:
1 punkt z 8-bitowy licznik
2 punkty za 8-bitowy timer z autoprzeładowaniem
2 punkty za 16-bitowy licznik
4 punkty za 16-bitowy timer z autoprzeładowaniem
6 punktów za 24-bitowy timer z autoprzeładowaniem
8 punktów za 32-bitowy timer z autoprzeładowaniem
2 punkty za zegar czasu rzeczywistego
2 punkty za każdy 16-bitowy timer, który może być rozszerzony do 32-bitów
1 punkt za każdy kanał przechwytywania
1 punkt za każdy kanał 8-bitowego PWMa
2 punkty za każdy kanał 16-bitowego PWMa
3 punkty za każdy kanał 24-bitowego PWMa
3 punkty za każdy kanał PWM o arbitralnie ustalanej fazie
2 punkty za każdy moduł PWM, który charakteryzuje się zmniejszonym poborem mocy
Łączna liczba punktów dla każdego układu zawarta jest w powyższej tabeli – osobno timery i kanały PWM.
Żaden układ nie byłby kompletny bez interfejsów komunikacyjnych – UART, SPI czy I²C. Nuvoton posunął się nawet do tego, że zduplikował te interfejsy, dając swojemu układowi po dwa z każdego rodzaju. Jednakże rzadko kiedy konieczne jest zastosowanie równolegle więcej niż jednego interfejsu SPI czy I²C w systemie. Niektóre układy posiadają dwa, lub nawet cztery (STC8) interfejsy UART. Takie podejście jest o wiele bardziej użyteczne, jako że pojedynczy UART pozwala zazwyczaj na komunikację z pojedynczym urządzeniem.
Warto zwrócić tutaj uwagę na tzw. “moduł szeregowy”, jaki zaimplementował Atmel, Cypress, Infineon i Renesas. Może on być wykorzystany jako dowolny z wymienionych interfejsów. Cypress i Infineon wbudowali w swój układ dwa takie, a Atmel i Renesas po trzy.
Jeśli chodzi o przetwornik analogowo-cyfrowy (ADC), to znajdziemy go we wszystkich układach oprócz prezentowanych PSoC 4000S, LPC811 i PIC24 (mimo tego, że większe układy z tych rodzin mają takie moduły). Większość 8- i 16-bitowych MCU ma 10-bitowe przetworniki, a 32-bitowce 12-bitowe. Niektóre ośmiobitowce (jak HT66 czy STC8) pochwalić się mogą jednak ADC o rozdzielczości 12 bit, a EFM8 od Silicon Labs nawet 14-bitowym przetwornikiem, który dodatkowo ma 20 kanałów, tyle co tinyAVR i LC87. Rekordzistą jest tutaj jednakże PIC16, który ma 24 kanały ADC, które próbkować może z prędkością 470 ksps. EFM8 osiąga 900 ksps, a najwyższa prędkość – 1 Msps – osiągana jest jedynie przez układy od ST i Infineona. Na drugim końcu skali znalazł się megaAVR z przetwornikiem, który próbkuje z prędkością zaledwie 15 ksps.
W układach w tym zakresie cen nietypowa jest obecność przetwornika cyfrowo-analogowego (DAC). W zebranych tutaj mikrokontrolerach jednakże, aż pięć posiada taki moduł. EFM8 wyposażony jest w dwukanałowy przetwornik DAC o rozdzielczości 12 bit. SAM D10 ma jednokanałowy przetwornik 10-bitowy, a tinyAVR przetwornik o rozdzielczości 8 bitów i trzech kanałach wyjściowych. PIC16 ma 5-bitowy przetwornik z jednym kanałem (ale dwoma wyjściami), a KE04 6-bitowy przetwornik podłączony do wewnętrznego komparatora.
Elastyczność
Jedną z ważnych cech MCU jest elastyczność jego rodziny. Jest to o tyle ważne, że gdy już nauczymy się konkretnej architektury, to dobrze jest móc wybrać inny, podobny układ, ale np. lepiej wyposażony, jeśli nasza aplikacja tego wymaga. Sprawdźmy zatem, jak elastyczne są poszczególne rodziny układów. W zestawieniu przyjęliśmy, że jeżeli inny członek tej rodziny ma dwa razy wyższe parametry, to określimy go jako dwa razy mocniejszy.
Na czele tego zestawienia plasuje są PIC32MX. W ramach tej linii układów Microchipa dostępne są MCU taktowane zegarem do 120 MHz z 512 KB pamięci FLASH i 128 KB RAM. Jeśli jednak uwzględnimy jeszcze inne układy PIC32, na przykład nowszą linię PIC32MZ, to dostępne są układy taktowane do 252 MHz z 2 MB Flash i nawet do 32 MB wbudowanej pamięci DDR2. Wyposażone są one często w rozbudowane bloki grafiki itp., co umożliwia stworzenie bardzo złożonych implementacji, pracujących z Linuxem na pokładzie etc. Mikrokontrolery te są bezpośrednimi konkurentami układów z rdzeniem ARM Cortex-M7.
Kolejny na liście jest STM32 – STM32F0 ma większego brata w postaci STM32F4, jeden z najmocniejszych układów z rdzeniem ARM Cortex. Niektóre z nich pracują z zegarem do 180 MHz, posiadają do 2 MB pamięci Flash i 364 KB pamięci RAM. Jednakże są jeszcze większe mikrokontrolery z stajni STM32 – np. STM32F7 z rdzeniem Cortex-M7, taktowane do 216 MHz I wyposażone w 2 MB Flash i 512 KB RAM.
LPC811, jeden z najsłabszych układów w tym zestawieniu, także ma mocniejsze rodzeństwo. Na przykład układy LPC546xx – giganty z rdzeniem ARM Cortex-M4, taktowane do 220 MHz i wyposażone w 512 KB Flash i 200 KB RAM.
Słabo wypadają układy tinyAVR. W ramach tej rodziny najmocniejsze układy mają 16 KB Flash, 2 KB RAM I taktowane mogą być zegarem do 20 MHz. Atmel zapowiada jednakże, że niebawem w handlu pojawić się ma 32 KB wersja tinyAVR. Trochę lepiej wypada megaAVR, ale nadal większość tych MCU pracuje z zegarem do 20 MHz. Są wersje z 64 KB pamięci Flash i do 4 KB pamięci RAM, jednak żadna z nich nie jest dostępna w dużej obudowie ze 100 pinami.
Linia układów SAM D10 rozciąga się w SAM D21, które taktowane są do 48 MHz, ale posiadają do 256 KB Flash i 32 KB RAM. Jeśli wyjdzie się poza układy D1x i D2x, to dostępne są takie bestie jak ATSAM70 z zegarem do 300 MHz, 2 MB Flash i 384 KB RAM w obudowach do 144 pinów. Są one bardzo przyjaźnie wycenione – starsze układy w wersji 64 pinowej z 1 MB Flash dostępne są już za 5,14 dolara.
Układy PSoC 4000S są na samym dole ekosystemu MCU Cypressa. Kolejne PSoC 5 mają już do 256 KB Flash i 64 KB RAMu. Taktowane mogą być zegarem do 80 MHz. Te układy są dodatkowo bogato wyposażone w analogowe peryferia, moduły do obsługi pojemnościowych interfejsów dotykowych itp. Idąc dalej, docieramy doi PSoC6 – taktowanych do 150 MHz układów z rdzeniem ARM Cortex-M4F, 1 MB pamięci Flash, 288 KB RAMu, zintegrowanymi modułami Bluetooth etc.
Układy KE04 i KL03 są najprostszymi członkami rodziny Kinetis. Najmocniejszy układ Freescale z rodziny E – KE1x – dysponuje 512 KB pamięci Flash, 64 KB pamięci RAM i zegarem do 168 MHz, zamkniętymi w dużych obudowach do 100 pinów.
Holtek HT66 nie ma w zasadzie nic mocniejszego do ogólnego użytku niż HT66F0185, ale firma ta produkuje wiele dedykowanych mikrokontrolerów z tym samym rdzeniem.
Rodzina Infineon XMC1000 rozciąga się aż do XMC1400 z 200 KB pamięci Flash, 16 KB pamięci RAM I minimalnie szybszym zegarem do 48 MHz. Jeśli wykroczymy poza ekosystem XMC1000 to korzystać możemy z XMC4000, który zachowuje te same peryferia, co mniejszy brat, ale posiada rdzeń Cortex-M4F taktowany do 144 MHz z 2 MB Flash, 352 KB RAM i ogromnymi obudowami do 196 pinów.
Najmocniejszy PIC16 obecnie na rynku – PIC16F19197 ma 56 KB pamięci Flash (czyli 32 K słów, bo to PIC), 4 KB pamięci RAM. Ale z tej rodziny łatwo przesiąść się na PIC18, jako że mają ten sam kompilator i podobną architekturę peryferiów. Tutaj najmocniejszy układ do PIC18F97J60 – 100-pinowa bestia z 128 KB Flash (64 K słów) i 4 KB RAM. Układ ten wyróżnia się ponadto wbudowanym fizycznym interfejsem Ethernet i MAC. To jedyny taki układ, który integruje całą warstwę fizyczną (PHY) Ethernetu.
PIC24FJ1024GA610 – najmocniejszy z rodziny – ma do 1024 KB pamięci Flash, 32 KB pamięci RAM i zegar do 32 MHz. Dodatkowo są jeszcze podobne im układy z rodziny dsPIC. Najmocniejszym członkiem tej rodziny z układem DSP jest dsPIC33EP512GM604 z 512 KB pamięci Flash, 48 KB RAMu i zegarem do 140 MHz.
Najmocniejszym bratem Nuvoton N76 jest taktowany do 40 MHz W79E658A, który ma 128 KB Flash i 1,25 KB RAMu. Z kolei Nuvoton M051 Ma trochę starszego rodzeństwa z rdzeniem Cortex-M4. Na przykład układ M505 posiada wbudowane 2 MB pamięci Flash dołączonej po SPI, 128 KB RAMu i działa z zegarem do 100 MHz. Nuvoton niebawem ma zamiar wypuścić M487 z 192 MHz CPU, 512 KB pamięci Flash i 160 KB RAMu.
Rodzina Renesas RL-78 rozciąga się aż do R5F101SLAFB, w 128-pinowej obudowie, w której znajdziemy 512 KB Flash I 32 KB RAM. Maksymalny zegar tego układu do 32 MHz.
LC87F7NP6AUE – najmocniejszy MCU z rodziny Sanyo LC87 – ma 256 KB Flash i 12 KB RAM przy zegarze 18 MHz.
Jeśli chodzi o EFM8, to Silicon Labs oferuje nam EFM8LB1. Układ ten ma 64 KB Flash, 4,25 KB RAM, ale produkowany jest w niewielkiej 32-pinowej obudowie. Jeśli podoba nam się rodzina 8051 Silicon Labs, możemy jednakże sięgnąć po większy C8051F120. Taktowany do 100 MHz procesor MCS-51 z 128 KB Flash i 8,25 KB RAM.
Rodzina MSP430 rozciąga się aż do MSP430F6779, który w 128-pinowej obudowie mieści 512 KB pamięci Flash I 32 KB RAMu.
Testowany układ STC8 jest najmocniejszy z całej rodziny.
Z uwagi na ograniczenie wielkości postu na forum

Cool? Ranking DIY