You are on page 1of 41

MICROCONTROLLERE

Privire generală

Petre Ogruţan, octombrie 2016


Ce este un microcontroller?

Un microcontroller este un calculator pe un singur chip, dedicat unei aplicaţii. Un


PC este mai rapid, are memorie mai mare şi se pot face mai multe aplicaţii. Un
microcontroller este mai mic şi mai ieftin.
Unitatea centrală execută instrucţiunile din 1a.Structura
memoria program, pe care le primeşte
prin magistrala de date. Structura
Harvard este posibilă şi răspândită la
MC pentru că de regulă instrucţiunile
sunt stocate în memoria ROM iar
datele în cea RAM. Unitate centrală
Fiecare MC are un controller de întreruperi
şi unele au controller de DMA care
Unitate Registre Memorie pentru Memorie
admit atât intrări din exterior cât şi de aritmetică programe pentru date
la modulele interne. interne
şi logică
Modulele de I/O pot fi seriale sau paralele. (ALU)
Fiecare modul transferă date cu
exteriorul prin intermediul registrului
de date (RD). Modulul este comandat
(configurat) de unitatea centrală prin
intermediul unui registru de comenzi BUS INTERN
(RC) şi se poate citi starea modulului
prin registrul de stare (RS), prin care
se pot şi cere întreruperi. Registrele
modulelor de I/O pot fi văzute de UC Controller de
RS RC RD Intrări/
ca locaţii de memorie (la familia întreruperi
ieşiri de
Motorola) sau ca dispozitive de I/O date
într-un spaţiu de adresare separat Controller DMA Seriale/
(MCS 51). De regulă structura de bază Paralele
a familiei conţine anumite interfeţe
considerate foarte importante (timer, PORT
canal serial UART) şi linii de I/O
grupate în porturi paralele de uz
general. Pe structura de bază se adaugă
diferite tipuri de interfeţe care împart
liniile de I/O cu porturile paralele de
uz general.
1b. Structura internă a unui
microcontroller
2.Unitatea centrală
Unitatea centrală este formată din ALU şi un
set de regiştri interni, similari unor
locaţii de memorie, folosiţi pentru
memorarea unor date des folosite sau
pentru programarea unor anumite UC
funcţii. Diferitele familii de MC folosesc
seturi diferite de regiştri. Există însă Acumulator (CISC)
câţiva regiştri comuni: Registre generale (RISC)
A (Accumulator) registrul acumulator care ROM/PROM/EPROM
este folosit deseori pentru a stoca un (memoria program)
operand şi rezultatul unei operaţii Program Counter
aritmetice.
I registru de index, folosit la adresări
indirecte.
S registru de stare, care conţine indicatorii de RAM
stare: Carry, Zero etc. ALU
Indicator de stivă
(memoria de
PC (Program Counter) este stocată adresa date)
următoarei instrucţiuni de executat.
După un RESET (iniţializarea MC), Decodificare
registrul PC se încarcă dintr-o locaţie de instrucţiuni
Registru de stare
memorie numită vector de reset. Această
locaţie conţine adresa primei instrucţiuni
de executat. După execuţia acestei prime
instrucţiuni, PC se incrementează. Magistrală internă
SP (Stack Pointer) conţine indicatorul de stivă.
Stiva este o memorie de tip LIFO, în Magistrala de instrucţiuni pentru sisteme cu
care ultimul octet stocat este primul scos
arhitectura Harvard
din memorie. Conţinutul acestui registru
stabileşte adresa din memorie unde este
definită stiva.
3.Magistrale
Blocurile interne ale MC sunt legate între ele
Magistrala multiplexată
printr-o magistrală (bus) de date şi una
de adrese. Mărimea acestor magistrale
CLK
constituie una dintre caracteristicile cele
mai importante ale unui MC.
linii multiplexate de adrese şi
Arhitectura Von Neuman prevede existenţa date la citire
unui bus unic folosit pentru circulaţia
datelor şi a instrucţiunilor. Când un
linii multiplexate de adrese şi
controller cu o astfel de arhitectură
date la scriere
adresează memoria pe linia de date se
pune întâi codul instrucţiunii apoi
conţinutul memoriei, accesul fiind adrese date
realizat în 2 paşi, deci destul de lent.
Arhitectura Harvard prevede un bus separat Magistrala nemultiplexată
pentru date şi instrucţiuni. Când
instrucţiunea este pusă pe busul de CLKOUT
instrucţiuni, datele de la instrucţiunea
anterioară sunt pe busul de date. linii de adresă
Structura MC este mai complexă, dar
performanţele de viteză sunt mai bune. linii de date la citire
Magistrala de date şi cea de adrese pot fi
separate sau multiplexate. Magistralele linii de date la scriere
pot să nu fie scoase în exterior
(Motorola 6805) sau pot fi scoase în
exterior direct (MCS 51) sau
multiplexate (MC pe 16 sau 32 de biţi).
4.Memoria internă
Tipuri de memorii
Memoria ROM (Read Only Memory) este cea mai ieftină şi simplă memorie şi se foloseşte la stocarea programelor în
faza de fabricaţie. Unitatea centrală poate citi informaţiile, dar nu le poate modifica.
Memoria PROM (Programmable Read Only Memory) este similară cu memoria ROM, dar ea se poate programa de
către utilizator. După posibilităţile de ştergere, această memorie poate fi de mai multe feluri:
· OTP (One Time Programmable, PROM) nu se poate şterge sau reprograma. Preţul unui MC cu OTP este
mic, viteza este bună, dar aplicaţiile sunt lipsite de flexibilitate.
· Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) poate fi ştearsă electric de
către unitatea centrală, în timpul funcţionării. Ştergerea este selectivă, iar pentru reînscriere trebuie făcuţi
mai mulţi paşi. Memoria este lentă şi numărul de ştergeri/ scrieri este limitat (tipic 10000).
· Memoria FLASH EPROM este o soluţie mai bună pentru că poate stoca cantităţi mai mari de date, este
mai rapidă dar permite mai puţine ştergeri şi reînscrieri.
Memoria RAM (Random Access Memory) este o memorie volatilă care poate fi citită sau scrisă de unitatea centrală.
Locaţiile din RAM pot fi accesibile în orice ordine. Pe chip, memoria RAM ocupă mult loc şi implicit costurile de
implementare sunt mari. De aceea un MC include de obicei puţin RAM. Memorie RAM static alimentată de la
baterie se foloseşte pentru stocarea nevolatilă a cantităţilor mari de date, la o viteză de acces mare şi cu un număr
nelimitat de ştergeri şi reînscrieri.
Observaţii
-Stocarea programelor în memorii nevolatile permite ca MC să fie programat fără a fi scos din circuitul în care
funcţionează (Field Programming/ Reprogramming).
-Producătorii recomandă ca la producţii de volum mare să se folosească memoria ROM, care se înscrie la fabricant, cu
mască, la producţii de volum mic să se folosească memoria OTP (PROM) iar pentru prototipuri să se folosească
memoria EPROM.
-Unele familii de MC tratează spaţiul de intrare ieşire ca şi memoria, iar altele au spaţii diferite de adresare pentru
memorie şi spaţiul I/O. Tratarea unitară a acestor spaţii are avantajul simplităţii dar limitează numărul de locaţii de
memorie adresate. Tratarea unitară este justificată de asemănările existente între stocarea unui bit în memorie sau
într-un latch de I/O.
5.Un bit de memorie şi un bit de I/O
READ

