LUCRARE DE PRACTICĂ

Embed Size (px)

Citation preview

LUCRARE DE PRACTIC

MICROCONTROLERE

SBANCA MDLIN AIA 44811

Cuprins: Microcontrolere descriere generala Schema bloc generala Schema bloc detaliata Tema lucrarii Piese folosite LED BIBY ATMEGA8 Modulul serial asincron Modulul serial sincron Module timer Module PWM

Mod de lucru Cod sursa Rezultat Bibliogrfie

2

Microcontrolere. Descriere generalLa 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 interaciuni caracteristice cu mediul exterior, fr s fie necesar intervenia 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 iniial pe baza logicii cablate (cu circuite integrate numerice standard SSI i MSI ) i a unei electronici analogice uneori complexe, motiv pentru care "strluceau" prin dimensiuni mari, consum energetic pe msur i, nu de puine ori, o fiabilitate care lsa de dorit. Apariia i utilizarea microprocesoarelor de uz general a dus la o reducere consistent a costurilor, dimensiunilor, consumului i o mbuntire a fiabilitii. 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 msur ce procesul de miniaturizare a continuat, a fost posibil ca majoritatea componentelor necesare realizrii 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 soluie (nu n sens exhaustiv !) a problemei controlului cu ajutorul a (aproape) unui singur circuit. Legat de denumiri i acronime utilizate, aa cum un microprocesor de uz general este desemnat prin MPU (MicroProcessor Unit), un microcontroler este, de regul, desemnat ca MCU, dei semnificaia iniial a acestui acronim este MicroComputer Unit. O definiie, cu un sens foarte larg de cuprindere, ar fi aceea c un microcontroller este un microcircuit care incorporeaz o unitate central (CPU) i o memorie mpreun cu resurse care-i permit interaciunea cu mediul exterior. Utilizarea unui microcontroler constituie o soluie prin care se poate reduce dramatic numrul componentelor electronice precum i costul proiectrii i al dezvoltrii unui produs. Schema bloc general

3

Ca intrri se folosesc de regul semnale provenind de la comutatoarele individuale sau de la traductoare (de temperatur, de presiune, foto, traductoare specializate). Intrrile pot fi digitale sau analogice. Intrrile digitale vehiculeaz semnale discrete, informaia "citit" fiind informaia ce se eantioneaz la momentul citirii liniei respective. Intrrile analogice vehiculeaz informaii exprimabile prin funcii continue de timp. "Citirea" acestora de ctre microcontroller presupune prezena unor circuite capabile s prelucreze aceste informaii, fie comparatoare analogice, fie convertoare analog-numerice, ale cror ieiri sunt citite de ctre MC. Ieirile sunt fie analogice, caz n care reprezint de fapt ieiri ale convertoarelor numericanalogice, fie sunt digitale, caz n care informaia este n general memorat pe acestea pn la o nou scriere operat de ctre UC la un port al MC. Ieirile pot comanda dispozitive de afiare, relee, motoare, difuzoare, etc. Schema bloc detaliat

4

Se poate distinge o prim diferen fa de calculatoarele personale, unde intrrile se fac de regul de la tastatur i ieirile pe monitorul TV sau la imprimant. Dac un calculator personal este folosit pentru a prelucra informaii i a afia rezultatele pe monitor sau hrtie, un MC comand un proces. Un element important, fr de care un MC nu poate funciona, este programul (sau programele), care se stocheaz n memoria proprie MC. Un MC poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o unitate central, memorie, oscilator pentru tact i dispozitive I/O. Un MC poate fi privit ca un microprocesor care pe acelai chip mai conine memorie i o serie de interfee. Natura i complexitatea aplicaiei n care este folosit MC determin performanele unitii centrale, capacitatea de memorie i tipul interfeelor ce compun structura intern a MC.

Tema lucrarii

