НАШ МАГАЗИН - SHOP.MUSBENCH.COM
Карта Сайта

Четырехканальный термометр - регистратор данных для компьютера на микроконтроллере Atmega8 и датчиках DS18B20


Прошивка на C и программа - регистратор на DELPHI. Использование COM порта и интерфейса RS-485.


Этот цифровой термометр предназначен для длительного измерения и записи на жесткий диск компьютера информации о температуре с четырех датчиков, например в разных помещениях либо в четырех точках какого-либо устройства или конструкции. 
   
        
       
Устройство разрабатывалось для применения в системе регистрации данных для контроля температуры в нескольких точках помещения. Такой термометр можно использовать в быту, в качестве узла метеорологической станции или в промышленных условиях. Для радиолюбителей, осваивающих конструирование устройств   на
  
микроконтроллерах, повторение этой конструкция будет полезно еще и с точки зрения сопряжения самодельных устройств с персональным компьютером.

Управляющая программа ("прошивка") микроконтроллера Atmega8, используемого в термометре, написана на языке Си в довольно удобном на мой взгляд компиляторе mikroC PRO for AVR, который разрабатывается очень позитивной Сербской компанией Mikroelectronica.

Записывающая программа для компьютера TLogger написана на языке Delphi  c использованием бесплатной компоненты BComPort для работы с последовательным портом компьютера. Опрос  данных с термодатчиков осуществляется с частотой 1 Гц (один раз в секунду) и передается в компьютер по интерфейсам RS-232 или RS-485 со скоростью со стандартной скоростью 9600. Узлы для работы с RS-232 и RS-485 встроены в схему термометра и для связи с компьютером можно использовать любой из них или оба одновременно. Тогда находящийся рядом с термометром компьютер можно подключить по RS-232, а более удаленную машину - по RS-485. В этом случае можно вести запись данных на два компьютера одновременно.

Передавать данные чаще чем один раз в секунду не имеет смысла, так как время измерения для датчика 18Х20 в 12 битном режиме составляет около 0,75 секунды. Интервал измерений 1 секунда очень удобен для последующей обработки данных.

Поскольку микроконтроллер Atmega8 передает данные о температуре в виде обыкновенных текстовых строк, для их приема можно использовать вообще любую программу - терминал.

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

В качестве датчиков температуры использованы очень распространенные цифровые 12-битные термодатчики DS18B20. Эти устройства очень надежны, обладают достаточным для наших целей разрешением (0,0625 градуса по Цельсию) и просты в использовании. 

  
Цифровой датчик температуры DS18B20
  
Цифровой датчик температуры DS18B20

  
Датчики обмениваются информацией с управляющим микроконтроллером по интерфейсу 1-Wire. Это несложный в программировании цифровой последовательный протокол, который, к тому же, поддерживается практически всеми "микроконтроллерными" компиляторами на уровне встроенных библиотек. Так что при использовании такого датчика радиолюбителю не нужно вдаваться в тонкости работы протокола, высчитывать точные временные интервалы, достаточно просто подключить встроенную в компилятор библиотеку и почитать документацию по ее использованию.
 
 
Связь микроконтроллера с устройствами по шине 1-Wire
  
Связь микроконтроллера с устройствами по шине 1-Wire
  
Как видно из рисунка, несколько термодатчиков можно "повестить" на один единственный порт микроконтроллера и работать с каждым датчиком в отдельности, обращаясь к нему по его уникальному серийному номеру, который записан в память датчика (т.н. Scratchpad). Тогда придется предварительно считать эти номера и записать их в прошивку микроконтроллера, либо использовать довольно хитроумный алгоритм для определения номеров датчиков на шине 1-Wire в момент включения устройства. "Хитроумность" этого алгоритма связана с тем, что все датчики "висят" на одном и том же проводе данных и для правильного определения их нужно использовать программные "танцы с бубном", работающие по методу исключений.  Недостаток первого метода заключается в том, что прошивка становится привязанной к датчикам. В случае выхода из строя одного из датчиков, после замены его на другой, нужно будет перепрошивать контроллер под датчик с новым серийным номером. Недостаток у второго метода - это сложность программирования процедуры поиска номеров датчиков.

