Министерство образования и науки РФ
⇐ ПредыдущаяСтр 2 из 2
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет автоматики и вычислительной техники Кафедра электропривода и автоматизации промышленных установок
ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ
<НАЗВАНИЕ ТЕМЫ>
Пояснительная записка к контрольной работе Вариант _____
Разработал студент гр._____ ____________ /__________/
Руководитель к.т.н., доц. ____________/_________/
Работа защищена «_____»____________ 200__ г.
Киров 20___
Далее формулируется задача контрольной работы, приводятся возможные варианты сфер применения, разрабатывается принципиальная схема, дается схема и ее описание. После раздела описания принципа работы схемы приводятся алгоритмы работы программы в виде блок-схем, а затем листинг программы управления. Примеры оформления алгоритма и схемы приведены на рис 1 и 2.
Пример задания на контрольную работу: Разработать принципиальную схему и программу измерителя напряжения для диапазона 0.. 5В с индикацией результата на жидкокристаллическом индикаторе и каналом связи с компьютером по последовательному интерфейсу. Схема основана на микроконтроллере ATMEGA8 и снабжена кнопками «Старт», «Стоп», «Измерение», «Выбор канала +», «Выбор канала —». Для разработки схемы и моделирования ее работы выбираем пакет Proteus VSM и язык программирования Си Code Vision AVR. Принципиальная схема модели устройства показана на рис.1.
Рис.1. Модель принципиальной схемы устройства.
Далее разрабатываем схему алгоритма. Для этого выбираем графический пакет, например Visio или SPLAN. Алгоритм работы устройства приведен на рис.2.
Рис.2. Алгоритм работы устройства
Код программы измерителя:
#include <mega8.h> // подключаем библиотеки #include <delay.h> #include <stdio.h>
#asm .equ __lcd_port=0x18; //подключаем ЖКИ на PORTB #endasm #include <lcd.h>
#define button_ddr DDRD #define button_port PORTD #define button_pin PIND //определяем кнопки #define but_start 2 #define but_stop 3 #define odin_raz 4 #define ch_plus 5 #define ch_minus 6
#define ADC_VREF_TYPE 0x00;
char lcd_buffer[31]; unsigned int result; unsigned char num_ch=1; unsigned char buf; unsigned char vikl=1;
// подпрограмма обработки прерывания по измерению напряжения interrupt [ADC_INT] void adc_isr(void) { result=ADCW*5-ADCW/10; //умножаем чтобы получить мВ // и немного учитываем погрешности printf("result=%dmv ",result); // печатаем в УАРТ значение printf("number of channel=%d",num_ch); // теперь канал putchar(0x0D); // на новую строку УАРТА sprintf(lcd_buffer,"ADC=%4umV num_ch=%1u",result,num_ch); // записываем // в буфер вторые 2 параметра lcd_clear(); // очищаем жки lcd_puts(lcd_buffer); // теперь выводим в него delay_ms(1); if (vikl==0) ADCSRA=0b11011111; } interrupt [EXT_INT0] void ext_int0_isr(void) { //старт кнопка vikl=0; ADCSRA=0b11011111; } // External Interrupt 1 подпрограмма обработки прерывания interrupt [EXT_INT1] void ext_int1_isr(void) { //стоп кнопка ADCSRA=0; vikl=1; }
void init(void) { ADCSRA=0b10011111; ADMUX=0; button_ddr=0x00; button_port=0xFC; PORTB=0x00; MCUCR = 0x0A; GICR = 0xC0; UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x0C;
#asm ("sei"); lcd_init(16); // инициализация экрана ЖКИ }
void main(void) { init(); // инициализация всего
lcd_gotoxy(0,0); // идем в нулевую точку lcd_putsf("-=ADC&UART&LCD=-"); // печатаем lcd_gotoxy(3,1); // идем в точку lcd_putsf("-EP-i-APU-"); // печатаем кафедру ЭП и АПУ
printf("Nagmi 0 dlya spravki"); // помощь putchar(0x0D);
while(1) { if (!(button_pin.odin_raz)) { ADCSRA=0b11011111; //button_port=0xFC; } if (button_pin.ch_plus) num_ch++;
if (button_pin.ch_minus) num_ch--;
buf=getchar();
if (buf==0x39) { ADCSRA=0; vikl=1; } if (buf==0x38) ADCSRA=0b11011111; if (buf==0x37) { vikl=0; ADCSRA=0b11011111; } // если нажата клавиша 0, то выводим справку помощи if (buf==0x30) { printf("Opisanie klavish:"); putchar(0x0D); printf("1-6 - vibor kanala"); putchar(0x0D); printf("9 - vikluchit"); putchar(0x0D); printf("8 - odno preobrazovanie"); putchar(0x0D); } // если нажата клавиша 1, то выбираем канал 1 и т.д.
if (buf==0x31) { ADMUX=0; num_ch=1; } if (buf==0x32) { ADMUX=1; num_ch=2; } if (buf==0x33) { ADMUX=2; num_ch=3; } if (buf==0x34) { ADMUX=3; num_ch=4; } if (buf==0x35) { ADMUX=4; num_ch=5; } if (buf==0x36) { ADMUX=5; num_ch=6; }
} }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|