Milyen mikrokontrollert kezdjek tanulni? PIC, MCS51 (Intel 8051), TI MSP430 és Atmel AVR8 mikrokontrollerek előnyei és hátrányai

Az első és legfontosabb, ha kezdők vagyunk, olyan mikrovezérlővel kezdjünk, amit egy ismerősünk is használ. Úgy sokkal könnyebb elindulni! Továbbá ez az írás a jelenleg elérhető mikrokontrollerfajták egy kicsiny szeletét fogja csak taglalni, mivel a mikrokontroller magok száma hihetetlen mennyiségben nő (több tucat, talán több száz, ha a softcore-okat is figyelembe vesszük).
Mivel leginkább Linux-ot használok, ezért a Linux alatt működő fordítókat mindig megemlítem és mivel C-ben szoktam fejleszteni elsősorban azokról írok. Mikrokontrollerekre lehet például BASIC-ben is fejleszteni programot, de azt sosem próbáltam.
A címben megnevezett mikrokontrollereket használtam hobbi célra ill. tanulásra, ezekről kicsit részletesebben:

  1. 2000 és 2004 között: Microchip PIC16F84, PIC16F874 assemblyben, PIC18F452-t C-ben programozva,
  2. Intel MCS-51 alapú, de Philips gyártmányú P80C552 (2003 körül) assemblyben és C-ben illetve P80C528-t (2012-ben) C-ben,
  3. Texas Instruments MSP430F167, MSP430F169 és egyéb változatai (kb. 2007-től folyamatosan) kizárólag C-ben,
  4. Atmel AVR ATmega88, ATmega328, ATmega324, ATmega64L, ATmega128, ATtiny26L, stb. C-ben.

A pozitívumokat + és ++ jellel jelölöm, attól függően, hogy szerintem mennyire fontos. A negatívumokat - és -- jellel jelölöm, hogy mennyire rossz az adott tulajdonság. Például a PIC-nél az órajelfrekvencia futás közbeni állításának hiánya kevésbé rossz (-), mint a memóriabankok lapozgatásának szükségessége (--).

Microchip PIC16Fxxx mikrokontrollerek

A mikrokontroller kis túlzással minden sarki boltban kapható (www.chipcad.hu, www.ret.hu, www.hqelektronik.hu). Linux alá van assembly fordító, de C compiler nem volt, amikor én még használtam (ez 2002-ben volt). Manapság az SDCC fordító elvileg tud C forrást fordítani, de a honlap szerint még "work in progress" vagyis még kell rajta dolgozni, nem stabil. Én az erősítőm vezérlését csináltam ezzel a vezérlővel PIC16F874-es MCU-val, SPI-os digitális potméterekkel és egy 16x2-es LCD-vel. Assemblyben írtam a programot. Akkor még ráértem és ugyebár nem volt C fordító. Kb. egy éve lecseréltem az erősítő vezérlését MSP430-asra.

Előnyei:
++ könnyen beszerezhető
++ olcsó
++ sok információ van róla az interneten
+ DIP tokozású és kevés lábszámú változatok is vannak
+ 10-20 ezer forintért debugger (és programozó) PICKit2 vásárolható, aminek számtalan utángyártott változata is létezik. Linux alá is van kliens. (Én majd építeni próbálok egyet, de még nem használtam!)

Hátrányai:
-- 12V-os programozás (elvileg 5V-on is programozhatóak, de a legtöbb programozó 12V-on működik)
-- sok programozó (nem debugger) kapcsolás található a neten, amiknek jó része nem működik (a JDM 2 működött többé kevésbé, azt használtam)
-- memória bankok lapozgatása (assemblyben)
-- C fordítók hiánya
- programmemóriában tárolt adatok nehezen hozzáférhetőek
- MCU frekvencia programozáskor állítható, működés közben nem*
* Úgy látom, ez már nem teljesen igaz, a 16F688 fekvenciája például változtatható működés közben, ha a belső oszcillátort használjuk. De mondjuk a kvarcoszcillátor és a belső oszcillátor között váltogatni nem lehet programból.

Tait kompatibilis programozó, ICD 2 klón és PICkit 2 klón építéséről itt olvashatsz bővebben.

Microchip PIC18Fxxx mikrokontrollerek
Ezeket a mikrovezérlőket is sok helyen lehet kapni, de a legtöbb a www.chipcad.hu-nál található. A processzor utasításkészlete fel lett készítve a C programnyelv támogatására.

