Differences

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

Link to this comparison view

pm:lab:lab4-2022 [2022/04/06 12:37]
alexandru.predescu [Prescaler]
pm:lab:lab4-2022 [2023/04/04 08:02] (current)
florin.stancu [5. Resurse]
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 Atmega328p. Acest laborator are ca scop familiarizarea voastră cu lucrul cu convertorul analog-digital prezent în microcontroller-ul Atmega328p.
  
 ===== 1. Măsurarea semnalelor analogice ===== ===== 1. Măsurarea semnalelor analogice =====
-Pentru a putea măsura semnalele analogice într-un sistem de calcul digital, acestea trebuie convertite în valori numerice discrete. Un convertor analog – digital (ADC) este un circuit electronic care convertește o tensiune analogică de la intrare într-o valoare digitală.+Pentru a putea măsura semnalele analogice într-un sistem de calcul digital, acestea trebuie convertite în valori numerice discrete. Un convertor analog – digital (en. Analog to Digital Converter - ADC) este un circuit electronic care convertește o tensiune analogică de la intrare într-o valoare digitală.
  
 {{ 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 biți pe care convertorul poate să reprezinte rezultatul binar. ​le furnizeze la ieșirea sa în intervalul de măsură. ​ 
 +**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) șnumărul maxim de valori binare reprezentabile (2^N).
  
 {{ pm:​lab:​rezolutie.png?​800 || Rezolutie ADC }} {{ pm:​lab:​rezolutie.png?​800 || Rezolutie ADC }}
  
-De exemplu, dacă rezoluția unui convertor este de 10 biți atunci el poate furniza 2^10 = 1024 valori diferite la ieșire. Dacă gama de măsurare este de la 0 la 5V, rezoluția ​de măsurare va fi: (5V-0V)/​1024 = 0.0048V adică 4.8mV.+De exemplu, dacă rezoluția unui convertor este de 10 biți atunci el poate furniza 2^10 = 1024 valori diferite la ieșire. Dacă gama de măsurare este de la 0 la 5V, cuanta ​de măsurare va fi: (5V-0V)/​1024 = 0.0048V adică 4.8mV.
  
-O altă caracteristică importantă a unui convertor analog-digital o constituie rata de eșantionare. 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 observam ​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 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:​frecventa.png?​800 || Esantionare }}
  
-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 minim 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.
  
 In funcție de modul în care se execută conversia, convertoarele analog-digitale pot fi de mai multe tipuri: In funcție de modul în care se execută conversia, convertoarele analog-digitale pot fi de mai multe tipuri:
Line 26: Line 33:
  
 <spoiler click pentru mai multe informatii > <spoiler click pentru mai multe informatii >
-=== Resolution ​===+ 
 +**Resolution** 
 The resolution represents the number of discrete values that can be produced over the range of analog values in a measurement period. The discrete values are usually in binary form, so a common way to represent resolution is in audio bit depth (the number of bits of information in each sample). For example, for a resolution of 8 bits, we can encode the analog input signal in 256 different levels, the values ranging from 0 to 255. The resolution represents the number of discrete values that can be produced over the range of analog values in a measurement period. The discrete values are usually in binary form, so a common way to represent resolution is in audio bit depth (the number of bits of information in each sample). For example, for a resolution of 8 bits, we can encode the analog input signal in 256 different levels, the values ranging from 0 to 255.
 Resolution can also be expressed in volts, each level representing a fraction of the voltage measurement range. For example, for a range of 0- 5V and an 8-bit resolution, the subdivision would be (5V – 0V) / (2 ^ 8). Resolution can also be expressed in volts, each level representing a fraction of the voltage measurement range. For example, for a range of 0- 5V and an 8-bit resolution, the subdivision would be (5V – 0V) / (2 ^ 8).
  
