Implementarea Unui Simulator Pentru Microcontroler Didactic

Implementarea unui simulator pentru mictrocontroler didactic :

Un simulator este un program care rulează programul microcontrolerului, presupune implementarea unui microcontroler virtual care folosește un sistem de calcul gazdă cum ar fi un PC. Programul poate executa pas cu pas conținutul variabilelor și registrelor și poate fi vizualizat și modificat . Punctul de plecare al simulatorului este atunci când se abordează microcontrolerul virtual pentru familializarea cu resursele lui și cu limbajul de asamblare. Simulatorul conține 16 linii de adresă unde se pot introduce comenzi de unde sunt preluate mai departe în registrii, informațiile fiind stocate în ROM.

Instrucțiuni pentru transferul de date:

Transferuri generale:

MOV -efectueazăun transfer pe bit sau pe octet de la sursăla destinație.

PUSH -incrementeazăregistrul SP (Stack Pointer) și transferăun octet de la sursăla locația din stivăadresatăde SP.

POP -transferăun operand pe un octet de la locația din stivăadresatăde SP la destinație și decrementeazăSP.

Transferuri specifice acumulatorului:

XCH -mutăoctetul din sursăîn acumulator.

XCHD -mutăbiții LOW din octetul din sursăîn acumulator.

MOVX -mutăun octet între memoria externăde date și acumulator. Adresa memoriei de date externăpoate fi specificată în registrul dublu DPTR.

MOVC -se citește un octet din memoria externăde program în acumulator.

Transferuri de adrese:

MOV DPTR, #data, încarcăimediat 16 biți de date în registrul dublu DPTR

Instrucțiuni aritmetice:

Adunare:

INC -adunăoperandul cu 1 și pune rezultatul ca nou operand.

ADD – adunăacumulatorul cu operandul sursăși pune rezultatul în A.

ADDC – adunare ca la ADD dar se adunăși bitul CY (Carry) din PSW.

DA -ajustare zecimală, corecteazăsuma care rezultădin adunarea a doi operanzi zecimali cu maxim 2 cifre.

Scădere:

SUBB -scădere cu împrumut, scade operandul din acumulator, apoi scade CY și pune rezultatul în A.

DEC -scade 1 din operand și pune rezultatul ca nou operand.

Înmulțire:

MUL -executăo înmulțire fărăsemn între acumulator și registrul B, rezultatul obținut fiind pe 2 octeți (octetul cel mai semnificativ se pune în B). Dacătoți biții din octetul cel mai semnificativ al rezultatului sunt 0 bitul OV și CY din PSW se pun la 0.

Împărțire:

DIV -executăîmpărțirea fărăsemn a conținutului registrului A la conținutul registrului B. Partea întreagă a rezultatului se pune în A, iar partea fracționară în B.

Instrucțiuni de control:

Apeluri și salturi necondiționate:

ACAL – este o instrucțiune pe 2 octeți de apelare a unui subprogram care se folosește atunci când adresa de salt este cuprinsăîn 2K ai paginii curente.

Câmpul de adresăde 11 biți este concatenat cu cei mai semnificativi 5 biți din PC.

LCALL-este o instrucțiune pe trei octeți de apelare a unui subprogram care adresează toți cei 64K ai memoriei.

RET –transferă controlul la adresa de întoarcere care a fost în prealabil salvatăîn stivăși decrementează registrul SP cu 2.

AJMP -este un salt necondiționat la adresa specificată analog cu ACALL.

LJMP – este un salt necondiționat la adresa specificatăanalog cu LCALL.

SJMP – este un salt necondiționat scurt în cadrul a 256 de octeți.

Salturi condiționate:

JZ -executăsalt dacăacumulatorul este 0.

JNZ -executăsalt dacăacumulatorul nu este 0.

JC -executăsalt dacăbitul de CY (Carry) este 1.

JNC –execută salt dacăbitul de CY este 0.

JB –execută salt dacăbitul adresat este 1.

JNB –execută salt dacăbitul adresat este 0.

JBC –execută salt dacăbitul adresat este 1 și apoi șterge bitul adresat.

CJNE –compară primul operand cu al doilea operand și face salt dacă aceștia nu sunt egali.

DJNZ -decrementeazăoperandul sursăși pune rezultatul în operandul destinație. Dacă rezultatul nu este 0 se execută salt.

Întreruperi:

RETI -ca și RET, dar activează întreruperile.

Pentru citirea și executarea comenzilor simulatorul folosește citirea liniilor caracter cu caracter.

Analiza lexicală

Analiza lexicală își impune să transforme programul sursă interpretat ca o succesiune de caractere, într-o succesiune de simboluri care au semnificație semantică .

Aceste simboluri împreună cu codificarea lor își formează limbajul intermediar generat de analizorul lexical .

În momentul în care o secvență de caractere este identificată ca un simbol de bază analizorul lexical va crea un atom lexical care o va descrie și va trece într-o nouă stare .

Construirea unui analizor lexical presupune parcurgerea următoarelor etape :

Stabilirea simbolurilor de bază, partiționarea gramaticii limbajului și determinarea gramaticilor aferente simbolurilor de bază pentru limbajul sursă ;

Stabilirea modului de recunoaștere, extragere și reprezentare a simbolurilor de bază;

Stabilirea modului de tratare a erorilor ;

Proiectarea automatului finit pentru fiecare simbol de bază și a traducătorului cu stări finite

Implementarea analizorului lexical

Primele 4 etape sunt de fapt proiectarea analizorului lexical.

De obicei simbolurile de bază sunt descrise de un set de gramatici regulate sau expresii regulate .

Sarcina unui analizor este să extragă comenzile caracter cu caracter din textul de intrare și să fie salvate într-un atom lexical într-un automat și la sfarșitul comenzii să o execute.

Automatul finit rezolvă doar parțial problema analizei lexicale, pentru a mări eficiența analizorului lexical se va folosi din mulțimea de automatelor care acceptă limbajul dat, automatul cu cele mai puține stări finite.

Pentru a obține clasificarea simbolurilor de bază vom împărți stările finale ale automatului în clase.

O clasă asigură fie o clasificare directă, fie indică faptul că clasificarea se obține prin operația de identificare a unui nume. Reprezentarea constantelor și a șirurilor utilizată pentru a interoga tabela de simboluri este obținută din șirul de intrare. Pe cale de consecință automatul este extins la un traducător cu stări finite care emite care emite un caracter la fiecare tranzacție de stare. Caracterele de ieșire sunt colectate împreună într-un șir de caractere care formează apariția atomului lexical.

Programe utilizate pentru realizarea proiectului de licență :

Visual Studio

Aplicația Visual Studio.NET, produsă de compania Microsoft este un mediu de dezvoltare folosit pentru crearea de aplicații în limbajele de programare: Visual Basic, C#, C++ si/sau J# (începând cu versiunea 2005). Tehnologia .NET se referă, în primul rând la:

-limbajele de programare .NET cum ar fi: Visual Basic.NET, Visual C#.NET.

-mediul de dezvoltare Visual Studio.NET, folosit pentru crearea programelor în limbajele din familia .NET.

-.NET Framework, care este o bibliotecă uriașăde clase și cod folosiă la momentul execuției aplicațiilor. Fișierele acestei biblioteci trebuie să

se găsească neapărat pe sistem pentru ca un program compilat în .NET sa poatărula. Cu alte cuvinte, .NET Framework este o bibliotecă de cod care oferă instrumente pentru crearea de aplicații destinate sa ruleze sub Windows și pe WEB. Ea se aseamănădin multe puncte de vedere cu mașina virtualăJava, care este necesară pentru a rula programe scrise în Java.

