Имя переменной
|
Тип переменной
|
Назначение переменной
|
time
|
unsigned int
|
Количество интервалов
дискретизации
|
msec
|
unsigned int
|
Счетчик милисекунд
|
sec
|
unsigned char
|
Счетчик секунд
|
vivod
|
unsigned char
|
Переменная, в которой
хранится результат предыдущего запоминания
|
count
|
unsigned char
|
Счетчик количества нажатий
|
cifri[]
|
unsigned char
|
Массив цифр для
семисегментного индикатора
|
temp
|
unsigned char
|
Переменная для динамической
индикации
|
i
|
unsigned char
|
Переменная для динамической
индикации
|
Блок-схемы работы основной программы и подпрограмм обработки прерываний
изображены на рис. 4.1...4.3.
программа прерывание плата
Рис.
4.1 - Блок-схема подпрограммы обработки прерываний для формирования аналогового
сигнала
Рис.
4.2 - Блок-схема подпрограммы обработки прерываний для отсчета 15 с
Рис.
4.2 - Блок-схема основной программы и функции динамической индикации
Текст
программы, написанной на языке С, представлен ниже.
This program was produced by theV2.05.0
ProfessionalProgram Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
: : : 16.05.2016: NeVaDa: :
type : ATmega8type : ApplicationCore Clock frequency:
8,000000 MHzmodel : SmallRAM size : 0Stack size : 256
#include <mega8.h>
{char temp; char i; (i = 2; i >= 1; i = i >>
1)
{ = chislo % 10;= chislo / 10;= i; =
~cifri[temp];_ms(1);
}
}
// Timer1 output compare A interrupt service
routine[TIM1_COMPA] void timer1_compa_isr(void)
{(msec < 1000)
{++;
}
{= 0;(sec < 15)
{++;
}
{= 0;= count; = 0;
}
}
}
// Timer2 output compare interrupt service
routine[TIM2_COMP] void timer2_comp_isr(void)
{(time <= 700)++;= 0;(time >= 0 && time
<= 40)
{= 5*time;
}(time > 40 && time <= 200)
{= 200;
}(time > 200 && time <= 300)
{= -2*(time - 300);
}
{= 0;
}
}
// Declare your global variables heremain(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0
State2=0 State1=0 State0=0 =0x80;=0x7F;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In
Func1=Out Func0=Out
// State6=T State5=T State4=T State3=T State2=P
State1=0 State0=0 =0x04;=0x03;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0
State2=0 State1=0 State0=0 =0x00;=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped=0x00;=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt:
OffA=0x00;B=0x0B;H=0x00;L=0x00;H=0x00;L=0x00;AH=0x00;AL=0x73;BH=0x00;BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected=0x00;=0x0F;=0x00;=18;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off=0x00;
// Timer(s)/Counter(s) Interrupt(s)
initialization=0x90;
// USART initialization
// USART disabled=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1:
Off=0x80;=0x00;
// ADC initialization
// ADC disabled=0x00;
// SPI disabled=0x00;
// TWI initialization
// TWI disabled=0x00;
// Global enable interrupts
#asm("sei")(1)
{(PINC.2 == 0)
{_us(200);(PINC.2 == 0)
{
}_us(200);++;
}
_ind(vivod);
}
}
5. Результаты моделирования работы устройства в программе Isis Пакета Proteus
Для моделирования нужно определить тактовую частоту. Для этого необходимо
правильно настроить CSKEL Fuse . Значение этих битов определяет
источника тактовых сигналов. Загрузим файл прошивки в виртуальный МК путем выбора
откомпилированного файла в строке Program file.
Результаты моделирования представлены на рис. 5.1…5.4.
Рис. 5.1 - Устройство сразу после запуска моделирования
Рис. 5.2 - Устройство после троекратного нажатия кнопки SB0 в течении 15 с
Рис. 5.3 - Устройство после двадцатикратного нажатия кнопки SB0 в течении следующих 15 с
Таким образом, результаты моделирования полностью соответствуют
техническому заданию.
Рис. 5.4 - Генерируемый аналоговый сигнал на экране виртуального
осциллографа
6. Разработка печатной платы
Для разработки печатной платы воспользуемся программой ARES пакета PROTEUS. Для этого, прежде всего, нужно проверить наличие
посадочных мест и корпусов у всех элементов. Элементы, у которых они
отсутствуют, например, светодиоды и кнопки и семисегментный индикатор, заменим
на разъемы из библиотеки Connectors, предполагая, что потенциометр и светодиоды будут располагаться не на
печатной плате (рис. 6.1).
На рисунках рис. 6.2…6.4 представлена разведенная печатная плата в разных
слоях. Расположение элементов выбиралось вручную, при трассировке использовался
авто трассировщик.
-D виды платы представлены на рис.
6.5…6.9.
Рис. 6.1 - Подготовка схемы в ISIS для экспорта в ARES
Рис. 6.2 - Все слои платы
Рис. 6.3 - Слои Тоp Cooper и Silk
Рис. 6.4 - Слой Bottom Cooper
Рис. 6.5 - Вид платы сверху
Рис. 6.6 - Вид платы спереди
Рис. 6.7 - Вид платы слева
Рис. 6.8 - Вид платы сзади
Рис. 6.9 - Вид платы справа
Вывод
В результате выполнения курсовой работы на основе микроконтроллера ATmega6450 разработано устройство, которое
выполняет следующие функции:
Подсчет количества нажатий на кнопку SB0 за каждые 15 с. Работа устройства должна осуществляться в
цикле. По истечению текущих 15 с результат подсчета числа нажатий выводится на
дисплей (семисегментный или LCD-дисплей)
и сохраняется на нем в течении следующих 15 с.
Обеспечивается непрерывное формирование аналогового сигнала заданной
формы.
Разработаны принципиальная схема, структурная схемы устройства, алгоритм
работы его и, описывающая данный алгоритм, программа на языке С. Также
разработана печатная плата устройства.
Библиографический список
1. Белов А.В. Разработка устройств на микроконтроллерах AVR: шагаем от «чайника» до профи / А.В.
Белов. - СПб.: Наука и техника, 2013 - 528 с.
. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя/ А.В. Евстифеев. - М.: Издательский дом
«Додэка-ХХI», 2007 - 592 с.
. Лебедев М.Б. CodeVisionAVR: пособие для начинающих / М.Б. Лебедев - М.: Издательский дом «Додэка-ХХI», 2008 - 592 с.
. Методические указания по оформлению текстовых работ для
студентов дневной и заочной форм обучения направления 6.050901 - «Радиотехника»
/ СевНТУ; сост. В.Г. Слёзкин. - Севастополь: Изд-во СевНТУ, 2010. - 20 с.