Ðналого цифровой преобразователь
Материал из Automata.
(Различия между версиями)
м (Полностью удалено содержимое страницы) |
м (Правки Kern (обсуждение) откачены к версии Mrsnaut) |
||
Строка 1: | Строка 1: | ||
+ | #include <stdint.h> | ||
+ | #include <avr/io.h> | ||
+ | #include <avr/interrupt.h> | ||
+ | uint8_t ADCData = 0;//переменная хранения преобразованных данных; | ||
+ | |||
+ | //процедура задержки; | ||
+ | void Wait (volatile uint32_t wait) | ||
+ | { | ||
+ | while (wait-- > 0); //wait - пустых тактов; | ||
+ | } | ||
+ | |||
+ | //обработчик прерывания от АЦП; | ||
+ | ISR (SIG_ADC) | ||
+ | { | ||
+ | ADCData = ADCH;//сохраняем преобразованное значение; | ||
+ | Wait(800000);//ждем 0.1с, чтобы АЦП не происходило слишком быстро; | ||
+ | } | ||
+ | |||
+ | //главная функция; | ||
+ | int main (void) | ||
+ | { | ||
+ | DDRB = 0xff;//порт В настраиваем на выход; | ||
+ | PORTB = 0x00;//напряжение на выводах порта 0в; | ||
+ | SREG = 0x80;//разрешаем все прерывания, выставляя флаг "I" глобального разрешения прерываний; | ||
+ | ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(ADLAR) | 0x07;//внутреннее опорное напряжение в 2.56в, | ||
+ | //смещение данных влево в регистрах ADCH и ADCL, | ||
+ | //вход АЦП - PC7_ADC7; | ||
+ | ADCSRA = _BV(ADEN) | _BV(ADIE);//включаем модуль АЦП и разрешаем прерывания от него; | ||
+ | while (1)//в бесконечном цикле; | ||
+ | ADCSRA |= _BV(ADSC);//запускаем преобразование; | ||
+ | return 0; | ||
+ | } |
Текущая версия
#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h>
uint8_t ADCData = 0;//переменная хранения преобразованных данных;
//процедура задержки; void Wait (volatile uint32_t wait) { while (wait-- > 0); //wait - пустых тактов; }
//обработчик прерывания от АЦП; ISR (SIG_ADC) { ADCData = ADCH;//сохраняем преобразованное значение; Wait(800000);//ждем 0.1с, чтобы АЦП не происходило слишком быстро; }
//главная функция; int main (void) { DDRB = 0xff;//порт В настраиваем на выход; PORTB = 0x00;//напряжение на выводах порта 0в; SREG = 0x80;//разрешаем все прерывания, выставляя флаг "I" глобального разрешения прерываний; ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(ADLAR) | 0x07;//внутреннее опорное напряжение в 2.56в, //смещение данных влево в регистрах ADCH и ADCL, //вход АЦП - PC7_ADC7; ADCSRA = _BV(ADEN) | _BV(ADIE);//включаем модуль АЦП и разрешаем прерывания от него; while (1)//в бесконечном цикле; ADCSRA |= _BV(ADSC);//запускаем преобразование; return 0; }