Visual Studio.NET dispune de un editor complex de cod, care se folosește pentru crearea, modificarea și depanarea codului aplicației (poate fi vorba de cod Visual Basic.NET, VisualC#.NET etc.). De asemenea, oferăun set de obiecte și instrumente cu ajutorul cărora se pot realiza cu ușurință interfețe cu utilizatorul pentru Windows, Web, servicii WEBetc. O facilitate a editorului de cod din pachetul Microsoft Visual Studio, foarte utilă programatorilor, este „IntelliSense”. Aceasta implementează autocompletarea codului scris de programator (prin combinația de taste CTRL+Spațiu, sau în diverse momente ale scrierii codului sursă), servind de asemenea ca documentație pentru numele variabilelor, funcțiilor, metodelor etc. (vezi Figura 1).

figura 1 – IntelliSense

Mediul de dezvoltare Visual Studio permite :

-implementarea de aplicații software utilizând limbajele Visual Basic, C#, C++ și/sau J#.

-dezvoltarea de aplicații Web, aplicații Windows și aplicații pentru dispozitive mobile din același mediu de dezvoltare.

-crearea de aplicații client/server utilizând servicii Web și instrumente integrate de design pentru accesarea datelor de la distanță.

Continuare

http://www.aut.upt.ro/~rraul/MTP/2008-2009/Laborator1_MTP.pdf

Noțiuni C#

Numele limbajului C# a fost inspirat din notația ♯ (diez) din muzică, care indică faptul că nota muzicală urmată de ♯ este mai înaltă cu un semiton. Este o similitudine cu numele limbajului C++, unde ++ reprezintă atât incrementarea unei variabile cu valoarea 1, dar și faptul că C++ este mai mult decât limbajul C.

Limbajul C# a fost dezvoltat în cadrul Microsoft. Principalii creatori ai limbajului sunt Anders Hejlsberg, Scott Wiltamuth și Peter Golde. Prima implementare C# larg distribuită a fost lansată de către Microsoft ca parte a inițiativei .NET în iulie 2000. Din acel moment, se poate vorbi despre o evoluție spectaculoasă. Mii de programatori de C, C++ și Java, au migrat cu ușurință spre C#, grație asemănării acestor limbaje, dar mai ales calităților noului limbaj. La acest moment, C# și-a câștigat și atrage în continuare numeroși adepți, devenind unul dintre cele mai utilizate limbaje din lume.

Creatorii C# au intenționat să înzestreze limbajul cu mai multe facilități. Succesul de care se bucură în prezent, confirmă calitățile sale:

Este un limbaj de programare simplu, modern, de utilitate generală, cu productivitate mare în programare. Este un limbaj orientat pe obiecte. ƒ Permite dezvoltarea de aplicații industriale robuste, durabile. ƒ Oferă suport complet pentru dezvoltarea de componente software, foarte necesare de pildă în medii distribuite. De altfel, se poate caracteriza C# ca fiind nu numai orientat pe obiect, ci și orientat spre componente.

La aceste caracteristici generale se adaugă și alte trăsături, cum este de pildă suportul pentru internaționalizare, adică posibilitatea de a scrie aplicații care pot fi adaptate cu ușurință pentru a fi utilizate în diferite regiuni ale lumii unde se vorbesc limbi diferite, fără să fie necesare pentru aceasta schimbări în arhitectura software. În strânsă legatură cu Arhitectura .NET (.NET Framework) pe care funcționează, C# gestionează în mod automat memoria utilizată. Eliberarea memoriei ocupate (garbage collection) de către obiectele care nu mai sunt necesare aplicației, este o facilitate importantă a limbajului. Programatorii nu mai trebuie să decidă singuri, așa cum o fac de pildă în C++, care este locul și momentul în care obiectele trebuie distruse.

În C# se scriu de asemenea aplicații pentru sisteme complexe care funcționează sub o mare varietate de sisteme de operare, cât și pentru sisteme dedicate (embeded systems). Acestea din urmă se întind pe o arie largă, de la dispozitive portabile cum ar fi ceasuri digitale, telefoane mobile, MP3 playere, până la dispozitive staționare ca semafoare de trafic, sau controlere pentru automatizarea producției.

Din punct de vedere sintactic C# derivă din limbajul C++, dar include și influențe din alte limbaje, mai ales Java.

.NET Framework

Arhitectura .NET este o componentă software care oferă un mediu de programare și de execuție a aplicațiilor pentru sistemele de operare Microsoft. Este inclusă în sistemele de operare Windows Server 2008 și Windows Vista și poate fi instalată pe Windows XP și Windows Server 2003. .NET Framework este un mediu care permite dezvoltarea și rularea aplicațiilor și a serviciilor Web, independente de platformă. Limbajul C# se află într-o strânsă legatură cu arhitectura .NET. Inițial, C# a fost dezvoltat de către Microsoft pentru crearea codului platformei .Net, la fel cum destinația inițială a limbajului C a fost aceea de a implementa sistemul de operare UNIX. .NET pune la dispoziție o colecție impresionantă de clase organizate în biblioteci, pe care C# le utilizează.

Este momentul să precizăm că C# funcționează având .NET ca infrastructură, dar .NET suportă și alte limbaje, cum este C++, Visual Basic sau Java. În oricare dintre aceste limbaje programați, aveți la dispoziție aceleași biblioteci de clase. .NET se realizează în acest fel interoperabilitatea limbajelor. .NET este constituit din două entități importante: ƒ

Common Language Runtime (CLR) Acesta este mediul de execuție al programelor. Este modulul care se ocupă cu managementul și execuția codului scris în limbaje specifice .NET. CLR furnizează de asemenea servicii importante, cum sunt securitatea aplicațiilor, portabilitatea acestora, managementul memoriei și tratarea excepțiilor.

Base Class Library : Este vorba despre Biblioteca de Clase .NET. Această bibliotecă acoperă o arie largă a necesităților de programare, incluzând interfața cu utilizatorul, conectarea cu bazele de date și accesarea datelor, dezvoltarea aplicațiilor web, comunicarea în rețele și altele. Codul bibliotecii este precompilat, fiind încapsulat de regulă în funcții, numite metode, pe care programatorul le poate apela din propriul program. La rândul lor, metodele aparțin claselor, iar clasele sunt organizate și separate între ele cu ajutorul spațiilor de nume (namespaces). Despre toate aceste noțiuni vom vorbi pe larg în capitolele următoare. Ceea ce trebuie reținut pentru moment, este că programatorii combină propriul cod cu codul Bibliotecii de Clase .NET pentru producerea de aplicații.

.NET Framework este o componentă livrată împreună cu sistemul de operare Windows. Pentru a dezvolta aplicații pe platforma .NET este bine sa avem 3 componente esențiale:

un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl, Fortran, Cobol, Lisp, Pascal etc),

un set de medii de dezvoltare (Visual Studio .NET, Visio),

și o bibliotecă de clase pentru crearea serviciilor Web, aplicațiilor Web și aplicațiilor desktop Windows.

Când dezvoltăm aplicații .NET, putem utiliza:

servere specializate – un set de servere Enterprise .NET (din familia SQL Server 2008, Exchange 2000 etc.), care pun la dispoziție funcții de stocare a bazelor de date, email, aplicații B2B (Bussiness to Bussiness – comerț electronic între partenerii unei afaceri).

servicii Web (în special comerciale), utile în aplicații care necesită identificarea utilizatorilor (de exemplu, .NET Passport – un mod de autentificare folosind un singur nume și o parolă pentru toate site-urile vizitate)

servicii incluse pentru dispozitive non-PC (Pocket PC Phone Edition, Smartphone, Tablet PC, Smart Display, XBox, set-top boxes, etc.)

Componenta .NET Framework, ajunsa astăzi la versiunea 4.0 SP1 stă la baza tehnologiei .NET, este ultima interfață între aplicațiile .NET și sistemul de operare și actualmente conține:

limbajele C#, VB.NET, C++ si, odată cu versiunea 2010, introduce noul limbaj F#. Pentru a fi integrate în platforma .NET toate aceste limbaje respectă niște specificații OOP numite Common Type System (CTS). Ele au ca elemente de bază: clase, interfețe, delegări, tipuri valoare și referință, iar ca mecanisme: moștenire, polimorfism și tratarea excepțiilor.

Platforma comună de executare a programelor numită Common Language Runtime (CLR), utilizată de toate cele 4 limbaje. CTS face parte din CLR. Ansamblul de biblioteci necesare în realizarea aplicațiilor desktop sau Web numit Framework Class Library (FCL) .

Componenta .NET Framework este formată din compilatoare, biblioteci și alte executabile utile în rularea aplicațiilor .NET

Fig. 1.1 Arhitectura .NET Framework [6] 6. Herbert Schildt – C#, Ed. Teora, 2009

Relatia dintre C# si arhitectura .NET

C# are o legatura deosebita cu mediul sau de rulare, arhitectura .NET. Pe de o parte, C# a fost dezvoltat pentru crearea codului pentru arhitectura .NET, iar pe de alta parte bibliotecile utilizate de C# sunt cele ale arhitecturii .NET. Ce este arhitectura .NET ? Arhitectura .NET defineste un mediu de programare care permite dezvoltarea si executia aplicatiilor indiferent de platforma. Aceasta permite programarea in limbaj mixt si ofera facilitati de securitate si portabilitate a programelor. Este disponibila deocamdata pentru platformele Windows. Legat de C#, arhitectura .NET defineste doua entitati importante si anume biblioteca de clase .NET si motorul comun de programare sau Common Language Runtime (CLR). C# nu are o biblioteca de clase proprie ci utilizeaza direct biblioteca de clase .NET. De exemplu, cand se ruleaza un program care efectueaza operatii de intrare-iesire, cum ar fi afisarea unui text pe ecran, se utilizeaza biblioteca de clase .NET. Motorul comun de programare (CLR) se ocupa de executia programelor C#. El asigura de asemenea programarea in limbaj mixt, securitatea si portabilitatea programelor. Atunci cand este compilat un program C#, sau un program in limbaj mixt, rezultatul compilarii nu este un cod executabil. In locul acestuia, se produce un fisier care contine un tip de pseudocod numit limbaj intermediar sau pe scurt IL (Intermediate Language). Acest fisier IL poate fi copiat in orice calculator care dispune de .NET CLR. Prin intermediul unui compilator denumit JIT (Just In Time), motorul comun de pogramare transforma codul intermediar in cod executabil. Procesul de conversie decurge astfel: atunci cand un program .NET este executat, CLR activeaza compilatorul JIT. Compilatorul JIT converteste IL in cod executabil pe masura ce fiecare parte a programului este neceasra. In concluzie, orice program compilat pana in format IL poate rula in orice mediu pentru care CLR este implementat. In acest fel arhitectura .NET asigura portabilitatea.

Exista doua moduri de a edita, compila si rula un program in C#. In primul rand se poate utiliza compilatorul linie de comanda csc.exe. A doua posibilitate este de a utiliza utilizati mediul Visual Studio .NET. In primul caz trebuie parcursi urmatorii pasi: introduceti textul programului cu ajutorul unui editor de texte si salvati fisierul utilizand extensia cs, spre exemplu Example1.cs; apoi compilati programul precizand numele fisierului in linia de comanda (C:\>csc Example1.cs); in final rulati programul in linia de comanda (C:\>Example). In cel de-al doilea caz creati un nou proiect C# selectand: File|New|Project, apoi Visual C# Projects|Empty Project. Dupa ce ati creat proiectul, executati click dreapta pe fereastra Solution. Utilizand meniul aparut selectati Add apoi Add New Item | Local Project Items| C# Code File. Introduceti textul, salvati proiectul, compilati proiectul selectand Build si in fine rulati programul selectand Start Without Debugging din meniul Debug.

