Sunteți pe pagina 1din 11

Cap. 1

1. Introducere

MICROCONTROLERE (generalitati)

In sistemele actuale de automatizare un rol tot mai important il au echipamentele bazate pe microcontrolere, care reduc costul si gabaritul sistemului, extinzind capacitatile functionale si performantele acestuia. Microcontrolerul poate fi definit ca un microsistem specializat, care inglobeaza pe acelasi chip mai multe componente, specifice unui sistem de control automat, cum ar fi: o unitate centrala de prelucrare, memorie ROM, memorie RAM, interfete si circuite de I/O (interfete de comunicatie seriale, timere programabile si contoare de evenimente, logica pentru tratarea intreruperilor), toate unitatile fiind conectate la o magistrala (bus) interna unica. Din punct de vedere istoric, aparitia microcontrolerelor se confunda cu etapa dezvoltarii primelor generatii de procesoare. Initial, majoritatea procesoarelor erau folosite exclusiv ca microcontrolere (in acceptiunea actuala a termenului), in sisteme dedicate aplicatiilor de control al proceselor. Programarea acestor procesoare, pentru rezolvarea unei probleme date, se facea direct in cod masina, setul de instructiuni fiind redus. In prezent, microcontrolerele pot fi definite ca sisteme digitale integrate, cu diferite nivele de complexitate si performante, capabile sa rezolve o gama larga de aplicatii, prin utilizarea resurselor hardware multiple, inglobate in arhitectura si prin folosirea resurselor software reflectate intr-un limbaj de asamblare propriu cu un set de instructiuni bogat. Microcontrolerele actuale de 16 si 32 de biti se apropie prin performantele lor de cele ale microprocesoarelor de uz general.

2. Caracteristici generale ale arhitecturii microcontrolerelor

Definitie: Un microcontroler este un calculator realizat într-un singur cip (circuit integrat). Conţine unitatea centrală de prelucrare (UCP) şi o serie de periferice. În aplicaţiile simple, un echipament poate conţine un singur circuit – care este chiar microcontrolerul.

Un microcontroler modern conţine majoritatea blocurilor prezentate în figura 1.1 (adesea chiar mai multe).

A. Din punct de vedere hardware microcontrolerele au inglobate pe aceeasi capsula diferite elemente functionale

A. Din punct de vedere hardware microcontrolerele au inglobate pe aceeasi capsula diferite elemente functionale care le fac deosebit de utile in aplicatii ce necesita un control automat. Structura unui microcontroler include:

unitatea centrala de prelucrare (Central Processing Unit - CPU) cu o arhitectura

orientata in general pe acumulator (Acumulator - A) sau, in unele cazuri, pe registri. Unitatea

centrala de prelucrare contine o unitate aritmetica si logica (Arithmetical Logic Unit - ALU) care executa operatiile logice si aritmetice si care calculeaza adresele operanzilor din memorie. Registrii speciali ai unitatii centrale sunt: registrul contor de instructiuni (Program Counter - PC), registrul indicator de stiva (Stack Pointer - SP), registrul indicatorilor conditionali (Program Status Word - PSW).

memoria ROM programabila (PROM/EPROM) care contine secventele de

initializare ale microcontrolerului, programul de executie si eventual un sistem de operare.

memoria RAM pentru stocarea datelor care poate avea o organizare speciala sub

forma de bancuri de registri si/sau zona de memorie RAM propriu-zisa si care contine operanzii si variabilele temporare necesare programului de executie.

circuite de intrare/iesire (sau porturile I/O) cu functiuni variate, de la transferul

datelor de la sau catre microcontroler, pina la transferul semnalelor de control in sistem. In functie de procesor, interfetele I/O sunt de tipul:

- Porturi paralele pentru transfer programat I/O

- Interfete de comunicatie seriala (Universal Asynchronous Receiver Transceiver -

UART) care permit comunicatia, de obicei la distanta, cu un dispecer sau calculator central, pe canal telefonic.

- Timere Programabile si Contoare de Evenimente care furnizeaza semnale de control si comanda in sistem si care pot urmari desfasurarea unor evenimente externe microcontrolerului.

Blocul de Control si Sincronizare (Timing) care furnizeaza semnale de comanda

pentru unitatile functionale ale microcontrolerului cum ar fi: semnalele de scriere/citire a

El primeste din

