Operácie

A/D prevodník: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Balogh (diskusia | príspevky)
Bez shrnutí editace
Riadok 1: Riadok 1:
'''TODO: prerobit na verziu 2021:'''
== A/D prevodník ==
* prekontrolovat, ci je vsetko platne a pridat nieco z tohoto:
* pridat obsluhu cez prerusenie
* sampling - pridat timer a vzorkovat v presnych casoch
* pridat Moving Average odtialto https://stackoverflow.com/questions/28820904/how-to-efficiently-compute-average-on-the-fly-moving-average aj s vyuzitim delenia 4,16 a pod. cez >>


=== Úlohy ===


== A/D prevodník ==
# Nahrajte si knižnice pre prácu so sériovou linkou, preštudujte využitie knižnice <stdio.h> a demonštrujte.
 
# Doplňte program o jednoduchý A/D prevod a zobrazte hodnotu z potenciometra.
Literatúra:
# Overte prevod A-D prevodníka meraním vnútornej referencie 1,1 V
# Upravte program pre A-D prevod tak, aby v pracoval autonómne s periódou vzorkovania 100ms.
# Oboznámte sa s programom SerialChart a zobrazte časový priebeh nameranej veličiny.


* [http://www.atmel.com/dyn/resources/prod_documents/DOC2559.PDF AVR120: Characterization and Calibration of the ADC on an AVR]
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=56429 Newbie's Guide to AVR A/D Converter]




Riadok 51: Riadok 48:


Príklad najjednoduchšieho SW ovládaného A/D prevodu je uvedená v tomto príklade - pozri [[AVR A/D example.c]]
Príklad najjednoduchšieho SW ovládaného A/D prevodu je uvedená v tomto príklade - pozri [[AVR A/D example.c]]
=== Software ====
Ukážkový program pre prevod napätia na číslo pomocou zabudovaného A/D prevodníka. Obslužné funkcie sú deklarované v knižnici, definície si doplňte sami z prednášky.
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
</source></tab>
<tab name="adc.h"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
</source></tab>
<tab name="adc.c"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
</source></tab>
<tab name="Arduino code"><source lang="arduino" style="background: #9dd1e1;">
#define aPin A0
int sensorValue = 0;      // analog value
void setup()
{               
  Serial.begin(9600);
}
void loop() {
  sensorValue = analogRead(aPin); // sample signal
  Serial.println(sensorValue);
  delay(100);
}
</source></tab>
</tabs>


=== Vizualizácia ===
=== Vizualizácia ===
Riadok 77: Riadok 116:


-->
-->
=== Úlohy ===
# Nahrajte si knižnice pre prácu so sériovou linkou, preštudujte využitie knižnice <stdio.h> a demonštrujte.
# Doplňte program o jednoduchý A/D prevod a zobrazte hodnotu z potenciometra.
# Overte prevod A-D prevodníka meraním vnútornej referencie 1,1 V
# Upravte program pre A-D prevod tak, aby v pracoval autonómne s periódou vzorkovania 100ms.
# Oboznámte sa s programom SerialChart a zobrazte časový priebeh nameranej veličiny.




Riadok 99: Riadok 130:
-->
-->


Literatúra:
* [http://www.atmel.com/dyn/resources/prod_documents/DOC2559.PDF AVR120: Characterization and Calibration of the ADC on an AVR]
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=56429 Newbie's Guide to AVR A/D Converter]
'''TODO: prerobit na verziu 2022:'''
* prekontrolovat, ci je vsetko platne a pridat nieco z tohoto:
* pridat obsluhu cez prerusenie
* sampling - pridat timer a vzorkovat v presnych casoch
* pridat Moving Average odtialto https://stackoverflow.com/questions/28820904/how-to-efficiently-compute-average-on-the-fly-moving-average aj s vyuzitim delenia 4,16 a pod. cez >>





Verzia z 18:03, 14. apríl 2021

A/D prevodník

Úlohy

  1. Nahrajte si knižnice pre prácu so sériovou linkou, preštudujte využitie knižnice <stdio.h> a demonštrujte.
  2. Doplňte program o jednoduchý A/D prevod a zobrazte hodnotu z potenciometra.
  3. Overte prevod A-D prevodníka meraním vnútornej referencie 1,1 V
  4. Upravte program pre A-D prevod tak, aby v pracoval autonómne s periódou vzorkovania 100ms.
  5. Oboznámte sa s programom SerialChart a zobrazte časový priebeh nameranej veličiny.


Rekapitulácia

V tejto úlohe sa predpokladá znalosť funkcie A/D prevodníka z prednášky. Na posledných dvoch slajdoch máte pripravené funkcie na inicializáciu a načítanie výsledku prevodu. Preto sa v tomto návode nebudeme zaoberať týmito funkciami.

A/D prevodník


Pre nameranú hodnotu N platí vzťah


Ako zdroj referenčného napätia použijeme priamo napájacie napätie 5V oddelené tlmivkou a filtrované paralelným kondenzátorom 100n (pozri interaktívnu schému zapojenia). Zodpovedajúce bity REFS1, REFS0 v registri ADMUX sú teda 01.

Zdroj hodinového signálu pre A/D prevodník musí byť v rozsahu 50 až 200 kHz!

Príklad najjednoduchšieho SW ovládaného A/D prevodu je uvedená v tomto príklade - pozri AVR A/D example.c


Software =

Ukážkový program pre prevod napätia na číslo pomocou zabudovaného A/D prevodníka. Obslužné funkcie sú deklarované v knižnici, definície si doplňte sami z prednášky.

#include <avr/io.h>
#include <avr/io.h>
#include <avr/io.h>
#define aPin A0
int sensorValue = 0;      // analog value

void setup() 
{                
   Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(aPin); // sample signal
  Serial.println(sensorValue);
  delay(100);
}


Vizualizácia

Vizualizáciu dát môžeme robiť rozlične. Jeden z možných spôsobov je vypisovať po sériovej linke v pravidelných intervaloch holé data a tie potom uložiť ako maticu do Matlabu a tam nakresliť graf, priebeh, čo treba...

Iná možnosť je použiť napr. program SerialPlot, ktorý kreslí prichádzajúce data priamo ako graf.

Download: SerialPlot 0.11.0


Download

Terminal 1.9b

Serial Plot 0.11.0


Literatúra:


TODO: prerobit na verziu 2022: