реклама на сайте
подробности

 
 
> DS18b20, Не показывает температуру больше 50 градусов
Andrew_k5
сообщение Nov 10 2009, 09:30
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 15-02-07
Из: Днепропетровск
Пользователь №: 25 387



Пробовал разные задержки, отключил все что можно.
Температура до 40 нормально, при нагреве феном оключается при 45 градусах, при охлаждении включается при 55.

Сообщение отредактировал Andrew_k5 - Nov 10 2009, 09:32
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andrew_k5
сообщение Nov 11 2009, 13:16
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 15-02-07
Из: Днепропетровск
Пользователь №: 25 387



CODE
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{#asm("sei")
if (needdelay==0) {ICR1H=0xFF;ICR1L=0xC1; //2 ms
delayok=1;
}
if (needdelay==1){switch (resolution){case 0: ICR1H=0xF3;ICR1L=0xCA;break;//zadergka 100 ms
case 1: ICR1H=0xE7;ICR1L=0x95;break;//zadergka 200 ms
case 2: ICR1H=0xCF;ICR1L=0x2B;break;//zadergka 400 ms
case 3: ICR1H=0x9E;ICR1L=0x57;break;//zadergka 800 ms
}
needdelay=0;
}

}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 490 Hz
{
#asm("sei")
...
}

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 125 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x4F;
//TCNT2=130;//nachalnoe znachenie 125 000/(255-130)= 1000 gz
OCR2=0x00;
TIMSK=0xC5;

OSCCAL=170;


devices=w1_search(0xf0,rom_codes);
delay_ms(200);

if (!ds18b20_init(&rom_codes[0][0],20,30,DS18B20_9BIT_RES))
{init_error=1;}


while (1)
{if ((trmcount>20)&&(Menu==1))
{
TempSens=ds18b20_temperature(&rom_codes[0][0]);

trmcount=0;
}


}

}


И кусочек переделанного ds18b20.lib

Код
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
delayok=0;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
//delay_ms(conv_delay[resolution]);
#asm("sei")
needdelay=1;
while(delayok==0){}
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 19:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01346 секунд с 7
ELECTRONIX ©2004-2016