Un bit de informaţie se poate scrie/citi în


Bit de D Q
memorie ca în figura de sus, celula de
date
memorie fiind reprezentată sub forma unui
bistabil D. Prin gestionarea cu aceleaşi
semnale de comandă se pot citi/scrie date WRITE C /Q
din porturile de I/O
Starea internă a MC şi controlul MC se
realizează tot prin intrări/ ieşiri de date ca Bit de
în figura de sus, dar semnalele nu sunt direcţie
scoase în exterior ci comandă funcţii
interne în MC. Citirea stărilor şi controlul Intrare/
MC se fac prin intermediul regiştrilor Bit de D Q
Ieşire
interni de stare şi control. Un exemplu de date
digitală
Driver
registru de control este registrul care
comandă sensul transferului la porturile de WRITE
C /Q
I/O. O linie dintr-un port este de ieşire dacă
bitul corespunzător din registrul de direcţie READ
este 1. O linie de intrare/ ieşire cu sensul
Bit de
controlat de o linie a registrului de direcţie date
este dată în figura de jos. Buffer
Module interne cu funcţii de timp
6.Timer
Tactul pentru timer poate fi ales tactul
sistem sau un tact de la un pin extern.
Tactul poate fi divizat de un număr Tact
sistem
Alegere Tact fără
prescalare sau
tact
programabil de ori cu un numărător de (intern) cu prescalare
prescalare (timer de prescalare). Tact de Prescalare
Comanda funcţionării timerului se la un pin
extern
face cu un registru de control şi stare.
Timerul este format din 3 module, a căror
caracteristică este numărul de biţi:
Bit selecţie tact Biţi selecţie prescalare Selecţie prescalare
-numărător (timer) REGISTRU DE CONTROL ŞI STARE

-registru de încărcare Mod de lucru Depăşire


-registru de captură
Modurile de lucru sunt următoarele: Magistrală internă