Sa se scrie un program care foloseste un timer si 2 porturi(PB0 si PB1) pentruleduri si 2 butoane pentru activarea si dezactivarea ledului respectiv. Daca se primeste caracterul 1 pe seriala, frecventa ledului 0 este de 600ms; Daca se primeste caracterul 2 pe seriala, frecventa ledului 0 este de 1200ms; Daca se primeste caracterul 3 pe seriala, frecventa ledului 1 este de 800ms; Daca se primeste caracterul 4 pe seriala, frecventa ledului 1 este de 1600ms

5

Piese utilizate

Pentru a putea simula acest program am folosit 2 LED-uri BIBY, 2 Rezistori de 1k , 2 Butoane, un microcontroler ATMEGA8, o seriala, 2 timere si 2 PWM-uri.

LED-urile Un LED (din englez light-emitting diode, nsemnnd diod emitoare de lumin) este o diod semiconductoare ce emite lumin la polarizarea direct a jonciunii p-n. Efectul este o form de electroluminescen. Un LED este o surs de lumin mic, de cele mai multe ori nsoit de un circuit electric ce permite modularea formei radiaiei luminoase. De cele mai multe ori acestea sunt utilizate ca indicatori n cadrul dispozitivelor electronice, dar din ce n ce mai mult au nceput s fie utilizate n aplicaii de putere ca surse de iluminare. Culoarea luminii emise depinde de compoziia i de starea materialului semiconductor folosit, i poate fi n spectrul infrarou, vizibil sau ultraviolet. Pe lng iluminare, LED-urile sunt folosite din ce n ce mai des ntr-o serie mare de dispozitive electronice. Cel mai puternic LED comercializat aparine firmei sud-coreene Seoul Semiconductor[1]. Un singur LED din seria Z-Power P7 atinge performana de 900 Lumen la 10 Watt, deci o eficiena de 90 lm/W echivalnd cu un bec obinuit de 100W.

ATMEGA8 ATmega8 este un microcontroler de consum mic de putere pe 8 byti bazat pe arhitectura AVR RISC. Executnd instruciuni complexe ntr-un singur impuls, ATmega8 atinge 1 MIPS pe Mhz, permitnd astfel producatorului s regleze consumul de energie n funcie de viteza de procesare. Nucleul AVR combin un set de instruciuni bogat, cu 32 de registrii funcionali. Toti cei 32 de registrii sunt conectai direct la Unitatea Aritmetic Logic (UAL), permitnd ca 2 registrii independei s fie accesai ntr-un singur impuls. Arhitectura obinut este mult mai eficient i de asemenea de pn la 10 ori mai rapid dect microcontrolerele obinuite CISC e2s20so Microcontrolerul ATmega8 prezint urmtoarele caracteristici: 8Kbyti memorie intern tip Flash cu capabiliti de Read-;While-Write, 512 byi memorie EEPROM, 1 Kbyt memorie SRAM, 23 de instruciuni pentru porturile de intrari -; ieiri, 32 de regitrii funcionali, trei cronometre (Timer) cu moduri de comparare, ntreruperi interne i externe, un port serial programabil USART, o interfa serial, ADC (ADD with Carry) pe 6 canale (8 canale in TQFP si pachete de date MLF) cu o precizie de 10 biti, un timer de rezerv programabil cu oscilator intern, un port serial SPI , i 5 moduri de economisire a energiei programabile prin software. Modul Idle oprete unitatea central n timp ce permite SRAM-ului, cronometrelor/numrtoarelor, porturilor SPI i sistemului de ntrerupere s funcioneze. Modul Power-down salveaz coninutul registrelor dar nghea oscilatorul, fcnd neutilizabile oricare alte funcii ale cip-ului pn la urmatoarea ntrerupere sau resetare de hard. n6

