Термометр на микроконтроллере PIC12F629. Альтернативная программа
Подробности
Опубликовано 07.07.2014 15:29
Термометр на микроконтроллере PIC12F629 уже неоднократно повторялся читателями сайта, что очень радует. Подтверждение тому следующая статья, за которую огромное спасибо Дмитрию.
Давно собирался попробовать освоить программирование микроконтроллеров но как-то руки не доходили и было непонятно с чего начинать. В какой-то момент нашел описание термометра, очень понравилась сама конструкция, но программа работала не совсем так, как мне бы хотелось. Просить переделать программу под себя неудобно, ставить микропаскаль тоже не хотелось, поэтому решил что вот он, удачный момент попробовать написать свою прошивку.
Что изначально не устраивало в оригинальной прошивке:
- Мигание сегментов во время передачи данных в регистры.
- Алгоритм, не позволяющий использовать регистры 74595.
Отличия моей прошивки:
Написано на HiTech PicC, без использования библиотек. Возможно именно за счет этого программа начинает выводить корректные данные быстрее, оригинальная у меня и в железе и в протеусе несколько раз выводит на индикатор значение "85" перед тем как начинает показывать реальную температуру.
Индикация не замедлена, значения на экране сменяются без перебора сегментов и практически без засветки даже на регистрах 74164, я бы сказал что мгновенно (хотя замедлить для красоты не проблема).
Программа адаптирована для регистров сдвига 74595 и будет с ними работать без внесения изменений, SCLK при этом подключается к Q4. Различие с оригинальной программой в том, что оригинальная работает по алгоритму "подача питания - опрос датчика 1 - опрос датчика 2 - снятие питания", при этом импульс на SCLK для индикации температуры второго датчика взять неоткуда. Моя версия работает по алгоритму "подача питания - опрос датчика 1 - снятие питания - подача питания - опрос датчика 2 - снятие питания".
В случае если значение температуры менее 10, на индикаторе гасится незначащий ноль
Если температура отрицательна и ее значение менее 10, дополнительный светодиод индикации минуса не используется, символ минуса выводится на индикаторе.
Прошивка проверена на устройстве, собранном на плате из статьи и полностью с ним совместима.
Сразу хочу уточнить, я прекрасно понимаю, что программа неоптимальна как минимум тем, что для каждого датчика используются персональные функции, в планах написать собственную библиотеку для работы с датчиками, это позволит существенно уменьшить объем кода и размер прошивки. В перспективе возможно получится реализовать подключение нескольких датчиков к одному выводу МК, правда пока я этим не заморачивался вообще, т-к изначальной целью было написать прошивку именно под готовое устройство. Кстати, даже в своем нынешнем виде прошивка уже сейчас меньше оригинальной, хоть и ненамного.
Понять принцип работы с датчиками очень помогла статья "PIC мк. Эксперимент №16. One-wire на примере DS18b20." с сайта http://diymicro.ru , откуда и были взяты функции работы с датчиками. При этом, если кто-нибудь соберется использовать примеры из этой статьи, сразу хочу предупредить что формула расчета полученной температуры в ней неправильная. По этой формуле если полученная с датчика температура отрицательна и при этом не является целым числом, т-е имеет какую-либо дробную часть, значение температуры считается верно, если же дробной части нет, занижается на единицу. Т-е если на датчике -1.1 — на экране -1.1 если на датчике -1.0 — на экране уже 0. Причем именно 0, ноль после запятой в этом случае не отображается.
В моей программе температура считается корректно при любом значении.