Здравствуйте.
начинаю изучать программирование с нуля. Вывожу на ЛСД дисплей время, дату (DS1307) и показания двух DS18B20. Но есть одна проблема, из за того, что время опроса датчика в 12 битном режима 750 мс у меня изображение на ЛСД тормозит (это хорошо видно по секундам, меняются через 2-3сек). и это при двух подключенных датчиках, а если их будет больше, то и тормозить будет сильнее.
как сделать опрос датчиков отдельно от основного цикла while(1), или может есть способ вывода одновременно и времени и температуры без подобных глюков?
вот часть программы:
void main(void)
{
unsigned char hour, min, sec, data, month;
unsigned year;
rtc_init(0,0,0);
// LCD module initialization
lcd_init(20);
lcd_putsf("Podklucenie Datcikov\n DS18B20 ");
delay_ms(5000);
lcd_clear();
//while(device!=0)
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);
/* configure each DS18B20 device for 12 bit temperature
measurement resolution */
for (i=0;i‹devices
if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
{
sprintf(lcd_buffer,"Init error for\ndevice #%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
//while (1); /* stop here if init error */
};
lcd_clear();
while (1)
{
rtc_get_time(&hour,&min,&sec);
rtc_get_date(&data,&month,&year);
temp=ds18b20_temperature(&rom_code[0][0]); //читаем температуру
if (temp›1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
temp1=ds18b20_temperature(&rom_code[1][0]); //читаем температуру
if (temp1›1000){ //если датчик выдаёт больше 1000
temp1=4096-temp1; //отнимаем от данных 4096
temp1=-temp1; //и ставим знак "минус"
}
delay_ms(500);
sprintf(lcd_buffer,"Time %02u:%02u:%02u \nData %02u/%02u/%02u \nT1=%+.1f\xdfC \nT2=%+.1f\xdfC",hour,min,sec,data,month,year,temp ,temp1);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(500);
};
}