Каталог
|
Термометр на STM82021-03-18 Все статьи →ВступБюджетний термометр на STM8 з використанням доступних компонентів і відкритого компілятора sdcc. Інформації про ці мікроконтролери значно менше за AVR, хоча STM8 потенційно більш привабливі за співвідношенням ціна-функціональність. Тому можливо цей відносно нескладний, але придатний до використання проєкт допоможе комусь розпочати знайомство з STM8.
Складові
СхемаСхема показана на рисунку. Якщо ви використовуєте згадану плату 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 Після цього проєкт можна скомпілювати й завантажити: make Якщо остання команда не виконується, пропишіть правильний шлях до stm8flash у Makefile. Висновки Поки що для цілей відлагодження плата з мікроконтролером виконана окремим модулем, який легко знімається для швидкого перепрограмування. Планується додати датчик тиску, можливо BMP280.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
|