Differences

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

Link to this comparison view

pm:lab:lab4-2023-2024 [2024/03/29 19:58]
mihnea.dinica Work in progress, not ready
pm:lab:lab4-2023-2024 [2025/04/02 11:11] (current)
florin.stancu
Line 1: Line 1:
-/** 
- * uncomment this to publish the solution: 
- * ~~SHOWSOLUTION~~ 
- */ 
-~~SHOWSOLUTION~~ 
- 
 ====== Laborator 4: Analog Digital Convertor (ADC) ====== ====== Laborator 4: Analog Digital Convertor (ADC) ======
 Acest laborator are ca scop familiarizarea voastră cu lucrul cu convertorul analog-digital prezent în microcontroller-ul Atmega324p. Acest laborator are ca scop familiarizarea voastră cu lucrul cu convertorul analog-digital prezent în microcontroller-ul Atmega324p.
Line 13: Line 7:
 {{ pm:​lab:​semnalanalogic.png?​600 | Semnal Analogic }} {{ pm:​lab:​semnalanalogic.png?​600 | Semnal Analogic }}
  
-O caracteristică importantă a unui ADC o constituie **rezoluția** acestuia. Rezoluția indică numărul de valori discrete pe care convertorul poate să le furnizeze la ieșirea sa în intervalul de măsură. Deoarece rezultatele conversiei sunt stocate intern sub formă binară, rezoluția unui convertor analog-digital este exprimată în biți.+O caracteristică importantă a unui ADC o constituie **rezoluția** acestuia. Rezoluția indică numărul de valori discrete pe care convertorul poate să le furnizeze la ieșirea sa în intervalul de măsurare. Deoarece rezultatele conversiei sunt stocate intern sub formă binară, rezoluția unui convertor analog-digital este exprimată în biți.
 **Cuanta de măsurare** - cea mai mică valoare care poate fi distinsă de ADC reprezintă raportul între domeniul tensiunii de intrare (diferența între tensiunea maximă și tensiunea minimă ce pot fi aplicate la intrarea în convertor) și numărul maxim de valori binare reprezentabile (2^N). **Cuanta de măsurare** - cea mai mică valoare care poate fi distinsă de ADC reprezintă raportul între domeniul tensiunii de intrare (diferența între tensiunea maximă și tensiunea minimă ce pot fi aplicate la intrarea în convertor) și numărul maxim de valori binare reprezentabile (2^N).
  
Line 22: Line 16:
 O altă caracteristică importantă a unui convertor analog-digital o constituie rata de eșantionare (e.n. sampling rate). Aceasta depinde de timpul dintre două conversii succesive și afectează modul în care forma de undă originală va fi redată după procesarea digitală. Mai jos observăm cum arată modul în care semnalul eșantionat va fi reconstituit în urma trecerii printr-un convertor digital – analog (DAC). După cum se poate observa, semnalul reprodus nu este identic cu cel original. Dacă rata de eșantionare ar crește semnalul reprodus prin unirea punctelor/​eșantioanelor digitale aproximează din ce în ce mai bine originalul. O altă caracteristică importantă a unui convertor analog-digital o constituie rata de eșantionare (e.n. sampling rate). Aceasta depinde de timpul dintre două conversii succesive și afectează modul în care forma de undă originală va fi redată după procesarea digitală. Mai jos observăm cum arată modul în care semnalul eșantionat va fi reconstituit în urma trecerii printr-un convertor digital – analog (DAC). După cum se poate observa, semnalul reprodus nu este identic cu cel original. Dacă rata de eșantionare ar crește semnalul reprodus prin unirea punctelor/​eșantioanelor digitale aproximează din ce în ce mai bine originalul.
  