-=== Sampling Rate ===+**Sampling Rate** 
 The sampling rate represents the time at which the values of the analog input signal are read. The time is divided into discrete intervals, each sampling a value from the input signal. The Nyquist frequency tells us that it is mandatory for the sampling rate to be at least twice the frequency of the analog input signal so that the signal can be reconstructed afterwards. The sampling rate represents the time at which the values of the analog input signal are read. The time is divided into discrete intervals, each sampling a value from the input signal. The Nyquist frequency tells us that it is mandatory for the sampling rate to be at least twice the frequency of the analog input signal so that the signal can be reconstructed afterwards.
 There appears a problem where frequencies above half the Nyquist frequency are sampled because they are incorrectly detected as lower frequencies. This process is called aliasing. There appears a problem where frequencies above half the Nyquist frequency are sampled because they are incorrectly detected as lower frequencies. This process is called aliasing.
 {{ :​pm:​lab:​adc_2.png?​600 |}} {{ :​pm:​lab:​adc_2.png?​600 |}}
  
-=== ADC Types === +**ADC Types** 
-== Direct Conversion (Flash ADC) ==+ 
 +**Direct Conversion (Flash ADC)** 
 Has a bank of comparators sampling the input signal in parallel, each firing for their decoded voltage range. The comparator bank feeds a logic circuit that generates a code for each voltage range. Has a bank of comparators sampling the input signal in parallel, each firing for their decoded voltage range. The comparator bank feeds a logic circuit that generates a code for each voltage range.
 {{ :​pm:​lab:​adc_3.png?​300 |}} {{ :​pm:​lab:​adc_3.png?​300 |}}
  
-== Successive Approximation ​==+**Successive Approximation** 
 Uses a comparator to successively narrow a range that contains the input voltage. At each successive step, the converter compares the input voltage to the output of an internal digital to analog converter which might represent the midpoint of a selected voltage range. At each step in this process, the approximation is stored in a successive approximation register (SAR). Uses a comparator to successively narrow a range that contains the input voltage. At each successive step, the converter compares the input voltage to the output of an internal digital to analog converter which might represent the midpoint of a selected voltage range. At each step in this process, the approximation is stored in a successive approximation register (SAR).
 {{ :​pm:​lab:​adc_4.png?​500 |}} {{ :​pm:​lab:​adc_4.png?​500 |}}
 Successive approximation ADC`s are cheaper than direct conversion ADC`s, and have a smaller footprint on the IC, but they are also slower. ​ Successive approximation ADC`s are cheaper than direct conversion ADC`s, and have a smaller footprint on the IC, but they are also slower. ​
  
-== Sigma-Delta ​==+**Sigma-Delta** 
 Is a newer design that offers low conversion noise and good resolution. Sigma-delta convertors are appropriate for application that require high resolution, but not the fastest conversion. Is a newer design that offers low conversion noise and good resolution. Sigma-delta convertors are appropriate for application that require high resolution, but not the fastest conversion.
 As stated above, an ADC conversion is not instant, it requires a certain amount of time to complete. This raises a issue: what will happen with the result of the conversion if the input signal will change during this conversion time. The conversion result might not correspond then to the real value of the signal. To solve this, an internal input buffer is used. As stated above, an ADC conversion is not instant, it requires a certain amount of time to complete. This raises a issue: what will happen with the result of the conversion if the input signal will change during this conversion time. The conversion result might not correspond then to the real value of the signal. To solve this, an internal input buffer is used.
Line 78: Line 92:
 **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 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 23.4 din {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|datasheet}}.
  
 ==== Moduri de functionare ==== ==== Moduri de functionare ====