exterior semnalele de initializare (RESET) si de cerere de intreruperi (INT). Acest bloc

contine si unitatea de tratare si control al intreruperilor, dotata, acolo unde sursele de cerere de intrerupere sunt multiple, cu un codor de prioritati (logica pentru arbitrajul intreruperilor).

Generatorul de semnale de ceas care furnizeaza tactul pentru toate blocurile

functionale ale microcontrolerului.

memoriei (RD/WR), semnalele de validare (strobe) pentru memorii, s.a

Magistrala interna (pe 4, 8, 16, 32 sau 64 de biti) la care se conecteaza toate elementele functionale ale microcontrolerului.

Observatii:

-

in cazul arhitecturilor orientate pe registri acumulatorul (A) este inlocuit cu o arie de

registre;

-

UCP contine un registru pentru instructiuni si un decodificator (RI & DI) care

furnizeaza instructiunea decodificata blocului de control al unitatii de executie (UE). La unele microcontrolere exista o coada de instructiuni care face extragerea in avans a instructiunilor din memoria program;

- pentru a preveni autoalimentarea pe intrari a UAL cu date de la iesirea lui (situatie

care se numeste “cursa critica” a circuitului combinational) se prevad pe ambele intrari niste

registre tampon (RT) care fac memorarea temporara a datelor de la intrarile UAL;

- Stiva se poate gasi in memoria RAM sau poate fi o stiva hardware inglobata in

microcontroler, avind mai multe niveluri (ea este realizata cu registre fizice). Avantajul unei stive hardware apare la operatiile de apel si revenire din subrutine, la activitatile de raspuns la cererile de intreruperi. Datorita adresabilitatii simple si rapide a nivelurilor stivei hardware operatiile amintite vor fi executate intr-un timp mai scurt. Principalul dezavantaj al stivei

hardware este limitarea dimensiunii acesteia la cele citeva niveluri (24);

- memoria RAM poate avea o organizare mai speciala sub forma de arie de registre,

ferestre sau pagini de registre de memorie, caz in care adresarea memoriei se face cu o adresa logica translatata in adresa fizica de catre UAL. In general, nu exista un bloc special, dedicat calculului adresei. Adresa este inscrisa de pe magistrala interna in Registrul de Adresare RAM;

- atit memoria RAM, cit si memoria ROM pot fi expandate in exteriorul chip-ului

marind capacitatea de adresare a microcontrolerului. Prin porturile de I/O se face adresarea si transferul datelor cu memoria externa, comenzile de selectie si strobare a chip-urilor externe fiind date de blocul de Control si Sincronizare (Timing);

- toate elementele specializate inglobate in microcontroler (timere, porturi, UART, etc.) pot fi configurate separat prin program; - la elementele constitutive prezentate in cadrul unui microcontroler se mai pot adauga si alte dispozitive “on-chip” cu diferite variante de la o familie de microcontrolerele la alta. Citeva exemple de astfel de dispositive sunt:

timer de urmarire (watchdog timer) - cu rolul de a preveni resetarea

microcontrolerului la aparitia unor depasiri ale altor timere sau de a genera semnalul de resetare la aparitia unor conditii critice aparute in functionare;

circuite generatoare de pulsuri de comanda cu largime variabila programabila (impulsuri PWM pentru comanda convertoarelor de energie);

circuite PLL;

controlere DMA, etc. Alti producatori, pentru a mari performantele si pentru a extinde domeniile de utilizare ale microcontrolerelor, inglobeaza pe acelasi chip circuite de esantionare/memorare (Sample and Hold) si convertoare analog digitale (CAD) obtinind sisteme integrate, perfect adaptatate aplicatiilor de achizitie si prelucare de date.

