Цитата(Letis @ Oct 7 2010, 17:44)

Дело в том, что если выключить частотник, то датчик работает, если включить не работает.
Если же датчик розместить прямо на около устройства и включить частотник, датчик не работает. Значит частотник дает збой по питанию, я правильно мыслю. Как защитить устройство ?
Какая длина шнурка к датчику?
Устройство без датчика с вкл/выкл частотником ведёт себя одинаково?
Устройство с датчиком, подключённым без шнурка, с вкл/выкл частотником ведёт себя одинаково?
Вы поминали, что экранирование шнурка ничего не дало. В какой (или каких?) точке был подключен экран?
Пока, ей-ей, не понятно, что сбоит, да и сбоит или так и задумано.
думы за жисть:
После ++ в
if(ds==41) *(p++)=w1_read();
*p будет указывать куда-то мимо __ds18b20_scratch_pad.
Вместо
if( !w1_dow_crc8(&__ds18b20_scratch_pad, 9) == 0 ) ...
достаточно
if( w1_dow_crc8(&__ds18b20_scratch_pad, 9) ) ...
или
if( w1_dow_crc8(&__ds18b20_scratch_pad, 8) != *p) ... // если if(ds==41) *p = w1_read();
А если CRC считать на лету при приёме бита, то можно
Код
if(ds==32) { w1_write(0xBE); p=(char *) &__ds18b20_scratch_pad; CRC = 0; }
...
if(ds==42) if( !CRC ) ...
Фразы
Код
if(ds==44) Tp = (*((int *) &__ds18b20_scratch_pad.temp_lsb) & 0xFFF8)*0.0625;
if(Tp>1000) Tp=Tp-4096;
не понял. И зачем напрягать компилятор ...*0.0625, если можно .../16 или ...>>4?
И зачем вообще считать CRC и Tp (с плавучкой, если компилятор не сообразит) в прерывании?
Но коль "Да работает оно все", то и ладно.