This shows you the differences between two versions of the page.
pm:lab:lab0 [2020/02/23 19:53] dorin_marian.ionita [3.1. Dezvoltare, compilare] |
pm:lab:lab0 [2020/02/27 22:08] (current) dorin_marian.ionita [5. Exerciții] |
||
---|---|---|---|
Line 38: | Line 38: | ||
**Costul unui µC depinde în mare măsură de** numărul de periferice integrate, frecvența de lucru a procesorului, cantitatea de memorie și alți parametri amintiți mai sus. Cu cât caracteristicile acestuia sunt mai avansate, cu atât crește prețul de producție. Arhitecturile de µC pe piaţă la ora actuală variază în limite largi, de la chip-uri cu doar 2 pini de I/O până la procesoare digitale de semnal (DSP) sau procesoare cu arhitecturi avansate pe 32 sau chiar 64 de biţi (ex: ARM, PIC32, STM32 sau AVR32). | **Costul unui µC depinde în mare măsură de** numărul de periferice integrate, frecvența de lucru a procesorului, cantitatea de memorie și alți parametri amintiți mai sus. Cu cât caracteristicile acestuia sunt mai avansate, cu atât crește prețul de producție. Arhitecturile de µC pe piaţă la ora actuală variază în limite largi, de la chip-uri cu doar 2 pini de I/O până la procesoare digitale de semnal (DSP) sau procesoare cu arhitecturi avansate pe 32 sau chiar 64 de biţi (ex: ARM, PIC32, STM32 sau AVR32). | ||
- | |||
- | <hidden>In sectiunea urmatoare nu suntem consecventi: volatile -RAM, nevoltatile EEPROM (cratima).</hidden> | ||
<note tip> | <note tip> | ||
- | **În concluzie,** un microcontroller este un circuit integrat ce reunește o unitate de procesare (CPU), memorii(volatile -RAM, nevolatile EEPROM, Flash, ROM) și diverse periferice ce îi permite acestuia să comunice cu mediul extern. | + | **În concluzie,** un microcontroller este un circuit integrat ce reunește o unitate de procesare (CPU), memorii(volatile RAM, nevolatile EEPROM, Flash, ROM) și diverse periferice ce îi permite acestuia să comunice cu mediul extern. |
Microcontrollerele sunt utilizate în diverse aplicații, din diverse domenii, de la aplicații casnice și industriale până la aviație și sateliți. | Microcontrollerele sunt utilizate în diverse aplicații, din diverse domenii, de la aplicații casnice și industriale până la aviație și sateliți. | ||
Există o gamă largă de microcontrollere disponibile și acestea se aleg în funcție de aplicație, având în vedere mai ales optimizarea costului și a consumului energetic pentru dispozitivul unde µC urmează a fi folosit. | Există o gamă largă de microcontrollere disponibile și acestea se aleg în funcție de aplicație, având în vedere mai ales optimizarea costului și a consumului energetic pentru dispozitivul unde µC urmează a fi folosit. | ||
Line 79: | Line 77: | ||
===== 2. Microchip (Atmel) AVR ===== | ===== 2. Microchip (Atmel) AVR ===== | ||
- | <hidden>Vad 2 probleme aici: | + | Famila AVR de la Microchip este formată din microcontrollere cu arhitectură Harvard pe 8 biţi şi set redus de instrucţiuni (RISC). |
+ | |||
+ | <hidden> | ||
+ | **Vad cateva probleme aici: | ||
+ | |||
+ | |||
+ | 1 - [FIXED] continut sforaitor. As scoate partea istorica si as rezuma in cateva cuvinte ce mai gasim in familia Atmega si unde ne aflam noi in ea - tabelul ala contine date prea precise pentru scopul laboratorului | ||
- | 1 - continut sforaitor. As scoate partea istorica si as rezuma in cateva cuvinte ce mai gasim in familia Atmega si unde ne aflam noi in ea - tabelul ala contine date prea precise pentru scopul laboratorului. | ||
2 - nu sunt sigur daca la CA si CB stiu diferenta intre arhitectura Harvard si VonNeumman. La CC stiu sigur ca Andrei povesteste despre asta la curs | 2 - nu sunt sigur daca la CA si CB stiu diferenta intre arhitectura Harvard si VonNeumman. La CC stiu sigur ca Andrei povesteste despre asta la curs | ||
- | Ultimul paragram (ala cu prefetch si throughput) mi se pare in regula si cred ca ar trebui pastrat.</hidden> | ||
- | Famila AVR de la Microchip este formată din microcontrollere cu arhitectură Harvard pe 8 biţi şi set redus de instrucţiuni (RISC). Arhitectura de bază AVR a fost concepută de doi studenţi de la Norwegian Institute of Technology (NTH), Alf-Egil Bogen şi Vegard Wollan. Ele au fost introduse pe piaţă în 1996, fiind printre primele controller-e care foloseau memoria Flash pentru program în locul memoriilor OTPROM sau EPROM, folosite de competiţie. | + | 3 - [FIXED] Ultimul paragram (ala cu prefetch si throughput) mi se pare in regula si cred ca ar trebui pastrat.** |
+ | |||
+ | |||
+ | Arhitectura de bază AVR a fost concepută de doi studenţi de la Norwegian Institute of Technology (NTH), Alf-Egil Bogen şi Vegard Wollan. Ele au fost introduse pe piaţă în 1996, fiind printre primele controller-e care foloseau memoria Flash pentru program în locul memoriilor OTPROM sau EPROM, folosite de competiţie. | ||
AVR-urile sunt clasificate în patru mari categorii: | AVR-urile sunt clasificate în patru mari categorii: | ||
Line 93: | Line 99: | ||
| {{:pm:lab:lab0:tiny.jpg?nolink&100|}} | {{:pm:lab:lab0:megaavr.png?nolink&100|}} | {{:pm:lab:lab0:xmega.jpg?nolink&100|}} | {{:pm:lab:lab0:asavr.jpg?nolink&100|}} | | | {{:pm:lab:lab0:tiny.jpg?nolink&100|}} | {{:pm:lab:lab0:megaavr.png?nolink&100|}} | {{:pm:lab:lab0:xmega.jpg?nolink&100|}} | {{:pm:lab:lab0:asavr.jpg?nolink&100|}} | | ||
| * 1-8 KB memorie de program \\ * capsulă de 8 până la 32 pini \\ * set limitat de periferice \\ * 4-256 KB memorie de program | * capsulă de 28 până la 100 de pini \\ * set extins de instrucţiuni (instrucţiuni pentru înmulţire şi adresare indirectă) \\ * set extins de periferice | * 16-256 KB memorie de program \\ * capsulă de 44 până la 100 de pini \\ * interfeţe performante extinse, ca DMA, "Event System", şi support pentru criptografie \\ * set extins se periferice | * megaAVR cu funcţii speciale, care nu sunt prezente la familia AVR, cum ar fi controller de LCD, controller USB, CAN etc. \\ * FPSLIC (Field Programmable System Level Integrated Circuit), un core AVR integrat cu un FPGA. | | | * 1-8 KB memorie de program \\ * capsulă de 8 până la 32 pini \\ * set limitat de periferice \\ * 4-256 KB memorie de program | * capsulă de 28 până la 100 de pini \\ * set extins de instrucţiuni (instrucţiuni pentru înmulţire şi adresare indirectă) \\ * set extins de periferice | * 16-256 KB memorie de program \\ * capsulă de 44 până la 100 de pini \\ * interfeţe performante extinse, ca DMA, "Event System", şi support pentru criptografie \\ * set extins se periferice | * megaAVR cu funcţii speciale, care nu sunt prezente la familia AVR, cum ar fi controller de LCD, controller USB, CAN etc. \\ * FPSLIC (Field Programmable System Level Integrated Circuit), un core AVR integrat cu un FPGA. | | ||
+ | </hidden> | ||
Memoriile Flash, EEPROM, şi SRAM sunt integrate în acelaşi chip, înlăturând nevoia de memorie externă. Programul este format din instrucţiuni de 16 biţi lungime care sunt stocate în memoria Flash non-volatilă. Mărimea memoriei de program este indicată de numele componentei respective. De exemplu, ATmega128 are 128kB de memorie Flash. Spaţiul de adresa este format din registrele generale, registrele de I/O şi memoria SRAM. Sunt în total 32 de registre generale a câte 8 biţi. | Memoriile Flash, EEPROM, şi SRAM sunt integrate în acelaşi chip, înlăturând nevoia de memorie externă. Programul este format din instrucţiuni de 16 biţi lungime care sunt stocate în memoria Flash non-volatilă. Mărimea memoriei de program este indicată de numele componentei respective. De exemplu, ATmega128 are 128kB de memorie Flash. Spaţiul de adresa este format din registrele generale, registrele de I/O şi memoria SRAM. Sunt în total 32 de registre generale a câte 8 biţi. | ||
Line 129: | Line 135: | ||
==== 3.1. Dezvoltare, compilare ==== | ==== 3.1. Dezvoltare, compilare ==== | ||
- | Pentru dezvoltarea programelor putem folosi orice editor de text (notepad++, vim, emacs, etc), recomandat fiind [[http://www.pnotepad.org/| Programmer's Notepad]]. Putem utiliza de asemenea şi IDE-ul [[https://www.microchip.com/mplab/avr-support/atmel-studio-7 | Atmel Studio]], oferit de Microchip. | + | Pentru dezvoltarea programelor putem folosi orice editor de text ([[https://www.vim.org/|vim]], [[https://www.gnu.org/software/emacs/|emacs]], [[https://notepad-plus-plus.org/|Notepad++]], [[http://www.pnotepad.org/| Programmer's Notepad]], etc). Putem utiliza de asemenea şi IDE-ul [[https://www.microchip.com/mplab/avr-support/atmel-studio-7 | Atmel Studio]], oferit de Microchip. |
- | <hidden>Programmer's Notepad e informatie outdated. Am trecut la Linux. Nu am vazut pe nimeni sa foloseasca IDE-ul.</hidden> | + | <hidden>[FIXED] Programmer's Notepad e informatie outdated. Am trecut la Linux. Nu am vazut pe nimeni sa foloseasca IDE-ul.</hidden> |
În cadrul laboratoarelor vom scrie cod C, nu şi assembly (AVRASM), compilatorul fiind [[https://gcc.gnu.org/wiki/avr-gcc |avr-gcc]]. Acesta poate fi folosit atât pe sisteme Linux/Unix cât şi pe sisteme Windows ([[http://winavr.sourceforge.net/ |WinAVR]]). WinAVR include şi biblioteca de C, avr-libc, pe sistemele Linux/Unix ea trebuie instalată separat. | În cadrul laboratoarelor vom scrie cod C, nu şi assembly (AVRASM), compilatorul fiind [[https://gcc.gnu.org/wiki/avr-gcc |avr-gcc]]. Acesta poate fi folosit atât pe sisteme Linux/Unix cât şi pe sisteme Windows ([[http://winavr.sourceforge.net/ |WinAVR]]). WinAVR include şi biblioteca de C, avr-libc, pe sistemele Linux/Unix ea trebuie instalată separat. | ||
Line 151: | Line 157: | ||
Pentru a încărca programul pe controller trebuie să folosim un utilitar de pe calculator. Un exemplu de folosire a utilitarului **avrdude** pe Linux si pe Windows găsiți mai jos. | Pentru a încărca programul pe controller trebuie să folosim un utilitar de pe calculator. Un exemplu de folosire a utilitarului **avrdude** pe Linux si pe Windows găsiți mai jos. | ||
+ | |||
+ | <hidden>Avem Makefile din cate imi amintesc. Se pot uita acolo daca vor sa stie comanda - si oricum vor face asta pentru proiect, cu siguranta.</hidden> | ||
<code> | <code> | ||
Line 231: | Line 239: | ||
În funcție de durata perioadei, putem folosi macro-urile definite în biblioteca util/delay.h: _delay_ms sau _delay_us. | În funcție de durata perioadei, putem folosi macro-urile definite în biblioteca util/delay.h: _delay_ms sau _delay_us. | ||
</note> | </note> | ||
+ | <hidden> Aici ar trebui sa fie PD4 de fapt </hidden> | ||
{{ :pm:lab:lab0:conectare_speaker.png?nolink&400 |Connectarea unui speaker}} | {{ :pm:lab:lab0:conectare_speaker.png?nolink&400 |Connectarea unui speaker}} | ||
+ | |||
<html><center>Connectarea unui speaker</center></html> | <html><center>Connectarea unui speaker</center></html> | ||
==== 4.2. Lucrul cu registrele I/O ==== | ==== 4.2. Lucrul cu registrele I/O ==== | ||
Line 325: | Line 334: | ||
<file make Makefile> | <file make Makefile> | ||
+ | # Linux | ||
+ | PORT ?= /dev/ttyUSB0 | ||
+ | # Windows | ||
+ | # PORT ?= COM1 | ||
+ | |||
all: lab0.hex | all: lab0.hex | ||
lab0.hex: lab0.elf | lab0.hex: lab0.elf | ||
avr-objcopy -j .text -j .data -O ihex $^ $@ | avr-objcopy -j .text -j .data -O ihex $^ $@ | ||
- | avr-size $@ | + | avr-size lab0.elf |
- | lab0.elf: lab0.c | + | lab0.elf: lab0.c |
avr-g++ -mmcu=atmega324p -DF_CPU=12000000 -Os -Wall -o $@ $^ | avr-g++ -mmcu=atmega324p -DF_CPU=12000000 -Os -Wall -o $@ $^ | ||
+ | |||
+ | upload: lab0.hex | ||
+ | avrdude -c arduino -P $(PORT) -b 57600 -p atmega324p -U flash:w:$<:a | ||
clean: | clean: | ||
Line 350: | Line 367: | ||
</note> | </note> | ||
- | Pentru a compila programul de mai sus cu Programmer's Notepad se poate folosi shortcut-ul setat pentru comandă de **make**. Rezultatul compilării este fișierul **lab0.hex** care urmează a fi încărcat în microcontroller. | + | <hidden>[FIXED] Din nou, Programmer's Notepad este outdated in cazul nostru. Am trecut la Linux. |
+ | |||
+ | **Pentru a compila programul de mai sus cu Programmer's Notepad se poate folosi shortcut-ul setat pentru comandă de make** .</hidden> | ||
+ | Rezultatul compilării este fișierul **lab0.hex**. Acesta urmează a fi încărcat în microcontroller folosind regula **upload**. | ||
===== 5. Exerciții ===== | ===== 5. Exerciții ===== | ||
Line 392: | Line 412: | ||
mergi la t00 mergi la t00 | mergi la t00 mergi la t00 | ||
| | ||
- | **Task 2** (4p). Implemenţati codul Morse folosind speaker-ul. Veţi implementa 2 tonuri, unul scurt cu durata de 50 ms şi unul lung cu durata de 150 ms, cu pauză de 50 ms între 2 tonuri consecutive. Selecţia între tonuri se va face folosind cele 2 butoane de pe PB2 (produce un ton scurt) şi PD6 (produce un ton lung). | + | **Task 2** (4p). Implemenţati codul Morse folosind speaker-ul. Veţi implementa 2 tonuri, unul scurt cu durata de 50 ms şi unul lung cu durata de 150 ms, cu pauză de 50 ms între 2 tonuri consecutive. Selecţia între tonuri se va face folosind cele 2 butoane de pe PB2 (produce un ton scurt) şi PD6 (produce un ton lung). Speaker-ul este conectat la PD4. |
Line 428: | Line 448: | ||
* {{:pm:lab:lab0:no_sol.zip | Soluție laborator - disponibilă începând de săptămâna viitoare}} | * {{:pm:lab:lab0:no_sol.zip | Soluție laborator - disponibilă începând de săptămâna viitoare}} | ||
- | * {{:pm:doc8272.pdf | Datasheet ATmega324}} | + | * {{:pm:doc8272.pdf | Datasheet ATmega324}} |
- | * <html><a class="media mediafile mf_pdf" href="/wiki/pm/lab/lab0?do=export_pdf">PDF laborator</a></html> | + | |
* Responsabili: [[mariuslucianandrei@gmail.com | Marius Andrei]] | * Responsabili: [[mariuslucianandrei@gmail.com | Marius Andrei]] | ||