Кухонный таймер

Rate this item
(2 votes)

 

Сделай себе такой же сам! Полный набор комплектующих, включая аккумулятор, 370 рублей!

 

 

Прежде чем начать

Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:

Кухонный таймер. Что это? сколько стоит?

На рынке существует очень много различных видов кухонных таймеров. Мы будем рассматривать только электронные варианты (еще есть механические). Основное применение данный прибор нашёл на кухне. Отсюда идёт и его название — кухонный таймер. Допустим, вы готовите какое-то блюдо, варите картошку. Через 20 минут после закипания, надо ее выключить — она готова. Можно конечно запомнить по часам этот промежуток времени, но делать это с помощью таймера гораздо удобнее. Установили нужный интервал времени — нажали кнопку, начался обратный отсчет времени. Через 20 минут кухонный таймер громко просигналит, обычно в течение 1 минуты. Вот такой простой прибор.

Купить электронный кухонный таймер на рынке можно по цене от 200 до 2000 рублей. Как правило они отличаются дизайном, размерами и функциями. Все они умеют выполнять основную функцию — таймер обратного отсчёта. Интервал времени почти у всех моделей ограничен 99 минутами (4 разряда цифр — 2 на минуты и 2 на секунды). Дополнительные функции, которые можно встретить:

  • магнитное крепление, крепление на ремень

  • секундомер

  • быстрая установка времени (покрути корпус)

Все рыночные приборы, питаются от батареек, имеют, как правило, ЖК дисплей. Батареек хватает больше чем на 2-3 месяца регулярного использования.

Мы будем делать самодельный кухонный таймер, который сильно превосходит, имеющиеся на рынке таймеры, по функциям. Полный набор компонентов для сборки можно купить за 370 рублей.

Постановка задачи, требования к прибору

Основные требования к нашему кухонному таймеру.

  • Компактный размер

  • Питание от аккумулятора, длительная работа от одного заряда

  • Зарядка от micro usb

  • Индикатор как минимум на 3 разряда, лучше 4-е

  • Низкая стоимость

  • Громкий сигнал

  • Широкий набор функций — Таймер, Секундомер, Игры: игральная кость, лото, бомба, возможность программирования.

Подбор компонентов

Компоненты будем подбирать самые простые, недорогие, и доступные на рынке.

Индикатор

Это самый сложный вопрос. На рынке есть следующие виды индикаторов:

  • LCD, TFT дисплей — дорого, большой размер

  • ЖК сегментный индикатор — на 3-4 цифры — вполне подойдёт, но тяжело купить (больше распространён китае), большой плюс — низкое энергопотребление.

  • Светодиодный сегментный индикатор — отличный, недорогой вариант, минусом является высокое энергопотребление, но с аккумулятор это не так страшно. За счет яркости, можно снизить энергопотребление до 2ма. Его несложно купить. Наш таймер будем делать на данном виде индикатора.


Данные индикаторы могут иметь прямое управление каждым светодиодом, но в этом случае у них будет много выводов. Мы выберем 3-х сегментный светодиодный индикатор красного цвета с общим анодом. У каждой цифры аноды светодиодов соединены вместе и выведены на один вывод. На таком индикаторе можно в одном время показать только одну цифру! Как же задействовать все три? Очень просто. Будем использовать динамическую индикацию, то есть очень быстро показывать первую цифру, потом вторую, потом третью. Глаз не успеет заметить этого подвоха, и будет складываться впечатление, что горят одновременно все три цифры! Такая схема очень часто используется в индикаторах, в том числе и в ЖК. Поэтому вам просто необходимо освоить модель программирования таких индикаторов.

Интерфейс общения

Для управления прибором, будем использовать две тактовые кнопки. Прибор будет постоянно спать и будиться кнопками. Для подачи сигнала будем использовать уже знакомый по прибору Велокомпьютер электродинамический излучатель HC0903A. Он очень громкий и компактный.

Интерфейс общения должен быть интуитивно понятным. Кухонный таймер будет иметь три режима, изменяемые, например, долгим нажатием первой кнопки.

  • Таймер

  • Секундомер, с возможностью учета рабочего времени

  • Игры

При включении после сна, прибор автоматически возвращается в последний режим, в котором он был до сна.

В режиме таймера:

  • Отображается предустановленное значение таймера в минутах, первая кнопка перебираем предустановленные значения, которые можно запрограммировать

  • Вторая кнопка начинает Отсчет, при окончании раздаётся сигнал

  • Долгое нажатие второй кнопки позволяет поменять значение и запрограммировать новое предустановленное значение

В режиме Секундомера

  • Вторая кнопка старт/пауза

  • Первая кнопка выбор режима — простой секундомер или с подтверждением. В режиме с подтверждением, каждые 5 минут необходимо нажимать кнопку, если не нажали, то секундомер пищит и встаёт на паузу. Так можно измерять рабочее время, когда вы часто отвлекаетесь от рабочего процесса.

В режиме игр

  • Первая кнопка выбор игры

  • Вторая кнопка ход в игре

Конечно вы можете сами написать свою программу, и сделать совершенно другие комбинации и режимы — это же ваш кухонный таймер — вы его создатель!

Микроконтроллер

Выберем микроконтроллер. Какие требования к микроконтроллеру в нашем проекте?

  • считывать показания 2 кнопок

  • наличие спящего режима для энергосбережения

  • для более полного погружения в программирование, необходим полноценный отладчик

  • удобный корпус для пайки

  • точный внутренний генератор частоты, кварц использовать не будем

  • EEPROM память для хранения настроек

  • достаточное количество выводов для управления индикатором — нужно 11 выводов.

Выберем уже знакомую серию STM8, исключительно по цене. Дополнительно она имеет отличный отладчик ST-Link по 2-ум проводам, симулятор и всю необходимую периферию. Программа будет небольшая, выберем самый дешёвую модель - наш выбор STM8S003F3P6. Можно выбрать STM8S003F3K6 — у него 32 вывода, но нам хватит и 20.

Аккумулятор

В этот раз будем использовать литиевый аккумулятор меньшего размера — LIR2032, ёмкостью 45 mAh, для того чтобы прибор поместился в небольшой корпус. Схема заряда аналогично велокомпьютеру.

Составляем схему

Схема зарядки аккумулятора и обвязки МК будет очень похожа на велокомпьютер, так что, не будем повторяться. Добавим ещё индикатор — это по сути просто набор светодиодов. Каждый сегмент необходимо подключить через свой резистор. Для экономии энергии будем использовать резисторы 1 кОм, яркость будет более чем достаточная, понизить яркость мы сможем с помощью динамической индикации. При напряжении 3.3 В каждый сегмент будет потреблять около 1 мА, 8 сегментов — 8 мА (вывод выдерживает 20 мА). Управлять анодом индикатора будет напрямую МК, транзисторы не нужны. Итак, вот финальная схема. Все довольно просто.

Делаем корпус для нашего кухонного таймера

На рынке продаётся много хороших маленьких корпусов, и вы можете самостоятельно подобрать нужный. Мы же рекомендуем сделать корпус самостоятельно из кабель канала 40x16мм. Он стоит очень дёшево — 2 метра около 40 рублей, купить можно на любом строительном рынке. Корпус из него выглядит симпатично, компактно. Торцевые заглушки сделать можно разными способами. Самый простой способ - использовать низ кабель канала, вырезав лишнее и загнув. Стороны можно склеить клеем для пластмассы, или паяльником — расплавить чуть-чуть пластика на шов, сделав аналог сварки. Вот что должно у вас получиться.

Тут хорошо видно стыки заваренные пластиком

В крышке, сделаем отверстие, и снизу приклеим прозрачное тонкое оргстекло или прозрачную часть ненужного DVD диска, как на фото.

Можете добавить немного краски (акриловой) и сделать полноценный подарок ручной работы!

Программа

Программа, как обычно для STM8, написана в среде ST Visual develop IDE. Заготовку проекта вы можете скачать с github данного прибора, папка timer. Мы специально не выкладываем полную программу! В этом приборе вы должны сделать ее сами! Только так вы научитесь программировать МК. В заготовке проекта мы сделали самую сложную часть — инициализация, динамическая индикация, спящий режим, обработка кнопок. Вот это мы и разберём в этой статье. В кухонном таймере будем использовать все виды нажатий кнопки — одиночное, двойное, долгое. Такие режимы обработки кнопок очень часто используются в различных устройствах. Читайте внимательно!

Если вы делаете подарок, то вы можете запрограммировать при включении какую то небольшую мелодию. Это не сложно. В интернет есть много примеров. Заодно поработаете со звуком.

Структура файлов проекта