Principalele caracteristici ale arhitecturii .NET

Independența de procesor și de platformă Codul CIL este independent de sistemul de operare și de procesor. De aceea, în scrierea aplicațiilor nu trebuie să fiți preocupați de caracteristicile hardware sau software ale sistemului. Spre surpriza multor programatori, aplicațiile .NET pot fi dezvoltate și executate pe sisteme de operare non-Microsoft, (Mac OS X, numeroase distribuții Linux și Solaris, ca să numim numai câteva). Managementul automat al memoriei Alocara și eliberarea memoriei nu mai este o problemă care trebuie să-i preocupe pe programatori, datorită mecanismului automat de garbage collection. Interoperabilitatea limbajelor Este un fapt comun ca diversele componente ale unei aplicații să fie scrise în limbaje diferite, suportate de către platforma .NET. Securitate .NET furnizează un model comun de securitate, valabil pentru toate aplicațiile, care include un mecanism unificat de tratare a excepțiilor . O excepție este un eveniment neprevăzut, care întrerupe execuția unui program, atunci când de pildă, se execută o intrucțiune ilegală. Portabilitate Un program scris pentru platforma .NET poate rula fără nici o modificare pe oricare sistem pe care platforma este instalată. (1)

Caracteristicilor de mai sus li se adaugă și altele, care ies însă din cadrul acestei lucrări

Autori : Constantin Gălățan, Susan Gălățan : Programare în Visual C# 2008 Express Edition

. Argumente pentru .NET

În primul rând pentru că oferă instrumente pe care le putem folosi și în alte programe, oferă acces ușor la baze de date, permite realizarea desenelor sau a altor elemente grafice. Spațiul de nume System.Windows.Forms conține instrumente (controale) ce permit implementarea elementelor interfeței grafice cu utilizatorul. Folosind aceste controale, se pot proiecta și dezvolta rapid și interactiv, elementele interfeței grafice. Tot .NET oferă clase care efectuează majoritatea sarcinilor uzuale cu care se confruntă programele și care plictisesc și fură timpul programatorilor, reducând astfel timpul necesar dezvoltării aplicațiilor.

Microsoft Visual Studio este un mediu de dezvoltare integrat (IDE) de la Microsoft. Acesta poate fi utilizat pentru a construi aplicații consolă, interfața grafică, aplicații de tip Windows Forms, site-uri web, aplicații web, servicii web ce sunt suportate platformele: Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework și Microsoft Silverlight.

Microcontroller (Definiție)

La modul general un controler ("controller" – un termen de origine anglo-saxonă, cu un domeniu de cuprindere foarte larg) este, actualmente, o structură electronică destinată controlului (destul de evident!) unui proces sau, mai general, unei interacțiuni caracteristice cu mediul exterior, fără să fie necesară intervenția operatorului uman. Primele controlere au fost realizate în tehnologii pur analogice, folosind componente electronice discrete și/sau componente electromecanice (de exemplu relee). Cele care fac apel la tehnica numerică modernă au fost realizate inițial pe baza logicii cablate (cu circuite integrate numerice standard SSI și MSI ) și a unei electronici analogice uneori complexe, motiv pentru care "străluceau" prin dimensiuni mari, consum energetic pe măsură și, nu de puține ori, o fiabilitate care lăsa de dorit. Apariția și utilizarea microprocesoarelor de uz general a dus la o reducere consistentă a costurilor, dimensiunilor, consumului și o îmbunătățire a fiabilității. Există și la ora actuală o serie de astfel de controlere de calitate, realizate în jurul unor microprocesoare de uz general cum ar fi Z80 (Zilog), 8086/8088 (Intel), 6809 (Motorola), etc. Pe măsură ce procesul de miniaturizare a continuat, a fost posibil ca majoritatea componentelor necesare realizării unei astfel de structuri să fie încorporate (integrate) la nivelul unui singur microcircuit (cip). Astfel că un microcontroler ar putea fi descris ca fiind și o soluție (nu în sens exhaustiv !) a problemei controlului cu ajutorul a (aproape) unui singur circuit. Legat de denumiri și acronime utilizate, așa cum un microprocesor de uz general este desemnat prin MPU (MicroProcessor Unit), un microcontroler este, de regulă, desemnat ca MCU, deși semnificația inițială a acestui acronim este MicroComputer Unit. O definiție, cu un sens foarte larg de cuprindere, ar fi aceea că un microcontroler este un microcircuit care incorporează o unitate centrală (CPU) și o memorie împreună cu resurse care-i permit interacțiunea cu mediul exterior. Resursele integrate la nivelul microcircuitului ar trebui să includă, cel puțin, următoarele componente: a. o unitate centrală (CPU), cu un oscilator intern pentru ceasul de sistem b. o memorie locală tip ROM/PROM/EPROM/FLASH și eventual una de tip RAM c. un sistem de întreruperi d. I/O – intrări/ieșiri numerice (de tip port paralel) e. un port serial de tip asincron și/sau sincron, programabil f. un sistem de timere-temporizatoare/numărătoare programabile Este posibil ca la acestea să fie adăugate, la un preț de cost avantajos, caracteristici specifice sarcinii de control care trebuie îndeplinite: g. un sistem de conversie analog numerică(una sau mai multe intrari analogice) h. un sistem de conversie numeric analogic și/sau ieșiri PWM (cu modulare în durată) i. un comparator analogic j. o memorie de date nevolatilă de tip EEPROM k. facilități suplimentare pentru sistemul de temporizare/numărare (captare și comparare) l. un ceas de gardă (timer de tip watchdog) m. facilități pentru optimizarea consumului propriu Un microcontroler tipic mai are, la nivelul unității centrale, facilități de prelucrare a informației la nivel de bit, de acces direct și ușor la intrări/ieșiri și un mecanism de prelucrare a întreruperilor rapid și eficient.

Microcontroller (utilizare)

Utilizarea unui microcontroler constituie o soluție prin care se poate reduce dramatic numărul componentelor electronice precum și costul proiectării și al dezvoltării unui produs. OBSERVAȚIE Utilizarea unui microcontroler, oricât de evoluat, nu elimină unele componente ale interfeței cu mediul exterior (atunci când ele sunt chiar necesare): subsisteme de prelucrare analogică (amplificare, redresare, filtrare, protecție-limitare), elemente pentru realizarea izolării galvanice (optocuploare, transformatoare), elemente de comutație de putere (tranzistoare de putere, relee electromecanice sau statice).

1.2 UNDE SUNT UTILIZATE MICROCONTROLERELE? Toate aplicațiile în care se utilizează microcontrolere fac parte din categoria așa ziselor sisteme încapsulate-integrate (“embedded systems”), la care existența unui sistem de calcul incorporat este (aproape) transparentă pentru utilizator. Pentru ca utilizarea lor este de foarte ori sinonimă cu ideea de control microcontrolerele sunt utilizate masiv în robotică și mecatronică. Conceptul de mecatronică este pană la urmă indisolubil legat de utilizarea microcontrolerelor. Automatizarea procesului de fabricație-producție este un alt mare beneficiar: CNC Computerised Numerical Controls-comenzi numerice pentru mașinile unelte, automate programabile -PLC, linii flexibile de fabricație, etc.). Indiferent de natura procesului automatizat sarcinile specifice pot fi eventual distribuite la un mare număr de microcontrolere integrate într-un sistem unic prin intermediul uneia sau mai multor magistrale. Printre multele domenii unde utilizarea lor este practic un standard industrial se pot menționa: în industria de automobile (controlul aprinderii/motorului, climatizare, diagnoză, sisteme de alarmă, etc.), în așa zisa electronică de consum (sisteme audio, televizoare, camere video și videocasetofoane, telefonie mobilă, GPS-uri, jocuri electronice, etc.), în aparatura electrocasnică (mașini de spălat, frigidere, cuptoare cu microunde, aspiratoare), în controlul mediului și climatizare (sere, locuințe, hale industriale), în industria aerospațială, în mijloacele moderne de măsurare – instrumentație (aparate de măsură, senzori și traductoare inteligente), la realizarea de periferice pentru calculatoare, în medicină. „Johnnie” (figura 1.1) un robot umanoid destul de simplu, construit la Universitatea Tehnică din Munchen în 1998, utilizează 5 microcontrolere, conectate prin intermediul unei magistrale CAN la un calculator PC. „Alpha” un alt robot umanoid (fotbalist ca destinație) dezvoltat la Universitatea din Freiburg utilizează, intr-o variantă a sa, 11 microcontrolere conectate similar. Un număr foarte mare de microcontrolere sunt folosite și de așa zisele jucării inteligente, din care „capetele de serie” cele mai cunoscute sunt cei doi roboți, unul canin și altul umanoid: AIBO (Sony, figura 1.2) și ASIMO (Honda, figura 1.5). ASIMO folosește 26 de microcontrolere numai pentru controlul individual al celor 26 de elemente de acționare inteligente (motoare). Tot în categoria roboților umanoizi intra și QRIO (Sony, figura 1.4) sau HOAP-1 (Fujitsu, figura 1.3). Roboții respectivi sunt produși în serie, unii dintre ei chiar la un preț „accesibil”. Ca un exemplu din industria de automobile (automotive industry), unde numai la nivelul anului 1999, un BMW seria 7 utiliza 65 de microcontrolere, iar un Mercedes din clasa S utiliza 63 de microcontrolere. Practic, deși am prezentat ca exemple concrete numai sisteme robotice și mecatronice, este foarte greu de găsit un domeniu de aplicații în care să nu se utilizeze microcontrolerele.