Line 87: Line 101:
  
   * **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 ​22 din 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 ​23 din {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|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.
  
-{{ pm:​lab:​ADCTimer.png?​600 | ADC with Timer }}+{{ pm:​lab:​ADCTimer.png?​400 | ADC with Timer }}
  
 ==== Registre ==== ==== Registre ====
 === ADMUX - ADC Multiplexer Selection Register === === ADMUX - ADC Multiplexer Selection Register ===
-{{ pm:​lab:​ADMUX.png?​800 | ADCMUX }}+{{ pm:​lab:​ADMUX.png?​600 | ADCMUX }}
   * Bit 7:6 - **REFS1:0: Reference Selection Bits** -> Selecteaza tensiunea de referinta   * Bit 7:6 - **REFS1:0: Reference Selection Bits** -> Selecteaza tensiunea de referinta
   * Bit 5 - **ADLAR ADC: Left Adjust Result** -> Modul de aliniere a celor 10 biti. (left-aligned sau right-aligned)   * Bit 5 - **ADLAR ADC: Left Adjust Result** -> Modul de aliniere a celor 10 biti. (left-aligned sau right-aligned)
Line 101: Line 115:
  
 === ADCSRA – ADC Control and Status Register A === === ADCSRA – ADC Control and Status Register A ===
-{{ pm:​lab:​ADCSRA.png?​800 || ADCSRA }} +{{ pm:​lab:​ADCSRA.png?​600 || ADCSRA }} 
   * **Bit 7 – ADEN: ADC Enable** -> Porneste convertorul   * **Bit 7 – ADEN: ADC Enable** -> Porneste convertorul
   * **Bit 6 – ADSC: ADC Start Conversion** -> Folosit pentru a incepe o conversie   * **Bit 6 – ADSC: ADC Start Conversion** -> Folosit pentru a incepe o conversie
Line 110: Line 124:
  
 === ADCSRB – ADC Control and Status Register B === === ADCSRB – ADC Control and Status Register B ===
-{{ pm:​lab:​ADCSRB.png?​800 | 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
  
Line 137: Line 151:
 /* wait until conversion is complete */ /* wait until conversion is complete */
 while (!(ADCSRA & (1 << ADIF))); while (!(ADCSRA & (1 << ADIF)));
-uint32_t ​result = ADC;+uint16_t ​result = ADC;
 </​code>​ </​code>​
  
Line 147: Line 161:
   val = analogRead(A0); ​ // read the input pin   val = analogRead(A0); ​ // read the input pin
   Serial.println(val); ​  // debug value   Serial.println(val); ​  // debug value
 +  delay(100);
 } }
 </​code>​ </​code>​
Line 156: Line 171:
 ===== 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. **Task 0**  Folositi cod Arduino pentru a citi valoarea unui potentiometru si a unui senzor de temperatura si apoi trimiteti valorile pe seriala.
-    - Valoarea potentiometrului ar trebui transmisa catre consola ca un procent. Va trebui sa convertiti numarul citit de ADC la un procent intre 0% si 100%.  +    - 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 ​citita ​pentru senzorul de temperatura ​trebuie sa fie exprimata ​in grade Celsius. Tensiunea de iesire a senzorului variaza liniar cu temperatura. Puteti sa faceti conversia experimental sau folosindu-va de datasheet ([[https://​www.analog.com/​media/​en/​technical-documentation/​data-sheets/​TMP35_36_37.pdf|Datasheet TMP36 ]]).+    - 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 }} {{ pm:​lab:​PB1.png?​500 | PB1 }}
  
 +<​solution>​
 <​hidden>​ <​hidden>​
 +
 **Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad TMP36]] **Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad TMP36]]
 </​hidden>​ </​hidden>​
 +</​solution>​
  
-**Task 1** Folosind cod specific ​de microcontroller, cititi valoarea potentiometrului doar atunci cand se apasa un buton. ​+**Task 1** Folosind cod specific ​AVR, cititi valoarea potentiometrului doar atunci cand se apasa un buton. ​
  
 {{ pm:​lab:​PB2.png?​500 | PB2 }} {{ pm:​lab:​PB2.png?​500 | PB2 }}
 +
 +<​solution>​
 <​hidden>​ <​hidden>​
 **Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad Interrupt]] **Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​b2Yra0sAu2J-brilliant-lappi-habbi/​editel?​sharecode=LfeWdU6ojyT1VzyOCdjwU3ieYR6u4bV2-lEko5iVrTc|Tinkercad Interrupt]]