modul Power-save numrtorul asincron continu s funcioneze, fapt ce permite utilizatorului sa menin o baz, n timp ce restul dispozitivului este n repaus. Modul ADC Noise Reduction oprete Unitatea central i toate modulele de I/O cu excepia numrtorului asincron i ADC-ul, pentru a minimaliza zgomotul de comutaie din timpul conversiei ADC. n modul Standby functioneaz doar oscilatorul n timp ce restul dispozitivului este n repaus. Microcontrolerul este fabricat folosind tehnologia de memorie volatile cu densitate mare Atmel. Memoria flash poate fi reprogramat folosind o interfaa serial SPI , printr-un program de memorie convenional nonvolatil. Programul boot poate folosi orice interfa pentru a descrca programul de aplicaii din memoria de aplicaii flash. Soft-ul din seciunea de boot flash va continua s ruleze n timp ce aplicaiile flash sunt updatate furniznd operaii reale de citire n timpul scrierii. Combinnd o unitate central RISC pe 8 biti cu o memorie intern autoprogramabil de tip flash, pe un cip monolithic , Atmel ATmega8 devine un microcontroler puternic care furnizeaz soluii extreme de flexibile i optime ca pre pentru multe aplicaii. ATmega8 AVR este dotat cu un set complet de programe i instruciuni ce includ compilatoare C, macro-asamblatoare i simulatoare/corectoare de programe, emulatoare de circuite i kituri de evaluare. Caracteristici Funcionale ATmega8 este un microcontroler de nalt performan, putere joas AVR pe 8 biti Arhitectura RISC avansat - 130 de instructiuni ,executare ntr-un singur ciclu de ceas, 32*8 registre de scop general, operatii complet statice, pana la 16 MIPS Throughput at 16 MHz, Multiplicator de 2 cicluri pe cip Programe i memorii de date nonvolatile, 8 kbytes de memorie flash autoprogramabil intern, Rezistena : 10.000 cicluri Scrie/Sterge, 512 biti EEPROM, Rezistenta : 100.000 Scrie/Sterge, 1 kbit intern SRAM o Inchidere programabila pentru securitatea softului Caracteristici periferice: Dou cronometre/numaratori de 8 biti cu prescalar separate i un mod de comparare, un cronometru/numarator de 16 biti cu prescalar separate, mod de comparare, si mod de capturare, numrtor n timp real cu oscillator separate, trei canale PWM, ADC pe 8 canale n TQFP i pachet MLF, ADC pe 6 canale n pachet PDIP, Interfat serial, Port USART serial programabil, interfata seriala SPI Master/Slave, Comparator analogic pe cip Caracteristici speciale ale microcontrolerului: Oscilator Rc intern calibrat; Surse de intrerupere interne i externe; Cinci moduri de repaus : Idle, ADC reducator de zgomot, cu consum mic de energie, putere minima, n asteptare Intrari/Iesiri si Pachete: 23 de linii programabile de I/O, 28-conductor PDIP, 32-conductor TQFP i 32-pad MLF Tensiuni operationale o 2.7-5.5 V(ATmega8L), 4.5-5.5 V(ATmega8) Grade de viteaza o 0-8 MHz(ATmega8L) , 0-16 MHz(ATmega8) Puterea consumata la 4MHz , 3V, 25 grade celsius o Activ : 3.6 mA o autointretinere: 1.0 mA o modulul de minima putere : 0.5A7

Modulul serial asincron