-mod numărător, în care Timerul numără


tactul de la intrare şi la depăşire Timer 0 Cerere de
înscrie un bit în registrul de stare sau întrerupere
Registru de încărcare
se poate cere o întrerupere. Dacă
tactul este extern înseamnă că se face
o numărare a evenimentelor externe. Numărător 8-16 biţi
De regulă frontul activ se poate
programa, adică să se facă o
incrementare a numărătorului la front Registru de captură
pozitiv sau negativ.
-mod captură, în care un pin exterior poate
comanda oprirea timerului şi
încărcarea valorii la care a ajuns în Pin de captură din exterior

registrul de încărcare. Acest mod


poate fi folosit pentru măsurarea unei
perioade de timp.
7.Ceas de gardă (Watch Dog)
CLR

Numărător RESET

Registru de control Registru de prescalare

Ceasul de gardă este un timer care poate fi programat să numere un tact care provine de la un
registru de prescalare. Dacă numărătorul ajunge la capăt, semnalul de depăşire declanşează un
RESET al circuitului. Este sarcina programatorului să scrie în registrul de control un cuvânt
care va reiniţializa numărătorul. În cazul în care MC nu mai este sub controlul programului, el
va fi resetat de către ceasul de gardă
8.Generator PWM

T2 PWM Comparator pe 8 biţi

Registru PWM Numărător

Registru de prescalare
T1
Factorul de umplere
este T2/T1 BUS INTERN

Modulaţia impulsurilor în lăţime (Pulse Width Modulation) are multe aplicaţii, mai ales în comanda
motoarelor de curent continuu sau a surselor de alimentare. Din acest motiv, unele MC includ în
structura lor un modulator PWM ca interfaţă distinctă. Un semnal PWM arată ca în figura de sus,
stânga.
Un canal PWM este reprezentat în figura de sus, dreapta. Frecvenţa de repetiţie este programată cu un
registru de prescalare care generează un ceas pentru un numărător de 8/16 biţi. Conţinutul
numărătorului este comparat cu cel al registrului PWM, dacă este mai mare ieşirea PWM este LOW,
dacă este mai mic sau egal PWM este HIGH. Factorul de umplere poate fi astfel modificat între 0 şi
255/255.
Module interne cu funcţii de
comunicaţii
9.Port serial asincron
Cereri de întrerupere către UC

Acest port este numit UART (Universal Asyncronous Magistrala internă


Receiver Transmitter), iar Motorola îl numeşte
pentru MC proprii port SCI (Serial
Communications Interface).
Registru de Buffer de Buffer de
Caracterele seriale sunt transmise sau recepţionate prescalare transmisie recepţie
serial în registrele de transmisie sau recepţie. La
recepţia unui caracter, acesta se încarcă în
bufferul de recepţie şi se cere o întrerupere. La
Rata Baud Registru de Registru de
emisie, un caracter se introduce în bufferul de deplasare la deplasare la
transmisie de unde este trecut în registrul de transmisie recepţie
deplasare şi se transmite serial, cerându-se şi o
întrerupere. Ceasul poate fi selectat intern sau
extern. Dacă este selectat intern, el se formează
din tactul sistemului cu o divizare printr-un
numărător de 16 biţi (prescalare) şi apoi un TxD RxD
numărător de 11 biţi. Comanda USART se
realizează cu un registru de stare şi control
10.Port serial sincron SPI
MC master
SPI MISO
MOSI

SCK
/SS +1
Port I/O
0
1
2

/SS SCK MOSI MISO /SS SCK MOSI MISO

MC slave MC slave

