Reklama

Základy ovládání mikrokontroléru ATmega(16/32) 9.díl – A/D převodník (2.část)

Úvod

V minulém díle jsme si popsali nastavení A/D převodníku u mikrokontroléru ATmega32.V tomto příspěvku se podíváme na praktickou ukázku. Vytvoříme jednoduchý program, který bude měřit napětí v rozmezí 0 – 5 V s rozlišením osmi bitů a naměřenou hodnotu zobrazí pomocí osmi LED diod.

Následující řádky popisují nastavení A/D převodníku krok za krokem

 

1. Nastavení registru ADMUX

Nastavíme hodnotu na 0b01100000

0b01100000 – nastavení reference na AUCC, bity REFS1 a REFS0

0b01100000 – nastavení zarovnání doleva, bit ADLAR

0b01100000nastavení výběru kanálu na ADC0, bity MUX4, MUX3, MUX2, MUX1 a MUX0

 

2. Nastavení registru ADCSRA

Nastavíme hodnotu na 0b10001111

0b10001111 – zapnutí A/D převodníku, bit ADEN

0b10001111 – nespouštět A/D převod, bit ADSC

0b10001111 – deaktivace automatického spouštění, bit ADATE

0b10001111 – informace o ukončeném A/D převodu, bit ADIF

0b10001111 – povolení přerušení po A/D převodu, bit ADIE

0b10001111nastavení předděličky na 125 kHz pro A/D převodník, bity ADPS2, ADPS1 a  ADPS0

 

3. Spuštění převodu

Maskování registru ADCSRA |= 0b01000000

          0b01001111 – spustit A/D převod, bit ADSC

 

Elektronické schéma zapojení A/D převodníku

history_1

Obr. 1: Elektronické schéma zapojení A/D převodníku

 

Okomentovaný zdrojový kód
 

001: #define F_CPU 16000000UL// frekvence hodinového signálu (nutné pro delay.h)
002: #include <avr/io.h>// knihovna AVR pro Input/output
003: #include <util/delay.h>// hlavičkový soubor pro zpoždění
004: #include <avr/interrupt.h>// hlavičkový soubor pro přerušení
005:
006: volatile int analog_value;
007:
008: ISR(ADC_vect)// přerušení po ukončení A/D převodu
009: {
010: analog_value = ADCH;
011: }
012:
013: int main(void)
014: {
015: ADMUX = 0b01100000;// reference – AUcc, zarovnání doleva, ADC0
016: ADCSRA = 0b10001111;// zapnutí A/D převodníku, povolení přerušení, f = 125kHz
017:
018: DDRA = 0x00;// PORTA – nastavení jako vstup
019: PORTA = 0b11111110;// PORTA – vypnutí pull-up na PA0
020: DDRC = 0xFF;// PORTC – nastavení jako výstup
021: PORTC = 0x00;// PORTC – vynulování výstupu
022:
023: sei();// povolení přerušení
024:
025: while(1)
026: {
027: ADCSRA |= 0b01000000;// spuštění A/D převodu
028: _delay_ms(50);// čekání 50ms
029: // zobrazení LED v závislosti na naměřené hodnotě
030: // zobrazení LED v závislosti na naměřené hodnotě
031: if (analog_value < 5)
032: {
033: PORTC = 0b00000000;
034: }
035: else if ((analog_value >= 5) && (analog_value < 30))
036: {
037: PORTC = 0b00000001;
038: }
039: else if ((analog_value >= 30) && (analog_value < 60))
040: {
041: PORTC = 0b00000011;
042: }
043: else if ((analog_value >= 60) && (analog_value < 90))
044: {
045: PORTC = 0b00000111;
046: }
047: else if ((analog_value >= 90) && (analog_value < 120))
048: {
049: PORTC = 0b00001111;
050: }
051: else if ((analog_value >= 120) && (analog_value < 150))
052: {
053: PORTC = 0b00011111;
054: }
055: else if ((analog_value >= 150) && (analog_value < 180))
056: {
057: PORTC = 0b00111111;
058: }
059: else if ((analog_value >= 180) && (analog_value < 210))
060: {
061: PORTC = 0b01111111;
062: }
063: else
064: {
065: PORTC = 0b11111111;
066: }
067: }
068: return 0;
069: }

Vzorové zdrojové kódy slouží pouze k jednoduché demonstraci funkce, proto často obsahují globální proměnné, neobsahují většinou ukazatele, dále také neobsahují kontroly proměnných, definování nevyužitých pinů mikrokontroléru a podobné správné programátorské návyky. Proto je nutné tyto kódy brát s patřičnou rezervou.
 

 

Video s ukázkou funkce

[wpvp_flowplayer src=http://tajned.cz/wp-content/uploads/2013/12/AD_convertor.mp4 width=640 height=480 splash=http://tajned.cz/wp-content/uploads/2013/12/video.png]

 
Aktualizace: 22.4.2015
 

Jiné příspěvky v kategorii:

 

Základy ovládání mikrokontroléru ATmega(16/32) 1.díl – První kroky

Základy ovládání mikrokontroléru ATmega(16/32) 2. díl – Kompilace a krokování programu

Základy ovládání mikrokontroléru ATmega(16/32) 3.díl – Nahrání vytvořeného zdrojového kódu do mikrokontroléru

Základy ovládání mikrokontroléru ATmega(16/32) 4.díl – Ovládání vstupně/výstupních portů

Základy ovládání mikrokontroléru ATmega(16/32) 5.díl – Ošetření zákmitů na vstupním pinu mikrokontroléru

Základy ovládání mikrokontroléru ATmega(16/32) 6.díl – Externí přerušení

Základy ovládání mikrokontroléru ATmega(16/32) 7. díl – Jednoduchá elektronická hrací kostka
Základy ovládání mikrokontroléru ATmega(16/32) 8.díl – A/D převodník (1.část)

Základy ovládání mikrokontroléru ATmega(16/32) 10.díl – A/D převodník (3.část)

Základy ovládání mikrokontroléru ATmega(16/32) 11.díl – Čítač / Časovač (1.část – Základní popis)

Základy ovládání mikrokontroléru ATmega(16/32) 12.díl – Čítač / Časovač (2.část – Popis registrů)

Základy ovládání mikrokontroléru ATmega(16/32) 13.díl – Čítač / Časovač (3.část – Praktická ukázka)

Základy ovládání mikrokontroléru ATmega(16/32) 14.díl – Dvouřádkový LCD displej

Základy ovládání mikrokontroléru ATmega(16/32) 15.díl – Popis implementace komunikace I2C a EEPROM paměti 24LC512

Základy ovládání mikrokontroléru ATmega(16/32) 16.díl – Watchdog

Základy ovládání mikrokontroléru ATmega(16/32) 17.díl – Obsluha maticové klávesnice

Základy ovládání mikrokontroléru ATmega(16/32) 18.díl – Jednotka USART (1. část – Popis)

Základy ovládání mikrokontroléru ATmega(16/32) 19.díl – Jednotka USART (2. část – Praktická ukázka)

Základy ovládání mikrokontroléru ATmega(16/32) 20. díl – Generování audio signálu pomocí PWM

Základy ovládání mikrokontroléru ATmega(16/32) 21. díl – Analogový komparátor

Základy ovládání mikrokontroléru ATmega(16/32) 22. díl – Krokování programu v jazyce symbolických adres (JSA)
 
Tajned facebook
 

Za případné chyby v textu, ve zdrojovém kódě, nebo ve schématickém zapojení se omlouváme.
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.