Upload
ion-caimacan
View
36
Download
0
Embed Size (px)
DESCRIPTION
Proiect AF
Citation preview
3
3
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
Introducere
INTEL în anul 1971 a anunţat producerea primului microprocesor, acest
eveniment se considera momentul trecerii de la electronica implementată cablat la
electronica realizată programat. Primul microprocesor 4004 a fost conceput de M.E.
Hoff ca un procesor puţin simplificat pentru a putea fi implementat, la vremea aceea,
pe un singur chip în siliciu. Iniţial, microprocesorul nu a fost un computer-on-a-chip,
deşi în timp a ajuns la acest stadiu; conceptul de microprocesor s-a dezvoltat şi spre
alte implementări specifice: microcontroller, microcalculator, procesor de semnale
(DSP). Oricare din aceste circuite, pentru a deveni parte a unui sistem, impune un
proces de proiectare care se bazează în egală măsură atât pe componenta hardware
cât şi pe componenta software.
Microprocesorul, sau celelalte variante ale sale, integrat într-un system aduc
acestuia acea performanţă, care atunci când este realizată de fiinţa umană este referită
ca inteligenţă. În general, microprocesorul este integrat ca unitate central de procesare
în sistemele digitale de calcul. Actual, aproape toate sistemele au o arhitectură de
sistem digital particularizându-se în funcţie de aplicare/utilizare.
Forţa care a impus sistemele pe bază de microcontroller constă în
programabilitatea unei componente de serie. Pentru sistemele la care o component de
serie, chiar programabilă în software, nu duce la rezultatele cele mai bune au apărut
implementările pe bază de circuite ASIC (Application Specific Integrated
Circuits). Spre deosebire de sistemele pe bază de microcontroller, unde funcţionarea
dorită se obţine, în software, printr-un anumit program, la sistemele pe bază de
circuite ASIC funcţionarea dorită se obţine prin structurarea hardwareului cu un
anumit program. Alegerea între o implementare pe bază de microcontroller, o
implementare pe bază de circuit ASIC sau una combinată depinde de aplicaţia
respectivă şi de cerinţele impuse.
Privind evoluţia istorică a operaţiei de comandă a unui proces putem contura
imaginea unui microcontroller. Un controller este un sistem folosit pentru a comanda
şi a prelua stări de la un proces sau un aspect al mediului înconjurător. La început un
4
4
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
controller era un echipament de mari dimensiuni. După apariţia microprocesoarelor
dimensiunile controller-elor s-au redus. Procesul de miniaturizare a continuat, toate
componentele necesare unui controller au fost integrate pe acelaşi chip. S-a născut
astfel calculatorul pe un singur chip specializat pentru implementarea operaţiilor de
control; acesta este microcontroller-ul. Un microcontroller este un circuit realizat pe
un singur chip care conţine tipic:
• unitatea centrală;
• generatorul de tact (la care trebuie adăugat din exterior un cristal de cuarţ
sau în aplicaţii mai puţin pretenţioase, un circuit RC);
• memoria volatilă (RAM);
• memoria nevolatilă (ROM/PROM/EPROM/EEPROM);
• dispozitive I/O seriale şi paralele;
• controller de întreruperi, controller DMA, numărătoare/temporizatoare
(timers), covertoare A/D şi D/A, etc.;
• periferice.
Preţul unui MC este redus din cauza cantităţilor mari în care se fabrică. Preţul
mic al MC aduce cu sine şi micşorarea preţului sistemelor de control (se micşorează
inclusiv costul proiectării). Diferenţele dintre microprocesor şi unitatea centrală a MC
se atenuează în timp. Astfel, marii constructori de procesoare au realizat nişte circuite
care s-ar putea numi super-microcontroller-e, aşa cum sunt Motorola 68EC300,
INTEL 386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur
chip. Cu un MC se poate realiza un controller integrat (Embedded Controller, EC).
Un controller integrat face parte dintr-un sistem construit cu un anumit scop, altul
decât calcule generale. Pe lângă MC, un controller integrat are nevoie de hardware
suplimentar pentru a-şi îndeplini funcţia. Importanţa MC este dovedită incontestabil
de piaţa care este în continuă creştere.
5
5
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
Sarcina tehnica
Proiectul dat din punct de vedere a părtii sale electronice, va fi realizat în baza
microcontrolerului ATmega32, scopul principal fiind realizarea unui sistem de
monitorizare a traficului rutier. La realizarea proiectului voi utiliza mediul de
proiectare AVR-Studio pentru elaborarea si compilarea programului
microcontrolerului. Pentru simularea circuitului voi folosi pachetul de programe
pentru simulare Proteus şi schema electrica va fi realizată în Eagle.
1. Structura şi principiul de funcţionarea al microcontrolerului
1.1.Arhitectura MCU ATmega32
ATmega32 este un microcontroler CMOS de 8 biţi de mică putere bazat pe
arhitectura RISC AVR imbunătăţită.
Dispune de un set de 131 instrucţiuni şi 32 de registre de uz general. Cele 32 de
registre sunt direct adresabile de Unitatea Logica Aritmetica(ALU), permiţînd
accesarea a două registre independente într-o singură instrucţiune. Se obtine astfel o
eficienţă sporită în execuţie(de pînă la zece ori mai rapide decît microcontrorelerele
conveţionale CISC).
ATmega32 este un microcontroler RISC pe 8 biţi realizat de firma Atmel.
Caracteristicile principale ale acestuia sunt:
- 32KB de memorie Flash reinscriptibilă pentru stocarea programelor
- 2KB de memorie SRAM
- 1024B de memorie EEPROM
- două numărătoare/temporizatoare de 8 biţi
- un numărător/temporizator de 16 biţi
- conţine un convertor analog – digital de 10 biţi, cu intrări multiple
- conţine un comparator analogic
6
6
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
- conţine un modul USART pentru comunicaţie serială (port serial)
- dispune de un cronometru cu oscilator intern
- oferă 32 de linii I/O organizate în patru porturi (PA, PB, PC, PD).
Structura internă generală a controlerului este prezentată în Figura 1. Se poate
observa că există o magistrală generală de date la care sunt conectate mai multe
module:
- unitatea aritmetică şi logică (ALU)
- registrele generale
- memoria SRAM şi memoria EEPROM
- liniile de intrare (porturile – I/O Lines) şi celelalte blocuri de intrare/ieşire. Aceste
ultime module sunt controlate de un set special de registre, fiecare modul avînd
asociat un număr de registre specifice, Memoria Flash de program împreună cu
întreg blocul de extragere a instrucţiunilor, decodare şi execuţia comunică printr-o
magistrală proprie, separată de magistrala de date menţionată mai sus. Acest tip de
organizare este conform principiilor unei arhitecturi Harvad şi permite
controlerului să execute instrucţiunile foarte rapid.
Modul Power-down salvează conţinutul registrelor, dar blochează
Oscilatorul, dezactivînd toate celelalte functii ale chip-ului pînă la urmatoarea
Intrerupere Externa sau Reset hardware. In modul Power-save, timer-ul asincron
continuă să meargă, permiţînd user-ului să menţină o bază de timp în timp ce restul
dispozitivului este oprit.
În modul Standby, Oscilatorul funcţioneaza în timp ce restul despozitivului este
oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus de
energie. În modul stanby extins(Extended Stanby Mode), atît Oscilatorul principal
cît şi timer-ul asincron continuă să funcţioneze.
Memoria flash (On-chip) permite să fie reprogaramată printr-o interfaţă serială
7
7
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
SPI, de către un programator de memorie nonvolatilă convenţional, sau de către un
program de boot On-chip ce rulează pe baza AVR. Programul de boot poate folosi
orice interfata să încarce programul aplicaţie în memoria Flash de aplicaţie.
ATmega32 AVR este susţinut de o serie completă de instrumente de program şi
de dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe
debug/ simulare etc.
1.2. Interfata seriala RS-485
Interfetele seriale sunt utilizate, in general, pentru a conecta circuite periferice la
microcontroller. Aceste interfete permit conectarea de dispozitive diverse, cum ar fi :
ceas de timp real, memorii nevolatile pentru stocarea unor parametrii, interfete cu
senzori. Standardul RS485 a fost conceput cu scopul de a extinde si imbunatati
posibilitatile de comunicatie pe o linie seriala. Dintre imbunatatirile avute in vedere se
pot aminti :
- cresterea distantei maxime de comunicatie ( aprox. 1 Km)
- cresterea imunitatii la zgomot
- posibilitatea realizarii unei comunicatii multipunct ( comunicatie in retea)
- utilizarea unui mediu ieftin de comunicatie
Transmiterea de date prin interfata RS485 consta intr-o transmisie seriala de
informatii la distante de pana la 1200m. Daca se respecta anumite specificatii tehnice
poate fi folosita si in medii industrial. Intr-o retea, numarul maxim de dispozitive care
se pot conecta la magistrala RS485este 32. Daca se folosesc repetoare, distanta si
numarul de dispozitive conectate la magistrala sunt nelimitate.
Acest protocol specifica urmatoarele :
- se utilizeaza un tronson de cablu bifilar torsadat, care are la cele doua
capeteterminatoare (rezistente) ; ambele linii se utilizeaza pentru transmisie, neexistind
fir demasa.
- codificarea datelor binare se face prin tensiuni diferentiale pozitive si
negativemasurate pe cele doua linii ale tronsonului ; tensiunea diferentiala
minimaconsiderata o data valida este de +/-200 mV.
- circuitele de emisie conectate pe acelasi tronson au iesiri de tip tri-state, pentru
a permite accesul multiplu, al mai multor echipamente, la acelasi tronson decomunicati
e ; accesul se face multiplexat in timp.
Comunicatiile digitale care implementeaza standardul RS-485 pot fi utilizate cu
succes pe distante lungi si in medii afectate de interferente. Pot fi conectati mai multi
receptori intr-o asemenea retea intr-o configuratie lineara. Acest standard ofera viteza
de transmisie a datelor de 35 Mbit/s pana la 10 m si 100 kbit/s pana la 1200 m. De
asemenea, poate acoperi distante relativ mari (pana la 1200 m). O regula spune ca
viteza masurata in bit/s inmultita cu viteza in metri nu ar trebui sa depaseasca 108.
8
8
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
1.3.Elaborarea şi descrierea schemei
Pentru execuţia practică a proiectului, apare necesitatea de a elabora schema
electrică a sistemului proiectat.
9
9
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
1.4. Simularea dispozitivului în Proteus
Fig. 2. Schema electrică pentru simulare în Proteus
2.Argumentarea alegerii tipurilor de elemente elecronice
2.1 Descrierea microcontrolerului
Fig. 3.Configurarea pinilor microcontrolerului ATmega32.
ATmega32 conţine 32 de registre de uz general şi 64 de registre speciale pentru
modulele I/O. Aceste registre sunt mapate la adrese din memoria RAM cuprinse între
0000h şi 005Fh.
10
10
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
2.2. Descrierea pinilor
Port A (PA7 .. PA0)
Port-ul A serveşte drept port de intrări analogice pentru Convertorul A/D.
Port-ul A serveşte de asemenea şi ca un port bidirecţional I/O de 8 biţi, în cazul în
care Convertorul A/D nu este folosit. Pinii de port pot fi conectaţi optional la VCC
prin rezistori interni, (selectaţi pentru fiecare bit). Buffer-ele de ieşire ale Portului A
au caracteristici de amplificare .
Port B (PB7.. PB0)
Portul B este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali).Buffer-
ele de ieşire ale Port-ului B au caracteristici de amplificare. Port-ul B indeplineşte de
asemenea funcţii speciale ale microcontrolerului ATmega32
Port C (PC7…PC0)
Portul C este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali). Buffer-
ele de ieşire ale Port-ului C au caracteristici de amplificare. Daca interfaţa JTAG (de
depanare) este activată, rezistorii pinilor PC5(TDI), PC3(TMS) si PC2(TCK) vor fi
activaţi, chiar dacă are loc o resetare. Port-ul C îndeplineşte de asemenea funcţii ale
interfeţei JTAG şi alte funcţii speciale ale ATmega32.
Port D (PD7…PD0)
Portul D este un port I/O de 8 biţi bidirecţional cu rezistori interni conectaţi opţional
la VCC (selectaţi pentru fiecare bit). Buffer-ele de output ale Port-ului D au
caracteristici de amplificare. Port-ul D îndeplineste de asemenea funcţii speciale ale
ATmega32. Reset - Un nivel scăzut la acest pin mai mare ca durata decît o valoare
prestabilită, va genera o initializare.
XTAL 1: Intrare pentru amplificatorul inversor al Oscilatorului;
XTAL 2: Iesire pentru amplificatorul inversor al Oscilatorului.
11
11
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
AVCC: pin de alimentare pentru Port-ul A si Convertorului A/D. Trebuie conectat
extern la Vcc, chiar dacă ADC nu este folosit. Dacă ADC este folosit , ar trebui
conectat la Vcc printr-un filtru trece jos.
AREF : pinul de referinţă analogică pentru Convertorul A/D
2.3 Diagrame bloc
Fig.4. Diagrama Bloc a Microcontrolerului ATmega32
12
12
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
Fig.5. Diagrama Bloc a arhitecturii Microcontrolerului ATmega32
13
13
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
CONCLUZII:
În zilele de astăzi trăim într-o lume a automatizării şi a controlului de către
dispozitivele electronice, domeniul IT cunoscind o dezvoltare foarte mare, continua,
nu exista o zi fara sa apara un element nou pe piata mondena. Toate aceste
automatizări sunt realizate cu ajutorul microcontrolerelor. Ele sunt prezente peste tot:
la dispozitivele de afişare, la dispozitivele audio, în prelucrarea informaţiei etc.
Odată cu evoluţia microprocesoarelor, proiectarea dispozitivelor a devenit
accesibilă practic tuturor doritorilor, deoarece a apărut accesul la diverse componente
electronice, despre care inainte nici nu se cunostea.
Prin realizarea acestui proiect am făcut un mare pas spre performanţele în lumea
ingineriei, deoarece am înţeles că de şi e destul de dificil de programat, este ceva
foarte interesant şi foarte eficient pentru evoluţia sistemelor de calcul.
14
14
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
BIBLIOGRAFIE:
1. Calmîcov I. ,,Conspectul de curs PSM”
2. DataSheet AtMega32
3. http://www.atmel.com/
4. http://www.google.com/
5. http://www.cadsoftusa.com/
15
15
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
ANEXĂ
16
16
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
Listingul programului:
/* * Created: 28.11.2014 19:42:40 * Author: Andrei */ #define F_CPU 16000000UL #define USART_BAUDRATE 19200 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #define nrBenzi 6 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <avr/interrupt.h> //6 benzi de circulatie int banda[nrBenzi] = {}; int workingMode = 0; int toggle = 0; char strBuff[5]; void USART_Init(void){ UBRRL = (unsigned char)BAUD_PRESCALE; UBRRH = (unsigned char)(BAUD_PRESCALE >> 8); UCSRB = ((1<<TXEN)|(1<<RXEN)| (1<<RXCIE)); } void USART_SendByte(uint8_t u8Data){ while((UCSRA &(1<<UDRE)) == 0); UDR = u8Data; } void USART_putstring(char* StringPtr){ while(*StringPtr != 0x00) { USART_SendByte(*StringPtr); StringPtr++; } } ISR(USART_RXC_vect) { while(!(UCSRA & (1<<RXC))); switch(UDR) { case '0': workingMode = 0; USART_putstring("Mod de lucru 0;\r"); resetArrayValue(&banda); break; //mode de lucru 1, raporteaza banda pe care trece masina case '1': workingMode = 1; USART_putstring("Mod de lucru 1;\r"); resetArrayValue(&banda); break; // mode de lucru 2, aduna numarul de masini si raporteaza la cerere case 'r': sendReport(); break; } return UDR; } void resetArrayValue(int *buff) { for(int i=0;i<nrBenzi;i++) { buff[i] = 0; } } void sendReport()
17
17
Coala
Mod Nr Document Semnătura Data
UTM 529.1.270.ME
{ for(int i=nrBenzi-1;i>=0;i--) { itoa(banda[i],strBuff,10); USART_putstring(strBuff); if((i-1)<nrBenzi) USART_SendByte(','); } USART_SendByte(';\r'); resetArrayValue(&banda); } int main(void) { DDRB = 0x60; //pe portul b PORTB = 0xC0; //pull up pe pinii 7 si 8 DDRA = 0x0; PORTA = 0xFF; //pull up pe PA DDRC = 0x0; PORTC = 0xFF; //pull up pe PC DDRD = 0x0; PORTD = 0xFF; USART_Init(); sei(); int portBVal = 0; USART_putstring("Mod de lucru 0;\r"); USART_putstring("Moduri disponibile:\r0 - raporteaza live;\r1 - colecteaza date;\r"); while(1) { portBVal = PINB; for(int i=0;i<nrBenzi;i++) { if( ((portBVal>>i)&1 == 1) ) { toggle |= 1<<i; } else if( (toggle>>i)&1 == 1) { if(workingMode == 1) { banda[i]++; } else { banda[i]++; if(banda[i] % 2 == 0) { itoa(i,strBuff,10); USART_putstring(strBuff); USART_putstring("\r"); banda[i] = 0; } } toggle &= ~(1<<i); } } _delay_ms(50); } }