1.3 CLASIFICĂRI ȘI VARIANTE CONSTRUCTIVE

Există la ora actuală un număr extrem de mare de tipuri constructive de microcontrolere. Un criteriu de clasificare care se poate aplica întotdeauna este lungimea (dimensiunea) cuvântului de date. Funcție de puterea de calcul dorită și de alte caracteristici se pot alege variante având dimensiunea cuvântului de date de 4, 8,16 sau 32 de biți (există chiar și variante de 64 de biți!). Nu este obligatoriu ca dimensiunea cuvântului de date să fie egală cu dimensiunea unui cuvânt mașină (cuvânt program). Există și multe variante zise dedicate, neprogramabile de utilizator la nivel de cod mașină, strict specializate pe o anumită aplicație, prin intermediul codului preprogramat și al resurselor hardware, utilizate pentru comunicații, controlul tastaturilor, controlul aparaturii audio/video, prelucrarea numerică a semnalului, etc.

1.4 TEHNOLOGIILE DE FABRICAȚIE UTILIZATE

Practic, toate microcontrolerele se realizează la ora actuală în tehnologie CMOS (tehnologii similare celor utilizate la seriile standard CMOS de circuite numerice: HC, AC, ALV, etc.). Se pot realiza astfel structuri cu o mare densitate de integrare, cu un consum redus (care va depinde de frecvența de lucru), permițând eventual alimentarea de la baterie. Logica internă este statică (total sau în cea mai mare parte) permițând astfel, în anumite condiții, micșorarea frecvenței de ceas sau chiar oprirea ceasului în ideea optimizării consumului. Tehnologia este caracterizată și de o imunitate mai mare la perturbații, esențială într-un mare număr de aplicații specifice. Se realizează variante pentru domeniu extins al temperaturii de funcționare (de ex.- 40 +85 C). Există foarte multe variante de încapsulare (capsule de plastic și mai rar de ceramică), multe din ele destinate montării pe suprafață (SMD): SOIC, PLCC, PQFP, TQFP (x100pini), etc., dar și variante clasice cu pini tip DIP/DIL (tipic de la 8 la 68 pini). 1.5 CARACTERISTICI ARHITECTURALE ALE UNITĂȚII CENTRALE Arhitectura unității centrale de calcul (CPU) este unul din elementele cele mai importante care trebuie avut în vedere în analiza oricărui sistem de calcul. Principalele concepte luate în considerare și întâlnite aici sunt următoarele:

a. Arhitecturi de tip " von Neumann " Cele mai multe microcontrolere sunt realizate pe baza acestei arhitecturi de sistem. Microcontrolerele bazate pe această arhitectură au o unitate centrală (CPU) caracterizată de existența unui singur spațiu de memorie utilizat pentru memorarea atât a codului instrucțiunilor cât și a datelor ce fac obiectul prelucrării. Există deci o singură magistrală internă (bus) care este folosită pentru preluarea a instrucțiunilor (fetch opcod) și a datelor; efectuarea celor două operații separate, în mod secvențial, are ca efect, cel puțin principial, încetinirea operațiilor. Este arhitectura standard (cea mai des întâlnită) și pentru microprocesoarele de uz general.

b. Arhitecturi de tip " Harvard " La această arhitectură există spații de memorie separate pentru program și date. În consecință ar trebui să existe și magistrale separate (de adrese și date) pentru codul instrucțiunilor și respectiv pentru date. Principial există astfel posibilitatea execuției cvasiparalele (suprapunerii) a celor două operații menționate anterior. Codul unei instrucțiuni poate fi preluat din memorie în timp ce se execută operațiile cu datele aferente instrucțiunii anterioare. Este posibilă (cel puțin teoretic) o execuție mai rapidă, pe seama unei complexitățisporite a microcircuitului, mai ales atunci când există și un pipeline. Este arhitectura standard pentru procesoarele numerice de semnal (DSP). Datorită costului mare al implementării unei astfel de arhitecturi, în cazul microcontrolerelor se întâlnește mai ales o arhitectură Harvard modificată, cu spații de memorie separate pentru program și date, dar cu magistrale comune pentru adrese și date.

c. CISC : Aproape toate microcontrolerele au la baza realizării CPU conceptul CISC (Complex Instruction Set Computer). Aceasta înseamnă un set uzual de peste 80 instrucțiuni, multe din ele foarte puternice și specializate. De obicei multe din aceste instrucțiuni sunt foarte diferite între ele: unele operează numai cu anumite spații de adrese sau registre, altele permit numai anumite moduri de adresare, etc. Pentru programatorul în limbaj de asamblare există unele avantaje prin utilizarea unei singure instrucțiuni complexe în locul mai multor instrucțiuni simple (analog macroinstrucțiunilor clasice dintr-un limbaj de asamblare) .

d. RISC : RISC (Reduced Instruction Set Computer) este un concept de realizare a CPU care a început să fie utilizat cu succes de ceva timp și la realizarea microcontrolerelor. Prin implementarea unui set redus de instrucțiuni care se pot executa foarte rapid și eficient, se obține o reducere a complexității microcircuitului, suprafața disponibilizată putând fi utilizată în alte scopuri. Printre caracteristicile asociate de obicei unui CPU RISC se pot menționa: – arhitectură Harvard modificată sau von Neumann – viteză sporită de execuție prin implementarea unui pipeline pentru instrucțiuni – set de instrucțiuni ortogonal (simetric): orice instrucțiune operează cu orice spațiu de adrese (de memorie) sau orice registru, instrucțiunile nu prezintă combinații speciale, excepții, restricții sau efecte colaterale.

ASPECTE LEGATE DE IMPLEMENTAREA MEMORIEI MICROCONTROLERELOR

În afară de memoria locală de tip RAM, de dimensiuni relativ reduse (de la x10 octeți la x1k), implementată ca atare sau existentă sub forma unui set de registre și destinată memorării datelor (variabilelor), mai există o serie de aspecte specifice, marea majoritate a acestora fiind legată de implementarea fizică a memoriei de program (și eventual a unei părți a memoriei de date) cu ajutorul unor memorii nevolatile. Clasic, memoria de program era implementată într-o variantă de tip ROM: EPROM pentru dezvoltare și producție pe scară mică/medie sau mask-ROM pentru producția de masă. Principalele concepte noi apărute de a lungul timpului în legătură cu implementarea memoriei de program sau date sunt enumerate în continuare: a. OTP – majoritatea producătorilor oferă variante de microcontrolere la care memoria locală de program este de tip OTP (One Time Programmable), practic o memorie PROM identică intern cu varianta EPROM, dar fără fereastra de cuarț pentru ștergere (deci și mai ieftine); aceste variante pot fi utilizate ca o alternativă pentru o producție limitată, până în momentul testării și validării finale a codului, moment în care pot fi comandate variantele (mask) ROM propriu-zise, cele mai economice pentru o producție de masă

b. FLASH EPROM – este o soluție mai bună decât EPROM-ul propriu-zis atunci când este necesar un volum mare de memorie program (nevolatilă); mai rapidă și cu un număr garantat suficient de mare (x10000) de cicluri de programare (de ștergere/scriere), este caracterizată și prin modalități mai flexibile de programare; este utilizată numai ca memorie de program.

c. EEPROM – multe microcontrolere au și o memorie de acest tip, de dimensiune limitată (de la x10 octeți la x K octeți), destinată memorării unui număr limitat de parametrii (memorie de date) care eventual trebuie modificați din timp în timp; este o memorie relativ lentă (la scriere), dar cu un număr de cicluri de ștergere/scriere mai mare ca FLASH-ul (x100000).

d. NOVRAM (RAM nevolatil) – realizat prin alimentarea locală (baterie, acumulator) a unui masiv RAM CMOS atunci când este necesar un volum mare de memorie de program și date nevolatilă; mult mai rapidă decât toate celelalte tipuri și fără limitări ca număr de cicluri.

e. Programarea "In System" (ISP-In System Programming) – folosirea unor memorii nevolatile de tip FLASH face posibilă și "programarea" unui astfel de microcontroler fără a-l scoate din sistemul în care este încorporat (programare on-line, In System Programming); programarea se face de regulă prin intermediul unei interfețe seriale dedicate de tip ISP (poate avea nume diferite) sau a unei interfețe standard JTAG. Există microcontrolere la care această programare se poate face prin intermediul portului serial asincron sau al interfetei CAN (Controller Area Network). Este posibilă astfel modificarea cu ușurință a codului program sau a unor constante de lucru (local sau de la distanță-remote update). Vezi și Bootloader. Un lucru foarte important este că la anumite familii interfața prin intermediul căreia se face programarea poate fi utilizată și la testarea și depanarea aplicației (soft), permițând realizarea simplă, cu un preț de cost minim, a unor mijloace de testare și depanare(emulatoare). De exemplu, în acest caz interfața JTAG este specificată ca fiind JTAG/ICE (In Circuit Emulation) pentru a arăta că poate fi folosită și pentru emularea în circuit.

f. Bootloader – multe din microcontrolerele recente la care memoria de program este de tip FLASH au și facilitatea (au de fapt instrucțiuni dedicate acestui scop) de a putea și scrie în această memorie de program fără a utiliza un circuit de programare extern. Astfel în microcontroler poate exista permanent (rezident) un cod de mici dimensiuni (denumit și bootloader) care pur și simplu va încărca prin intermediul portului serial (este doar un exemplu) codul utilizator sau constantele pe care acesta vrea eventual să le actualizeze. Bootloader-ul este și cel care lansează în execuție programul utilizator după încărcarea acestuia.