B. Din punct de vedere software microcontrolerele dispun de un limbaj propriu de asamblare, cu un set de instructiuni bogat, care include principalele tipuri de instructiuni ale unei masini de tip CISC (instructiuni pentru transferul datelor, instructiuni aritmetice, instructiuni logice, instructiuni pentru transferul controlului in program, instructiuni de control). Sunt prevazute in plus tipuri specifice de instructiuni cum ar fi: instructiuni de adresare si configurare a porturilor I/O si a timerelor, instructiuni de comanda si configurare a dispozitivelor de comunicatie seriala, instructiuni boolene (care opereaza la nivel de bit). Dupa cum a fost mentionat anterior, arhitectura hardware a unitatii centrale este orientata in principal pe acumulator, sau, in unele cazuri, pe registri. Daca microcontrolerul este orientat pe acumulator, majoritatea instructiunilor logico-aritmetice si de transfer vor folosi acumulatorul in operatiile respective. In cazul arhitecturii orientate pe registri, instructiunile pot folosi operanzi exclusiv din registrele ariei de registre interne. Programul de executie se inscrie in memoria ROM care din acest motiv este necesar sa fie programabila (de aceea se folosesc memorii PROM sau EPROM). Acest fapt permite considerarea microcontrolerelor ca niste microsisteme dedicate unor aplicatii specifice. Pentru programare exista pachete software care includ emulatoare de microcontrolere, impreuna cu un asamblor, permitind testarea si verificarea programelor inainte de a fi inscrise

in memorie. Sunt disponibile de asemenea si compilatoare de programe scrise in limbaje de nivel inalt (ex.: compilatoare C), biblioteci de functii si de rutine de control predefinite, precum si sisteme de operare. Datorita faptului ca microcontrolerele trebuie sa fie capabile sa coordoneze activitati complexe, care presupun o monitorizare in paralel a evenimentelor din sistem, este necesar ca sistemul de operare sa fie dotat cu facilitati de multitasking in timp real. Ca urmare sistemele de operare dedicate microcontrolerelor au un nucleu care sa implementeze conceptul de multitasking si sa-l faca operabil in timp real. Acest nucleu (kernel) se numeste Real Time Kernel (RTK).

3. Domenii de utilizare ale microcontrolerelor

Principalele domenii de utilizare sunt:

industrie: pentru sistemele de control automat al proceselor tehnologice si

industriale.

transporturi: la activitati de urmarire si control al traficului feroviar, aerian, etc.

meteorologie: la activati de control si monitorizare al factorilor de mediu.

industria auto (“automotive applications”): la contolere de bord, controlere de

injectie, de suspensie, etc.

industria de aparatura medicala: la EKG si EEG portabil.

industria calculatoarelor si produselor electronice de larg consum: controlere de

imprimanta, de afisaj, de hard disc, servoprocesoare pentru CD-player, la scannere, fax-uri,

modem-uri, la instrumente muzicale gen: melotron, suntetizator, la telefoanele mobile, robot telefonic, la casele de marcat electronice.

industria de aparatura casnica: la controlul ambientului incaperilor (lumina,

ventilatie, incalzire), la cuptoarele cu microunde, masini de spalat, etc.

4. Clasificarea microcontrolerelor

Cel mai uzual criteriu de clasificare al microcontrolerelor este lăţimea magistralei de date (nu de instrucţiuni, deoarece uneori sunt diferite). Cea mai mare răspândire o au în prezent microcontrolerele pe 16 biţi. Microcontrolerele pe 4 biţi se folosesc in special la aplicatii de larg consum si cost redus cum ar fi: cuptoare cu microunde, prajitoare, aparate de barbierit electrice, etc. Ele sunt disponibile doar în cantităţi foarte mari (5.000 de bucăţi sau mai mult) şi se folosesc în aplicaţiile casnice cu un necesar minim de putere de calcul.

Microcontrolerele pe 8 biţi sunt oferite în capsule care pornesc de la 8 pini (şi un preţ la magazin de circa 1 dolar) până la modele extrem de puternice, cu peste 200 de pini, oferite la zeci de dolari. Ele sunt utilizate in aplicatii mai complexe cum ar fi: in receptoarele TV, radio auto, in periferice si componente din industria computerelor si la orice aplicatie care necesita un control electronic automat.

Microcontrolerele pe 16 şi 32 de biţi oferă o putere de calcul considerabilă -

există în prezent controlere comparabile cu un microprocesor Pentium, consumând o putere disipată redusă şi având un preţ suficient de mic pentru a echipa console video sau jucării sofisticate. Microcontrolerele pe 16 biti sunt folosite ca driver de disc in industria computerelor, in industria auto, in aplicatii de control industrial, iar cele pe 32 de biti sunt

folosite din ce in ce mai mult in domeniul comunicatiilor in retea la punti si routere de retea, la imprimantele laser si cu jet de cerneala, la jocurile video;

