- •Введение
- •1. Анализ технического задания
- •2. Выбор и обоснование технического решения
- •2.1 Разделение функций между аппаратной и программной частями
- •2.2 Структурная схема
- •2.3 Выбор элементной базы
- •2.3.1 Выбор датчика температуры
- •2.3.2 Выбор микроконтроллера
- •2.3.3 Выбор отладочной платы
- •3. Функциональная схема
- •4. Разработка программного обеспечения
- •4.1 Выбор среды программирования
- •4.2 Алгоритм работы программы
- •4.3 Функциональная организация программы
- •Заключение
- •Список использованных источников приложение а Текст программы
- •Техническое задание
4.2 Алгоритм работы программы
Основной алгоритм работы представлен на рисунке 4.
Рисунок 4- Алгоритм работы программы
4.3 Функциональная организация программы
Программа предназначена для работы с микроконтроллером ArduinoUNO. Работоспособность с другими микроконтроллерами не гарантируется. Программа, загружается на микроконтроллер и предназначается для управления им и управления его периферийными устройствами, необходимыми для измерения температуры. Функционально программа состоит из: основной функции программы(main), функций обработки прерываний(Interrupt ADC10_ISR и Interrupt ta0_isr).
Функция main типа void, является основной функцией программы и предназначается для реализации ее работы.
Состоит из: объявления начальных настроек программы и бесконечного цикла.
В начальных настройках происходит инициализация АЦП для работы с встроенным датчиком температуры, осуществляется настройка таймера.
Бесконечный цикл начинается по нажатию кнопки запуска, затем происходит запуск АЦП, которое преобразует информацию, выдаваемую датчиком температуры, в цифровую форму. После завершения работы АЦП включается режим энергосбережения, который прекращается при снятие следующего значения температуры. На основе полученных от АЦП данных происходит расчет значения температуры. В зависимости от этого значения включаются либо красный, либо зеленый светодиоды. Следующая итерация цикла происходит по срабатыванию таймера.
Функция обработки прерывания Interrupt ADC10_ISR типа void предназначена для обработки прерывания от АЦП. Делает ЦПУ активным и активирует все разрешенные тактовые сигналы.
Функция обработки прерывания Interrupt ta0_isr типа void предназначена для обработки прерывания от таймера. Обнуляет значение счетчика и осуществляет выход микроконтроллера из режима энергосбережения.
Заключение
В ходе выполнения данного проекта были получены знания о принципах построения и разработки систем на основе микроконтроллеров семейства Arduino, о порядке и процессе выбора элементной базы, и построения единой системы на ее основе. При разработке программы были получены навыки в написании программ на языке С семейства Arduino. При помощи документации-первоисточника от производителя были изучены принципы работы встроенного в микроконтроллер АЦП, а так же изучена работа встроенного датчика температуры.
Результаты работы представлены на рисунках.
Список использованных источников приложение а Текст программы
#include "msp430g2553.h"
#define red_LED BIT0
#define grn_LED BIT6
#define BTN BIT3temp;IntDegF;IntDegC;count;int customtemp;main(void)
{= WDTPW + WDTHOLD; // Остановка WDTCTL1 = INCH_10 + ADC10DIV_3; // ИнициализацияАЦПнаработусдатчикомтемпературыCTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
__enable_interrupt(); // Разрешаем прерывания.= 30; // Устанавливаем время выборки|= CCIE; // Режим сравнения прерывания.= TASSEL_2 | MC_1; // Выбор источника тактового сигнала TACLK = SMCLK, таймер считает от 0000h до TACCR0.; // спать, проснется с прерывая от АЦП, где получит установку продолжить работу&= ~CCIE; // Отключить прерывание таймера
__disable_interrupt();=25;//Установка пороговойтемпературыOUT = 0;//Выключение светодиодовDIR |= red_LED + grn_LED; // Выводы светодиодов на выход
while ((P1IN & BTN) == BTN); // ждем нажатия кнопки запускаем программу
while(1)
{CTL0 |= ENC + ADC10SC; // Разрешение и запуска процесса выборки и преобразования
__bis_SR_register(CPUOFF + GIE); // Входврежим LPM0
// Результат каждого преобразования заносится в регистр ADC10MEM
// oF = ((A10/1024)*1500mV)-923mV)*1/1.97mV = A10*761/1024 - 468= ADC10MEM;= ((temp - 630) * 761) / 1024;
// oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278= ADC10MEM;= ((temp - 673) * 423) / 1024;
//for (count = 0; count < 90000; count++);
if(IntDegC<=customtemp)
{OUT &= ~red_LED; // выключаемкрасныйсветодиод
P1OUT |= grn_LED; // включаем зеленый светодиод
}
else
{OUT &= ~grn_LED; // выключаем зеленый светодиодOUT |= red_LED; // включаем красный светодиод
}
__no_operation(); // Установка точки остановки
}
}
// ADC10 прерывание
#pragmavector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(CPUOFF); // Обнуляем CPUOFF битдо 0(SR) ЦПУактивно, всеразрешённыетактовыесигналыактивны
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{= 0;_EXIT; // Выход из режима LPM0 по возвращению
}
ПРИЛОЖЕНИЕ В