-{{ pm:lab:frecventa.png?800 || Esantionare ​}}+{{ pm:lab:illustration-of-the-nyquist-shannon-sampling-theorem-if-sampling-at-a-frequency-that-is.png?800 || Nyquist}}
  
 Care este însa rata minimă de eșantionare pentru a reproduce fără pierderi un semnal de o frecvența data? **Teorema lui Nyquist** spune că o rată de eșantionare de **minimum două ori mai mare decât frecvența semnalului măsurat** este necesară pentru acest lucru, teorema aplicându-se și pentru un semnal compus dintr-un intreg spectru de frecvențe, cum ar fi vocea umană sau o melodie. Limitele maxime ale auzului uman sunt 20Hz – 20kHz dar frecvențele obișnuite pentru voce sunt în gama 20-4000Hz, de aceea centralele telefonice folosesc o rată de eșantionare a semnalului de 8000Hz. Rezultatul este o reproducere inteligibilă a vocii umane, suficientă pentru transmiterea de informații într-o convorbire obișnuită. Pentru reproducerea fidelă a spectrului audibil se recurge la rate mai mari de eșantionare. De exemplu, înregistrarea pe un CD are o rată de eșantionare de 44100Hz ceea ce este mai mult decât suficient pentru reproducerea fidelă a tuturor frecvențelor audibile. Care este însa rata minimă de eșantionare pentru a reproduce fără pierderi un semnal de o frecvența data? **Teorema lui Nyquist** spune că o rată de eșantionare de **minimum două ori mai mare decât frecvența semnalului măsurat** este necesară pentru acest lucru, teorema aplicându-se și pentru un semnal compus dintr-un intreg spectru de frecvențe, cum ar fi vocea umană sau o melodie. Limitele maxime ale auzului uman sunt 20Hz – 20kHz dar frecvențele obișnuite pentru voce sunt în gama 20-4000Hz, de aceea centralele telefonice folosesc o rată de eșantionare a semnalului de 8000Hz. Rezultatul este o reproducere inteligibilă a vocii umane, suficientă pentru transmiterea de informații într-o convorbire obișnuită. Pentru reproducerea fidelă a spectrului audibil se recurge la rate mai mari de eșantionare. De exemplu, înregistrarea pe un CD are o rată de eșantionare de 44100Hz ceea ce este mai mult decât suficient pentru reproducerea fidelă a tuturor frecvențelor audibile.
Line 69: Line 63:
 Convertorul analog-digital inclus în microcontroller-ul Atmega324p este un ADC cu aproximări succesive. Are o rezoluție de pana la 10 biți și poate măsura orice tensiune din gama 0-5V de pe opt intrări analogice multiplexate (pinii de pe portul A). De asemenea, poate amplifica semnalul de intrare, dacă acesta are o amplitudine mică, în trepte de 0 dB (1x), 20 dB (10x) sau 46 dB (200x) Convertorul analog-digital inclus în microcontroller-ul Atmega324p este un ADC cu aproximări succesive. Are o rezoluție de pana la 10 biți și poate măsura orice tensiune din gama 0-5V de pe opt intrări analogice multiplexate (pinii de pe portul A). De asemenea, poate amplifica semnalul de intrare, dacă acesta are o amplitudine mică, în trepte de 0 dB (1x), 20 dB (10x) sau 46 dB (200x)
  
-Acest convertor poate fi controlat prin doua registre de stare și control (ADCSRA si ADCSRB) și un registru cu biți de selecție pentru multiplexoare (ADMUX). În primele, putem stabili când să se efectueze conversia, dacă să se genereze întrerupere la finalul unei conversii etc. Folosind registrul pentru multiplexoare se alege ce canal va genera input pentru convertor si tensiunea de referință. De asemenea, în afară de aceste două registre mai avem registrul ADC în care este scris rezultatul conversiei (ADC).+Acest convertor poate fi controlat prin doua registre de stare și control (ADCSRA si ADCSRB) și un registru cu biți de selecție pentru multiplexoare (ADMUX). În primele, putem stabili când să se efectueze conversia, dacă să se genereze întrerupere la finalul unei conversii etc. Folosind registrul pentru multiplexoare se alege ce canal va genera input pentru convertor si tensiunea de referință. De asemenea, în afară de aceste două registre mai avem registrul ADC în care este scris rezultatul conversiei (registrele procesorului fiind pe 8 biti, iar rezolutia convertorului nostru de pana la 10 biti, inseamna ca registrul ​ADC este, de fapt, compus dintr-o parte high si una low).
  
 <​note>​ <​note>​
