|
Ну, вобщем, какие проблемы-то? Считываем и запоминаем содержимое 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