Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
803335.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
9.35 Mб
Скачать

5.5 Выводы

Суть данного дипломного проекта заключается в том, чтобы создать программный продукта и устройство, лабораторный стенд с аналого-цифровым преобразователем на основе микроконтроллера для автоматизации технологического процесса и для уменьшения габаритов устройства. Главными условиями разработки новых проектов является выявление источников, которые наносят вред здоровью человека и устранение или ослабление их влияния на человека.

ЗАКЛЮЧЕНИЕ

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

В пояснительной записке рассмотрены общие характеристики аналого-цифровых преобразователей, характеристики микроконтроллера. Также в записке приведены структурная и электрическая схемы разработанного устройства. Имеются методические рекомендации к лабораторной работе, созданной для изучения работы аналого-цифрового преобразователя. В приложениях описана программная часть работы. Приведен перечень элементов.

В результате данной проекта был выполнен следующий объем работ: разработана структурная схема устройства, разработана электрическая принципиальная схема устройства, запрограммирован микроконтроллер, составлена блок-схема программной части проекта, разработаны методические рекомендации к созданной лабораторной работе: “Изучение аналого-цифрового преобразователя”.

СПИСОК ИСПОЛЬЗУЕМОЦ ЛИТЕРАТУРЫ

  1. Хоровиц П., Хилл У. Искусство схемотехники. В 3-х томах: Т. 2. Пер. с англ. — 4-е изд., перераб. и доп.— М.: Мир, 1993. — 371 с. ISBN 5-03-002338-0.

  2. Жан М. Рабаи, Ананта Чандракасан, Боривож Николич Цифровые интегральные схемы. Методология проектирования = Digital Integrated Circuits. — 2-е изд. — М.: Вильямс, 2007. — ISBN 0-13-090996-3

  3. Ханзел Г. Е. Справочник по расчету фильтров. США, 1969. / Пер. с англ., под ред. А. Е. Знаменского. М.: Сов. радио, 1974. — 288 с. УДК 621.372.541.061

  4. Бродин В. Б., Калинин А. В. Системы на микроконтроллерах и БИС программируемой логики. — М.: ЭКОМ, 2002. — ISBN 5-7163-0089-8

  5. Микушин А. Занимательно о микроконтроллерах. — М.: БХВ-Петербург, 2006. — ISBN 5-94157-571-8

  6. Фрунзе А. В. Микроконтроллеры? Это же просто! Т. 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

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