Cu portul SPI (Serial Peripheral Interface) se poate realiza o comunicaţie sincronă simplă, folosită de regulă pentru a
transfera date între circuite pe aceeaşi placă cu MC. Un transfer bidirecţional necesită 3 pini, unul dintre ei fiind
alocat ceasului de transmisie generat de masterul SPI. Cu SPI se pot realiza transferuri şi între MC. Transferurile
pot fi full duplex.
Numai un master SPI poate iniţia un transfer. Masterul scrie un octet în registrul de transmisie SPI de undele datele
merg într-un registru de deplasare care le serializează şi le transmite cu ceasul de transmisie. Transmisia se termină
după 8 tacte. În slave datele intră în registrul de deplasare cu tactul de recepţie, acelaşi cu cel de transmisie. Când
au intrat 8 biţi, caracterul intră în registrul de date. Pentru a se evita erorile de viteză (sau de suprascriere)(Overrun)
trebuie ca octetul din registrul de date să fie citit înainte ca un alt octet să fie transmis din registrul de deplasare.
Pinii au următoarea semnificaţie:
-SCK (Serial Clock) este ieşire de tact pentru sincronizare;
-MOSI (Master Output Slave Input) este ieşirea serială pentru MASTER;
-MISO (Master Input Slave Output) este intrarea serială pentru MASTER;
-/SS (Slave Select) selectează circuitul SLAVE şi protejează MC dacă două circuite sunt master. Acest semnal activ
dezactivează la celălalt port SPI modul master.
11.Interfaţa CAN (Controller Area Network)
Magistrala
Protocolul CAN a fost definit de
internă
BOSCH în 1991 pentru utilizarea
pe o magistrală la autoturisme, Circuit pt. comanda Registre
unde să îndeplinească condiţii interfeţei de
specifice: procesare în timp real, comandă,
fiabilitate într-un mediu perturbat stare şi
şi preţ mic. Serializare/ Gestionarea date
La transmisia CAN datele sunt deserializare erorilor
codificate pentru a fi trimise pe Magistrala
linie în cod NRZ, iar la fiecare CAN
grup consecutiv de 5 biţi cu Transceiver
aceeaşi valoare logică se
Generare CRC
introduce un bit (deci o tranziţie) TxEN Tx
care se extrage la decodificare. Registre de deplasare
Nivelele pe linie sunt numite
dominant (0) şi recesiv (1). Inserare (recunoaştere MUX

adresă) Rx
Transferul de date prin CAN se face cu
cadre (blocuri de date) care sunt Introducerea biţilor de
citite de toate dispozitivele VREF (Vcc/2)
sincronizare
cuplate la CAN dar sunt reţinute Wakeup VREF
de acestea doar acelea care
conţin adresa dispozitivului.
Fiecare dispozitiv CAN recepţionează toate cadrele şi dispune de un filtru de acceptanţă care selectează cadrul cu adresa proprie a
dispozitivului. în configuraţie se pot adăuga noi dispozitive, cu adresă proprie, fără nici un efort. Dacă cadrul recepţionat este eronat,
toate dispozitivele CAN trimit un cadru de control care indică o eroare. Fiecare cadru eronat incrementează în dispozitiv un numărător
de erori (care este decrementat de cadrele valide). Un număr de erori mai mare de o anumită limită produce decuplarea dispozitivului de
la magistrala CAN
Module interne de legătură cu
procesele analogice şi cu afişarea
12. Convertorul A/D
Circuitul analogic de intrare constă într-un multiplexor analogic şi un convertor A/D de 8-10-12 biţi cu aproximaţii succesive (sunt
câteva MC cu convertor cu integrare, COP8). Tensiunea de referinţă pentru convertor şi masa analogică sunt conectate prin pini
speciali. Convertorul este controlat de registrul de control, care selectează şi canalul de conversie. Terminarea conversiei este
semnalizată cu un bit ACK tot în registrul de control, iar rezultatul conversiei este stocat în registrul de date. O conversie poate fi
declanşată în 3 feluri:
-start în operare normală şi reintrare în operare normală;
-start în operare normală apoi intrare în mod inactiv (Idle);
-intrare în mod inactiv şi declanşarea unei conversii din exterior printr-un pin exterior.
De regulă modul de conversie poate fi:
-conversie singulară
-conversie continuă

Decl. Cu registrul de control se


ADC0 Multiplexor conversie
analogic poate programa:
ADC1 Convertor Analog
ADC2 -selecţia canalului analogic
Digital
ADC3 dorit de la intrare la convertorul AD;
-se poate programa ca o
conversie să fie declanşată de pinul
Selecţie extern ;
START ACK Date
canal -se poate declanşa o
conversie;
Registru de control Registru de date -conţine un bit care
semnalează că s-a terminat
conversia, care poate solicita o
cerere de întrerupere;
BUS INTERN
13. Interfaţa cu LCD
Generare matricială

Afişaj LCD grafic