В моем случае решено было отказаться от обоих методов и для связи с каждым датчиком использовать отдельный порт микроконтроллера, поэтому программа на Си получилась очень простой и короткой. Поскольку термодатчиков всего 4, то используются 4 порта ввода/вывода микроконтроллера Atmega8. Несмотря на это, у нашей "меги " осталось еще много свободных портов, которые можно использовать для других целей, или подключить к ним дополнительные датчики температуры (если необходимо проводить измерения более чем в четырех точках). При желании можно всегда перейти к варианту с включением датчиков на один провод. Для этого придется только изменить прошивку устройства, печатную плату и схему менять не нужно.
 
Далее привожу принципиальную схему аппаратной части многоканального термометра - регистратора (кликните на схеме чтобы ее увеличить. Схема откроется в отдельном окне браузера).
  
  
Принципиальная схема аппаратной части термометра - регистратора
    
Шлейф для подключения термодатчиков необходимо соединить с контактами  (слева вверху  схемы) в таком порядке:
TS_5V  - к выводам VDD всех датчиков 18B20
TSD1...TSD4 - к выводам данных DQ датчиков от 1 до 4 соответственно.
TS_GND - к выводам земли GND всех датчиков
Кварцевый резонатор использован на 8 Мгц. Напряжение питания +5V подается на схему со стабилизатора напряжения, собранного на микросхеме U2 типа 7805. Это довольно мощная микросхема, она используется здесь, так как приемопередатчик интерфейса RS-485 в режиме передачи потребляет сравнительно большой ток. Если вы не планируете использовать интерфейс RS-485, то микросхему MAX485 устанавливать не нужно. Тогда можно обойтись маломощным стабилизатором 78L05 в корпусе TO-92.

Как вы уже догадались, на микросхеме U3 типа MAX485  и резисторе R2 собран узел интерфейса RS-485. Такой интерфейс нужно использовать если расстояние между платой термометра и компьютером больше нескольких метров. По интерфейсу  RS-485 расстояние может быть до километра. На небольшом расстоянии можно использовать порт RS-232 а микросхему  MAX485 и резистор  R2 на плату не устанавливать. С программной точки зрения RS-232 и RS-485 - одно и то же, отличаются они только физическими параметрами сигналов в линии связи.

На микросхеме U4 типа MAX232 (MAX202) собран узел согласования UART интерфейса микроконтроллера в соответствии со стандартами интерфейса RS-232. С выхода MAX232 сигнал подается на стандартный разъем типа DB9 для соединения с COM портом компьютера. Нужно сказать, что в современных компьютерах, и особенно ноутбуках сейчас уже не оснащаются портами RS-232, хотя вы можете найти его в десктопных материнских платах в виде разъема на плате, то есть порт может присутствовать в вашем компьютере, но не быть выведенным на его корпус. Можно использовать дешевый переходник USB-TO-COM, купленный в Китае. Он будет также хорошо работать с нашими конструкциями на микроконтроллерах, как и настоящий "железный" RS-232. При покупке переходника следует отдавать предпочтение устройствам, основанным на микросхеме FTDI, с ними меньше всего проблем, конечно если у вас будет возможность идентифицировать микросхему, на которой сделан переходник. 

Так же, как и в случае с RS-485, если вы не планируете использовать RS-232, а думаете использовать только 485,  то можно не устанавливать микросхему MAX232 и окружающие её конденсаторы обвязки и разъем DB9F.

Несмотря на то, что микроконтроллер нашего термометра в данной конструкции работает только на передачу, схема сделана так, что при делании ее можно использовать и на прием данных, то есть пот RXD контроллера соединен с соответствующими цепями микросхем MAX232  и MAX485, ножки управления Прием-передача микросхемы MAX485 соединены с портом PB5 контроллера и задействован пин 3 (RX) разъема DB9F. Это сделано для того, чтобы при желании можно было реализовать прием данных от компьютера в будущих версиях прошивки или для использования этой платы как основы для других конструкций на микроконтроллере Atmega8.

