Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laba_3_ATsP.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
361.47 Кб
Скачать

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]