Ну, вобщем, какие проблемы-то? Считываем и запоминаем содержимое TRIM1 и TRIM2. Затем при загрузке при инициализации...(продолжение внутри)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено VadikT 29 октября 2004 г. 08:29
В ответ на: В конференции кто-то упоминал про потаенное место датчиков DS18B20, без которого невозможна надежная их эксплуатация. Можно об этом подробнее? отправлено Quantum 28 октября 2004 г. 12:13

Ну, вобщем, какие проблемы-то? Считываем и запоминаем содержимое TRIM1 и TRIM2. Затем при загрузке при инициализации (т.е. после подачи питания) или периодически в главном цикле (что, вобщем-то, не особо прибавляет надежности, так как данные из EEPROM при загрузке DS18x20 копируются в рабочие регистры) читаем содержимое TRIM1, TRIM2 - и, если их значение стало отличным от исходного, перезаписываем TRIM1 и TRIM2. Вот и все:) Да, и еще одно замечание: доступ к записи TRIM1 и TRIM2 возможен только после процедуры их чтения.
Последовательность команд:
microlan_reset (ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x93, ds_home); //read TRIM1
lsb_h = microlan_read_byte (ds_home); //value of TRIM1

microlan_reset(ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x68, ds_home); //read TRIM2
msb_h = microlan_read_byte (ds_home); //value of TRIM2

if ((lsb_h != 59) || (msb_h != 67))
{
microlan_reset (ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x95, ds_home); //write TRIM1
microlan_write_byte (59, ds_home); //value of TRIM1

microlan_reset (ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x63, ds_home); //write TRIM2
microlan_write_byte (67, ds_home); //value of TRIM2

microlan_reset(ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x94, ds_home); //copy TRIM1

microlan_reset (ds_home);
microlan_write_byte (0xCC, ds_home); //skip memory command
microlan_write_byte (0x64, ds_home); //copy TRIM2
}

Иное дело, когда TRIM1 и TRIM2 похерились до того, как они были считаны, - тогда здесь можно пойти 2мя путями:
записать фиксированные значение в TRIM1 и TRIM2 - 0x03 и 0xBB, как написано в AN247, - при этом максимальное отклонение по точности должно быть не хуже, чем +/- 2 С (как попадет:));
если же нужно восстановить исходную точность, нужна процедура калибровки, что мне удалось сделать.
Если последняя тема интересна, я готов обсудить это отдельно.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru