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

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 по возвращению

}

ПРИЛОЖЕНИЕ В