Line 85: Line 79:
  
 ==== Tensiune de referinta ==== ==== Tensiune de referinta ====
-In functie de intervalul in care varieaza semnalul pe care il citim putem selecta alta tensiune de referinta. Acest lucru este util pentru a mari rezolutia citirii. ADC-ul de pe Atmega ​328p ne ofera ca tensiune de referinta tensiunea de alimentare (AVCC), ​o tensiune interna ​de 1.1V sau un pin pe care putem conecta o referinta de tensiune externa (AREF)+In functie de intervalul in care varieaza semnalul pe care il citim putem selecta alta tensiune de referinta. Acest lucru este util pentru a mari rezolutia citirii. ADC-ul de pe Atmega ​324p ne ofera ca tensiune de referinta tensiunea de alimentare (AVCC), ​doua tensiuni interne ​de 1.1V si 2.56V sau un pin pe care putem conecta o referinta de tensiune externa (AREF).
  
 ==== Prescaler ==== ==== Prescaler ====
-ADC-ul nostru are nevoie de un semnal de ceas pentru a stii cat timp dureaza o conversie. Pentru ca semnalul de ceas al microcontrollerului este prea rapid avem nevoie de un prescaler. Cea mai mica valoare este 2 si cea mai mare este 128.  ​+ADC-ul nostru are nevoie de un semnal de ceas pentru a sti cat timp dureaza o conversie. Pentru ca semnalul de ceas al microcontrollerului este prea rapid avem nevoie de un prescaler. Cea mai mica valoare este 2 si cea mai mare este 128.  ​
  
 **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.4 din {{:pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|datasheet}}.+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.4 din [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42743-ATmega324P_Datasheet.pdf|Datasheet ATmega324P]].
  
 ==== Moduri de functionare ==== ==== Moduri de functionare ====
 Convertorul poate functiona in mai multe moduri. Convertorul poate functiona in mai multe moduri.
-Cel mai comun mod si cel care este desponibil ​si in biblioteca arduino este **Single Conversion Mode**. In acest mod se va efectua o singura conversie si se incepe setand ADSC pe 1. Registrul va fi setat pe 0 automat la finalul conversiei.+Cel mai comun mod si cel care este disponibil ​si in biblioteca arduino este **Single Conversion Mode**. In acest mod se va efectua o singura conversie si se incepe setand ADSC pe 1. Registrul va fi setat pe 0 automat la finalul conversiei.
  
 Un alt mod de functionare este **Free Running Mode** in care convertorul va functiona in continuu, la finalul unei conversii se va incepe automat urmatoarea conversie. De fiecare data rezultatul precedent va fi suprascris. Pentru a incepe o conversie se va seta registrul ADSC pe 1 si acesta nu va fi pus pe 0 automat. Un alt mod de functionare este **Free Running Mode** in care convertorul va functiona in continuu, la finalul unei conversii se va incepe automat urmatoarea conversie. De fiecare data rezultatul precedent va fi suprascris. Pentru a incepe o conversie se va seta registrul ADSC pe 1 si acesta nu va fi pus pe 0 automat.
  
   * **External Interrupt Request**. In acest mod o conversie va incepe pe un front pozitiv al unui pin de intrare.   * **External Interrupt Request**. In acest mod o conversie va incepe pe un front pozitiv al unui pin de intrare.
-  * **Analog Compare mode**. In acest mod ADC-ul poate compara doua semnale analogice. Nu vom folosi aceasta functionalitate in cadrul laboratorului. Mai multe detalii in capitolul ​23 din {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|datasheet}}.  +  * **Analog Compare mode**. In acest mod ADC-ul poate compara doua semnale analogice. Nu vom folosi aceasta functionalitate in cadrul laboratorului. Mai multe detalii in capitolul ​22 din datasheet.  
-  * **Timer mode**. Pentru un control mai precis al momentului in care se intampla conversia, se poate folosi un eveniment de timer pentru a incepe o noua conversie.+  * **Timer mode**. Pentru un control mai precis al momentului in care se intampla conversia, se poate folosi un eveniment de timer pentru a incepe o noua conversie ​(compare match, overflow).
  
 {{ pm:​lab:​ADCTimer.png?​400 | ADC with Timer }} {{ pm:​lab:​ADCTimer.png?​400 | ADC with Timer }}
