Задание на лабораторную работу

Основное задание. Написать программу, реализующую циклическое преобразование аналоговой величины в цифровой код методом последовательных приближений. За основу взять блок-схему алгоритма метода последовательных приближений, приведенную на рисунке 2. Схема блока АЦП лабораторного макета приведена на рисунке 3. Период измерений и способ индикации результата приведены в таблице вариантов (табл.1). На индикацию вывести код АЦП.

Дополнительное задание. Вывести на статическую (динамическую) индикацию входное напряжение АЦП в формате 1,23 В с гашением незначащих разрядов.

 

Таблица1 – Таблица вариантов заданий

Вариант Способ индикации Период измерений, с
1 Статическая индикация 0,2
2 Динамическая индикация 0,4
3 Линейка светодиодов 0,6
4 Матричный индикатор 0,8
5 UART (9600 Бод) 1,0
6 ЖКИ 0,2
7 Статическая индикация 0,4
8 Динамическая индикация 0,6
9 Линейка светодиодов 0,8
10 Матричный индикатор 1,0
11 UART (19200 Бод) 0,2
12 ЖКИ 0,4
13 Статическая индикация 0,6
14 Динамическая индикация 0,8
15 Линейка светодиодов 1,0
16 Матричный индикатор 0,2

 

Таблица 2 – Данные для реализации индикации

на линейку светодиодов и матричный индикатор

Код АЦП Кол-во засвеченных светодиодов в линейке светодиодов Кол-во засвеченных строк матричного индикатора
0..32 1 1
32..64 2 2
64..96 3 3
96..128 4 4
128..160 5 5
160..192 6 6
192..224 7 7
224..255 8 7

 

При моделировании в Proteuse на вход АЦП подать постоянное напряжение с уровнем

 

, (1)

 

где N – номер по журналу.

 

Рис.2 Блок-схема алгоритма метода половинных приближений

 

Пример программы аналого-цифрового преобразования по методу последовательного счета с выводом результата преобразования на динамический индикатор.

#include "mega8515.h"

unsigned char *LED_REG = (unsigned char *)0xA006;

unsigned char *IND_REGL = (unsigned char *)0xA000;

unsigned char *IND_REGH = (unsigned char *)0xB000;

unsigned char *DC_REG = (unsigned char *)0xA004;

unsigned char *leds=(unsigned char *)0xA006;

//unsigned char *rus = (unsigned char *) 0x8003;

unsigned char *DAC = (unsigned char *) 0xF000;

unsigned char KodADC;

//unsigned char n;

//unsigned short temp;

//unsigned char buf[4];

//Функция перекодировки символа в код семисегментного индикатора *************************

/*

unsigned char Decoder(char Sim)

{

unsigned char kod;

if (Sim==0) kod=0x3F;

if (Sim==1) kod=0x06;

if (Sim==2) kod=0x5B;

if (Sim==3) kod=0x4F;

if (Sim==4) kod=0x66;

if (Sim==5) kod=0x6D;

if (Sim==6) kod=0x7C;

if (Sim==7) kod=0x07;

if (Sim==8) kod=0x7F;

if (Sim==9) kod=0x6F;

return (kod);

}

//Функция вывода переменной на динамический индикатор ************************************

void OutDinIndic(unsigned short x)

{

if (x>9999) x=9999;

temp=x/1000;

buf[0]=Decoder(temp);

x=x-temp*1000;

temp=x/100;

buf[1]=Decoder(temp);

x=x-temp*100;

temp=x/10;

buf[2]=Decoder(temp);

buf[3]=Decoder(x-temp*10);

}

//Обработчик прерываний от Т0 ************************************************************

void timer_0() interrupt 1

{

EA=0;

PB=0;//Потушили

PC=n;

PB=buf[n];//Выдаем на инф. шину очередной символ

n++;

if (n==4) n=0;

EA=1;

} */

//Функция преобразования АЦП по методу последовательного счета **************************

unsigned char ConvADC()

{

unsigned char i,j;

for(i=0;i<=255;i++)

{

*DAC=i;

for(j=0;j<=10;j++);

j=PINB;

j=j&0x10;

//*IND_REGH=j;

if (j==0)

{

//DAC=0;

// break;

//*IND_REGL=i;

return(i);

}

}

DAC=0;

return(i);

}

 

//****************************************************************************************

void main()

{

MCUCR=(MCUCR | 0b11000000);//Работаем со стендом (МП-режим и задержка)

//SREG.7=1;//Разрешение прерываний

DDRB=0xFF;// Порт Б настраиваем на ввод

//ACSR.ACD=0;// Enable comparator

//*IND_REGL=ACSR.ACO;

*DC_REG=0x03;

*leds=0x0F;//Засветили 4 светодиода линейки светодиодов

 

//OutDinIndic(KodADC);//Выдали результат на динамический индикатор

while(1){

KodADC=ConvADC();//Выполнили преобразование

*IND_REGH=KodADC;

};

}}

 

Рис.3 Схема блока АЦП лабораторного макета

 

 

Рис.4 Осциллограмма напряжения на выходе ЦАП

при реализации метода поразрядного уравновешивания.

 

 

Рис.5 Осциллограмма напряжения на выходе ЦАП

при реализации метода последовательных приближений

 

Порядок выполнения работы

  1. Откомпилировать и запустить в Proteusе пример к лабораторной работе.
  2. Написать функцию преобразования АЦП по методу половинных приближений.
  3. Откомпилировать и получить результаты в Proteusе.
  4. Реализовать вывод результата АЦ-преобразования на индикацию, в соответствии с вариантом задания.
  5. Переделать схему и программу под использование встроенного компаратора контроллера ATMega8515.

6. Загрузить программу в стенд EV8031/AVR. Убедиться в правильном выполнении индивидуального задания.

7. Ответить на контрольные вопросы.

 

Содержание отчёта

Отчёт о лабораторной работе должен содержать:

1. Tитульный лист.

2. Цель и задачи работы.

3. Текст индивидуального задания.

4. Текст программы на Си.

5. PrintScreen схемы в Proteus с итоговым результатом на индикаторе.

  1. Выводы по работе.

 

Контрольные вопросы

1. Классификация АЦП по способу преобразования во времени.

2. Схема АЦП на базе ЦАП.

3. Суть метода последовательных приближений.

4. Статические параметры АЦП.

5. Динамические параметры АЦП.

6. Понятие разрешающей способности АЦП.

7. Что характеризует погрешность полной шкалы?