Intel MCS-51 (másnéven 8051 vagy 8031)

Ez egy nagyon régi architektúra és nagyon sok gyártó készít ma is ilyen maggal mikrovezérlőket (például Atmel www.hqelektronik.hu, www.ret.hu). Van hozzá sok assembly és C fordító is. Linux alá is van egy nagyon jó C fordító: SDCC.
Előnyei:
++ jól kiforrott architektúra
++ könnyen beszerezhető
++ olcsó
++ sok információ van róla az interneten
+ C és assembly fordítók is vannak
+ DIP tokozású és kevés lábszámú változatok is vannak
+ sok szimulátor van a CPU-hoz

Hátrányai:
- MCU frekvencia működés közben nem állítható
- időzítők kevésbé rugalmasan konfigurálhatók
- a régebbiek külső programmemóriával és/vagy RAM-mal működtek, de az újabbakban flash memória van
- a nyomkövetéshez (debuggoláshoz) nincs elterjedt hardver, amit egy hobbielektronikás is ki tud fizetni

Texas Instruments MSP430

A legolcsóbb kezdő készlet a MSP430 Launchpad 4.3 USD-ért, megvásárolható itt. Én az ez430-RF2500-as rádió adó-vevős készletet illetve a ez430-F2013-at használtam.

Előnyei:
+ 16 bites architektúra
+ programmemóriában található adatok könnyen elérhetőek
+ C fordító van Linux alá is (mspgcc)
+ MCU frekvencia működés közben is állítható
+ nem okoz gondot, ha külső oszcillátort használtunk egy korábbi beégetés során, mert az MCU mindig a belső oszcillátorával indul!
+ jól konfigurálható időzítők
+ újabb változatok Spy Bi-Wire interfészen keresztül két vezetéken debuggolhatók

Hátrányai:
-- drága
- kevés DIP tokozású változat van, a legtöbb felületszerelt
- nehezen beszerezhető (Magyarországon nem elterjedt)
- a C fordító némelyik Linux alá kissé körülményesen telepíthető (fordítani kell)
- jóval kevesebben használják hobbi célra, nincs annyi információ róla
- 3V-os működés (kezdőknek okozhat kis gondot)

Atmel AVR

Megvásárolható az mscbp.hu-nál vagy a www.hqelektronik.hu-nál.
Előnyei:
++ egyszerűen építhető programozó (a legegyszerűbb párhuzamos portra kapcsolható és pár ellenállásból áll, USB-s programozó is elég egyszerű USBtinyISP)
++ könnyen beszerezhető
++ olcsó
++ sok információ van róla az interneten
+ C és assembly fordítók is vannak: minden Linux disztribúcióban szinte alapból benne van az AVR C fordító
+ DIP tokozású és kevés lábszámű változatok is vannak

Hátrányai:
-- programmemóriában tárolt adatok nehezen hozzáférhetőek*
- MCU frekvencia programozáskor állítható, működés közben nem
- ha az MCU órajel külső kvarcoszcillátorra van állítva, nem is programozható az MCU, amíg nem teszünk rá oszcillátort!
- időzítők kevésbé rugalmasan konfigurálhatók

* A const-ként definiált változók vagy egy egyszerű "string" is a stack-ből foglal értékes bájtokat. Egy külön függvénnyel (pl. pgm_read_byte()) lehet csak a programmemóriából olvasni, emiatt a nagyobb tömbökkel, struktúrákkal dolgozó függvényeknek két változatát is implementálni kell, egyik amelyik RAM-ból másik amelyik programmemóriából dolgozik. További leírás itt.

Konklúzió

Kezdőknek Intel 8051 vagy Atmel AVR alapú mikrovezérlőt javasolok. Elsősorban a szabadon (ingyenesen) beszerezhező, könnyen telepíthető fordítók miatt. (Ugye te sem warezolt C fordítót használsz?)
Persze, ha a cél egy MCU utasításkészletének megismerése és assemblyben programozzuk, akkor bármelyik mikrokontroller megteszi. Ha valaki mikrovezérlő programozásba bele szeretne merülni, egy MCU/CPU architektúráját és utasításkészletét mindenképpen érdemes alaposan megismerni. Legyen az akár Intel 286-os CPU, Zilog Z80, PIC, 8051-es vagy AVR mikrokontroller.