- •1. Анализ поставленной задачи
- •1.2 Точность и ошибки квантования
- •1.5 Типы ацп
- •1.7 Микроконтроллеры
- •1.9 Аналого-цифровой преобразователь микроконтроллера
- •1.10 Семисегментный индикатор
- •2. Описание програмной части
- •2.1 Программирование микроконтроллера
- •3. Описание лабораторной работы
- •3.1 Использование лабораторного стенда на практике
- •4. Экономическая часть
- •Разработка комплексного плана по теме
- •4.2 Определение потребностей в материальных ресурсах
- •4.3 Рассчитаем цену программного продукта
- •4.4 Общие показатели качества
- •5.1 Краткий анализ объекта (производственного помещения)
- •5.4 Разработка мероприятий по снижению возможного воздействия вредных и устранению опасных факторов
- •5.5 Выводы
5.5 Выводы
Суть данного дипломного проекта заключается в том, чтобы создать программный продукта и устройство, лабораторный стенд с аналого-цифровым преобразователем на основе микроконтроллера для автоматизации технологического процесса и для уменьшения габаритов устройства. Главными условиями разработки новых проектов является выявление источников, которые наносят вред здоровью человека и устранение или ослабление их влияния на человека.
ЗАКЛЮЧЕНИЕ
Основной целью данной выпускной работы было создание лабораторного стенда для изучения работы аналого-цифрового преобразователя на основе промышленного микроконтроллера.
В пояснительной записке рассмотрены общие характеристики аналого-цифровых преобразователей, характеристики микроконтроллера. Также в записке приведены структурная и электрическая схемы разработанного устройства. Имеются методические рекомендации к лабораторной работе, созданной для изучения работы аналого-цифрового преобразователя. В приложениях описана программная часть работы. Приведен перечень элементов.
В результате данной проекта был выполнен следующий объем работ: разработана структурная схема устройства, разработана электрическая принципиальная схема устройства, запрограммирован микроконтроллер, составлена блок-схема программной части проекта, разработаны методические рекомендации к созданной лабораторной работе: “Изучение аналого-цифрового преобразователя”.
СПИСОК ИСПОЛЬЗУЕМОЦ ЛИТЕРАТУРЫ
Хоровиц П., Хилл У. Искусство схемотехники. В 3-х томах: Т. 2. Пер. с англ. — 4-е изд., перераб. и доп.— М.: Мир, 1993. — 371 с. ISBN 5-03-002338-0.
Жан М. Рабаи, Ананта Чандракасан, Боривож Николич Цифровые интегральные схемы. Методология проектирования = Digital Integrated Circuits. — 2-е изд. — М.: Вильямс, 2007. — ISBN 0-13-090996-3
Ханзел Г. Е. Справочник по расчету фильтров. США, 1969. / Пер. с англ., под ред. А. Е. Знаменского. М.: Сов. радио, 1974. — 288 с. УДК 621.372.541.061
Бродин В. Б., Калинин А. В. Системы на микроконтроллерах и БИС программируемой логики. — М.: ЭКОМ, 2002. — ISBN 5-7163-0089-8
Микушин А. Занимательно о микроконтроллерах. — М.: БХВ-Петербург, 2006. — ISBN 5-94157-571-8
Фрунзе А. В. Микроконтроллеры? Это же просто! Т. 3. — М.: ООО «ИД СКИМЕН», 2003. — ISBN 5-94929-003-7
ПРИЛОЖЕНИЕ
Листинг программы
#include <mega8.h> // Подключение библиотек
#include <delay.h>
#include <stdio.h> //Библиотеки стандартных функций ввода/вывода
#include <delay.h> // Прерывания задержки
unsigned int adc_data; //переменная содержащая значение АЦП
int adc_rezult; //переменная содержащая результат преобразования АЦП
int adc_a;
int adc_b;
int adc_c;
int adc_d;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ TCNT0=0x83; } // Инициализация таймера
interrupt [ADC_INT] void adc_isr(void)
{adc_data=ADCH;} // Считывание результата преобразования с регистра ADCH
void indic_0(void); // отображение на индикаторе цифр
void indic_1(void);
void indic_2(void);
void indic_3(void);
void indic_4(void);
void indic_5(void);
void indic_6(void);
void indic_7(void);
void indic_8(void);
void indic_9(void);
void culc_rezult(int a); //пересчет данных полученных от АЦП в значение типа ХХХХ для удобства отображения.
void indic_out(int a,int b); // а- цифра, б-позиция
void init_avr(void); //инициализация контроллера
void razb_rezult(void); //разбивает результат на цифры
void indic_vivod(void); //организовывает вывод числа
void main(void) //функция содержит локальные переменные
{init_avr();}
void indic_0(void) //Описание функций для отображения на индикаторе цифр
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=1; //e
PORTD.5=1; //f
PORTD.6=0; //g
PORTD.7=0; //h
}
void indic_1(void)
{
PORTD.0=0; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=0; //d
PORTD.4=0; //e
PORTD.5=0; //f
PORTD.6=0; //g
PORTD.7=0; //h
}
void indic_2(void)
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=0; //c
PORTD.3=1; //d
PORTD.4=1; //e
PORTD.5=0; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_3(void)
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=0; //e
PORTD.5=0; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_4(void)
{
PORTD.0=0; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=0; //d
PORTD.4=0; //e
PORTD.5=1; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_5(void)
{
PORTD.0=1; //a
PORTD.1=0; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=0; //e
PORTD.5=1; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_6(void)
{
PORTD.0=1; //a
PORTD.1=0; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=1; //e
PORTD.5=1; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_7(void)
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=0; //d
PORTD.4=0; //e
PORTD.5=0; //f
PORTD.6=0; //g
PORTD.7=0; //h
}
void indic_8(void)
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=1; //e
PORTD.5=1; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void indic_9(void)
{
PORTD.0=1; //a
PORTD.1=1; //b
PORTD.2=1; //c
PORTD.3=1; //d
PORTD.4=0; //e
PORTD.5=1; //f
PORTD.6=1; //g
PORTD.7=0; //h
}
void culc_rezult(int a) //расчет значения с АЦП
{
adc_rezult=(a*25-(a*25)%10)/10;
}
void indic_vivod(void) //организовывает вывод числа на семисегментных
{
indic_out(adc_a,5);
indic_out(adc_b,4);
indic_out(adc_c,3);
indic_out(adc_d,2);
PORTD.7=1; // зажечь точку
}
void razb_rezult(void) //разбить результат на цифры
{
adc_a=adc_rezult%10;
adc_b=(adc_rezult-adc_a)%100/10;
adc_c=(adc_rezult-adc_a-adc_b*10)%1000/100;
}
void indic_out(int a,int b) // а- цифра, б-позиция
{
switch (b) {
case 2: { PORTB.2=1; PORTB.3=0; PORTB.4=0;}
break;
case 3: { PORTB.2=0; PORTB.3=1; PORTB.4=0;}
break;
case 4: { PORTB.2=0; PORTB.3=0; PORTB.4=1;}
break;
};
switch (a) {
case 0: indic_0();
break;
case 1: indic_1();
break;
case 2: indic_2();
break;
case 3: indic_3();
break;
case 4: indic_4();
break;
case 5: indic_5();
break;
case 6: indic_6();
break;
case 7: indic_7();
break;
case 8: indic_8();
break;
case 9: indic_9();
break;
};
}
void init_avr(void)
PORTB=0x00; // Настройка порта B
DDRB=0x00;
PORTC=0x00; // Настройка порта C
DDRC=0x00;
PORTD=0x00; // Настройка порта D
DDRD=0x00;
TCCR0=0x03; // Настройка таймер-счетчика
TCNT0=0x83;
OCR0=0x00;
TCCR1A=0x00; // Настройка таймер-счетчика1
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00; // Настройка таймер-счетчика 2
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00; // Настройка прерываний
MCUCSR=0x00;
TIMSK=0x01; // Настройка прерываний таймер-счетчика
UCSRA=0x00; // Настройка USART
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
ACSR=0x80; // Настройка аналогового компаратора
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8E;
ADMUX.0=0; //выбор ножки ввода аналогового напряжение
ADMUX.1=1;
ADMUX.2=0;
ADMUX.3=0;
ADMUX.4=0;
ADCSRC.7 = 1; //включить АЦП
init_avr();
#asm("sei")
DDRB=0xFF; //открытие портов для записи
DDRD=0b00011100;
while (1)
{
ADCSRC.6 = 1; // ADSC(6-й бит) = 1 начать работу АЦП
adc_data=ADCH; //чтение результата преобразования АЦП
culc_rezult(adc_data); // подсчет результата преобразования
razb_rezult(); //разбиение результата на цифры
indic_vivod(); }; } //вывод результата на семисегментник
Размещено на Allbest.ru
