A/D prevodník: Rozdiel medzi revíziami
Z SensorWiki
(→A/D prevodník) |
|||
Riadok 1: | Riadok 1: | ||
− | + | == A/D prevodník == | |
− | |||
− | |||
− | |||
− | |||
+ | === Ú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 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: | ||
--> | --> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 zo dňa a času 18:03, 14. apríl 2021
Obsah
A/D prevodník
Ú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.
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
Literatúra:
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 >>