g. Protejarea codului – protejarea codului program dintr-o memorie locală nevolatilă împotriva accesului neautorizat (la citire –deoarece pirateria soft există și aici) este oferită ca o opțiune (ea mai trebuie și folosită!) la variantele FLASH, EPROM sau OTP. Codul poate protejat atât la citire cat și la scriere (practic circuitul trebuie șters, înainte de a se mai putea scrie ceva în el). Este eliminată astfel posibilitatea de a se realiza, în acest caz, de patch-uri (alterări cu un anumit scop) ale codului original. La variantele mask-ROM propriu-zis protecția este de cele mai multe ori implicită.

h. Memoria externă de program sau date – Marea majoritate a familiilor de microcontrolere permit si utilizarea de memorie externă de program (tipic ROM) sau date (tipic RAM). Aceasta presupune existenta si utilizarea unor magistrale externe de adrese si date. Conexiunile externe necesare pentru acestea sunt disponibile ca funcții alternative ale pinilor. Din păcate, in această situație numărul de conexiuni exterioare disponibile pentru interfața cu exteriorul se reduce dramatic, reducând mult din versatilitatea microcontrolerului. Mai mult la variantele constructive cu un număr mic de pini (conexiuni externe) nu este posibilă utilizarea de memorie externă, decât, eventual, intr-o variantă cu interfață serială (memorie RAM, FLASH sau EEPROM cu interfață I2C, SPI, etc.) si numai ca memorie de date.

1.6 CONTROLUL PUTERII CONSUMATE ȘI ALIMENTAREA LA TENSIUNI REDUSE

Majoritatea microcontrolerelor pot fi trecute sub control soft în stări speciale cum ar fi: în așteptare (STAND-BY), inactiv ("IDLE") sau oprit ("HALT", "POWER DOWN"), denumirile acestor stări diferind și funcție de fabricant. În aceste moduri starea CPU, conținutul RAM-ului intern, starea I/O-urilor poate fi conservată în condițiile unei tensiuni de alimentare reduse (față de cea nominală) și deci al unui consum mult redus. Flexibilitatea acestui sistem este strans legata de faciltitatile si programabilitatea sistemului de generare a ceasului de lucru (clock system, vezi 1.7). De exemplu, într-un mod de tip "IDLE" toate activitățile sunt oprite cu excepția circuitului oscilatorului local de ceas și, dacă acestea există: circuitul "watchdog" (ceasul de gardă), circuitul de monitorizare a oscilatorului de ceas și eventual un temporizator dedicat ("idle timer"). Puterea consumată este redusă la cca. 30%, iar ieșirea din acest mod se face prin reset (inițializare) sau printr-un stimul exterior (de regulă o întrerupere). Temporizatorul dedicat poate scoate periodic microcontrolerul din această stare, pentru îndeplinirea anumitor sarcini, după care se reintră în starea respectivă. În modul"HALT" toate activitățile sunt oprite, tensiunea de alimentare poate fi coborâtă sub valoarea nominală, fără alterarea stării (CPU, RAM, I/O), puterea consumată fiind minimă. Ieșirea din această stare se face prin reset sau ca urmare a unei cereri de întrerupere. Toate aceste moduri de lucru sunt de regulă valorificate în aplicații în care alimentarea sistemului se face de la o sursă de tip baterie (în funcționarea normală sau numai în anumite situații). Se mai oferă uneori ca facilitate o protecție la scăderea accidentală (în anumite limite) a tensiunii de alimentare ("brownout protection"). La scăderea tensiunii de alimentare sub o anumită limită ("brownout voltage") microcontrolerul este inițializat (resetat) și ținut în această stare atâta timp cât condiția respectivă persistă. Tensiunea de alimentare standard pentru microcontrolere a fost mult timp, din considerente și istorice(vezi TTL-ul), de Vcc = 5V (cu o anumită toleranță ). La ora actuală se oferă, pentru multe din ele, și variante cu tensiune de alimentare redusă (Low Voltage) cu Vcc = 1.8 .. 3.3V, destinate unor aplicații unde consumul este un parametru critic. Există variante cu plajă mare a tensiunii de alimentare, de exemplu Vcc = 2..6V, funcționarea la limita inferioară implicând doar o micșorare a frecvenței maxime de ceas.

1.7 SISTEMUL DE CEAS

Orice microcontroler este caracterizat cel puțin de existența circuitelor electronice aferente oscilatorului care generează ceasul de sistem. Astfel este posibilă implementarea simplă a oscilatorului doar prin adăugarea, în exterior, a unui rezonator extern (cuarț sau piezoceramica) pentru stabilizarea frecventei si eventual a unor capacitori. Dacă stabilitatea si precizia frecvenței nu este o cerință importantă, la anumite microcontrolere se poate utiliza doar un circuit RC extern sau există un circuit RC intern, care determină frecvența de oscilație. Există microcontrolere la care configurația oscilatorului este programabilă prin intermediul unor „fuzibile” FLASH (se programează similar memoriei de program): rezonator extern și tipul acestuia, varianta RC intern sau extern, gama de frecventă, etc. La familiile evoluate de microcontrolere există si circuite de tip PLL (Phase Locked Loop) si/sau FLL (Frequency Locked Loop) care permit multiplicarea cu ușurință a frecvenței de bază (cea a rezonatorului extern). Astfel plecând, de exemplu de la o frecvență de 32.768KHz se pot obține frecvențe de lucru până ordinul MHz. La astfel de microcontrolere sistemul de ceas este programabil prin intermediul unor registre speciale oferind un maxim de flexibilitate în sensul putinței de controla compromisul între puterea consumată și viteza maximă de lucru.

1.8 INTERFAȚA EXTERNĂ (SISTEMUL DE INTRĂRI ȘI IEȘIRI)

Toate microcontrolerele au un număr oarecare de intrări- Inputs / ieșiri numerice- Outputs (de la x1 la x10) organizate sub forma unor porturi I/O; conexiunile exterioare sunt bidirecționale sau unidirecționale, unele sunt multifuncționale (se oferă funcții alternative pe același pin), unele pot avea o capacitate sporită de a absorbi curent (de exemplu pentru comanda directă a unui LED, cu IOL max = – 20mA), etc. În afară de acest set de intrări/ieșiri de uz general, pentru interfața cu mediul exterior se oferă o serie de alte facilități importante de intrare/ieșire cum ar fi:

a. UART (Universal Asynchronous Receiver Transmitter) este un port serial bidirecțional destinat implementării unui protocol clasic de comunicație asincron; USART (Universal Synchronous Asynchronous Receiver Transmitter) este un port similar, dar care permite implementarea și a unui protocol sincron cu obținerea unor viteze mai mari de comunicație; SCI (Serial Communications Interface) este un circuit de tip UART îmbunătățit, definit și utilizate de firma Freescale(Motorola). LIN (Local Interconnect Network) reprezintă o implementare particulară a unui protocol de comunicație asincron, utilizată în industria de automobile ca o alternativă de mică viteză dar cu preț scăzut pentru magistrala și protocolul CAN (vezi mai jos).

b. Porturi seriale sincrone dedicate – sunt destinate transferului serial de date de mare viteză cu unele periferice specializate (sisteme de afișare, convertoare analog-numerice, etc.) sau care permit conectarea într-o rețea de comunicație. Presupun existenta, împreuna cu datele, a unui semnal de ceas (implicit sau explicit) pentru sincronizarea acestora. Implică și implementarea unor protocoale mai mult sau mai puțin complexe de transfer al informației, fiind de fapt vorba de o magistrală serială. Există câteva implementări răspândite (sunt prezentate în ordinea crescătoare a complexității):

– SPI (Serial Peripheral Interface) este un port serial sincron definit de firma Motorola

– Microwire / Microwire Plus este o interfață serială bidirecțională sincronă definită și utilizată de firma National Semiconductors

– I2C (Inter Integrated Circuits bus) este o interfață serială bidirecțională (pe numai 2 fire), dezvoltată de Philips, destinată aplicațiilor de 8 biți. Există și multe circuite "periferice" care sunt prevăzute cu o astfel de interfață. Este cunoscută și sub denumirea TWI (Two Wire Interface)

– CAN (Controller Area Network) proprietate intelectuală a firmei Bosch, foarte utilizat în Europa și Japonia, oarecum similar ca funcționalitate lui SAE J1850 care este utilizat în America de Nord (SAE -Society of Automotive Engineers), este un standard (o magistrală și un protocol) de comunicație serială sincronă utilizat în industria de automobile, permițând interconectarea într-o rețea a diverselor componente inteligente (senzori, elemente de execuție, indicatoare, etc.) omniprezente într-un automobil modern. In ultimul timp magistrala CAN a început să fie utilizată și în alte domenii decât industria de automobile (automatizări industriale, robotică, acționări electrice).

c. Conectivitate Ethernet/Web – implică existența unor resurse care să permită integrarea cu ușurință într-o rețea de tip Ethernet, pentru a face posibilă, în final, implementarea unui protocol TCP/IP (a unei stive TCP/IP). Resursele respective pot fi de natură software (stivă soft) care presupun o viteză de prelucrare (putere de calcul) a CPU suficient de mare pentru a nu afecta vizibil operarea propriu-zisă a controlerului, sau hardware (stivă hardware). Pe baza acestei stive se poate realiza o conectivitate tip HTTP, FTP, STMP, POP3, etc.

