Решил подредактировать родную библиотеку.
Нашел блок чтения температуры, убрал обращение к нему, и поставил этот код в свою программу:
CODE
if (ontemp == 0) {
ontemp = 1;
if (ds18b20_read_spd(0)==0) {temper = -9999; goto endoff;}
if (ds18b20_select(0)==0) {temper = -9999; goto endoff;}
w1_write(0x44);
} else {
ontemp = 0;
if (ds18b20_read_spd(0)==0) {temper = -9999; goto endoff;}
w1_init();
temper = (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
Код выполняется раз в пол секунды (программный таймер так настроил). Датчик в системе один, иначе ругается на не найденную переменную addr. Я хотел её глобально объявить, но не смог найти, кто знает где она, скажите, вдруг понадобится несколько датчиков подключить.
В протеусе вроде работает, протестирую на железе отпишу...
Инициализация и прочие функции делаются через стандартную библиотеку...
Сообщение отредактировал isx - Dec 15 2013, 17:43