Схемы входных и выходных устройств
На вход МК подается аналоговый сигнал с ФНЧ. Сигнал подается на один из выводов порта А, так как АЦП подключен к этим выводам. Для подключения аналогового фильтра будем использовать вывод PA1.
Данные с микроконтроллера подаются на ЦАП. Для выходных данных будем использовать выводы порта В и С. Младшие разряды обработанных данных подаются через порт В, а старшие – через порт С на ЦАП. Сигналы управления для ЦАП будут подаваться через порт D.
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
Разработка алгоритма программы
Рис.3.1 – Алгоритм работы устройства
Проектирования модуля инициализации портов ввода-вывода
Порт настроим на ввод информации. Порты В и С на вывод. Мы будем использовать только младшую тетраду порта D, то инициализируем только ее на ввод информации.
void GlobalInitialize(void)
{
DDRA = 0x00; //Port A pins as output
PORTA = 0x01; //Turn ON PullUP for PortA pin
DDRB = DDR_SPI; //Port B pins as output
PORTB = 0xff; //Send 0xFF to PortB output pins
DDRC = 0x01; //Port C pins as output
PORTC = 0x01; //Send 0x03 to PortC output pins
}
Инициализация АЦП
За настройку работы АЦП отвечают три регистра:
· ADCSRA – регистр управления и состояния,
· ADMUX – регистр управления мультиплексором,
· SFIOR – регистр специальных функций.
Форматы регистров управления работой АЦП приведены на рис.6.
Рис.3.2 Формат регистров ADCSRA, ADMUX, SFIOR
Инициализация регистра ADCSRA :
Бит 7 ADEN =”1” включение АЦП.
Бит 6 ADSC =”1” запуск первого преобразования в режиме непрерывного преобразования.
|
|
Бит 5 ADATE позволяет выбрать режим работы АЦП
Бит 4 ADIF флаг прерывания, устанавливается при завершении преобразования
Бит 3 ADIE=”1” разрешение прерывания по завершению преобразования
Биты 2…0 ADPS2..0=”010” выбран делитель частоты на 16, тогда при тактовой частоте контроллера 2 МГц, частота тактов АЦП будет составлять 125 кГц, использование такой частоты позволяет увеличить точность преобразования.
Инициализация регистра ADMUX :
Биты 7,6 REFS1:REFS0= “11” при этом в качестве опорного напряжения используется внутренний источник с Uоп = 2,56 В.
Бит 5 ADLAR результат преобразования выравнивается по левой границе 16-ти разрядного слова
Биты 4..0 MUX4..0 управляют входным мультиплексором, а так как у нас используются входы ADC1, то эти разряды могут принимать значение “00001” .
Инициализация регистра SFIOR :
Биты 7..5 ADTS2..0=”000” определяют режим непрерывного преобразования. В процессе выполнения которого есть возможность изменять содержимое разрядов MUX2..0, что позволяет осуществлять последовательное преобразование сигналов нескольких каналов.
Бит 4 ADHSM=”0” при “1” увеличивает скорость работы АЦП, однако в этом мы не нуждаемся.
Результат преобразования будет определяться выражением:
|
|
ADC=1024*Vin/Vref
void Init_ADC(void)
{
ADCSRA |= (1 << ADIE); //Enable ADC Interrupt
ADCSRA |= (1 << ADPS1); //ADC Timing /16
ADCSRA |= (1 << ADEN); //Enable ADC
ADMUX |= (1 << MUX0); //выбор канала - мультирлексированный ADC1
ADMUX |= (1 << REFS0); //Internal Reference 2,56V selected
ADMUX |= (1 << REFS1);
SFIOR = 0;
#asm("sei");
}
Проектирование процедуры чтения данных с АЦП
Сигнал со входа АЦП преобразовывается по установке бита ADSC в 1. Затем ожидается выставления флага конца преобразования ADIF в 1. После того, как ADIF = 1 данные сохраняются во временной переменной.
unsigned int ReadADC()
{
unsigned int TMP;
unsigned int ADC;
ADCSRA |= 1<<ADSC; //запустить АЦП на преобразование
if (!(ADCSRA & (1<<ADIF)) )//флаг конца преобразования
//если преобразование закончилось
{
TMP=ADCH;
TMP=(TMP<<8);
TMP=TMP + ADCL;
ADCSRA=(ADCSRA | (1<<ADSC)); //запуск АЦП снова
}
ADC=TMP;
CLRBIT(ADCSRA,ADEN); //выключить АЦП
return ADC;
}
Дата добавления: 2019-07-15; просмотров: 196; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!