Проект создан на основе библиотеки SPL для STM8 от ST. Подробное описание, как развернуть проект, вы найдёте в этой статье. Вся программа содержится в файле main.c, обработка прерываний перенесена в этот файл.

Общее описание программы

Упрощённый алгоритм работы программы.

  1. При включении производится настройка всей периферии, тактирование от внутреннего генератора на частоте 2 МГц. Читаем данные из EEPROM. Сразу переходим в спящий режим.

  2. Прибор может находится в одном из трёх режимов — Игры, Таймер, Секундомер, перебор по долгому нажатию первой кнопки. Выбор подрежимов, по обычному нажатию первой кнопки. Запуск и остановка второй кнопкой.

  3. Индикация

    1. Если прибор в режиме игры — то левый сегмент индикация игры — L — лото, Б — бомба, Н — игральная кость. Остальные два разряда для игры.

    2. В режиме таймера. Таймер запущен — мигает точка в такт секундам. Таймер остановлен точка не горит. Таймер может отображать от 999 минут до 0. На экране всегда отображаем значащие разряды, точка разделитель секунд и минут. Например, 900 минут = 900. , 10 минут 15 секунд = 10.1, 1 минута 25 секунд = 1.25.

    3. В режиме секундомера. Запущен — мигает точка в такт секундам. Отображение как в таймере. При остановке секундомера, например на 10 мин 35 сек, показывает целую часть 10. 1сек потом дробную часть .35 1сек и так попеременно.

  4. Таймер

    1. Когда таймер не запущен. Первая кнопка выбираем предустановленные значения.

    2. Вторая кнопка старт таймера из предустановленного значения. Таймер в минутах.

    3. Долгое нажатие второй кнопки переходит в режим настройки значения. В этом режиме вторая кнопка и первая кнопка работают как плюс минус 1 минута. Долгое нажатие Второй кнопки записывает значение в настройку. Быстрое нажатие на кнопки прибавляет по 5 минут.

    4. При достижении конца таймера играем мелодию каждые 60с в течение 5 мин. Пока не остановим кнопкой.

    5. Когда таймер запущен — вторая кнопка долгое нажатие — сброс, первая кнопка - пауза

  5. Секундомер

    1. Когда запущен — мигает точка

    2. Вторая кнопка старт/пауза секундомера

    3. Первая кнопка выбор режима — с подтверждением или без. Когда выбран режим с подтверждением, то горит дополнительно первая точка

    4. Вторая кнопка долгое нажатие сброс

  6. Лото

    1. Игра не началась. Отображаем две тире

    2. Вторая кнопка следующее значение и выдаем звуковой сигнал

    3. Вторая кнопка долгое нажатие начать сначала

    4. в конце игры выдаем мелодию переливы и начинаем сначала

  7. Бомба

    1. Игра не началась — две тире

    2. Вторая кнопка — начать игру. Засекаем случайное время

    3. Игра идет — каждую секунду мигают нули и идет звук как часы пикают. Звук ускоряется каждые 10% оставшегося времени

    4. Когда время вышло — то звучит звук низкого тона — взрыв. У кого в руками остался прибор — тот проиграл. Игра начинается сначала.

  8. Спящий режим

    1. Если ничего не запущено, то через 30с неактивности — глубокий сон

    2. Если запущен таймер или секундомер — то через 30с гасим экран — остаётся только точка мигать каждую сек на 200мс. По кнопке показываем время. Когда осталось 30 сек. Кнопки работают как обычно. Но сначала будят как бы. То есть пробуждение не срабатывает как нажатие кнопки. Будить можно любой кнопкой.

    3. Если запущен секундомер, и про него забыли, не было активности 3ч, то заснуть совсем, а таймер оставить на моменте когда заснули.

Конечно, это один из возможных вариантов работы программы. Вы можете придумать свой собственный. Это же ваш кухонный таймер.

Инициализация, прерывания

Первоначальная инициализация довольно простая.

CLK->PCKENR1 = CLK_PCKENR1_TIM4+CLK_PCKENR1_TIM2;
CLK->PCKENR2 = 0b01110111;
 
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);  
 

Выключаем лишнюю периферию, оставляем только таймер 4 и 2. Тактирование от внутреннего генератора 16 МГц, с делителем 8, для пониженного энергопотребления. В итоге, работаем на частоте 2 МГц. При тактировании от внутреннего генератора, периферия работает на частоте центрального процессора — то есть таймеры будут работать тоже на частоте 2Мгц, имейте это ввиду при настройке счетчиков таймеров.