Светодиод LED1 мигает в процессе работы платы. Опрос датчиков температуры и передача данных в порт осуществляется по прерыванию от переполнения таймера микроконтроллера с частотой ровно 1 герц, то есть один раз в секунду. Светодиод горит когда датчики измеряют температуру и гаснет в те моменты, когда производится передача информации в компьютер по последовательному интерфейсу.
Печатная плата термометра
Печатная плата устройства разведена в программе DipTrace и изготовлена методом фрезеровки на моем станке с ЧПУ. Проект для DipTRace (плату и схему) вы найдете в архиве в конце статьи. В том же архиве будет программа TLogger и прошивка микроконтроллера с исходниками для компилятора MikroC Pro For Avr

Печатная плата термометра вид со стороны меди
Печатная плата термометра вид со стороны компонентов
  
Программирование микроконтроллера


Я программирую микроконтроллеры Atmega8 с помощью дешевого USB программатора USBASP, купленного в Китае на Алиэкспресс, вот такого:

С этим программатором прекрасно работает удобная бесплатная программа AVRDUDESHELL, скачать которую можно по этой ссылке.

Для программирования микроконтроллеров я использую вот такой адаптер с панелькой ZIF. В принципе, в качестве адаптера можно использовать обычную панельку DIP28, соединив соответствующие ножки с выводами программатора. Но лучше конечно сделать адаптер.
   
Адаптер с ZIF панельной и китайский программатор USBAsp
Устанавливаем микроконтроллер в панельку адаптера, подключаем адаптер к программатору, а программатор - в USB порт компьютера. Запускаем программу AVRDUDESHELL и выбираем в списке устройств наш Atmega8.
  

После этого загружаем в программу прошивку - файл TLoggerMega8.hex. Прежде чем прошить микроконтроллер необходимо правильно установить фьюзы (биты конфигурации) микроконтроллера. Здесь нужно действовать очень внимательно, так как установив неправильные биты можно "залочить" микроконтроллер, тогда оживить его обычными средствами не получится. Установите фьюзы так, как показано на этом изображении:
  
  

Устанавливаем фьюзы как на картинке и заливаем фюзы и прошивку в микроконтроллер. После этого можно устанавливать контроллер в панельку на собранной плате термометра.

При включении питания устройства на плате должен замигать светодиод. Это говорит о том, что микроконтроллер термометра успешно запустился.

Теперь можно подключить плату к компьютеру кабелем RS232, запустить программу TLogger. В программе TLogger нужно выбрать нужный COM порт. В моем случае - это COM3
  
  

BaudRate нужно установить в 9600 - именно с такой скоростью передает данные прошивка нашего микроконтроллера. После этого нажимаем кнопку Connect.

   
Если всё хорошо, программа начнет принимать строки данных из нашего термометра. На скриншоте видно, что все данные равны -00.0625. Такая картина наблюдается если не подключить к плате термодатчики. У меня сейчас термодатчики не подключены. Давайте их подключим. Я сделал вот такой тестовый шлейф с четырьмя датчиками DS18B20.
 
   
Потом первый датчик я решил припаять на шлейф из трех проводов, чтобы можно было поместить его за окно на улицу. Теперь программа показывает реальную температуру за окном и у меня в комнате:
   
Для запуска сбора данных нажимаем кнопку Start Data Logger. Теперь данные в окне программы окрашены в зеленый цвет. Это означает что началась запись в файл.

   
Файл будет записан в папку, которую мы должны предварительно выбрать, нажав на кнопку Log Folder. Имя файла будет создано автоматически, в соответствии в датой и временем начала записи. Для того чтобы остановить запись нажмите Stop Data Logger. Просмотреть записанный файл можно сразу же, нажав на кнопку Open Last File. Только что записанный файл будет открыт в блокноте Windows.

  
   
Скачать архив со всеми файлами проекта можно по этой ссылке

com0com драйвер и другой софт для работы с COM, UART и RS-232

ВНИМАНИЕ! Файл проекта для симуляции в PROTEUS 8 находится в папке с исходниками прошивки термометра. Файл называется TLoggerMega8.pdsprj Перед запуском симуляции загрузите в модель AtMegf8 файл прошивки. Он в той же папке.

Скачать исходники Windows - программы TLogger