DEM 64x128
Elementul principal al modulului îl reprezintă panoul de cristale
lichide de dimensiunea 128x64 puncte, acesta fiind controlat
de circuitele auxiliare (drivere) KS0107B care controlează
liniile, iar doua circuite KS0108B pentru controlul coloanelor.
De asemenea modulul dispune de un convertor intern de
tensiune pentru generarea unei tensiuni negative necesară
funcţionării afişorului.
Semnale de comandă:
CS1 semnal de selecţie circuit de control segment stânga
CS2 semnal de selecţie circuit de control segment dreapta
RS specifica daca se transmite o comanda sau date
R/W semnal de control pentru citire/ scriere
E semnal de validare
RSTB semnal de resetare modul
D Magistrala paralelă de date de 8 biţi
14. Sisteme de protecţie şi economie de energie
Vechile MC se alimentau de la +5V şi masă. Noile tehnologii au permis obţinerea circuitelor LV (Low Voltage)
care se alimentează cu 3,3V, iar tendinţa este de scădere în continuare a tensiunii de alimentare. Se observă
că 3V se pot obţine de la 2 baterii în serie, deci s-au creat astfel posibilităţi de realizare a controllerelor
portabile. Pentru ca să nu apară erori de utilizare, dacă tensiunea de alimentare scade sub o anumită
valoare (Brownout Voltage) circuitul se resetează (iniţializează) şi rămâne în această stare până tensiunea
revine la valoarea normală. Acest circuit de protecţie se numeşte protecţie la subtensiune.
Pentru a realiza economia de energie, esenţială în cazul alimentării de la baterii de exemplu, un MC poate fi
comandat prin soft să treacă în starea de aşteptare (IDLE) sau în HALT. Prin intrarea în aceste stări
memoria RAM nu-şi schimbă conţinutul şi ieşirile nu-şi schimbă valorile logice. Modul de aşteptare
înseamnă încetarea activităţilor, cu excepţia:
oscilatorul;
ceasul de gardă;
ceasul pentru modul de aşteptare.
Curentul de alimentare în această stare este tipic 30% din curentul normal de funcţionare. Din modul de
aşteptare se poate ieşi prin RESET sau la un stimul exterior (o întrerupere de la un dispozitiv de I/O).
Ceasul pentru modul de aşteptare generează periodic întreruperi pentru ca MC să verifice starea. Dacă nu
există cereri de activare (Wake Up), MC se întoarce în starea de aşteptare. Starea de HALT este
asemănătoare cu cea de aşteptare. Capabilitatea MIWU (Multi Input WakeUp) face ca un MC să poată fi
trezit de una din mai multe cereri de întrerupere exterioare.
Ceasul de gardă (Watchdog Timer) este o opţiune recomandată în cazul sistemelor care pot avea o evoluţie
necontrolată sau la punerea la punct a sistemului. Ceasul de gardă este un circuit de temporizare care
generează un RESET după un anumit interval dacă programul a intrat de exemplu într-o buclă infinită.
Un circuit de protecţie poate determina trecerea MC în stare de RESET dacă ceasul de intrare are o valoare sub
cea permisă. Circuitul de protecţie care se numeşte monitor de tact poate fi activat/ dezactivat prin soft.
15. Criteriile pentru alegerea unui MC
Scopul principal al alegerii unui MC este obţinerea calităţii dorite cu un cost cât mai mic. Calităţile dorite înseamnă performanţă,
fiabilitate, calităţi EMC (de compatibilitate electromagnetică cu mediul), iar costul total include costurile cercetării, construcţiei,
testării, reparării produsului.

1.Posibilitatea folosirii în aplicaţia dată