Line 196: Line 216:
   EIMSK |= (1 << INT0);   EIMSK |= (1 << INT0);
 } }
- 
  
 void setup() void setup()
Line 241: Line 260:
  
 ISR(TIMER0_COMPA_vect){ ISR(TIMER0_COMPA_vect){
-  // Even if this does nothing. It has to be here +  // Even if this does nothing. It has to be here to reset the timer interrupt flag
-  // Else the code just doesn'​t work. Still don't know why. +
-  // [AP] Deoarece ai activat intreruperea de compare match: TIMSK0 |= (1 << OCIE0A); +
-  // [AP] Astfel, daca nu e definit ISR-ul se va reseta uC+
 } }
  
Line 252: Line 268:
 } }
 </​code>​ </​code>​
 +
 </​hidden>​ </​hidden>​
 +</​solution>​
  
-**Task 2** Folosind cod specific ​microcontrollerului ​cititi valoarea potentiometrului o data la 10ms. Pentru ​aceste ​exercitiu trebuie sa folositi ADC-ul sa porneasca o conversie automat in functie de un timer. ​+**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>​
 <​hidden>​ <​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]] **Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​grYhoajb3sd-exquisite-hango-waasa/​editel?​sharecode=gNPGmOuI6oZBx3bp-q-S7NlxWoz_wRwWZm9LJK4DHbI|Tinkercad Potentiometer]]
  
-<​code>​ +Codul este similar. Vezi Task 1.
-void timer_setup(){ +
-  // set timer A for 10ms +
-  TCCR0A = 0; +
-  TCCR0B = 0; +
-  TCNT0  = 0;+
  
-  OCR0A = 156; // compare match -10ms +</hidden
-  ​TCCR0A |= (1 << WGM01);  ​// CTC mode +</solution>​
-  TCCR0B |= ((1 << CS02) | (1 << CS00)); // 1024 prescaler  +
-  TIMSK0 |= (1 << OCIE0A);+
  
-  // Enable timer as source 
-  ADCSRB |= ((1 << ADTS0) | (1 << ADTS1)); 
-} 
- 
-void setup() 
-{ 
-  pinMode(2, INPUT_PULLUP);​ 
-    ​ 
-  // 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); 
-  ​ 
-  // 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(TIMER0_COMPA_vect){ 
-  // Even if this does nothing. It has to be here 
-  // Else the code just doesn'​t work. Still don't know why. 
-  // [AP] Deoarece ai activat intreruperea de compare match: TIMSK0 |= (1 << OCIE0A); 
-  // [AP] Astfel, daca nu e definit ISR-ul se va reseta uC 
-} 
- 
-void loop() 
-{ 
-  delay(50); 
-} 
-</​code>​ 
-</​hidden>​ 
 ===== 5. Resurse ===== ===== 5. Resurse =====
  
Line 328: Line 288:
   * Arduino UNO pinout   * Arduino UNO pinout
 {{:​pm:​lab:​uno.jpg?​200|pinout Arduino UNO}} {{:​pm:​lab:​uno.jpg?​200|pinout Arduino UNO}}
-  * Responsabili:​ [[razvan.stanescu1903@stud.acs.upb.ro | Razvan Stanescu ​]]+  * Responsabili:​ [[florin.stancu@upb.ro | Florin Stancu ​]] 
 + 
 +<​solution>​ 
 +<​hidden>​Arhiva cu soluțiile o puteți descărca de aici: {{:​pm:​lab:​lab4:​lab4-solved.zip}}</​hidden>​ 
 +</​solution>​ 
 ===== 6. Linkuri Utile ===== ===== 6. Linkuri Utile =====
   * [[https://​www.arduino.cc/​reference/​en/​language/​functions/​analog-io/​analogread/​|Arduino Analog Read]]   * [[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.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://​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]]
 +
pm/lab/lab4-2022.1649237825.txt.gz · Last modified: 2022/04/06 12:37 by alexandru.predescu
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