TIM4_TimeBaseInit(TIM4_PRESCALER_8, 249);
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4->IER |= (uint8_t)TIM4_IT_UPDATE;
 
TIM2_TimeBaseInit(TIM2_PRESCALER_8, 50);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2->IER |= (uint8_t)TIM2_IT_UPDATE;
 

TIM4 будем использовать для миллисекундного отсчета, а TIM2 для динамической индикации. Для TIM2 частота нужна повыше, чтобы не было заметно мерцания, также она не должна быть пропорциональна 50 Гц (частота мерцания лампочек в сети 220В). С другой стороны слишком высокая частота будет больше тратить энергии.

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_FALL_ONLY);  
 

Кнопки в этот раз будем обрабатывать методом опроса, но не в основном цикле, а в обработчике прерывания миллисекундного таймера. Но прерывания все равно настроить надо, для выхода из спящего режима. Достаточно будет падающего сигнала для прерывания — момент нажатия кнопки.

GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3,GPIO_MODE_IN_PU_IT);//кнопки
 
GPIO_Init(GPIOD,GPIO_PIN_4,GPIO_MODE_OUT_PP_LOW_SLOW);//пищалка
 
GPIO_Init(GPIOD,GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW);//индикатор
GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);//
GPIO_Init(GPIOB,GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_SLOW);//
GPIO_Init(GPIOC,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_OUT_PP_HIGH_SLOW);
 
halt();
 

Настраиваем все выводы, так чтобы ничего не светилось и не тратило энергию, и ложимся спать. Такая инициализация необходима для возможности зарядки сильно «просаженного» аккумулятора.

Динамическая индикация

Настройка динамической индикации не очень сложная. Для удобства, необходимо сделать несколько дефайнов:

#define ON1 GPIO_WriteLow(GPIOD,GPIO_PIN_5)
#define ON2 GPIO_WriteLow(GPIOC,GPIO_PIN_5)
#define ON3 GPIO_WriteLow(GPIOC,GPIO_PIN_7)
 
#define OFF1 GPIO_WriteHigh(GPIOD,GPIO_PIN_5)
#define OFF2 GPIO_WriteHigh(GPIOC,GPIO_PIN_5)
#define OFF3 GPIO_WriteHigh(GPIOC,GPIO_PIN_7)
 
#define AON GPIO_WriteLow(GPIOD,GPIO_PIN_6)
#define BON GPIO_WriteLow(GPIOC,GPIO_PIN_6)
#define CON GPIO_WriteLow(GPIOC,GPIO_PIN_3)
#define DON GPIO_WriteLow(GPIOB,GPIO_PIN_4)
#define EON GPIO_WriteLow(GPIOA,GPIO_PIN_3)
#define FON GPIO_WriteLow(GPIOA,GPIO_PIN_1)
#define GON GPIO_WriteLow(GPIOC,GPIO_PIN_4)
#define TON GPIO_WriteLow(GPIOB,GPIO_PIN_5)
 
#define ALLOFFGPIO_WriteHigh(GPIOC,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6);GPIO_WriteHigh(GPIOD,GPIO_PIN_6);GPIO_WriteHigh(GPIOA,GPIO_PIN_1|GPIO_PIN_3);GPIO_WriteHigh(GPIOB,GPIO_PIN_4|GPIO_PIN_5);
 

ON1.. OFF1 — позволяют включить и выключить 1 разряд. AON..TON — один сегмент. ALLOFF — выключить все сегменты. Далее, нам нужна вспомогательная функция — cifra(), которая будет отображать на одном разряде нужную цифру или символ (например букву L, прочерки и т. д.)

void cifra(u8 num){
  ALLOFF
 
  if (num==0) {
    AON;BON;CON;DON;EON;FON;
  }
  if (num==1) {
    BON;CON;
  }
  if (num==2) {
    AON;BON;GON;EON;DON;
  }
  if (num==3) {
    AON;BON;CON;DON;GON;
  }
  if (num==4) {
    FON;GON;BON;CON;
  }
  if (num==5) {
    AON;FON;GON;CON;DON;
  }
  if (num==6) {
    AON;EON;FON;GON;CON;DON;
  }
  if (num==7) {
    AON;BON;CON;
  }
  if (num==8) {
    AON;BON;CON;GON;DON;EON;FON;
  }
  if (num==9) {
    AON;BON;CON;GON;DON;FON;
  }
}
 