La aceste domenii de utilizare pot fi adaugate aplicatii deosebite cum ar fi: folosirea microcontrolerelor in simularea functiilor altor circuite sau procesoare (folosirea lor ca procesoare digitale de semnal, ca circuite de conversie analog-digitala). De asemenea, pot fi utilizate la implementarea unor algoritmi matematici complecsi (de exemplu, pentru calculcul logaritmic cu precizie ridicata). Firmele producatoare lanseaza pe piata familii de microcontrolere. In cadrul unei familii gasim circuite diferentiate arhitectural, dar pastrind multe elemente comune, cu posibilitatea alegerii unui reprezentant al familiei, functie de cerintele impuse de aplicatie. In acest fel se extinde domeniul de aplicatie al microcontrolerelor prin realizarea unor circuite dedicate unor anumite arii de utilizare.

5. Instrumente de dezvoltare software folosite in cazul microcontrolerelor

Programarea microcontrolerelor se realizează de obicei în limbaj de asamblare sau în C (deşi au apărut deja variante de programare în alte limbaje - BASIC fiind un exemplu demn de luat în considerare). Programarea în limbaj de asamblare constă în instrucţiuni (codificate prin mnemonice scurte) şi operanzi corespunzători operaţiilor elementare oferite de controler. Asambloarele sunt oferite de obicei gratis de producătorii controlerelor, pe când compilatoarele C variază de la gratis (când este posibil să fie incomplete sau pline de bug-uri) până la preţuri prohibitive de mii de dolari (cu un număr modest de bug-uri). Până în prezent

nu există medii C similare cu cele de pe PC la capitolul facilităţi, dar tendinţa clară este o apropiere de acestea.

Monitorul (Programul monitor) Programul monitor este o aplicaţie rulată de controler care comunică cu un PC de obicei prin intermediul interfeţei seriale. Capabilităţile unui asemenea program sunt în general reduse. Un program monitor tipic este o aplicaţie DOS sau o aplicaţie care rulează într-o fereastră de tip DOS. Deşi caracteristicile variază de la un program la altul, un monitor poate în general transmite mesaje text şi numere către utilizator, folosind un port serial al microcontrolerului, care nu va mai putea fi utilizat în alte scopuri. De cele mai multe ori este posibilă oprirea execuţiei programului testat şi inspectarea sau chiar modificarea memoriei RAM, respectiv a registrelor. Importanţa şi răspândirea acestui instrument este în continuă scădere, tinzându-se la înlocuirea lui cu medii de programare integrate, dezvoltate sub Windows. Mediul integrat de dezvoltare (IDE - Integrated Development Environment) Aplicaţiile Windows au devenit un standard care înlocuiește vechile programe DOS asociate microcontrolerelor. Mai mult, în prezent un singur mediu integrat oferă posibilitatea:

1. asamblării (uneori şi compilării!);

2. simulării;

3. editării de legături;

4. lucrului cu biblioteci;

5. testării (în mod debugger sau emulator);

6. generării codului obiect final în format hexazecimal sau binar;

7. conectării la programator şi programării circuitului.

Pentru Microchip; mediul integrat se numeşte MPLAB şi este gratuit, iar ultima versiune se poate descărca de la adresa Internet a firmei: www.microchip.com. Asamblorul Asamblorul este programul care prelucrează instrucțiunile scrise într-un limbaj simbolic pentru calculator, traducându-le în coduri ale limbajului mașină. Codul scris în limbaj de asamblare este de obicei mai scurt şi mai performant (ca durată de

execuţie) comparat cu cel elaborat în C. O serie de alte avantaje determină însă tot mai multe companii să aleagă programarea în C (şi în viitorul apropiat probabil în Visual C!):

• uşurinţa elaborării codului sursă;

• reutilizarea codului prin portarea extrem de simplă pe alte platforme;

• standardizarea uşoară;

• posibilitatea elaborării şi managementului unor programe laborioase şi a unor structuri de date dinamice greu sau imposibil de obţinut în asamblare;

• eliberarea uşoară a memoriei RAM nefolosite pentru alte variabile.

În urma asamblării se poate genera:

• un cod absolut, la adresele fixe stabilite de utilizator;

• un cod relocabil, la care adresele sunt în principiu alocate de editorul de legături.

