Задание на лабораторную работу
Основное задание. Написать программу, реализующую циклическое преобразование аналоговой величины в цифровой код методом последовательных приближений. За основу взять блок-схему алгоритма метода последовательных приближений, приведенную на рисунке 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 Осциллограмма напряжения на выходе ЦАП
при реализации метода последовательных приближений