Line 108: Line 102:
 ==== Registre ==== ==== Registre ====
 === ADMUX - ADC Multiplexer Selection Register === === ADMUX - ADC Multiplexer Selection Register ===
-{{ pm:lab:ADMUX.png?600 ADCMUX ​}} +{{ :pm:lab:adc_6.png?500 |}} 
-  * Bit 7:6 - **REFS1:0Reference Selection Bits** ​-> Selecteaza tensiunea de referinta +  ​* **Bit 7:6 - REFS1:0 Reference Selection Bits** ​→ Selecteaza tensiunea de referinta 
-  * Bit 5 - **ADLAR ADCLeft Adjust Result** ​-> Modul de aliniere a celor 10 biti. (left-aligned sau right-aligned) +{{ :​pm:​lab:​adc_7.png?​500 |}} 
-  * Bits 3:0 - **MUX3:0: Analog Channel Selection Bits** ​-> Selecteaza portul de intrare de pe care se face conversia +  ​* **Bit 5 - ADLAR ADC Left Adjust Result** ​→ Modul de aliniere a celor 10 biti. (left-aligned sau right-aligned) 
 +  * **Bit 4:0 - MUX 4:Analog Channel ​Gain Selection Bits** ​→ Selecteaza portul de intrare de pe care se face conversia 
 +{{ :​pm:​lab:​adc_8.png?​500 |}}
  
 === ADCSRA – ADC Control and Status Register A === === ADCSRA – ADC Control and Status Register A ===
Line 122: Line 117:
   * **Bit 3 – ADIE: ADC Interrupt Enable** -> Porneste intreruperile pentru ADC   * **Bit 3 – ADIE: ADC Interrupt Enable** -> Porneste intreruperile pentru ADC
   * **Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits** -> Setare prescaler   * **Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits** -> Setare prescaler
 +{{ :​pm:​lab:​adc_10.png?​500 |}}
  
 === ADCSRB – ADC Control and Status Register B === === ADCSRB – ADC Control and Status Register B ===
 {{ pm:​lab:​ADCSRB.png?​600 | ADCSRB }} {{ pm:​lab:​ADCSRB.png?​600 | ADCSRB }}
   * **Bit 2:0 – ADTS2:0: ADC Auto Trigger Source** -> Sursa de la care sa se genereze o noua conversie. Depinde de ADATE din ADCSRA   * **Bit 2:0 – ADTS2:0: ADC Auto Trigger Source** -> Sursa de la care sa se genereze o noua conversie. Depinde de ADATE din ADCSRA
 +{{ :​pm:​lab:​adc_13.png?​500 |}}
  
 === Exemplu === === Exemplu ===
-Setup:+Initializare ADC pentru a citi de pe pinul PA1.
 <​code>​ <​code>​
 ADMUX = 0; ADMUX = 0;
Line 142: Line 138:
 /* enable ADC */ /* enable ADC */
 ADCSRA |= (1 << ADEN); ADCSRA |= (1 << ADEN);
- 
 </​code>​ </​code>​
  
-Read:+Citire valoare convertita.
 <​code>​ <​code>​
 /* start conversion */ /* start conversion */
 ADCSRA |= (1 << ADSC); ADCSRA |= (1 << ADSC);
 /* wait until conversion is complete */ /* wait until conversion is complete */
-while (!(ADCSRA & (1 << ​ADIF))); +while ((ADCSRA & (1 << ​ADSC))); 
-uint16_t ​result = ADC;+uint32_t ​result = ADC;
 </​code>​ </​code>​
