Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Термометр на STM8

2021-03-18

Всі статті →

Вступ

Бюджетний термометр на STM8 з використанням доступних компонентів і відкритого компілятора sdcc. Інформації про ці мікроконтролери значно менше за AVR, хоча STM8 потенційно більш привабливі за співвідношенням ціна-функціональність. Тому можливо цей відносно нескладний, але придатний до використання проєкт допоможе комусь розпочати знайомство з STM8.

Складові

  • Мікроконтролер STM8S003F3P6 або STM8S103F3P6.
    • Увага: STM8S003 має нижчу ціну й обмежений ресурс флешпам’яті (100 перезаписів). Використовуйте його для готових пристроїв, а не під час розробки.
  • Програматор ST-Link.
  • 4-розрядний 7-сегментний індикатор. Було використано індикатор зі спільним катодом. Для іншого типу індикатора доведеться трохи змінити код функції printChar().
  • Датчики температури DS18B20. Один з них буде вимірювати температуру в приміщенні, а інший на вулиці.
  • Резистори.
  • Керамічний конденсатор на 100нФ і електролітичний на 1мкФ.
    • Увага: якщо ви використовуєте плату розробника STM8, то конденсатори й резистор 10кОм на пін Reset не потрібні — вони вже встановлені на платі. Якщо ви справді плануєте використовувати пристрій, а не лише експериментувати, то все можна зібрати на такій платі для прототипування. Також може стати в нагоді перехідник для мікроконтролера, якщо ви не використовуєте готову плату.

Схема

Схема показана на рисунку. Якщо ви використовуєте згадану плату STM8, то вивід D4 відповідає піну 1 на рис. Порядок виводів той самий. Як було сказано, конденсатори й підтяжка Reset є на синій платі, якщо буде використовуватися вона. Живлення показано умовно. Насправді поки що все живиться від USB через стабілізатор напруги 3.3В, але при використанні готової плати він теж є в комплекті.

Програмна реалізація

Вихідний код доступний за посиланням.

Код для зчитування даних з датчика базується на цьому прикладі. Але все, що стосувалося виводу інформації на дисплей, було повністю переписано. Наведений приклад використовував MAX7219, але у STM8 достатньо виводів для керування дисплеєм безпосередньо, тому запропоноване рішення є більш дешевим. Також реалізовано підтримку двох датчиків. Звісно, протокол 1-wire дозволяє взаємодіяти з ними через один вивід, але можливо іншим разом. Значення температур накопичуються в масивах t1_history і t2_history приблизно раз на 20-30 хв. Серед останніх 10 значень обчислюється середньозважене (що старіше значення, то менша його «вага»). Якщо поточне значення менше або більше за середньозважене щонайменше на 1 градус, то в першому розряді блимає індикатор «вгору» або «вниз», сигналізуючи, що температура зростає або спадає. Щоб відрізняти покази першого і другого датчиків, у останньому розряді під символом градусу виводиться підкреслювання. У разі відсутності того чи іншого датчика на короткий час виводиться повідомлення Err1 і Err2. Якщо ви бажаєте використовувати лише один датчик і цей напис вам заважає, просто закоментуйте один із викликів read_ds18b20() в main(). Функція debug() реалізована для потреб тестування. Вона на короткий час виводить передане їй число. Була зроблена спроба зменшення енергоспоживання, для чого між зчитуваннями значень температури мікроконтролер переводиться на нижчу частоту. Через специфіку індикатора найнижчої частоти досягти не вдалося (блимання стає помітним). Якщо бажаєте з цим поекспериментувати, то зміна регістру CLK_CKDIVR у функції display_temperature відповідає за встановлення робочої частоти. Деталі у документації.

Компіляція й завантаження

Знадобиться компілятор sdcc і утиліта stm8flash. Якщо мікроконтролер використовується вперше, можливо слід зняти захист від запису:

echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
stm8flash -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin

Після цього проєкт можна скомпілювати й завантажити:

make
make flash

Якщо остання команда не виконується, пропишіть правильний шлях до stm8flash у Makefile.

Висновки

Поки що для цілей відлагодження плата з мікроконтролером виконана окремим модулем, який легко знімається для швидкого перепрограмування. Планується додати датчик тиску, можливо BMP280.

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Поки немає відгуків на цю статтю.
оплата картами Visa і MasterCard