С дефайнами она выглядит симпатично. Если вам нужны другие символы на индикаторе, то надо добавить еще условия, например, (num==11) — вывести на индикатор L.

Для работы с индикатором, создадим два массива — ind[3] и tchk[3]. Каждое число в массиве отвечает за один разряд и за одну точку. Теперь для того, чтобы вывести что-то на индикатор, достаточно положить в массивы нужные нам значения, остальное будет сделано в прерываниях. Вот так можно вывести число от 0 до 999.

void shownumber(u16 num){
  ind[0]=num/100;
  ind[1]=num/10-ind[0]*10;
  ind[2]=num - ind[0]*100 - ind[1]*10;
}  
 

Теперь, собственно сам вывод на индикатор. Вся работа ведётся в обработчике прерывания TIM2. Введем переменную numind, которая будет обозначать, какой разряд показывать в данный вызов прерывания.

INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
 {
  TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
 
  OFF1;
  OFF2;
  OFF3;
 
  if (numind<3) {
    cifra(ind[numind]);
 
    if (tchk[numind]) TON;
  }  
 
  if (numind==0) {
    ON1;
  }
  if (numind==1) {
    ON2;
  }
  if (numind==2) {
    ON3;
  }
 
 
  numind++;
  //яркость!
  if (numind==30) numind=0;
 }
 

Очищаем бит контроля обработки прерывания. Далее выключаем все разряды. Выводим нужную цифру на нужный разряд и точку, только первые 3 раза. А потом несколько раз ничего не выводим. Пропуски нужны для регулирования яркости. У нас получится такая картина

Первый Разряд, Второй Разряд, Третий Разряд, Ничего не горит …. Ничего не горит, Первый разряд и т.д….

и так, очень быстро. Чем больше мы выводим пустых разрядов — тем более тускло светится индикатор, и меньше тратит энергии.

Обработка кнопок

В кухонном таймере всего две кнопки. Нам надо нагрузить на них максимальный функционал. Поэтому будет нужна обработка одиночного, двойного и долгого нажатия кнопки. Напишем функцию которая сразу определит какой вид нажатия был и вернёт это в основной цикл. Там вы сможете обработать это как вам надо.

Для настройки процедуры обработки кнопок есть несколько дефайнов:

#define KNNUM  2  //колво кнопок
#define KNONE  4  //обычное нажатие
#define KNLONG 5  //долгое
#define KNTWO  6  //двойное
 
#define KNDTIME 50 //время в мс дребезга контактов
#define KNTIMETWO 300 //время в мс двойногонажатия
#define KNTIMELONG 1000 //время в мс долгогонажатия
 

Количество кнопок, значения, которые возвращает функция определения кнопок, время необходимое для устранения дребезга, время в течение которого должно произойти двойное нажатие, время фиксации долгого нажатия. Для хранения обработанных данных используется массив kn[], для хранения предыдущего состояния кнопок массив knstatus[], времени, прошедшего с начала нажатия первой кнопки — kntime[]. При инициализации МК, необходимо очистить все эти массивы.

Сама процедура обработки кнопок вызывается из миллисекундного таймера каждые 50 мс (время нужное для устранения дребезга), так сразу решается проблема с дребезгом контактов.

    u8 i,pd;
 
    if(kndtime) kndtime--;
    if (kndtime==0) {
      //опрос кнопок редко для избежаниядребезга
      kndtime = KNDTIME;
 
      pd = GPIO_ReadInputData(GPIOD);
      knint(0, pd, GPIO_PIN_2);
      knint(1, pd, GPIO_PIN_3);
    }
    for (i=0;i<KNNUM;i++) if(kntime[i]) kntime[i]--;
 

Предварительно считываем состояние порта, на котором висят кнопки. Далее, передаем это значение, номер кнопки, номер вывода кнопки в функцию, в которой будет вся обработка — knint(). В конце уменьшаем на единицу переменные таймеры кнопок.

