This shows you the differences between two versions of the page.
pm:lab:lab0-2022 [2022/05/01 14:26] florin.stancu |
pm:lab:lab0-2022 [2023/03/12 10:02] (current) daniel.dosaru [6. Link-uri utile] |
||
---|---|---|---|
Line 124: | Line 124: | ||
Desi la laborator va vom pune sa lucrati direct cu adrese de memorie pentru a configura pinii si a ii controla, va vom arata cum sa folositi si un framework numit Arduino. Acesta este scris in C++ si este practic o biblioteca cu functii ajutatoare si headere (fisiere .h) cu define-uri pentru fiecare procesor in parte. Ca orice nivel de abstractizare in plus, acesta face dezvoltarea mai usoara, dar aduce si un performance penalty de chiar si 20 de ori mai incet uneori. | Desi la laborator va vom pune sa lucrati direct cu adrese de memorie pentru a configura pinii si a ii controla, va vom arata cum sa folositi si un framework numit Arduino. Acesta este scris in C++ si este practic o biblioteca cu functii ajutatoare si headere (fisiere .h) cu define-uri pentru fiecare procesor in parte. Ca orice nivel de abstractizare in plus, acesta face dezvoltarea mai usoara, dar aduce si un performance penalty de chiar si 20 de ori mai incet uneori. | ||
- | 3 | + | |
===== 3. Let's get to work ===== | ===== 3. Let's get to work ===== | ||
Line 190: | Line 190: | ||
Acesta poate fi considerat cel mai important pas atunci cand dorim sa folosim un µC. Trebuie sa invatam cum sa configuram intern µC-ul pentru ca sa indeplineasca functiile dorite de noi. In acest laborator vom configura pinii pentru a fi de I/O: unii pini sa citeasca daca se afla tensiune pe ei (input) sau altii sa dea 0 volti sau 5 volti in functie de comenzile noastre din software (output). | Acesta poate fi considerat cel mai important pas atunci cand dorim sa folosim un µC. Trebuie sa invatam cum sa configuram intern µC-ul pentru ca sa indeplineasca functiile dorite de noi. In acest laborator vom configura pinii pentru a fi de I/O: unii pini sa citeasca daca se afla tensiune pe ei (input) sau altii sa dea 0 volti sau 5 volti in functie de comenzile noastre din software (output). | ||
- | Pentru a clarifica niste terminologie: acum **cand spunem ca setam un registru** sau scriem intr-un registru, nu ne referim la registrii de uz general din procesor cu care ati lucrat la IOCLA. **Ne referim la adrese de memorie** rezervate in µC. Vom repeta iarasi impreuna: "Prin registru ne referim la o adresa de memorie". Practic cum merg lucrurile "under the hood", la acesti bytes sunt legaturi fizice si daca scriem un bit de 1 sau de 0 in anumite pozitii, activam sau dezactivam elemente din µC. | + | Pentru a clarifica niste terminologie: acum **cand spunem ca setam un registru** sau scriem intr-un registru, nu ne referim la registri de uz general din procesor cu care ati lucrat la IOCLA. **Ne referim la adrese de memorie** rezervate in µC. Vom repeta iarasi impreuna: "Prin registru ne referim la o adresa de memorie". Practic cum merg lucrurile "under the hood", la acesti bytes sunt legaturi fizice si daca scriem un bit de 1 sau de 0 in anumite pozitii, activam sau dezactivam elemente din µC. |
Mereu pentru a afla cum sa configurati un periferic, [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | datasheet-ul]] µC-ului este cea mai buna locatie sa aflati exact fiecare configurare unde se afla si ce face. Deoarece nu este deloc placut sa scrii in cod ''*(0x04) = 0b0000 0001'', producatorii de µC ofera biblioteci ([[http://www.nongnu.org/avr-libc/user-manual/modules.html| avr-libc]]) pentru a da nume acestor adrese. Urmatorul cheatsheet va arata cum sa configurati un anumit bit de la o anumita adresa folosind macrouri (care sunt considerate si best practice). | Mereu pentru a afla cum sa configurati un periferic, [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | datasheet-ul]] µC-ului este cea mai buna locatie sa aflati exact fiecare configurare unde se afla si ce face. Deoarece nu este deloc placut sa scrii in cod ''*(0x04) = 0b0000 0001'', producatorii de µC ofera biblioteci ([[http://www.nongnu.org/avr-libc/user-manual/modules.html| avr-libc]]) pentru a da nume acestor adrese. Urmatorul cheatsheet va arata cum sa configurati un anumit bit de la o anumita adresa folosind macrouri (care sunt considerate si best practice). | ||
Line 218: | Line 218: | ||
==== 3.3. Registrele de I/O ==== | ==== 3.3. Registrele de I/O ==== | ||
- | Pentru acest laborator v-am scutit de cautarea in datasheet, lucru ce poate parea complicat la inceput si am sintetizat pentru voi ce adrese de memorie (registrii) trebuie sa modificati pentru lucrul in acest laborator. | + | Pentru acest laborator v-am scutit de cautarea in datasheet, lucru ce poate parea complicat la inceput si am sintetizat pentru voi ce adrese de memorie (registri) trebuie sa modificati pentru lucrul in acest laborator. |
Microntroller-ul ATmega324 oferă 4 porturi I/O a câte 8 pini, iar intern, fiecare port are asociat trei registre a câte 8 biți prin care utilizatorul poate controla //la nivel de pin// fluxul datelor: poate scrie/citi date în/din portul respectiv. Aceste trei registre sunt: | Microntroller-ul ATmega324 oferă 4 porturi I/O a câte 8 pini, iar intern, fiecare port are asociat trei registre a câte 8 biți prin care utilizatorul poate controla //la nivel de pin// fluxul datelor: poate scrie/citi date în/din portul respectiv. Aceste trei registre sunt: | ||
Line 294: | Line 294: | ||
==== 3.4. Framework-ul Arduino ==== | ==== 3.4. Framework-ul Arduino ==== | ||
- | Cum am spus si mai devreme, acest framework aduce un nivel de abstractizare in plus ce mascheaza lucrul cu registre si operatii pe biti in spatele unor functii mai incede, dar convenabile. | + | Cum am spus si mai devreme, acest framework aduce un nivel de abstractizare in plus ce mascheaza lucrul cu registre si operatii pe biti in spatele unor functii mai incete, dar convenabile. |
=== 3.4.1 Setup-ul IDE-ului === | === 3.4.1 Setup-ul IDE-ului === | ||
Line 300: | Line 300: | ||
* Tool-ul cel mai des intalnit si oferit de fundatia Arduino este [[https://www.arduino.cc/en/software|Arduino IDE]]. Acesta ofera suport pentru mai multe placi si procesoare AVR, cat si posibilitatea de a instala biblioteci 3'rd party, dar pe lnaga niste syntax highlighting se simte ca si cum ati programa in Notepad++. | * Tool-ul cel mai des intalnit si oferit de fundatia Arduino este [[https://www.arduino.cc/en/software|Arduino IDE]]. Acesta ofera suport pentru mai multe placi si procesoare AVR, cat si posibilitatea de a instala biblioteci 3'rd party, dar pe lnaga niste syntax highlighting se simte ca si cum ati programa in Notepad++. | ||
- | * Un alt tool folosit de Microchip este AVR Studio (depracated) si mai nou Atmel Studio. Acesta este un tool profesional si destul de greu de utilizat la capacitati maxime. Daca vreti sa il utilizati, ar fi ca si cum ati folosi un flex sa va taiati friptura. | + | * Un alt tool folosit de Microchip este AVR Studio (deprecated) si mai nou Atmel Studio. Acesta este un tool profesional si destul de greu de utilizat la capacitati maxime. Daca vreti sa il utilizati, ar fi ca si cum ati folosi un flex sa va taiati friptura. |
* Un al treilea IDE posibil ar fi Visual Studio Code cu extensia de la [[https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide|PlatformIO]] pentru a avea acces automat la bibliotecile µC-lor si a incarca codul pe acestea, in acelasi timp avand si intellisense. | * Un al treilea IDE posibil ar fi Visual Studio Code cu extensia de la [[https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide|PlatformIO]] pentru a avea acces automat la bibliotecile µC-lor si a incarca codul pe acestea, in acelasi timp avand si intellisense. | ||
Line 308: | Line 308: | ||
=== 3.4.2. Primul cod === | === 3.4.2. Primul cod === | ||
- | Cel mai simplu cod de arduino ce poate fi compilat este uratorul: | + | Cel mai simplu cod de arduino ce poate fi compilat este urmatorul: |
<spoiler Cod > | <spoiler Cod > | ||
Line 341: | Line 341: | ||
} | } | ||
- | return -1; // nu ar trebuii sa se ajunga aici | + | return -1; // nu ar trebui sa se ajunga aici |
} | } | ||
</code> | </code> | ||
Line 419: | Line 419: | ||
{{ :pm:lab:lab0-2021.png?nolink&500 | Circuit Laborator }} | {{ :pm:lab:lab0-2021.png?nolink&500 | Circuit Laborator }} | ||
- | **Task 0** Incepem prin a verifica set-up-ul. Instalati IDE-ul dorit/folosit si rulați exemplul **Hello Word** cu registrii pe placuta Arduino UNO din laborator. Ulterior testati si varianta in care folositi framework-ul Arduino pentru a vedea ca este oferit acelasi comportament. | + | **Task 0** Incepem prin a verifica set-up-ul. Instalati IDE-ul dorit/folosit si rulați exemplul **Hello Word** cu registri pe placuta Arduino UNO din laborator. Ulterior testati si varianta in care folositi framework-ul Arduino pentru a vedea ca este oferit acelasi comportament. |
**Task 1** Verificati ca circuitul de pe breadboard-urile din laborator indeplineste aceleeasi functie precum circuitul din imaginea de mai sus si ca Arduino-ul este conectat la fel. | **Task 1** Verificati ca circuitul de pe breadboard-urile din laborator indeplineste aceleeasi functie precum circuitul din imaginea de mai sus si ca Arduino-ul este conectat la fel. | ||
- | **Task 2** Folosind butonul conectat la pinul digital 2 (PD2), configurati registrii pentru a face pinul de input si faceti LED-ul sa se aprind cand butonul este apasat. (nu uitati sa activati rezistenta de pull-up interna µC-ului) | + | **Task 2** Folosind butonul conectat la pinul digital 2 (PD2), configurati registri pentru a face pinul de input si faceti LED-ul sa se aprind cand butonul este apasat. (nu uitati sa activati rezistenta de pull-up interna µC-ului) |
- | **Task 3** Acum, folosind butonul conectat la pinul digital 3 (gasiti voi care este macroul pinului), configurati-l si pe acesta ca sa folsoiti butoanele pentru a creste si micsora durata delay-ului folosit la exemplul **Hello Word**. | + | **Task 3** Acum, folosind butonul conectat la pinul digital 3 (gasiti voi care este macroul pinului), configurati-l si pe acesta ca sa folositi butoanele pentru a creste si micsora durata delay-ului folosit la exemplul **Hello Word**. |
<note tip> | <note tip> | ||
Line 445: | Line 445: | ||
===== 7. Responsabili laborator ===== | ===== 7. Responsabili laborator ===== | ||
- | * [[robertlica21@gmail.com | Robert Lica]] | + | * [[enedragos99@gmail.com | Dragos Ene]] |
+ | * [[narciscaroi24@gmail.com | Narcis Caroi]] | ||