Deşi asambloarele au o sarcină relativ simplă, nu există un standard ANSI pentru ele, de aceea sintaxa variază de la un asamblor la altul. În plus limbajul de asamblare este specific fiecărei familii de microcontrolere. Un asamblor puternic oferă capabilităţi de macroinstrucțiuni imbricate (adică grup de instrucțiuni suprapuse) cu etichete locale, bucle imbricate de

asamblare condiţionată şi mesaje de eroare clare şi explicite. Pentru Microchip, asamblorul oferit se numeşte MPASMWIN, face parte din pachetul MPLAB şi este gratuit.

Simulatorul Simulatorul este un instrument software care câştigă tot mai mult teren datorită creşterii performanţelor şi a costului scăzut sau nul. După cum îi sugerează numele, acesta este un program care simulează comportarea microcontrolerului pe un PC, permiţând rularea pas cu pas, examinarea şi/sau modificarea registrelor, a memoriei, etc. Simulatoarele performante oferă facilităţi suplimentare, cum ar fi:

• simulare asincronă;

• fişiere de stimuli care permit modificări controlate pentru I/O;

• simulare de periferice complexe: timere, PWM, CAD, etc.

• simularea evenimentelor complexe: întreruperi, WDT, etc.

Cu toate că reprezintă un instrument deosebit de valoros de dezvoltare şi testare, simulatoarele nu pot rezolva o serie de probleme legate de comportarea în timp real a controlerului. Nici un

simulator nu se apropie măcar de viteza de operare a controlerului simulat. Pentru Microchip, simulatorul se numeşte MPSIM, face parte din pachetul MPLAB şi este gratuit. Este evident că pentru funcţionare, simulatorul nu are nevoie de nici un fel de hardware.

EXEMPLU: Simulatorul Proteus Deşi părea greu de crezut, realizatorii pachetului Proteus au reuşit performanţa remarcabilă de

a simula funcţionarea hardware a unui procesor într-un mediu tipic de circuite electronice. Cu

o interfaţă grafică intuitivă (dar cu butoanele de mouse inversate) se pot simula o serie de familii de procesoare (Intel 8031 şi o serie de derivate, Motorola 68000, Zilog Z80 şi

perifericele sale, Intel 8255, controlere din familia AVR Atmel, Motorola HC11, Microchip PIC12C508, PIC16F84A, PIC16F877 şi multe altele). Sunt oferite facilităţi de animaţie, simulări analogice Spice, simulări digitale dar mai ales

posibilitatea încărcării codului compilat în procesor, rularea pas cu pas, inspectarea registrelor.

în

anumite situaţii este posibilă chiar verificarea codului sursă scris în limbaj de asamblare sau

C.

Pentru scopuri didactice şi dezvoltarea de proiecte mici-medii nu există o variantă mai bună (poate mai ieftină). Generatorul de fişier executabil în final, mediul software trebuie să producă un fişier care se va încărca în memoria program a controlerului (într-un EPROM extern sau intern - în

memoria FLASH). Cele mai uzuale formate pentru aceste fişiere sunt Intel hexa (.nex),

Motorola S19 (.s19) şi binar. Există o serie de utilitare gratuite de conversie între aceste

formate.

Editorul de legături concatenează diversele module rezultate în urma asamblării și alocă adrese pentru aceste module, dar şi pentru variabile din memoria RAM. Editarea de legături permite între altele lucrul în echipă, reutilizarea codului, facilităţi care se aplică în cadrul proiectelor de dimensiuni mari. Pentru Microchip, editorul de legături se numeşte MPLINK, face parte din pachetul MPLAB şi este gratuit.

Lucrul cu biblioteci (Bibliotecarul)

O dată testate, diferitele subrutine asamblate/compilate pot fi „colecţionate" în biblioteci.

Această funcţie este îndeplinită de un program specializat, numit bibliotecar. Pentru Microchip, bibliotecarul se numeşte MPLIB, face parte din pachetul MPLAB şi este gratuit.

6. Instrumente de dezvoltare hardware folosite in cazul microcontrolerelor

Debugger-ul Debugger-ul este un instrument hardware asistat de un software corespunzător prin care se testează în anumite limite funcţionarea aplicaţiei dezvoltate. Debugger-ul foloseşte chiar microcontrolerul din aplicaţie pentru rulare pas cu pas, interogare de registre, afişare de stări, etc. De cele mai multe ori facilitatea de debugg este combinată cu cea de programare (care se realizează uzual serial pe 2-4 fire). În concluzie, cu preţul a câtorva

