![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Задание на лабораторную работу
Основное задание. Написать программу, реализующую циклическое преобразование аналоговой величины в цифровой код методом последовательных приближений. За основу взять блок-схему алгоритма метода последовательных приближений, приведенную на рисунке 2. Схема блока АЦП лабораторного макета приведена на рисунке 3. Период измерений и способ индикации результата приведены в таблице вариантов (табл.1). На индикацию вывести код АЦП. Дополнительное задание. Вывести на статическую (динамическую) индикацию входное напряжение АЦП в формате 1, 23 В с гашением незначащих разрядов.
Таблица1 – Таблица вариантов заданий
Таблица 2 – Данные для реализации индикации на линейку светодиодов и матричный индикатор
При моделировании в Proteuse на вход АЦП подать постоянное напряжение с уровнем
где 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 ************************************************************
|