d. Conectivitate USB – magistrala serială USB (Universal Serial Bus) a fost creată pentru conectarea cu ușurință a diverselor periferice la un calculator PC (cu rolul de gazdă – host). Conexiunea permite si furnizarea tensiunii de alimentare. Varianta USB 1.1 permite atingerea unei rate de transfer maxime a datelor de 12Mbytes/sec, iar varianta USB 2.0 a unei rate maxime de cca. 480MBytes/sec. La ora actuală există pe piață multe firme care oferă o gamă largă de microcontrolere cu conectivitate USB (majoritatea compatibile USB 1.1), cu un preț de cost minim pentru componentele hardware și software. Exemple în acest sens ar fi firmele: Atmel, Microchip, Intel, Cypress, ST, Infineon, s.a. Majoritatea sunt destinate realizării unor periferice USB si mai puține realizării unui USB host.

e. Conectivitate Wireless- se referă la existența unor resurse hardware si/sau software care să permită integrarea cu ușurință și la un preț de cost avantajos într-o rețea de tip wireless, pentru a face posibilă, în final, implementarea unui protocol (a stivei aferente protocolului). Exemplele cele mai cunoscute de astfel de rețele, protocoale și stive sunt Bluetooth (IEEE 802.15.1) și Zigbee (IEEE 802.15.4).

f. Convertoarele Analog Numerice (CAN, ADC) Convertoarele utilizate fac parte de regulă dintr-un sistem de achiziție de date, existând și un multiplexor analogic cu mai multe canale de intrare. Rezoluția disponibilă este tipic de 8, 10 sau 12 biți, uneori cu precizia (rezoluția adevărată) corespunzătoare unui număr mai mic de biți. In marea majoritate a cazurilor ele sunt realizate pentru mărime de intrare unipolară. Sursa de referință utilizată este internă sau externă. Timpul minim de conversie este în plaja x µsec la x10 µsec. Există microcontrolere care utilizează tehnici de recalibrare (auto-zero, corecție câștig, etc.) pentru mărirea și/sau menținerea preciziei. Tehnicile de conversie cele mai utilizate sunt: aproximații succesive (majoritatea) cu eșantionare implicită (circuit Track-Hold inclus), rampă digitală (mai rar). Există și subsisteme locale care, în cazul în când sunt prezente, pot fi folosite pentru implementarea unor alte tehnici de conversie bazate pe integrare (cu utilizarea unui număr minim de componente exterioare): numărătoare de impulsuri, circuite comparatoare (analogice, standard), intrări de captare (forțează memorarea – "captarea" valorii unui numărător care numără liber, în momentul activării, permițând astfel măsurarea intervalelor de timp sau frecvențelor), etc. OBSERVAȚIE În ultimul timp au apărut și variante de CAN cu rezoluții mari și foarte mari, realizate în tehnica sigma-delta (σ-δ). Realizările respective sunt mai degrabă un CAN cu microcontroler (firma Analog Device oferă un nucleu de microcontroler 8051 plus un CAN sigma-delta cu rezoluții de până la 24 biți !)

g. Convertoarele Numeric Analogice (CNA, DAC) Cea mai răspândită tehnică de conversie numeric analogică folosită este bazată pe modulația în factor de umplere (PWM- Pulse Width Modulation). Există unul sau mai multe canale pe care se poate genera un tren de impulsuri cu factor de umplere programabil (de la 0 la 100%). Factorul de umplere este controlat cu o rezoluție de la 8 biți sau 16 biți. Frecvența trenului de impulsuri este și ea programabilă, în limite largi. La un microcontroler fără un sistem PWM dedicat, în acest scop se poate utiliza, cu o flexibilitate mai scăzută, sistemul de timere/numărătoare și orice ieșire numerică. Printr-o filtrare exterioară relativ simplă, de tip trece jos (FTJ, Low Pass), se poate obține o tensiune de ieșire proporțională cu factorul de umplere. Convertoare numeric analogice propriu-zise sunt mai rar întâlnite.

h. Interfața pentru sisteme de afișare tip LCD (panou LCD) În ultimul timp în familiile de microcontrolere deja consacrate sau în familiile noi au apărut variante care posedă un subsistem destinat conectării directe, cu utilizarea unui număr minim de componente exterioare, unui sistem de afișare (un panou) de tip LCD (cu cristale lichide). Interfața respectivă generează toate semnalele necesare pentru comanda panoului LCD. Complexitatea sa este descrisă prin numărul maxim de segmente LCD care pot fi controlate, fiind limitată în primul rând de numărul de conexiuni externe necesare (pentru un număr mare de segmente oricum se folosesc tehnici de multiplexare).

2.1.1. Principiul simulării asistate de calculator

Simularea unui circuit permite verificarea funcționării circuitului pe baza descrierii acestuia prin oricare din metodele uzuale (limbaje de descriere hardware, scheme, diagrame de stare), înainte de implementarea efectivă a circuitului descris. Simularea asistată de calculator este metoda cea mai utilizată pentru simularea circuitelor, utilizarea acestei metode devenind posibilă și pentru sistemele digitale complexe odată cu creșterea semnificativă a performanței sistemelor de calcul moderne. Această simulare se realizează cu ajutorul unui program simulator, care construiește un model al circuitului pe baza descrierii acestuia de către proiectant, model care este echivalent cu o copie virtuală a circuitului proiectat. Simulatorul execută apoi modelul circuitului și analizează răspunsul acestuia la o serie de combinații ale intrărilor aplicate circuitului într-un anumit interval de timp, o asemenea combinație fiind numită vector de test sau stimul. Pe lângă vectorii de test, proiectantul poate specifica și ieșirile așteptate ale circuitului pentru fiecare vector. În acest caz, simulatorul va compara ieșirile generate prin execuția modelului cu cele specificate de proiectant, care sunt cunoscute ca fiind corecte, afișând mesaje de eroare în cazul existenței unor diferențe între acestea. Dacă se detectează erori de funcționare, descrierea circuitului poate fi corectată mult mai simplu decât în cazul în care circuitul a fost implementat. Pentru simularea sistematică a funcționării unui circuit, de multe ori se creează un banc de test (“testbench”) constând din circuitul care trebuie testat și module adiționale pentru generarea și aplicarea vectorilor de test la intrările circuitului testat. Vectorii de test pot fi reprezentați fie de toate combinațiile posibile ale intrărilor circuitului (dacă este posibil), fie de combinațiile reprezentative pentru toate situațiile de funcționare. Prin utilizarea bancurilor de test se simulează funcționarea în condiții reale a circuitului, când acestuia i se aplică intrări din mediul exterior, de la un operator uman, sau de la un alt circuit sau sistem digital. Simularea asistată de calculator are următoarele avantaje principale:

• Simularea permite experimentarea cu diferite variante de proiectare ale circuitului și condiții de funcționare ale acestuia, fără a fi necesară implementarea acestor variante. Proiectantul va putea implementa apoi varianta cea mai eficientă din punctul de vedere al performanțelor și al costului

• Prin utilizarea simulării asistate de calculator este posibilă testarea sistematică a circuitelor, prin aplicarea unui număr mare de vectori de test la intrările circuitului, vectori care pot fi generați prin program sau pot fi specificați sub formă tabelară.

• Pentru circuite sau sisteme digitale complexe, simularea asigură reducerea costurilor și reducerea numărului erorilor de proiectare comparativ cu cazul în care se utilizează un prototip hardware pentru testare. Realizarea unor circuite complexe cum sunt microprocesoarele moderne nu ar fi fost posibilă fără utilizarea intensivă a simulării asistate de calculator.

2.1.2. Tipuri de simulare

Simularea poate fi executată în diferite etape ale procesului de proiectare și poate utiliza diferite nivele de abstractizare ale circuitului descris printr-o anumită metodă. Simularea funcțională constă în simularea unei descrieri la nivel înalt a circuitului, această descriere specificând funcționarea circuitului, și nu structura acestuia. Pentru descrierea circuitului se pot utiliza diferite limbaje de modelare, cum sunt limbajele de programare. În acest caz, simularea constă în compilarea și execuția modelului respectiv. În cele mai multe cazuri, simularea funcțională se bazează pe un model al circuitului sub forma unei descrieri într-un limbaj de descriere hardware (HDL). Simularea logică reprezintă analiza funcționării circuitului pe baza valorii unor variabile logice. Această simulare este numită și simulare la nivelul transferurilor între registre (RTL – Register Transfer Level), deoarece variabilele simulate sunt cele păstrate în registre. Simularea evaluează în fiecare ciclu de ceas funcțiile logice ale căror valori sunt înscrise în registre. Simularea la nivel de circuite se referă la analiza funcționării unor modele ale circuitelor reprezentate prin interconectarea unor dispozitive electronice cum sunt tranzistoare, rezistențe și condensatoare. Această simulare constă în calcularea nivelelor de tensiune în funcție de timp din toate nodurile circuitului sau o parte a nodurilor. Aceasta presupune formularea și rezolvarea unui mare număr de ecuații diferențiale, necesitățile de memorie și de resurse de calcul fiind ridicate. Simularea temporală constă în simularea funcționării circuitului după determinarea întârzierii reale a semnalelor pe diferitele căi de date. Această simulare se utilizează în special pentru circuitele programabile, la care întârzierile semnalelor nu vor fi cunoscute decât în urma implementării circuitului, atunci când se poate determina numărul de conexiuni programabile utilizate pentru rutarea diferitelor semnale. Informațiile despre întârzierile semnalelor sunt furnizate simulatorului prin operația numită adnotare inversă. Simularea temporală permite analiza funcționării în condiții reale a circuitului și determinarea frecvenței maxime de funcționare a acestuia.

