Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:lab:lab4-2023-2024 [2024/04/01 10:30]
florin.stancu [Registre]
pm:lab:lab4-2023-2024 [2025/04/02 11:11] (current)
florin.stancu
Line 86: Line 86:
 **F_ADC = F_CPU / PRESCALER** **F_ADC = F_CPU / PRESCALER**
  
-Alegerea prescaler-ului depinde de frecventa de esentionare si de acuratetea dorita. Cu cat prescaler-ul este mai mare frecventa ADC va fi mai mica si acuratetea va fi mai mare. Mai multe informatii se pot gasi in capitolul ​23.din [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42743-ATmega324P_Datasheet.pdf|Datasheet ATmega324P]].+Alegerea prescaler-ului depinde de frecventa de esentionare si de acuratetea dorita. Cu cat prescaler-ul este mai mare frecventa ADC va fi mai mica si acuratetea va fi mai mare. Mai multe informatii se pot gasi in capitolul ​25.din [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42743-ATmega324P_Datasheet.pdf|Datasheet ATmega324P]].
  
 ==== Moduri de functionare ==== ==== Moduri de functionare ====
Line 152: Line 152:
 Obiectivul exercitiilor este sa controlam convertorul analog-digital integrat in microprocesorul Atmega324p pentru diferite citiri (butoane multiplexate prin divizoare de tensiune, senzor de temperatura). Obiectivul exercitiilor este sa controlam convertorul analog-digital integrat in microprocesorul Atmega324p pentru diferite citiri (butoane multiplexate prin divizoare de tensiune, senzor de temperatura).
  
-Scheletul de cod {{:pm:lab:lab_4_skel.zip|}}+Scheletul de cod este {{:pm:lab:lab4_skel.zip|aici}}.
  
-**Task 0** +**Task 0** (2 puncte) ​Completați scheletul de cod (fișierul ​adc.c) astfel încât sa definiți o funcție cu un comportament similar analogRead(uint8_t pin) → aceasta face o singura conversie a semnalului de pe pinul specificat și este blocanta pana la returnarea rezultatului.
-Completați scheletul de cod (fișierul ​"adc.c") astfel încât sa definiți o funcție cu un comportament similar analogRead(uint8_t pin) -> aceasta face o singura conversie a semnalului de pe pinul specificat și este blocanta pana la returnarea rezultatului.+
  
-**Task 1** +**Task 1** (1 punct) ​Folosind funcția anterior definită, citiți valorile de pe senzorul de temperatura (PA0). Puteti pune degetul peste el (pe proprie răspundere) și observa cum se modifica valorile. Senzorul de temperatura `MCP9701T-E/​TT` are un interval de functionare de -10°C - 125°C.
-Folosind funcția anterior definită, citiți valorile de pe senzorul de temperatura (PA0). Puteti pune degetul peste el (pe proprie răspundere ​:) ) și observa cum se modifica valorile.+
  
-**Task 2** +<note warning> 
-Butoanele 1-6 sunt multiplexate pe același pin analogic (PA5) prin intermediul unui sistem de divizoare de tensiune (urmăriți schematicul pentru o explicație vizuala)Aflați ce valoare întoarce fiecare buton la apăsare și completați "​define-urile"​ din cod. Completați codul astfel încât la apăsarea BTN2 sa se aprindă doar LED-ul roșula apăsarea BTN3 LED-ul verdeiar la apăsarea BTN5 LED-ul albastru.+AVR Libc are implicit o implementare simplistică a printf()-ului care nu știe să formateze valori floating pointDacă doriți să meargă ''​%f''​ & friends, va trebui să activați o setare de bibliotecă prin linker-ul GCCdesigur, prin ''​platformio.ini'':​ <​code>​build_flags = -Wl,-u,vfprintf ​-lprintf_flt ​-lm</​code>​ 
 +</​note>​
  
-**Task ​3** +**Task ​2** (3 puncte) Butoanele 1-6 sunt multiplexate ​pe același pin analogic (PA5) prin intermediul unui sistem ​de divizoare ​de tensiune (urmăriți schematicul pentru o explicație vizuala)Aflați ce valoare întoarce fiecare buton la apăsare și completați “define-urile” din cod. Completați codul astfel încât la apăsarea BTN1 sa se aprindă doar LED-ul magenta, ​la apăsarea BTN4 - LED-ul galbeniar la apăsarea BTN6 LED-ul cyan.
-Configurați ADC-ul astfel încât conversia valorilor citite de pe senzorul ​de temperatura sa se întâmple automat la interval ​de 1 secFolosiți-vă de timer1, este deja configurat sa genereze întreruperi la fiecare secunda! Hint: citiți in datasheet despre ADC Auto Trigger Enable ​și ADC Auto Trigger Source, care pot începe conversiile automat la apariția unui eveniment; altfel, puteți realiza manual o citire cu funcția completată in Task 0 la fiecare întrerupere de timercaz in care nu este necesar sa completați și primele 3 funcții din scheletul task-ului 3.+
  
 +> Hint: culorile cerute se pot obtine prin combinarea a cate 2 leduri dintre rosu, verde si albastru
 +
 +**Task 3** (4 puncte) Configurați ADC-ul astfel încât conversia valorilor citite de pe senzorul de temperatura sa se întâmple in mod continuu. Configurati LED-ul RBG astfel incat sa afiseze o culoare intre albastru si rosu. (Albastru va corespunde unei temperaturi de 20°C, iar rosu unei temperaturi de 30°C). Folositi FastPWM de 8 biti pentru culorile ledurilor. NU MODIFICATI CODUL DIN FUNCTIA `task3`!
 +
 +> Hint: folositi functia `remap_interval` pentru a calcula duty-cycle pentru cele 2 timere
 +
 +**Task 4 (BONUS)** (1 punct) Configurati ADC-ul astfel incat sa aiba o rezolutie de 8 biti si observati diferenta de timp la rulare.
 ===== 5. Linkuri utile  ===== ===== 5. Linkuri utile  =====
  
Line 174: Line 179:
 ===== 6. Responsabili laborator ===== ===== 6. Responsabili laborator =====
  
-  * [[mihnea.dinica@stud.acs.upb.ro|Mihnea Dinica]] +  * Eduard Radu 
-  * [[cristi.tranca@gmail.com|Cristi Tranca]]+  * Alexandru Jipa
pm/lab/lab4-2023-2024.1711956644.txt.gz · Last modified: 2024/04/01 10:30 by florin.stancu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0