Страница 1 из 1

Часы / комнатная метеостанция на Atmega8 + HD44780(16x2 LCD)

Добавлено: Вт июл 14, 2020 16:25:39
VALNER
Здравствуйте. В общем, нужна критика.

Сидя на карантине, чтобы не отупеть полностью, я решил сделать хоть что-то.
В конечном итоге, я решил доделать все старые проекты, которые я делал когда учился программировать под МК (Чему я так и не научился).
Это:
- Часы
- Комнатная метеостанция
- Проигрыватель монофонических мелодий
Так же, для того чтобы был хоть какой-то челенж, я решил сделать это на Atmega8.

В итоге получилось следующее устройство.
Часы/Будильник/Календарь/Комнатная метеостанция.
  • MCU - Atmega8a
    LCD - HD44780 (16x2) с Кириллицей.
    RTC - DS3231
    Sensor - DHT11/22 (Но с 22 не проверял)
Схема устройства:
Спойлер[img]
https://github.com/VALINT/Saturn/blob/m ... g?raw=true
[/img]
Характеристики:
  • Часы. Возможность отображения в 12 и 24 часовых форматах.
    Два будильника. (Активность будильника отображается заменой разделительной точки на колокольчик (Только для дисплеев с кириллицей))
    Календарь.
    Возможность измерения температуры. (Без датчика DHT11)
    Возможность измерения температуры и влажности. (с DHT11)
    Авторегулировка яркости подсветки дисплея.
    Монофоническая мелодия для будильника.
    Три информационных экрана. (Время, температура, дата и день недели)
    Семь шаблонов переключения между информационными экранами с настраиваемым временем переключения.
Так же небольшая видео демонстрация работы данного устройства:


В конечном итоге, прототип данного устройства лежит на полке уже больше двух месяцев.
Только для измерения температуры использую встроенный термометр в RTC, мой DHT11 полумертвый.
Та и в часах сенсор точнее и с большим разрешением.
Из обнаруженных недостатков только неудобство включения/отключения будильников.
Его лучше бы дублировать длинным нажатием кнопки вверх и вниз для 1-го и 2-го будильников соответственно.

Ссылка на проект:
https://github.com/VALINT/Saturn
Здесь присутствую исходники, схема, плата (Хотя она не очень ибо под выводные компоненты), а так же проект симуляции в ШПротеусе 8.7.

Как и писал выше, не плохо было бы услышать критику. Особенно в отношении схематики и программы.
Спасибо за внимание.

Re: Часы / комнатная метеостанция на Atmega8 + HD44780(16x2

Добавлено: Вт июл 14, 2020 18:31:45
NStorm
Все бы эти LCD_ вынести бы из FSM. Да и тело основное напрашивается на разбиение на разные юниты (файлы).
Ну и когда FSM достаточно сложный, лучше что-то по-интереснее, чем switch делать уже имхо. Структуру или таблицу переходов. И тут самое кнопки как события независимые делать. Кратко писал тут и далее: https://radiokot.ru/forum/viewtopic.php ... 4#p3826024
Ну и в целом если не забывать про колбэки и в общем, что можно функцию как указатель хранить, то многие вещи можно удобнее сделать. Но это уже необязательно конечно, но раз проект "академического" назначения, то можно и в эту сторону улучшений посмотреть. Из плюсов - улучшается читаемость и мастшабируемость.

Re: Часы / комнатная метеостанция на Atmega8 + HD44780(16x2

Добавлено: Вт июл 14, 2020 23:42:40
ARV
VALNER писал(а):не плохо было бы услышать критику
даже не критика, а рекомендация: когда сработал будильник, мало показать призыв "вставать" (а если это будильник "на обед"?), надо еще и время показывать! думаю, никого не обрадует, когда звонит будильник, а время не определено...

Re: Часы / комнатная метеостанция на Atmega8 + HD44780(16x2

Добавлено: Ср июл 15, 2020 13:12:32
сепар
вопрос можно один датчик ds18b20 подключить на два устройства

Re: Часы / комнатная метеостанция на Atmega8 + HD44780(16x2

Добавлено: Ср июл 15, 2020 23:30:33
Самсусамыч
Теоретически можно, если оба ведущие будут «понимать» свободна или занята шина. Но корректней когда датчик опрашивает одно устройство, а показание передаёт другим устройствам (по проводной или беспроводной связи).

Re: Часы / комнатная метеостанция на Atmega8 + HD44780(16x2

Добавлено: Ср июл 15, 2020 23:51:48
VALNER
ARV,
Пожалуй соглашусь, так должно быть удобнее.

NStorm,
VALNER писал(а):Все бы эти LCD_ вынести бы из FSM.
Да, но в моем понимании, для вывода изображения пришлось бы делать схожую структуру со Switch case ну или через if else что увеличило бы расход памяти. Или я ошибаюсь?