2.1.3. Funcționarea unui simulator

Un program de simulare necesită două tipuri de intrări: un fișier cu descrierea circuitului care trebuie simulat și un set de stimuli care definesc toate semnalele de intrare pe durata timpului de simulare. Circuitul poate fi descris printr-o listă de conexiuni sau printr-un limbaj de descriere hardware. În cazul în care circuitul este specificat prin scheme sau diagrame de stare, trebuie creată mai întâi o descriere echivalentă a circuitului sub forma unei liste de conexiuni. Această descriere poate fi într-un format specific listelor de conexiuni (de exemplu, EDIF – Electronic Design Interchange Format), sau poate fi o descriere structurală a circuitului într-un limbaj de descriere hardware (de exemplu, VHDL sau Verilog). Proiectantul trebuie să specifice setul de stimuli care va fi aplicat la intrările circuitului pe durata simulării acestuia. Opțional, proiectantul poate specifica și semnalele de ieșire care trebuie generate de circuit pentru fiecare stimul. Pentru definirea stimulilor, sistemele CAD sau simulatoarele pun la dispoziție diferite interfețe, cele mai utilizate fiind interfețele grafice, interfețele bazate pe fișiere text și cele la nivelul liniei de comandă. Interfețele grafice permit specificarea valorii semnalelor aplicate la intrările circuitului sub forma unor diagrame de timp. Aceste interfețe sunt utile atunci când trebuie definit un număr redus de intrări. Atunci când există un număr mai mare de semnale de intrare, sau trebuie definit un număr mare de tranziții ale acestor semnale, este mai utilă specificarea într-un fișier text a unor comenzi care definesc valorile semnalelor de intrare și momentele de timp în care semnalele își modifică valoarea. Pot exista și comenzi care specifică execuția simulării pentru un anumit timp. Introducerea comenzilor de simulare prin linia de comandă este utilă atunci când trebuie modificată valoarea unor semnale care au fost definite anterior prin alte metode. Simulatoarele utilizate în proiectarea asistată de calculator sunt simulatoare bazate pe evenimente. Aceste simulatoare împart intervalul de timp pentru care se realizează simularea în intervale cu durate foarte reduse, un asemenea interval fiind numit pasul simulării. Acest pas este exprimat printr-un multiplu întreg al unei unități de timp care se numește limita de rezoluție. Simulatorul nu poate măsura intervale de timp mai reduse decât această limită. Limita de rezoluție poate fi, de exemplu, de 1 picosecundă (ps), multiplul acesteia fiind specificat de proiectant. După trecerea unui interval de timp egal cu pasul simulării, simulatorul determină toate semnalele ale căror valori au fost modificate pe durata ultimului pas al simulării, o asemenea modificare fiind numită eveniment. Pentru fiecare semnal de intrare care s-a modificat, simulatorul reevaluează modelul circuitului și determină noile valori ale semnalelor care sunt afectate de această modificare. Această reevaluare determină modificarea altor semnale și generarea altor evenimente. Un semnal nu poate fi actualizat în același timp cu un alt semnal din care este generat, deoarece semnalele nu își pot modifica valorile instantaneu. De aceea, modificarea valorii unui semnal este planificată de simulator pentru un moment de timp ulterior față de timpul curent de simulare (tc), după o întârziere numită întârziere delta (δ). Deci, modificarea valorii semnalului va fi executată la momentul de timp tc + δ. La modificarea valorii unui semnal, se execută un ciclu delta în care se modifică valorile tuturor semnalelor care depind de primul semnal. Dacă semnalele modificate afectează alte semnale, vor fi planificate alte evenimente pentru timpul curent de simulare, la momentele de timp tc + 2δ, tc + 3δ, … La aceste momente vor fi executate alte cicluri delta pentru actualizarea valorii tuturor semnalelor. Toate aceste cicluri delta se execută pentru același moment de simulare (tc), astfel încât timpul de simulare nu avansează decât atunci când nu mai sunt alte evenimente planificate pentru timpul curent de simulare și toate semnalele au fost actualizate. Deci, întârzierea delta este de fapt o întârziere zero, doar în mod conceptual fiind considerată ca o întârziere infinitezimală, fiind introdusă pentru a indica succesiunea operațiilor executate de simulator pentru actualizarea valorii semnalelor.

2.2. Generarea bancurilor de test cu programul HDL Bencher

Sistemul Xilinx WebPACK permite simularea funcțională a circuitelor proiectate cu ajutorul simulatorului ModelSim, care poate fi lansat în execuție din fereastra Project Navigator. Simularea se realizează pe baza listei de conexiuni generate în etapa de sinteză, listă care este generată sub forma unei descrieri structurale în limbajul VHDL sau Verilog. Sistemul permite și simularea circuitelor proiectate după etapele de translatare și mapare, sau simularea temporală după etapele de plasare și rutare. În această lucrare este descrisă doar simularea funcțională. Simularea funcțională se poate realiza fie utilizând un banc de test specificat sub forma unei descrieri HDL, fie utilizând un banc de test generat în mod automat cu ajutorul programului HDL Bencher. Acest program, care este integrat în sistemul Xilinx WebPACK, permite introducerea sub formă grafică a stimulilor și a semnalelor de ieșire așteptate, generând în mod automat un banc de test care poate fi utilizat cu simulatorul ModelSim. Deși acest simulator permite specificarea stimulilor și prin comenzi introduse din linia de comandă, se recomandă ca înainte de lansarea simulatorului să se creeze un fișier de stimuli, din care programul HDL Bencher va genera un banc de test.

2.2.1. Crearea unui fișier de stimuli

Pentru crearea unui fișier de stimuli cu ajutorul programului HDL Bencher, se procedează în modul următor:

În fereastra Sources in Project din ecranul Project Navigator se selectează fișierul sursă conținând descrierea circuitului care trebuie simulat.

2. Din meniul Project Navigator se selectează Project → New Source pentru crearea unui nou fișier.

3. În fereastra de dialog New se selectează Test Bench Waveform ca tip al noului fișier.

4. Se introduce numele fișierului care va fi creat; acest nume trebuie să fie diferit de numele fișierului sursă care va fi simulat.

5. Se selectează Next. În fereastra de dialog Select se va selecta fișierul sursă cu care trebuie asociat fișierul de stimuli. În mod implicit, în această fereastră va apare selectat fișierul care a fost selectat în fereastra Sources in Project (pasul 1).

6. Se selectează Next, iar apoi se selectează Finish. Va fi lansat în execuție programul HDL Bencher și va apare fereastra Initialize Timing, care permite setarea unor parametri de timp care vor fi utilizați în timpul simulării (Figura 8.1). În mod obișnuit, se pot păstra setările implicite.

Figura 8.1. Fereastra Initialize Timing pentru setarea parametrilor de timp care vor fi utilizați la simulare.

Parametrii care pot fi setați depind de tipul circuitului care va fi simulat: secvențial sau combinațional. Acest tip este determinat de programul HDL Bencher, iar setările implicite vor fi selectate în mod automat; aceste setări pot fi modificate de utilizator. Unitatea de timp utilizată poate fi setată în caseta Time Scale. Pentru circuitele secvențiale se poate seta frontul activ al semnalului de ceas: frontul crescător (Rising Edge) sau frontul descrescător (Falling Edge). Acest front este indicat printr-o săgeată în fereastra Preview. De asemenea, se poate seta timpul cât semnalul de ceas va avea valoarea logică 1 (Clock high time) și timpul cât acest semnal va avea valoarea logică 0 (Clock low time). Aceste două intervale definesc perioada semnalului de ceas. Valoarea implicită a acestei perioade este de 100 ns, ceea ce corespunde unei frecvențe de 10 MHz. Parametrul Input setup time definește momentul de timp înainte de frontul activ al semnalului de ceas când programul HDL Bencher setează valoarea semnalelor de intrare. Parametrul Output valid delay definește întârzierea de la frontul activ al semnalului de ceas după care programul HDL Bencher verifică valorile semnalelor de ieșire. Acești parametri reprezintă constrângeri de temporizare, după implementarea circuitului fiind posibilă verificarea respectării acestor constrângeri.

După setarea parametrilor de timp, se execută un clic pe butonul OK.

În urma acestor operații, se vor afișa două ferestre principale ale programului HDL Bencher (Figura 8.2). Fereastra de sus este cea a formelor de undă (Waveform), utilizată pentru vizualizarea sau editarea formelor de undă ale stimulilor aplicați la intrările circuitului și ale semnalelor de ieșire așteptate. În partea stângă a acestei ferestre se afișează toate semnalele cărora li s-au atașat porturi de intrare, de ieșire sau bidirecționale. Direcția portului este indicată grafic la dreapta numelui semnalului. În fereastra de jos se afișează conținutul fișierului HDL cu care a fost asociat fișierul de stimuli. De exemplu, în această fereastră se afișează lista de conexiuni care a fost generată dintr-o schemă, sub forma unei descrieri VHDL.

Figura 8.2. Ferestrele principale ale programului HDL Bencher.

Programul HDL Bencher setează valoarea semnalelor de intrare și verifică valorile semnalelor de ieșire la momentele de timp setate în fereastra Initialize Timing. Această fereastră este afișată la crearea unui nou fișier de stimuli, iar setările parametrilor de timp pot fi modificate ulterior prin comanda Options → Timing Constraints sau butonul Timing Constraints. Intervalul de timp în care poate fi setată valoarea unui semnal de intrare este indicat prin culoarea albastru deschis, iar intervalul de timp în care se verifică valoarea unui semnal de ieșire este indicat prin culoarea galbenă. Dacă se poziționează cursorul deasupra numelui unui semnal, se vor afișa într-o casetă atributele semnalului respectiv. Dacă se poziționează cursorul deasupra formei de undă a unui semnal, se va afișa valoarea semnalului la momentul de timp respectiv. Prin poziționarea cursorului pe linia care indică timpul (implicit, prin diviziuni la fiecare 100 ns), se afișează valoarea timpului pentru poziția respectivă.

