Таймер на микроконтроллере MSP430F2013
Понятие, принцип работы и функции микроконтроллерного таймера. Изучение технических характеристик микроконтроллера MSP430F2013; преобразование двоичных кодов и способ отображения цифр на дисплее. Разработка программного обеспечения и алгоритма программы.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | научная работа |
Язык | русский |
Дата добавления | 16.05.2014 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
ФГБОУ ВПО "Чувашский государственный университет
имени И.Н. Ульянова"
Кафедра управления и информатики в технических системах
Научно-исследовательская работа
Таймер на микроконтроллере MSP430F2013
Выполнила: ст. гр. РТЭ-11-08
Егорова Екатерина
Научный руководитель: доцент
Гильденберг Б.М.
Чебоксары-2012
Содержание
Введение
1. Инженерная интерпретация задания
1.1 Выполняемые функции
1.2 Режимы работы
2. Разработка аппаратной базы
2.1 Разработка принципиальной схемы
2.2 Дисплей с 6 семисегментными индикаторами
3. Разработка программного обеспечения
4. Разработка алгоритма программы микроконтроллера
Литература
Приложение
Введение
Практически в любой современной электронной технике можно найти микроконтроллеры. Столь широкое применение этих микросхем обусловлено чрезвычайно удачным сочетанием низкой стоимости, миниатюрных габаритов, высокой надёжности и огромным набором выполняемых функций, что в сочетании с возможностью адаптации микроконтроллеров к работе в конкретном устройстве определило их повсеместное распространение в любой технике.
Микроконтроллерный таймер - устройство для отсчета и отображения заданного интервала времени и включения силовой нагрузки через оптосимисторный ключ на интервал времени, заданный таймером или её включения после отработки таймером заданного интервала времени. Режим управления нагрузкой задается тумблером. Таймер может использоваться в быту или в организациях для управления силовой нагрузкой и/или задания нужного временного интервала.
Цель работы - разработка таймера на микроконтроллере MSP430F2013, рассчитанного на 24 часа.
1. Инженерная интерпретация задания
1.1 Выполняемые функции
Таймер выполняет следующие функции:
ѕ ввод/редактирование времени срабатывания таймера посредством двух кнопок, где кнопка "Mode" выбирает изменяемую цифру, которая мигает с 2 Гц, а вторая "UP" увеличивает её значение от 0 до 9;
ѕ отображение времени до окончания отсчета заданного интервала, в пределах 24 часов с точностью до 1 секунды. Время отображается на шести семисегментных светодиодных индикаторах;
ѕ управление включением или отключением силовой нагрузки на период работы таймера, в зависимости от положения тумблера режима управления силовой нагрузкой "Load";
ѕ сигнализация об истечении времени таймера звуковым сигналом в течение 5 сек.
Структурная схема микроконтроллерного таймера представлена на рис. 1.
Рис.1. Таймер на микроконтроллере MSP430. Структурная схема
1.2 Режимы работы
Таймер работает в двух режимах: первый - режим отображения времени, второй - ввода/редактирования времени таймера. Исходное состояние после включения - режим отображения времени (00 00 00). При нажатии кнопки "Mode", микроконтроллер переходит в режим ввода/редактирования, мигает c частотой 2 Гц цифра десятков часов, Кнопкой "Up" устанавливаем требуемое значение. При следующем нажатии кнопки "Mode" осуществляется переход к редактированию цифры единиц часов, далее - десятков, единиц минут, десятков секунд. При последующем нажатии кнопки "Mode" обнуляется цифра единиц секунд и осуществляется переход к счету времени (на вычитание) и его отображению. Счет времени ведется до 00 00 00. При достижении этого момента, на 5 секунд включается через усилитель звуковой излучатель с внутренним генератором. На период работы таймера включается через оптосимисторный ключ силовая нагрузка, если тумблер "Load" находится в положении "On", или нагрузка отключается на этот период, если тумблер находится в положении "Off".
Так как применен микроконтроллер с малым числом линий ввода/вывода, то для расширения числа таких линий, используется шестнадцатиразрядный сдвиговый регистр, преобразующий последовательный код из микроконтроллера (3 линии) в параллельный (16 выходных линий). Управление дисплеем осуществляется в динамическом режиме, т.е. цифры зажигаются поочередно, но вследствие инерционности зрения, это для наблюдателя незаметно. Частота развертки экрана 83 Гц, что достаточно комфортно. Управление силовой нагрузкой осуществляется подачей управляющего сигнала на внешний оптосимисторный ключ с датчиком нуля, что обеспечивает коммутацию силовой нагрузки до 2 кВт без генерации помех.
Защита от дребезга контактов при нажатии кнопок реализована программно.
Для питания схемы используется стабилизатор с выходным напряжением 3,3 вольта. На его вход подается напряжение 6…10 вольт от любого внешнего сетевого адаптера с выходным током 200 мА.
2. Разработка аппаратной базы
В устройстве используется недорогой 16-разрядный микроконтроллер MSP430F2013 (возможна замена на MSP430F2011, MSP430F2012 с идентичными характеристиками без изменения аппаратной и программной частей) [1, 2].
Технические характеристики MSP430F2013
Процессор |
RISC |
|
Размер ядра |
16-Bit |
|
Подключения |
IІC, SPI |
|
Число вводов/выводов |
10 |
|
Размер программируемой памяти |
2KB |
|
Тип программируемой памяти |
FLASH |
|
Напряжение источника (Vcc/Vdd) |
1.8 V ~ 3.6 V |
2.1 Разработка принципиальной схемы
Принципиальная схема микроконтроллерного таймера представлена на рис. 2.
Кварцевый резонатор 32768 Гц ("часовой" кварц), подключается к внешним выводам XIN и XOUT, задает частоту тактирования внутреннего таймера микроконтроллера. Тактирование микропроцессорного ядра микроконтроллера осуществляется от внутреннего генератора.
Для реализации шестнадцатиразрядного регистра сдвига используются две микросхемы 74НС495 - восьмиразрядные регистры сдвига с регистром - защелкой на выходе, соединенные последовательно, образуя 16 выходов [3]. Для выдачи последовательного кода из микроконтроллера на регистр используется интерфейс SPI (выводы данных и синхронизации) и один дополнительный вывод для защелки сдвинутых данных.
Рис.2. Таймер на микроконтроллере MSP430. Схема электрическая принципиальная
Подача питающего напряжения на анод очередной активизируемой цифры дисплея осуществляется через транзисторный ключ, управляемый сигналом низкого уровня с выхода сдвигающего регистра D2. Для зажигания светодиодных сегментов, на их катоды через токоограничивающие резисторы подается низкий уровень сигнала непосредственно с выходов сдвигающего регистра D3. Светодиод HL1 используются для индикации состояния силовой нагрузки - если выдан сигнал на включение, то он горит. Светодиод HL2 индицирует включенное состояние таймера.
Электромагнитный излучатель включается через транзисторный ключ, управляемый сигналом низкого уровня непосредственно с вывода Р1.3 микроконтроллера. Кнопки и тумблер подключаются непосредственно к входам порта P1, настроенным на ввод с подключением внутренних подтягивающих резисторов.
Для включения силовой нагрузки с вывода порта Р1.7 подается низкий уровень сигнала, обеспечивающий протекание тока через светодиод маломощного симисторного оптрона с датчиком нуля, включенного в цепь управления мощного симистора, коммутирующего силовую нагрузку мощностью до 2 кВт.
Принципиальная схема оптосимисторного ключа представлена на рис. 3.
Рис.3. Таймер на микроконтроллере MSP430. Оптосимисторный ключ
2.2 Дисплей с 6 семисегментными индикаторами
Семисегментные индикаторы (ССИ) широко используются для отображения цифровой и буквенной информации.
Семь отображающих элементов позволяют высвечивать десятичные и шестнадцатеричные цифры, некоторые буквы латинского и русского алфавитов, а так же некоторые специальные знаки.
Для засветки одного сегмента большинства типов ССИ необходимо обеспечить протекание через сегмент тока около 10 мА при напряжении 2,0-2,5 В.
Преобразование двоичных кодов в коды для ССИ осуществляется программно. МК выдает через сдвигающий регистр D3 на сегменты индикатора код образа отображаемой цифры в формате abcdefg1 (при нулевом значении бита - соответствующий сегмент горит) в соответствии с таблицей TBL_IMAGE:
Цифра |
Код образа |
|
abcdefg1 |
||
0 |
00000011 |
|
1 |
10011111 |
|
2 |
00100101 |
|
3 |
00001101 |
|
4 |
10011001 |
|
5 |
01001001 |
|
6 |
01000001 |
|
7 |
00011111 |
|
8 |
00000001 |
|
9 |
00001001 |
Разрешение на горение очередной цифры выдается нулем в соответствующем разряде сдвигающего регистра в формате 00A1A2A3A4A5A6, в соответствии с таблицей TBL_COM:
Назначение индикатора |
Анод |
Код разрешения |
||||
Десятки часов |
A1 |
00011111 |
||||
Единицы часов |
A2 |
00101111 |
||||
Десятки минут |
A3 |
00110111 |
||||
Единицы минут |
A4 |
00111011 |
||||
Десятки секунд |
A5 |
00111101 |
||||
Единицы секунд |
A6 |
00111110 |
Примечание: старшие 2 бита используются для управления индикаторами LH1, LH2 и в таблице равны 0.
3. Разработка программного обеспечения
Для написания и отладки программы была использована интегрированная среда разработки IAR Embedded Workbench. В её состав входит оптимизирующий C/C++ компилятор и все необходимые средства для создания и отладки программ встроенных приложений на базе микроконтроллеров семейства MSP430. Для отладки в реальном времени был также использован отладочный комплект eZ430-F2013 [4]. Программа написана на языке С.
4. Разработка алгоритма программы микроконтроллера
Алгоритм программы микроконтроллера состоит из двух основных частей:
основной программы и прерывающей программы таймера.
1. Основная программа (MAIN) осуществляет начальную инициализацию и переводит процессор микроконтроллера в спящий режим, при котором потребление минимально. Спящий режим прерывается запросом прерывания от внутреннего таймера, поступающего через каждые 2 мс, подпрограмма обслуживания которого и реализует все функции устройства.
2. Прерывающая программы таймера (Int_Timer_A) реализует следующие функции:
· динамическая индикация (подпрограмма Display вызывается через 2мс);
· опрос клавиатуры с защитой от дребезга (подпрограмма KeyBScan вызывается через 2мс);
· ввод/редактирование времени таймера (подпрограмма Servis_Key вызывается через 2мс);
· отсчет таймера (подпрограмма Timer вызывается через 1 сек);
· выдача звукового сигнала в течение 5 секунд, при истечении времени таймера (подпрограмма Beep вызывается через 1 сек).
Р-схемы программ приведены на рис. 4.
Рис.4. Таймер на микроконтроллере MSP430.Р-схемы
Литература
1. Семейство микроконтроллеров MSP430x2xx. Архитектура, программирование, разработка приложений / пер. с англ. Евстифеева А.В. -- М.: Додэка_XXI, 2010. -- 544 с.: ил. -- (Серия "Мировая электроника").
2. http://www.ti.com/lit/ds/symlink/msp430f2013.pdf
3. http://avrdevices.ru/sdvigovy-registr-74hc595/#more-478
4. http://www.ti.com/tool/ez430-f2013
микроконтроллерный таймер дисплей программа
Приложение
Листинг программы
//-------------------------------------------------------------------
/*
Файл:
Автор: Егорова Екатерина Геннадьевна
Группа: РТЭ-11-08
Дата: 25.02.2012
Назначение: Таймер на микроконтроллере MSP430F2013
*/
//-------------------------------------------------------------------
//-------------------- Библиотечные файлы ---------------------------
#include <msp430x20x3.h>
//------------------------- Сокращения ------------------------------
#define u_char unsigned char
#define u_int unsigned int
//----------- Константы, используемые в разных программах -----------
#define NOT_DEFINE 0x99
#define KEY_MODE 0x01
#define KEY_UP 0x02
#define BOUNCE_TIME 20
#define TMR_2000MKS 1995
#define SW_Load 0x04
#define Power_On 0x10
#define fl_half_sec 0x01
#define blink_bit 0x02
#define REG_SHCP BIT5
#define REG_STCP BIT4
#define REG_DS BIT6
//begin ##############################################################
u_char hour_H; //десятки часов
u_char hour_L; //единицы часов
u_char min_H; //десятки минут
u_char min_L; //единицы минут
u_char sec_H; //десятки секунд
u_char sec_L; //единицы секунд
u_char mode; //режим работы
u_char ct_2ms; //счетчик интервала времени по 2 мс
u_char ct_beep; //счетчик интервала в сек. звучания сигнала
u_char key; //исполнительный код кнопок
u_char cur_num; //номер текущей отображаемой цифры
u_char cur_key; //номер текущего опроса кнопок
u_char prev_key; //результат предыдущего опроса кнопок
u_char bounce_tmr; //счетчик для программного исключения дребезга
u_char flags;
int A;
u_char value;
u_char c;
char TBL_IMAGE[ ] = {
0xC0, //0
0xF9, //1
0xA4, //2
0xB0, //3
0x99, //4
0x92, //5
0x82, //6
0xF8, //7
0x80, //8
0x90, //9
};
// таблица сигналов управления анодами 6 цифр светодиодного дисплея
char TBL_COM[ ] = {
0xFB, //А1 hour_H
0xF7, //А2 hour_L
0xEF, //А3 min_H
0xDF, //А4 min_L
0xBF, //А5 sec_H
0x7F //А6 sec_L
};
char TBL_LIGHT[ ] = {
0x01, //загорается зеленый светодиод
0x10 //загорается красный светодиод
};
void Servis_Key()
{
switch(key)
{
case KEY_MODE:
{
key=NOT_DEFINE;
mode++;
if(mode==7)
{
mode=0;
}
}
break;
case KEY_UP:
{
key=NOT_DEFINE;
if(mode==0)
{}
else
{
ct_beep=0;
P1DIR|=0x08;
P1OUT|=0x08;
switch(mode)
{
case 1:
{
hour_H++;
if (hour_H>2)
{
hour_H=0;
}
}
break;
case 2:
{
hour_L++;
if ((hour_H>9)|((hour_H==2)&(hour_L>3)))
{
hour_L=0;
}
}
break;
case 3:
{
min_H++;
if (min_H>5)
{
min_H=0;
}
}
break;
case 4:
{
min_L++;
if (min_L>9)
{
min_L=0;
}
}
break;
case 5:
{
sec_H++;
if (sec_H>5)
{
sec_H=0;
}
}
break;
case 6:
{
sec_L=0;
}
break;
}
}
}
break;
}
}
void Keybscan()
{
P1DIR &= ~0x07;
key=P1IN;
if (key&SW_Load==SW_Load)
{
value=TBL_LIGHT[0];
}
cur_key=NOT_DEFINE;
if (key&KEY_MODE==KEY_MODE)
{
cur_key=KEY_MODE;
}
else //ST1
{
if (key&KEY_UP==KEY_UP)
{
cur_key=KEY_UP;
}
else goto ST2;
}
ST2:
if (bounce_tmr==BOUNCE_TIME) //ST2
{
if (cur_key==NOT_DEFINE)
{
bounce_tmr=0;
prev_key=NOT_DEFINE;
}
else goto exitKS;
}
else //ST3
{
if(cur_key==NOT_DEFINE) //RESET_TMR
{
bounce_tmr=0;
prev_key=NOT_DEFINE;
}
else //ST4
{
if (cur_key!=prev_key) //OTHER_KEY
{
bounce_tmr=0;
prev_key=cur_key;
}
else
{
bounce_tmr++;
}
if (bounce_tmr==BOUNCE_TIME) //ST5
{
key=cur_key;
}
else goto exitKS;
}
}
exitKS: {}
}
void Timer()
{
if (mode!=0)
{goto ExitTmr;}
else //Tmr1
{
if (sec_L!=0) {sec_L--;goto ExitTmr;}
else //Tmr2
{
if (sec_H!=0) {sec_H--;sec_L=9;goto ExitTmr;}
else //Tmr3
{
if (min_L+min_H+hour_L+hour_H==0) {goto StopT;}
else ///Tmr4
{
sec_L=9;
if (min_L!=0) {min_L--;sec_H=5;goto ExitTmr;}
else
{
if (min_H+hour_L+hour_H==0) {goto StopT;} //Tmr5
else
{
sec_H=5;
if(min_H!=0)
{
min_H--;
min_L=9;
goto ExitTmr;
}
else
{
if (hour_L+hour_H==0) {goto StopT;} //Tmr6
else
{
min_L=9;
if(hour_L!=0)
{
hour_L--;
min_H=5;
goto ExitTmr;
}
else
{
if (hour_H==0) {goto StopT;} //Tmr7
else
{
min_H=5;
hour_H--;
hour_L=9;
goto ExitTmr;
}
}
}
}
}
}
}
}
}
}
StopT: //время таймера истекло
if (ct_beep==0)
{
ct_beep=6;
P1DIR|=0x08;
P1OUT|=0x00;
}
else {}
if(SW_Load==0) //включение внешней нагрузки
{
P1DIR|=Power_On;
P1OUT|=0x00;
}
else //отключение внешней нагрузки
{
P1DIR|=Power_On;
P1OUT|=Power_On;
}
ExitTmr:{}
}
void Beep()
{
switch (ct_beep)
{
case 0: break;
case 0x0FF: break; //Bp1
case 1: {ct_beep=0x0FF; P1DIR|=0x08; P1OUT|=0x08;} break; //Bp2
default: ct_beep--; //Bp3
}
}
void init_spi(void){
P1DIR |= 0x72; // P1 output
USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master
USICTL0 &= ~USISWRST; // USI released for operation
USICNT|=USI16B;
USICKCTL |= USISSEL_2;
P1OUT |= (REG_SHCP)|(REG_STCP)|(REG_DS);
return;
}
void send_data(char data1,char data2){
P1OUT &= ~REG_STCP;
USISRL =data1;
USISRH =data2;
USICNT = 16;
while (USICNT !=0);
P1OUT |= REG_STCP;
return;
}
void Display()
{
cur_num++;
if(cur_num>5)
{
cur_num=0;
}
switch (cur_num) //Dis2
{
case 0: //Dig1
{
if ((mode!=1)|(flags&blink_bit==blink_bit))
{A=hour_H; goto LoadDig;}
else
{goto ExitDspl;}
}
break;
case 1: //Dig2
{
if ((mode!=2)|(flags&blink_bit==blink_bit))
{A=hour_L; goto LoadDig;}
else
{goto ExitDspl;}
}
break;
case 2: //Dig3
{
if ((mode!=3)|(flags&blink_bit==blink_bit))
{A=min_H; goto LoadDig;}
else
{goto ExitDspl;}
}
break;
case 3: //Dig4
{
if ((mode!=4)|(flags&blink_bit==blink_bit))
{A=min_L;goto LoadDig;}
else
{goto ExitDspl;}
}
break;
case 4: //Dig5
{
if ((mode!=5)|(flags&blink_bit==blink_bit))
{A=sec_H;goto LoadDig;}
else
{goto ExitDspl;}
}
break;
case 5: //Dig6
{
if ((mode!=6)|(flags&blink_bit==blink_bit))
{A=sec_L;goto LoadDig;}
else
{goto ExitDspl;}
}
break;
}
LoadDig:
{
send_data(TBL_IMAGE[A],TBL_COM[cur_num]&value);
}
ExitDspl:{}
}
void main(void)
{
mode=0;
hour_H=0;
hour_L=0;
min_H=0;
min_L=0;
sec_H=0;
sec_L=0;
ct_2ms=0;
ct_beep=0;
flags&=~fl_half_sec;
P1DIR|=0x16;
WDTCTL = WDTPW + WDTHOLD;
init_spi();
key=NOT_DEFINE;
CCTL0 = CCIE; // разрешение прерывания от CCR0
TACTL = TASSEL_1 + MC_1 + TACLR; // тактирование от ACLK, upmode, clear TAP
CCR0 = TMR_2000MKS; // start timer
_BIS_SR(LPM0_bits + GIE); // разрешение глобальных прерываний и перевод в режим пониженного энергопотребления
}
// обслуживание прерывания по таймеру Timer A0
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
Display(); //зажигаем очередную цифру
Keybscan(); //опрос клавиатуры
Servis_Key();
ct_2ms++;
if ((ct_2ms!=250)|(ct_2ms!=125))
{}
else //ms250
{
flags^=blink_bit;
if (ct_2ms==250) //ms500
{
ct_2ms=0;
flags^=fl_half_sec;
if (flags&fl_half_sec==fl_half_sec)
{}
else //
{
Timer();
Beep();
}
}
}
}
Размещено на Allbest.ru
Подобные документы
Разработка микроконтроллерной системы на основе AT90S8535 подключенных к нему электроприборов. Эскизный проект цифрового устройства ограниченной сложности. Расчет потребляемой мощности таймера, алгоритма управления, программы микроконтроллера.
курсовая работа [292,7 K], добавлен 12.04.2009Разработка программы, реализующей таймер прямого хода на базе микроконтроллера AT90S8515. Приложение и среда программирования Algorithm Builder, ее преимущества. Принципиальная схема и назначение переменных. Описание основной программы и подпрограмм.
курсовая работа [1,2 M], добавлен 19.03.2012Разработка устройства преобразования аналоговых сигналов на базе микроконтроллера PIC16F877 и ЦАП AD5346, осуществляющее преобразование в последовательность двоичных кодов, обработку кодов и преобразование результатов обработки в аналоговые сигналы.
курсовая работа [1,6 M], добавлен 06.06.2012Понятие о микропроцессорах и микроконтроллерах. Блок управления и его функции. Структура разряда порта микроконтроллера. Структура внутренней памяти данных. Работа с внешней памятью данных и подключение внешней памяти. Принцип работы и настройка таймера.
презентация [665,8 K], добавлен 06.02.2012Разработка структурной схемы электронного устройства "баскетбольный таймер" с диапазоном 10 минут. Составление варианта реализации электрической принципиальной схемы устройства на интегральных микросхемах. Описание схемы работы таймера, его спецификация.
курсовая работа [1,7 M], добавлен 22.12.2015Разработка системы адаптивного аналого-цифрового преобразования (АЦП) на базе однокристального микроконтроллера. Сравнение АЦП различных типов. Анализ способов реализации системы, описание ее структурной схемы, алгоритма работы, программного обеспечения.
дипломная работа [3,0 M], добавлен 29.06.2012Проектирование принципиальной схемы устройства индикации на основе 8-битного AVR микроконтроллера типа ATmega16 с питанием от источника питания на 10 V и отображением данных на графическом LCD-дисплее. Разработка программного обеспечения микроконтроллера.
курсовая работа [11,3 M], добавлен 19.12.2010Описание алгоритма работы игры и применяемых в ней функций. Составление программы работы системы управления с использованием языка С. Основные характеристики микроконтроллера, его функциональные группы. Принципиальная схема микропроцессорного модуля.
курсовая работа [756,1 K], добавлен 14.01.2013Разработка и создание электронного устройства с датчиком температуры DS18B20 на базе PIC16F628A и их трансляцией на семи-сегментный индикатор. Выбор устройства отображения информации, программного обеспечения. Блок-схема работы микроконтроллера.
дипломная работа [2,1 M], добавлен 25.06.2017Разработка структурной схемы и алгоритма функционирования цифрового таймера для насоса. Составление принципиальной схемы изделия и расчет размеров печатной платы. Организация электрического питания. Технологический маршрут изготовления устройства.
курсовая работа [296,8 K], добавлен 02.03.2014