locaţii folosite din memoria RAM şi câteva zeci din cea ROM, a 2-4 pini folosiţi pentru comunicare, se poate executa un program în regim pas cu pas, se pot seta puncte de întrerupere, se pot vizualiza şi modifica registrele procesorului, etc. În acest mod se poate verifica funcţionarea aplicaţiei foarte aproape de situaţia reală şi se pot corecta o serie de greşeli care au scăpat simulării. Nu se pot totuşi depista corelaţiile din timp real (comunicaţia cu debugger-ul consumă timp). Un debugger reprezintă o alegere corectă pentru o firmă mică, care nu-şi poate permite un emulator.

Emulatorul Un emulator este un instrument hardware asistat de un software corespunzător care permite explorarea totală a controlerului şi rularea pas cu pas a programului. Un emulator este un echipament extern care comunică cu PC-ul prin interfaţa serială sau paralelă, şi este ataşat prin intermediul unui dispozitiv conectat în locul microcontrolerului emulat; acest ansamblu se comportă identic cu microcontrolerul emulat. Emulatorul va fi întotdeauna un circuit în timp real (la fel de rapid ca procesorul martor) şi oferă toate facilităţile acestuia. Altfel spus, el se conectează în locul microcontrolerului în sistemul pentru care se dezvoltă aplicația, permițând un control total al sistemului țintă, în timp real, fără a folosi nimic din resursele acestuia. Emulatoarele sunt specifice fiecărei familii de controlere. Emulatoarele sunt extrem de scumpe, de la 2.000 USD la 20.000 USD. Au apărut pe piaţă o serie de echipamente ieftine, sub 1.000 USD, denumite comercial "emulatoare", care sunt debuggere mai mult sau mai puţin performante - acestea vor folosi o parte din resursele procesorului martor (unele locaţii RAM, memorie RAM şi minim două linii I/O). Asemenea echipamente nu pot funcţiona în timp real şi nu pot testa integral comportarea microcontrolerului emulat în circuit. Chiar un emulator "cinstit" (corect) diferă ca şi caracteristici electrice de controlerele emulate (curenţi de intrare/ieşire, temporizări), iar de cele mai multe ori nu pot opera la tensiuni şi frecvenţe de tact reduse.

de intrare / ieşire, temporizări), iar de cele mai multe ori nu pot opera la tensiuni
Programatorul După asamblarea şi / sau compilarea codului sursă, fişierul hexa zecimal generat trebuie

Programatorul După asamblarea şi/sau compilarea codului sursă, fişierul hexazecimal generat trebuie "introdus" în microcontroler. Acest lucru se poate realiza:

1. prin intermediul unui programator de memorii EPROM în cazul variantelor de controlere fără memorie program. Circuitul EPROM astfel programat se va introduce într-un soclu pe placa microsistemului. Orice reprogramare a memoriei presupune o ştergere prin expunerea memoriei EPROM la radiaţii ultraviolete timp de circa 30 de minute şi apoi reprogramarea în programator. 2. prin intermediul unui emulator de EPROM, realizat de obicei cu ajutorul unei memorii SRAM. Emulatorul se conectează la soclul memoriei EPROM şi se comportă ca o memorie EPROM, păcălind microsistemul că ar fi o memorie EPROM. Reprogramarea este extrem de rapidă în acest caz, emulatorul fiind legat de obicei la un PC prin intermediul portului paralel sau mai rar serial. Din păcate un emulator de EPROM este o piesă relativ costisitoare iar dezvoltarea soluţiilor FLASH a făcut această opţiune mai puţin atractivă. 3. pentru variantele OTP şi FLASH, utilizarea unui programator specific familiei de controlere este obligatorie, deoarece specificaţiile de programare pentru fiecare tip de controlere sunt clare şi publice, pe Internet se găsesc o serie de scheme de programatoare simple şi uşor de construit. Asemenea programatoare se conectează la PC cel mai adesea pe portul paralel, dar şi portul serial este uneori folosit. Un microcontroler FLASH cu un programator simplu (de pe Internet) şi un mediu IDE gratuit reprezintă cu siguranţă cea mai ieftină combinaţie prin intermediul căreia se poate dezvolta un proiect cu microcontroler astăzi.

cea mai ieftină combinaţie prin intermediul căreia se poate dezvolta un proiect cu microcontroler astăzi. 11