Comunicaia serial este o metod bine agreat i n contextul MC deoarece ofer compatibilitate cu o gam extins de dispozitive i necesit un numr minim de fire, implicit un numr minim de conexiuni (pini puini). n transferul serial de date este necesar s se cunoasc nceputul i sfritul informaiei transferate. Pentru a identifica cele dou coordonate emitorul i receptorul trebuie s fie sincronizai. Sincronizarea se poate realiza prin trei metode, dintre care numai dou sunt folosite n MC, urmnd s le considerm doar pe acestea n continuare. Oricare din metode presupune c durata unui bit este aceeai att la emitor ct i la receptor (este folosit acelai semnal de ceas pentru serializarea informaiei). Numrul de bii transmii ntr-o secund reprezint rata de transfer numit baud rate; aceasta se msoar n bii/secund (bps). Durata unui bit este 1/(baud rate) Prima metod considerat este transferul serial asincron. Modulul serial asincron este referit ca UART (Universal Asynchronous Receiver Transmiter). ntr-un transfer serial asincron nceputul fiecrui byte este marcat de o tranziie a liniei meninut pe durata corespunztoare unui bit. Sfritul este marcat de asemenea de un bit de stop; bitul de stop const n meninerea liniei pe durata unui bit ntr-o stare predefinit. ntre bitul de start i bitul de stop sunt transferai biii de informaie. O secven complet este compus dintr-un bit de start, opt sau nou bii de date i un bit de stop, n total 10 sau 11 uniti de cod. Interfaa serial asincron poate fi implementat n dou moduri ntr-un MC. Cea mai puin costisitoare soluie din punct de vedere al cheltuielilor de resurse hardware este un program care s genereze secvena de transfer ca i componen i ca durat a fiecrui bit. Programul trebuie s msoare durata fiecrui bit. Soluia este costisitoare din punct de vedere al timpului consumat n rularea programului. Modulul serial sincron Urmtoarele dou metode de sincronizare posibile la transferul serial sunt transfer serial sincron i transfer serial autosincronizat. Transferul autosincronizat se bazeaz pe utilizarea unui sistem special de codificare a datelor. Sistemul permite ca din datele recepionate s se poat extrage semnalul de ceas. Aceast metod nu este folosit n MC. Transferul serial sincron este folosit pentru comunicaii locale ntre procesoare sau cu dispozitivele periferice. n transferul sincron datele transferate sunt nsoite de semnalul de clock. Semnalul de clock este transferat pe o linie dedicat. Transferul serial sincron necesit trei conexiuni: emisie, recepie i clock. Interfaa hardware este mai simpl dect la transferul asincron. Protocolul dintre emitor i receptor include o scurt perioad de sincronizare la iniierea unui transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face prin bitul de start al fiecrui octet, la transferul sincron aceasta are loc o singur dat, la nceputul transferului unui bloc de date. Transferul serial sincron permite rate de transfer mai mari dect transferul serial asincron; rate de 1Mbps. ntr-o conexiune serial sincron unul din dispozitive este master iar cellalt este slave. Un transfer poate fi iniiat doar de un master. Master-ul scrie un octet n registrul de transmisie de date al interfeei seriale sincrone. Datele sunt transferate unui registru de deplasare unde sunt serializate i transmise pe linia de emisie numit MOSI (Master Output Slave Input). Pe linia SCK (Serial Clock) este transmis clock-ul. La slave datele ajung tot pe linia MOSI ntr-un registru de deplasare unde sunt deplasate cu ceasul recepionat pe linia SCK. La umplerea registrului de deplasare datele sunt transferate n registrul de recepie de date.8

Conexiune serial sincron single master multi slave Modele Timer Natura aplicaiilor pentru care s-a nscut microcontroller-ul implic o multitudine de funcii de timp puse la dispoziia utilizatorului prin module de timp numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai mult sau mai puin complex. Un sistem timer obinuit pune la dispoziie un set de funcii implementate pe baza unui numrtor liber central i a unor blocuri funcionale pentru fiecare funcie n parte. Timer-ul are n structura sa, dintre toate celelalte subsisteme, cele mai multe registre. Toate funciile unui timer pot genera ntreruperi independente; fiecare are controlul propriu i propriul vector de ntrerupere. Modulele timer complexe sunt construite cu arii de numrare programabile (PCA). Pentru aplicaii speciale n timp real s-au construit module timer cu unitate aritmetic i logic proprie Timer-ul este folosit pentru a msura timpul i pentru a genera semnale cu perioade i frecvene dorite. Timer-ele nu sunt doar circuite cu funcii de temporizare; n modulul timer sunt implementate cteva mecanisme care pun la dispoziia utilizatorului funcii specifice. Mecanismul de comparare permite controlul unor semnale de ieire; mecanismul de captur permite monitorizarea unor semnale de intrare; numrtoarele interne permit generarea de referine de timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini software, .a. Timer-ul poate fi folosit practic pentru orice funcie de timp, inclusiv generarea unor forme de und sau conversii D/A simple. Module PWM i A/D Semnalul PWM este un semnal periodic la care se poate modifica n mod controlat factorul de umplere. Modulele timer au resursele necesare generrii unui semnal cu factor de umplere variabil. Deoarece, dup cum am mai amintit, semnalul PWM este utilizat n aplicaii exist module timer dedicate acestei funcii; modulele PWM. Un modul PWM poate genera mai multe semnale modulate. Ct timp rezultatul comparaiei este mai mic sau egal, se va genera un unu logic la ieirea PWM. Dac rezultatul comparaiei este mai mare, se va genera la ieirea PWM un zero logic. Dac registrele comparate sunt de opt bii factorul de umplere poate fi ntre 1/256 i 1. Un canal PWM odat programat va genera la ieire semnalul periodic continuu, fr intervenia unitii centrale.