Рассмотрим саму функцию обработки кнопок.

  if (knstatus[knum] &amp;&amp; ((zn&amp;pin) == 0)) {//кнопкунажали
    knstatus[knum] = zn&amp;pin;
    if (kn[knum]>=KNONE) return; //еще не обработалипредыдущее нажатие в основном циклепропустим это нажатие
 
    kn[knum]++;//колво нажатий плюс один
    if (kn[knum]==1) kntime[knum] = KNTIMELONG;//первый разначнм замер времени
 
    if (kn[knum]==2) {
      if (kntime[knum] > (KNTIMELONG-KNTIMETWO) ) kn[knum] =KNTWO;
      else kn[knum] = KNONE;
    }
  }
 
  if ((kn[knum]==1) &amp;&amp; (kntime[knum]==0)) kn[knum]=KNLONG;
  if ((kn[knum]==1) &amp;&amp;(kntime[knum]<(KNTIMELONG-KNTIMETWO)) &amp;&amp; zn&amp;pin)kn[knum]=KNONE;
 
  knstatus[knum] = zn&amp;pin;
 

Чтобы определить, что мы нажали кнопку, сравним предыдущее состояние кнопки и состояние вывода. Если кнопка нажата, но мы еще не обработали в основном цикле значение кнопки, то делать ничего не будем. Каждое нажатие увеличиваем на один счетчик нажатий, он будет у нас хранится в элементе массива результата кнопки kn[]. Таким образом, пока мы не знаем точно, какой вид нажатия, то будем там хранить количество нажатий. Если это первое нажатие, то засекаем время определения долгого нажатия. Если это второе нажатие, то проверим уложились ли мы во время двойного нажатия — если да, то фиксируем двойное нажатие, если нет — то обычное.

Каждый раз проверяем, если время долгого нажатия было засечено и оно вышло, то это долгое нажатие кнопки. Если кнопку отпустили, время двойного нажатия вышло и у нас одинарное нажатие, то это обычное нажатие кнопки.

Все! Так несложно можно определить все нужные нам виды нажатия. В основном цикле вы можете обработать их

    if (kn[0] == KNONE) {
      secundomer = 0;
      sleeptime=30;
      kn[0]=0;
    }
    if (kn[0] == KNTWO) {
      secundomer = 100;
      sleeptime=30;
      kn[0]=0;
    }
    if (kn[0] == KNLONG) {
      secundomer = 200;
      sleeptime=30;
      kn[0]=0;
    }
 

После обработки, необходимо очистить элемента массива kn[], для фиксирования нового нажатия. Вы можете использовать этот код в своих проектах, добавить количество кнопок, поменять время обработки различных ситуаций.

Начало положено, остальной код программы мы не приводим, так как это ваше творчество!

Как изготовить кухонный таймер самостоятельно

Делаем плату и все запаиваем

  1. Подготовить или приобрести необходимые инструменты: все для пайки, ST-LINK (будет нужен для программирования и отладки МК)

  2. Внимательно прочитать статьи из раздела Обязательная теория.

  3. Скачать необходимые файлы по данному прибору с github.

  4. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

  5. Приобрести все необходимые комплектующие за 370 рублей.

  6. Запаять все компоненты на плату, смотри наше видео.

  7. Плата готова!

Для программирования вам понадобятся провода мама мама. Вы можете их сделать сами из данного набора. Для программирования, можно сразу подключить питание с ST-Link, вместо аккумулятора и SWIM вывод.

Переходим к программированию

Данный прибор достаточно простой в программировании. В этой статье подробно разобрана самая сложная часть программы — динамическая индикация. Остальную программу вам надо написать самостоятельно. Только так вы сможете изучить программирование микроконтроллеров.

Рекомендуем написать программу совсем с нуля, с разворачивания проекта.

Приобретённые навыки

Пайка: пайка корпуса TTSOP, пайка корпуса SOT-23-5, пайка micro USB разъёма

Корпус: самодельный корпус из короба

Схемотехника: LDO, схема зарядки Liion аккумулятора, типовая схема подключения STM8, подключение пищалки, работа с кнопками.

Программирование: сложная обработка кнопок, миллисекундный таймер, динамическая индикация, спящий режим, работа с EEPROM

Самостоятельная работа

Прибор очень простой, но интересный и полезный. На github мы выкладываем только шаблон проекта. В данном шаблоне настроено энергопотребление, прерывания, таймеры, обработка кнопок, динамическая индикация с выводом трёх символов и точек. Остальное мы рекомендуем сделать самостоятельно. У вас получится отличный кухонный таймер, для себя или в подарок.

Read 1466 times