2.2.2. Inițializarea semnalelor prin comutarea valorii biților Pentru definirea stimulilor (vectorilor de test), trebuie să se inițializeze semnalele de intrare. Metoda cea mai simplă pentru inițializarea semnalelor care sunt biți este comutarea valorii acestora în momentele de timp dorite. Pentru aceasta, se execută un clic pe forma de undă a semnalului în poziția corespunzătoare momentului de timp la care trebuie să se modifice valoarea acelui semnal. Valoarea semnalului se va modifica din 0 în 1 sau din 1 în 0, iar această comutare se va produce la începutul intervalului de timp precedent în care este permisă modificarea valorii semnalului. Acest interval este indicat printr-o celulă de culoare albastră. Printr-o succesiune de comutări se pot defini în mod simplu formele de undă ale semnalelor de intrare.

În mod opțional, se pot inițializa și semnalele de ieșire cu valorile așteptate ale acestora. Pentru fiecare vector de intrare, se pot defini valorile corecte ale semnalelor de ieșire. Aceste valori se definesc în mod similar cu valorile semnalelor de intrare, comutând valorile existente. Comutarea se va produce la începutul intervalelor de timp indicate prin celule de culoare galbenă. În timpul simulării, simulatorul va compara valorile introduse de utilizator cu valorile generate la simulare. Simulatorul va afișa mesaje de eroare pentru fiecare moment de timp la care există o diferență între cele două valori. Dacă nu se asignează valori semnalelor de ieșire, simulatorul nu va afișa mesaje de eroare.

2.2.3. Inițializarea semnalelor prin metoda tabelară Programul HDL Bencher permite introducerea rapidă a valorii semnalelor printr-o metodă tabelară. Pentru aceasta se execută un clic dublu pe forma de undă a semnalului la momentul de timp la care trebuie să se modifice valoarea acelui semnal. Se va deschide o casetă de editare, în care se introduce valoarea semnalului la momentul respectiv (Figura 8.3). După introducerea valorii, se apasă tasta Enter, iar caseta se va deplasa la dreapta, la următorul moment de timp la care se poate modifica valoarea semnalului. Se continuă cu introducerea altor valori, după care se apasă tasta Esc. Se pot utiliza tastele cu săgeți pentru deplasarea la un moment de timp următor sau precedent, sau la un alt semnal.

Figura 8.3. Inițializarea semnalelor prin metoda tabelară.

În cazul semnalelor care sunt vectori, valorile acestora se pot introduce în hexazecimal, zecimal sau binar. Baza care va fi utilizată este cea utilizată și pentru afișare, aceasta fiind indicată printr-unul din butoanele “16 Display in Hex”, “10 Display in Decimal” sau “2 Display in Binary”. La introducerea valorilor, se verifică dacă acestea se încadrează în domeniul admis, în funcție de baza selectată. Se pot introduce valori cuprinse între ghilimele duble, acestea fiind interpretate întotdeauna ca valori binare, indiferent de baza selectată. În caseta de editare deschisă la utilizarea metodei tabelare, se poate introduce o listă de valori separate prin virgule. De exemplu, se pot introduce toate valorile corespunzătoare unui semnal, pentru întregul interval de simulare. Dacă se introduc două virgule consecutive, se păstrează valoarea curentă a semnalului. După introducerea unei liste, se apasă tasta Enter pentru memorarea valorilor, actualizarea semnalului și trecerea la semnalul următor. La terminarea editării, se apasă tasta Esc.

2.2.4. Inițializarea semnalelor prin fereastra Pattern Wizard

Inițializarea semnalelor cu o formă complexă este simplificată prin utilizarea ferestrei Pattern Wizard. Pentru utilizarea acestei metode, se execută un clic dublu pe forma de undă a unui semnal, prin care se va deschide aceeași casetă de editare ca și la inițializarea prin metoda tabelară. Se execută un clic pe butonul Pattern (Figura 8.3), prin care se va deschide fereastra Pattern Wizard (Figura 8.4). Opțiunile disponibile depind de tipul semnalului, aceste opțiuni fiind afișate în caseta Choose Pattern. Pentru semnalele care sunt biți, această fereastră permite generarea unei succesiuni de impulsuri de o anumită lățime, asignarea aleatoare a semnalelor sau comutarea valorii lor după un număr de cicluri specificat. Pentru semnalele care sunt vectori, este posibilă în plus incrementarea sau decrementarea valorii lor cu un anumit număr, sau deplasarea la stânga sau la dreapta a valorii lor după un număr de cicluri specificat. Forma semnalului care va fi generat este afișată în partea de jos a ferestrei.

2.2.5. Salvarea fișierului de stimuli

După editarea semnalelor de intrare și, opțional, a celor de ieșire, se salvează fișierul cu forma de undă a semnalelor prin comanda File → Save Waveform sau butonul Save Waveform. Poate apare o fereastră de dialog pentru specificarea numărului unităților de timp care trebuie să treacă de la ultima modificare a unui semnal de intrare până la terminarea simulării. Se poate selecta valoarea implicită (1). Fișierul salvat va avea extensia .tbw și va fi adăugat automat la proiectul curent deschis în fereastra Project Navigator. Acest fișier poate fi deschis ulterior prin execuția unui dublu clic pe numele acestuia în fereastra Sources in Project. După salvarea fișierului de stimuli, programul HDL Bencher generează în mod automat un fișier HDL care conține bancul de test corespunzător fișierului salvat. Acest fișier poate fi vizualizat în ecranul Project Navigator prin selectarea fișierului cu extensia .tbw în fereastra Sources in Project și execuția unui clic dublu pe numele procesului View Behavioral Testbench din fereastra Processes for Current Source.

Similar Posts

  • Sisteme Audio cu Modulatia Impulsurilor în Cod

    CUPRINS 1. Discretizarea semnalelor analogice 1.1 Introducere în audio digital Semnale analogice pe care dorim sa le transmitem la distanța sunt: semnalele vocale, imaginile culese de camerele de luat vederi și semnalele captate de senzori. Aceste trei clase de semnale au caracteristi diferite și necesita tehnici analogice specifice. Primele tehnici care au fost folosite la…

  • Filtrarea Wiener

    CAPITOLUL 4 FILTRAREA WIENER 4.1 Introducere În procesul de transmisie a unui semnal de la sursă la receptor, semnalul este distorsionat de multipli factori perturbativi. Pe de-o parte este vorba despre efectul canalului de transmisie, fie acesta sârmă de cupru, mediu radio sau fibră optică. [1] Pe de altă parte semnalul este afectat de zgomotul…

  • Robot Zburator de Tip Quad Copter

    Robot zburător de tip quad-copter Proiect de diplomă Cuprins Lista figurilor Lista tabelelor Lista acronimelor Introducere Capitolul 1. Aspecte teoretice 1.1 Principii de zbor 1.2 PID Capitolul 2. Descriere Hardware 2.1. Componentele principale utilizate 2.2. Circuitul electronic de test 2.3. Circuitul electronic al quad-copter-ului 2.4. Circuitul electronic al telecomenzii 2.5. Lista de componente și schemele…

  • Masinile Electrice

    Cuprins: 1.Introducere 2. Studiul actual –fundametare teoretică 21.motoare Control motor 2.3-invertoare -layout – medii de dezvoltare (Proteus si Eagle) -senzorii cu ultrasunete -detectie de metale -filtre -corelatie intre partea de hardware si software pentru comanda 3.Partea practica contine: -invertoarele trifazate adaptate cu integratele BTM -detectorul de metale -senzorii cu ultrasunete -mecanica pentru imbinarea tuturor intr-o…

  • Transportul Si Distributia Lichidelor Prin Conducte

    Introducere Activitatea de colectare, transport si depozitare a petrolului, a produselor petroliere si gazelor reprezintă în prezent o componentă esențială în economia oricărei țări supuse la un grad de dezvoltare corespunzător acestui ănceput de mileniu.Colectarea, transportul și depozitarea petrolului brut, a produselor petroliere si a gazelor constituie o activitate de mare importanță prin care se…

  • Solutionarea Problemei Comis Voiajorului cu Ajutorul Algoritmilor Genetici Implementari în Limbajul Java Si Tehnologia J2ee

    Cuprins Introducere …………………………………………………………………………………….7 1. Noțiuni teoretice…………………………………….………………………….…11 1.1 Algoritmi genetici……………………………………………………………………………………..11 Teoria Schemelor………………………………………………………………………………..11 Operațiunea Selecție…………………………………………………………………………….14 Asignarea valorii numerice de conformitate bazată pe rang………………………14 Selecția bazată pe ruletă………………………………………………………………………16 Selecția universală stohastică ……………………………………………………………….17 Selecția locală……………………………………………………………………………………..17 Selecția prin trunchiere…………………………………………………………………………18 Selecția prin tururi……………………………………………………………………………….18 Operațiunea Combinarea (Încrucișarea) ……………………………………………….19 Operațiunea Mutația…………………………………………………………………………….25 Înserarea………………….………………………………………………………………………..26 Tehnologia Enterprise Java Beans ……………………………………………………….28 Noțiuni generale……………………………………………………………………………………28 Conceptele de baza EJB………………………………………………………………………..28…