-este suficient un MC sau este nevoie de circuite
suplimentare 3.Disponibilitatea suportului de dezvoltare
-liniile de I/O sunt suficiente (un număr prea mic -asambloare
înseamnă că aplicaţia nu se poate face cu acest MC, iar un -compilatoare
număr prea mare înseamnă un cost excesiv) -debuggere
-există toate interfeţele solicitate de aplicaţie: I/O -module de evaluare
serial, convertoare A/D, D/A şi nu există interfeţe în plus -emulatoare în circuit
-există capacitatea de memorare suficientă:RAM, -analizoare logice
ROM 4.Ajutor din partea constructorului
-MC are viteza suficientă pentru această aplicaţie, -documentaţie tehnică
se verifică timpul necesar rulării programului care trebuie -buletine de aplicaţii
să fie mai mic decât intervalul de timp în care trebuie să -rapoarte despre prbleme de funcţionare
reacţioneze MC -software de utilizare
-alimentarea MC poate fi făcută din aplicaţie (este -dacă MC este folosit şi de alţii, atunci sunt formate
posibil ca aplicaţia să fie portabilă, atunci este nevoie de grupuri de lucru care pot oferi ajutor
un MC care să funcţioneze la 3V 5.Seriozitatea constructorului
-preţul acestui MC este bun (acceptabil) pentru -dacă competenţa lui este demonstrată
aplicaţia respectivă -stabilitate şi fiabilitatea MC realizate
2.Disponibiltatea MC -viteza de livrare
-trebuie să fie disponibil în cantităţi suficiente -număr de ani ca şi constructor şi rezultate financiare
-trebuie să fie în producţia actuală, dar şi în viitor
pentru posibilitatea aprovizionării în viitor
-disponibilitatea unor accesorii (convertoare A/D,
D/A, alimentatoare etc
16. Proiectarea sistemelor cu MC în vederea
siguranţei în exploatare
Pot apare 2 categorii de probleme: aplicaţia poate genera perturbaţii (conduse sau radiate) sau poate fi susceptibilă la
perturbaţii (conduse sau radiate). Descoperirea unor probleme de EMI (Electromagnetic Interference) în timpul
producţiei aplicaţiei poate fi costisitor deoarece s-ar putea ca să fie necesară reproiectarea aplicaţiei, de aceea este
necesar să se proiecteze în vederea EMC (Electromagnetic Compatibility).Perturbaţiile sunt generate de
armonicile semnalelor digitale din circuit. Ele pot fi radiate de buclele de cablaj care se comportă ca şi antene sau
sunt conduse spre sursa de alimentare. Orice cale inductivă sau capacitivă pe traseul acestor armonici poate
provoca vârfuri de tensiune sau căderi de tensiune.

Prin metodele de programare defensivă se poate îmbunătăţi mult siguranţa în funcţionare, fără nici un hardware
suplimentar. Câteva din cele mai eficiente metode sunt:
-reîncărcarea periodică a registrelor care comandă pinii de I/O şi a celor mai importante registre. Pinii de I/O sunt
legătura MC cu exteriorul, de aceea ei sunt supuşi perturbaţiilor. Readucerea lor la nivele corecte micşorează
probabilitatea ca o perturbaţie să se propage în circuit.
-citirea repetată a semnalelor de intrare micşorează riscul unei citiri greşite. De exemplu citirea unui pin care este legat
la o tastă de 3 ori la rând la intervalul de timp normal pentru 3 citiri succesive, dacă s-a citit aceeaşi valoare,
elimină posibilitatea unei perturbaţii.
-dacă există locaţii în RAM nefolosite, după fiecare etapă de rulare a programului se scrie un bit în RAM.. Înainte de
rularea unei rutine critice se verifică valoarea stocată în RAM şi rutina se execută doar în cazul în care valoarea
din RAM este corectă.
-dacă într-o aplicaţie există memorie nefolosită, aceasta se umple cu instrucţiuni de salt într-un loc cunoscut pentru ca
un salt neprevăzut în memorie datorat unei perturbaţii să fie anulat de saltul în locul cunoscut, cu o anumită
probabilitate.
Exemple de sisteme cu MC realizate la proiect
Exemple de sisteme cu MC realizate la proiect
Mediu de dezvoltare pentru MCS 51

Franklin Software
Exemplu de programare MCS 51

ORG 8000h
nop
mov P0,#0Fh
nop
mov P0,#00h
end
Mediu de dezvoltare pentru ATMEL RISC

AVR STUDIO
Mediu de
dezvoltare
pentru PIC

MPLAB
Arduino
Cel mai simplu de construit un sistem pe bază de microcontroller este cu
prin utilizarea modulelor Arduino. Există doi mari furnizori:
www.robofun.ro
www.teguna.ro
Se pot cumpăra o mare diversitate de sisteme de dezvoltare, traductori şi
elemente de execuţie.

Două exemple de sisteme


de dezvoltare:
Arduino Leonardo
(stânga) cu ATMega 32 şi
Arduino Due cu
microcontroller ARM pe
32 de biţi (dreapta)
Senzori de la Arduino
Senzorul de distanţă cu ultrasunete HC-SR04 este un senzor de distanţă fără contact care funcţionează pe
principiul ecolocaţiei.
Senzor analog temperatură cu cablu senzor 3 pini Un senzor analog de temperatură cu cablu 3 pini (mamă-
mamă) pentru conectarea la un sensor shield. Acesta este un senzor simplu de temperatură cu precizie medie.
Senzor de lumină, Un senzor analog de lumină.
Senzor digital de temperatură TMP102. Acesta este un breakout pentru senzorul digital de temperatură TMP102
la 3,3V. TMP102 este un senzor digital (I2C sau DST) cu o rezoluţie de 0.0625°C şi este exact până la 0,5°C.
Senzorul necesită foarte puţin curent şi are o sumedenie de funcţii.
Un senzor de mişcare PIR (Passive Infrared) monitorizează emisiile în infraroşu din câmpul său vizual şi trimite
semnal către placa conectată atunci când detectează mişcare. Din punctul de vedere al platformei Arduino, un
senzor PIR se comportă la fel ca un buton.
Senzor mecanic de înclinare. Senzorul de înclinare este o componentă care poate detecta inclinarea unui obiect.
De fapt, este exact echivalentul unui switch on-off activat de o bilă metalică.
Accelerometru MMA7361. Accelerometrul MM7631, modul cu 3 axe, este folosit pentru citirea în timp real a
înclinării. 3999 leiÎn stocAdaugă
Senzor temperatură şi umiditate DHT11 cu cablu senzor 3 pini. Un senzor digital de umiditate şi temperatură
(DHT11), plus un cablu cu trei fire mamă-mamă pentru conectarea modulului la un shield senzor.
Modul optocuplor. Un optocuplor detectează în mod optic prezenţa unui obiect opac între emiţătorul şi detectorul
de lumină. Utilizat în mod frecvent pentru sisteme anti-efracţie şi pentru identificarea poziţiei şi/sau vitezei
unui ansamblu mobil (de exemplul capul unei imprimante cu jet de cerneală).
Senzor de sunet analog. Senzorul de sunet pentru Arduino utilizează un microfon pentru a detecta nivelul de
zgomot şi scoate în mod constant un semnal proporţional.
Senzori de la Arduino
Senzor non-invaziv curent 30A. Acest senzor non-invaziv de curent poate fi prins în
jurul unui cablu de alimentare pentru a afla ce curent trece prin acesta. Senzorul se
comportă ca un inductor si măsurând câmpul magnetic generat de trecerea
curentului prin cablul măsurat. Puteti calcula ce curent trece prin conductor citind
valoarea curentului indus în modul.
Modul senzor fum şi gaze periculoase MQ-2 cu cablu senzor 3 pini. Un modul
senzor de fum şi de gaze periculoase: GPL, propan, hidrogen, alcool, gaz metan
şi fum. Senzorul este comercializat împreună cu un cablu cu trei fire mamă-mamă
pentru conectarea modulului la un shield senzor.
Senzor de presiune barometrică BMP085. Aceasta este o placă simplă ce conţine
senzorul de presiune barometrică BMP085 de înaltă precizie şi putere mică.
BMP085 oferă o plajă de măsurare de la 300 până la 1100 hPa cu o precizie
absolută de până la 0,03 hPa. Este bazată pe tehnologia piezo-rezistivă pentru
rezistenţa la interferenţe, precizia ridicată, liniaritate îmbunătăţită şi stabilitate pe
termen lung.
Accelerometru TinkerKit 2/3 axe LIS344AL. Acesta este accelerometrul de la
TinkerKit, bazat pe LIS344ALH de la STMicroelectronics. Modulul are pini pentru
X şi Y, dar se poate citi şi Z prin lipirea unui fir în gaura marcată "Z" pe placă.
Giroscop digital triaxial L3G4200D SPI/I2C. L3G4200D este un giroscop triaxial
digital, cu tensiune de alimentare între 3-5V. Acesta comunică serial prin SPI/I2C
Module de comunicaţie Arduino
Modul Ethernet ENC28J60. Un modul Ethernet de sine stătător de dimensiuni foarte reduse.
Modul Bluetooth serial master-slave BC04. Un modul Bluetooth de dimensiuni reduse pentru comunicații
seriale. Modulul trebuie alimentat la 3,3 V. Modul de lucru (master/slave) poate fi comutat din
software.
Modul USB CH375B. Acesta este un modul USB SPI la 5V care permite conectarea oricărui dispozitiv de
stocare USB la placa dumneavoastră Arduino. Firmware-ul chipset-ului suportă nativ FAT32, FAT16 şi
FAT12.
Transceiver radio nRF24L01+ cu RP-SMA. Modulul nRF24L01+ foloseşte un emiţător/receptor de
2,4GHz de la la Nordic Semiconductor. Placa are un regulator de tensiune inclus (suportă tensiuni de
alimentare între 3,3-7V si logică pe 3,3-5V), functie de auto-retransmisie si rază de 100m la 250kbps
(maxim 2Mbps la distante mai mici).
Modem Bluetooth - BlueSMiRF Silver. Această versiune de BlueSMiRF Silver foloseşte modulul RN-42,
care are o plajă mai mică decât a modulului RN-41, folosit de BlueSMiRF Gold. Aceste modemuri
funcţionează ca un conductor serial (RX/TX). Orice flux de date serial de la 2400 la 115200 bps poate
fi trecut cu uşurinţă dinspre computer către dispozitiv.
Kit conectare radio APC220. Un kit pentru conectare serială între orice dispozitiv electronic (e.g. Arduino)
şi un PC. Kit-ul conţine două module transmisie wireless, două antene şi un modul de conversie USB-
TTL.
Transceiver easyRadio ERA900TRS. Acesta este modulul easyRadio ERA900TRS la 868MHz, cu
alimentare între 2,2-5,5V si care se comportă la fel ca un port serial cu lătime de bandă între 2400-
115200 baud.
Module Arduino
Shield LCD + tastatură. Un shield care conţine atât un afişaj LCD monocrom 16x2 caractere cât şi un set de şase
butoane (dintre care unul este reset). Util pentru dezvoltare, întrucât permite interfaţarea simplă cu placa de
dezvoltare.
Shield Ethernet W5100. Acesta este un shield Ethernet compatibil cu Arduino Duemilanove (168 sau 328), 2009,
UNO, Mega (1280 sau 2560). Este suportat de biblioteca oficială Ethernet Arduino.
Ardumoto - shield driver motor. Noua versiune a acestui shield permite logică la 3,3V şi 5V, o alimentare
separată şi mai robustă,
Shield LCD color 128x128. Shield-ul LCD color oferă posibiliatea de a conecta popularul LCD Nokia 6100 la
placa dvs. Arduino. Placa are integrat atât un afisaj LCD color de 128x128 pixeli cât si un set de 3 butoane
conectate la pinii D3-D5.
Shield LOL 10mm (alb). Placă shield cu 126 de LED-uri de 10mm, de culoare albă. Shield compatibil pentru
sistemul Arduino. Placa foloseşte toţi pinii digitali din Arduino (D2, ..., D13).
Shield-ul Xbee cu modul wireless este soluţia completă pentru comunicare wireless pentru Arduino. Acesta poate
comunica la distanţe de până la 30 m în interior sau 100 m în aer liber.
Shield Ethernet Arduino cu PoE. Shield-ul original de la Arduino cu PoE (Power over Ethernet). Acest shield
prezintă şi un slot pentru card micro-SD. Bazat pe chip Wiznet W5100.
Shield Arduino GSM cu antenă integrată. Shield-ul Arduino GSM conectează placa dumneavoastră Arduino la
Internet folosind tehnologia GPRS. Înfigeti acest modul în placa dumneavoastră Arduino, înfigeti un card
SIM de la un operator care oferă GPRS în zona dumneavoastră si folositi câteva instructiuni simple pentru a
vă controla proiectele prin Internet! În plus, puteti face si primi apeluri de voce si veti putea primi si trimite
mesaje SMS.
Shield WiFi Arduino. Acest shield original Arduino permite conectarea la o reţea WiFi cu ajutorul antenei
integrate.
Exemplu de aplicaţie cu Arduino
Comanda unui motor pas cu pas

void loop(){
//rotate a specific number of degrees
rotateDeg(360, 1);
delay(1000);
rotateDeg(-360, 0.1); //reverse
delay(1000);
//rotate a specific number of microsteps
(8 microsteps per step)
//a 200 step stepper would take 1600
micro steps for one full
//revolution
rotate(1600, 0.5);
delay(1000);
rotate(-1600, 0.25); //reverse
delay(1000);
}
Proiect de diplomă cu Arduino

Sistem mobil echipat cu un senzor de gaz, un modul Arduino cu microcontroller,


drivere pentru motoare de curent continuu şi modul Bluetooth. Comanda de la
distanţă se face cu un telefon mobil, interfaţa grafică a programului fiind
arătată în dreapta.
Cât este de greu de construit un modul
cu microcontroller?
Cât este de greu de construit un modul
cu microcontroller. Exemplu de
dispozitiv de protecţie la scurtcircuit
Consumator (de
exemplu un bec)

Microcontroller
Convertor
Reţea Analog
Numeric Unitate prelucrare date

Releu comandat de
microcontroller

Microcontrollerul citeşte în buclă valoarea curentului şi o compară cu o valoare de referinţă. Dacă


curentul măsurat este mai mare decât o anumită valoare microcontrollerul comandă
întreruperea circuitului cu un releu
Cât este de greu de construit un modul
cu microcontroller. Exemplu de
dispozitiv de protecţie la scurtcircuit.
Schema logică a programului
De la convertorul analog
numeric (digital)
Să presupunem că senzorul de curent cuplat la intrarea
convertorului Analog Numeric este calibrat astfel încât IN
se citeşte 00H la curent 0 şi FFH la un curent de
15Amperi şi că dorim o limită de decuplare la 10Amperi.
În schema logică a programului se vede cum la primul
pas se citeşte valoarea măsurată a curentului, se compară < CMP >
0AH
apoi cu 0AH (valoarea corespunzătoare pentru 10A.
Dacă valoarea măsurată este mai mică decât 0AH, totul
este în ordine şi se reia măsurătoarea. Dacă valoarea OUT decuplare reţea

măsurată este mai mare decât 0AH atunci


microcontrollerul trimite un semnal care decuplează CALL buclă întârziere
sarcina, oprind curentul. Se aşteaptă o perioadă de timp
după care se reia alimentarea sarcinii şi bucla de program
OUT cuplare reţea
se reia, continuând supravegherea curentului.
Cum ajunge programul scris pe PC în
microcontroller?
La sfârşit puneţi ce aţi făcut într-o carcasă

You might also like