Схемы входных и выходных устройств



 

На вход МК подается аналоговый сигнал с ФНЧ. Сигнал подается на один из выводов порта А, так как АЦП подключен к этим выводам. Для подключения аналогового фильтра будем использовать вывод 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!