9

Intrrile/ieirile analogice i convertoarele A/D nu sunt considerate ca parte definit n contextul unui calculator; aceste elemente sunt importante n schimb atunci cnd considerm un microcontroller. Prezena modulelor A/D i D/A n structura unui MC contribuie la putereaacestuia n aplicaii deoarece interfaarea cu mediul presupune necesitatea de a prelucra sau de a elabora mrimi analogice.

Mod de lucruDup ce au fost alese toate componentele, s-a conectat conform cerinei LED-ul 1 la portul PB0 i LED-ul 2 la portul PB1 al microcontrolerului. Pentru sigurana LED-urilor s-a montat i rezistoare ntre LED-uri i mas. Totodata s-au montat i cele doua butoane care cupleaz i decupleaz cele 2 LED-uri prin intermediul microcontrolerului, butoanele fiind conectate la porturile PD2 SI PD3 ale microcontrolerului. Am folosit i o serial conectat la porturile PD0 i PD1 ale microcontrolerului pentru a putea da comanda manual, adic pentru a putea insera caracterele cerute n enunul problemei. Astfel, dup realizarea codului surs care va fi prezentat ulterior, n momentul n care n serial se introduce caracterul 1 perioada LED-urilor va fi de 600ms, n momentul introducerii caracterului 2, perioada LED-urilor va fi de 1200ms, n momentul introducerii caracterului 3, perioada LED-urilor va fi de 800ms, iar n momentul introducerii caracterului 4, perioada LEDurilor va fi de 1600ms, conform cerinelor specificate n enun. Mai multe se vor putea observa din codul surs urmtor.

Cod Sursa/***************************************************** This program was produced by the

10

CodeWizardAVR V2.04.8b Evaluation Automatic Program Generator Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 10/4/2010

Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type Program type : ATmega8 : Application

AVR Core Clock frequency: 8.000000 MHz Memory model External RAM size Data Stack size : Small :0 : 256

*****************************************************/ #include // Standard Input/Output functions #include unsigned char led0_flag=1,led1_flag=1; unsigned char n=0; unsigned char t=0; unsigned char t1=10; unsigned char c=0; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here led0_flag=!led0_flag; }

11

// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here led1_flag=!led1_flag; } interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here n++; if (n==12) { n=0; t++; if (t==t1) {t=0; if (led0_flag) { PORTB.0=~PINB.0; } if (led1_flag) { PORTB.1=~PINB.1; } } } }

// Declare your global variables here void main(void) {

12

// Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T PORTB=0x00; DDRB=0x03; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x04; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 1000.000 kHz // Mode: Ph. & fr. cor. PWM top=ICR1 // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off

13

// Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: On // INT1 Mode: Rising Edge GICR|=0xC0; MCUCR=0x0F; GIFR=0xC0; // Timer(s)/Counter(s) Interrupt(s) initialization

14

TIMSK=0x01; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") while (1) { // Place your code here c=getchar(); if(c=='1') {t1=6;printf("\r\n,t1=600");} if(c=='2') {t1=12;printf("\r\n,t1=1200");} if(c=='3') {t1=8;printf("\r\n,t1=800");} if(c=='4') {t1=16;printf("\r\n,t1=1600");}

15

} }

S-a setat Clock Value la Timer 31.250 kHz pentru a putea folosi Timer-u, adic t1, n valori divizate cu 100, adic pentru a putea seta frecvena de 6,12,8 i 16.

Rezultat

Bibliografie Curs Microcontrolere Dan Floroian www.wikipedia.com help Proteus (ISIS Profesional)

16