- 
-===== 3. ADC in Arduino ===== 
-Biblioteca arduino ne pune la dispozitie o functie simpla pentru a folosi ADC-ul si anume **analogRead()**. 
- 
-<​code>​ 
-void loop() { 
-  val = analogRead(A0); ​ // read the input pin 
-  Serial.println(val); ​  // debug value 
-  delay(100); 
-} 
-</​code>​ 
- 
-Aceasta functie primeste ca parametru un pin si va bloca pana citirea valorii de pe acel pin se termina. Pentru aplicatii simple acest lucru este suficient, dar pentru aplicatii mai complexe in care ne dorim sa continuam procesarea in timp ce facem conversia va trebui sa folosim cod specific pentru microcontrollerul nostru. ​ 
- 
-Tensiunea de referinta folosita se poate seta cu functia analogReference() 
  
 ===== 4. Exercitii ===== ===== 4. Exercitii =====
-**Task 0**  Folositi cod Arduino ​pentru ​a citi valoarea unui potentiometru si a unui senzor ​de temperatura si apoi trimiteti valorile pe seriala. +Obiectivul exercitiilor este sa controlam convertorul analog-digital integrat in microprocesorul Atmega324p ​pentru ​diferite citiri (butoane multiplexate prin divizoare ​de tensiunesenzor ​de temperatura).
-    - Transmiteți către consolăfolosind seriala disponibilă,​ tensiunea (calculată pe microcontroller) ​de la ieșirea potențiometrului și valoarea returnată de ADC (0-1023).  +
-    - Valoarea citită pentru senzorul de temperatură trebuie sa fie exprimată in grade Celsius. Tensiunea de iesire a senzorului variaza liniar cu temperatura. Puteti sa faceti conversia experimental sau folosindu-vă de datasheet ([[https://​www.analog.com/​media/​en/​technical-documentation/​data-sheets/​TMP35_36_37.pdf|Datasheet TMP36]] / [[https://​www.ti.com/​lit/​ds/​symlink/​lm35.pdf|Datasheet LM35]]).+
  
-{{ pm:lab:PB1.png?​500 ​PB1 }}+Scheletul de cod este {{:pm:lab:lab4_skel.zip|aici}}.
  
-<​solution>​ +**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.
-<​hidden>​+
  
-**Soluția** se găsește ​pe [[https://​www.tinkercad.com/things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad TMP36]] +**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 valorileSenzorul de temperatura `MCP9701T-E/TT` are un interval de functionare de -10°C 125°C.
-</​hidden>​ +
-</​solution>​+
  
-**Task 1** Folosind cod specific AVR, cititi valoarea potentiometrului doar atunci cand se apasa un buton.  +<note warning
- +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 GCC, desigur, prin ''​platformio.ini'': ​<​code>​build_flags ​= -Wl,-u,vfprintf -lprintf_flt -lm</​code>​ 
-{{ pm:​lab:​PB2.png?​500 | PB2 }} +</note>
- +
-<solution+
-<​hidden>​ +
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad Interrupt]] +
- +
-<​code>​ +
-void timer_setup(){ +
-  // set timer A for 10ms +
-  TCCR0A ​0; +
-  TCCR0B = 0; +
-  TCNT0  = 0; +
- +
-  OCR0A = 156;            // compare match -> 10ms +
-  TCCR0A |= (1 << WGM01); ​  // CTC mode +
-  TCCR0B |= ((1 << CS02) | (1 << CS00)); ​   // 1024 prescaler  +
-  TIMSK0 |= (1 << OCIE0A); +
- +
-  // Enable timer as source +
-  ADCSRB |= ((1 << ADTS0) | (1 << ADTS1)); +
-+
- +
-void button_setup(){ +
-  // Select INT0 as trigger source +
-  ADCSRB = 0; +
-  ADCSRB |= (1 << ADTS1); +
- +
-  // Enable INT0 +
-  EICRA |= (1 << ISC00); +
-  EIMSK |= (1 << INT0); +
-+
- +
-void setup() +
-+
-     +
-  // disable interrupts +
-  cli(); +
-   +
-  ADMUX = 0; +
-  /* AVCC with external capacitor at AREF pin */ +
-  ADMUX |= (1 << REFS0); +
- +
-  ADCSRA = 0; +
-  /* set prescaler at 128 */ +
-  ADCSRA |= (7 << ADPS0); +
- +
-  // Enable auto-trigger +
-  ADCSRA |= (1 << ADATE); +
-  // Enable Intrerupt +
-  ADCSRA |= (1 << ADIE); +
- +
-  // Set button as trigger source +
-  button_setup();​ +
- +
-  // Select Timer as trigger source +
-  //​timer_setup();​ +
-   +
-  /* enable ADC */ +
-  ADCSRA |= (1 << ADEN); +
-  +
-  // Enable interrupts +
-  sei(); +
-  Serial.begin(9600);​ +
-+
- +
-ISR(ADC_vect){ +
-  Serial.println(ADC);​ +
-+
- +
-ISR(INT0_vect) +
-+
-  Serial.println("​Button Pressed!"​);​ +
-+
- +
-ISR(TIMER0_COMPA_vect){ +
-  // Even if this does nothing. It has to be here to reset the timer interrupt flag +
-+
- +
-void loop() +
-+
-  delay(50);​ +
-+
-</​code>​ +
- +
-</hidden> +
-</​solution>​ +
- +
-**Task 2** Folosind cod specific AVR, cititi valoarea potentiometrului o data la 10ms. Pentru acest exercitiu trebuie sa folositi ADC-ul sa porneasca o conversie automat in functie de un timer. ​+
  
-<​solution>​ +**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 codCompletați codul astfel încât la apăsarea BTN1 sa se aprindă doar LED-ul magenta, la apăsarea BTN4 LED-ul galben, iar la apăsarea BTN6 LED-ul cyan.
-<​hidden>​ +
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​grYhoajb3sd-exquisite-hango-waasa/​editel?​sharecode=gNPGmOuI6oZBx3bp-q-S7NlxWoz_wRwWZm9LJK4DHbI|Tinkercad Potentiometer]]+
  
-Codul este similar. Vezi Task 1.+> Hint: culorile cerute se pot obtine prin combinarea a cate 2 leduri dintre rosu, verde si albastru
  
-</​hidden>​ +**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`!
-</​solution>​+
  
-===== 5. Resurse =====+> Hint: folositi functia `remap_interval` pentru a calcula duty-cycle pentru cele 2 timere
  
-  ​{{:pm:atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}} +**Task 4 (BONUS)** (1 punct) Configurati ADC-ul astfel incat sa aiba o rezolutie de 8 biti si observati diferenta de timp la rulare
-  * Arduino UNO pinout +===== 5Linkuri utile  =====
-{{:​pm:​lab:​uno.jpg?​200|pinout Arduino UNO}} +
-  * Responsabili:​ [[florin.stancu@upb.ro | Florin Stancu ]]+
  
-<​solution>​ +  * [1] [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42743-ATmega324P_Datasheet.pdf|Datasheet ATmega324P]] 
-<​hidden>​Arhiva cu soluțiile o puteți descărca de aici{{:​pm:​lab:​lab4:​lab4-solved.zip}}</hidden> +  * [2] [[https://​github.com/​dantudose/​PM-Board|Documentatie placuta laborator]] 
-</solution>​+  * [3] [[https://​www.instructables.com/​Accessing-5-buttons-through-1-Arduino-pin-Revisi|Butoane multiplexate pe un pin]]
  
-===== 6. Linkuri Utile ===== +===== 6. Responsabili laborator ​=====
-  * [[https://​www.arduino.cc/​reference/​en/​language/​functions/​analog-io/​analogread/​|Arduino Analog Read]] +
-  * [[https://​www.analog.com/​media/​en/​technical-documentation/​data-sheets/​TMP35_36_37.pdf|Datasheet TMP36 ]] +
-  * [[https://​www.ti.com/​lit/​ds/​symlink/​lm35.pdf|Datasheet LM35]] +
-  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328p]] +
-  * [[https://​www.tinkercad.com/​things/​cl7vDLkEZwF?​sharecode=Ve7hoj8NLhZ_JSmV2jcoruc8lzp35D1E-pg1nTFhrgE|Tinkercad TMP36]]+
  
 +  * Eduard Radu
 +  * Alexandru Jipa
pm/lab/lab4-2023-2024.1711735102.txt.gz · Last modified: 2024/03/29 19:58 by mihnea.dinica
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