Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [C51] Задание верхей уставки для датчика DS18B20.


Автор: ChristopherRobin 21.5.2011, 10:11
Здравствуйте. Очень прошу помочь разобраться в вопросе задания уставок для датчика DS18B20.

В мануале написано, что для этого служат регистры TH и TL. Как я понял в них загружается значение температуры, с которым сравнивается измеренное значение. Если измеренная темп-ра выше верхней уставки, то устанавливается флаг аварии.

Но вот как это реализовать программно в ассемблере ума не хватает.

------------------------

Собрана схема измерения на контроллере AT89C51.
Мне нужно сделать, чтобы при превышении температуры в 50 градусов, на заданный порт контроллера приходил сигнал. К планируется подключить светодиод, показывающий аварийное состояние.

Может кто-то делал уже что-то подобное, подскажите пожалста.


Автор: Mazzi 21.5.2011, 17:40
Исходник и схему можно посмотреть?

Автор: UniBomb 21.5.2011, 20:09
Цитата(ChristopherRobin @  21.5.2011,  11:11 Найти цитируемый пост)
Может кто-то делал уже что-то подобное

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

Автор: ChristopherRobin 22.5.2011, 17:52
Mazzi, Схему собирал отсюда - http://www.atomlink.ru/~courier/ds1307/ds1307.htm

Тока контроллер поменял на AT89C51. В итоге получилось так 
http://radikal.ru/F/i058.radikal.ru/1001/4a/b078daa08b52.jpg.html

UniBomb, а на чем писал? не на ассемблере?

Автор: UniBomb 24.5.2011, 09:40
ChristopherRobin, да, писал на Си, и ещё, как оказалось, одно отличие - микросхема с которой я работал была с интерфейсом TWI. Но особой разницы нет.

Итак, что имеем. вариант 1 - использовать решистры Tl и Th. В твоей программе определена функция "OUT_BYTE", которая передаёт "IO_BYTE" на шину 1-wire. Действуй согласно даташиту:

Цитата

Для записи данных в байты Tl, Th, и CONFIGURATION REGISTER ОЗУ используем команду Write Scratchpad [4Eh]; данные должны быть переданы к DS18B20, начиная с байта 2. Чтобы проверить корректность записи данных, необходимо выполнить чтение (используя команду чтения Read Scratchpad [BEh]) после того, как данные будут записаны. Обратите внимание, что при чтении данные DS18B20 начинает передавать с 0 байта. Чтобы сохранить TH, TL и данные регистра конфигурации в EEPROM, устройство управление должно выдать команду Copy Scratchpad [48h].


вариант 2 - использовать программные пороги. В программе есть процедура "GET_T", которая и занимается получением температуры. Результат можно прочитать либо из "TEMP_BYTE_1" в нормальном виде, либо из "TEMP_C" в двоично-десятичном представлении (преобразование сделано для удобства индикации). В ту же функцию ты можешь добавить любую свою проверку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)