Страница 1 из 1

DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 11:26:06
*Trigger*
Доброго времени суток.
Собрал я термометр. Всё работает, на иногда (не всегда) при чтении температуры из датчика на дисплее выскакивает -79. В чём проблема???
Прошивка вот:
термометр.c
(3.76 КБ) 367 скачиваний
Проект в CVAVR:
термометр.rar
(1.34 КБ) 216 скачиваний

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 11:47:39
*Trigger*
up

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 12:28:02
*Trigger*
Помогите!!!! :roll: :roll: :roll: :roll:

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 12:42:49
urry
это нормально. Вы применяете готовую библиотеку далласовского датчика, а затем мешаете ей своими прерываниями таймера.
перепишите библиотеку сами.

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 12:54:06
*Trigger*
Спасибо большое! Я писать библиотеки не умею, так что буду перед чтением отключать таймер, выводить вместо прерывания 0b00, а после чтения включать таймер. Как думаете, работать будет???

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 13:42:59
ChipKiller
*Trigger* писал(а):Я писать библиотеки не умею....
...в этом нет ничего сложного

Код: Выделить всё

uchar DS18b20_init(void){  
    uchar cnt;    
     DDRD.Ds18b20=1; // линию в "0"
          delay_us(480);
     #asm("cli")
     DDRD.Ds18b20=0; // отпустим линию
     delay_us(5);
     cnt=20;     
         while(cnt--){ // ждем ответа 50 мкс
            if(PIND.Ds18b20==1){ delay_us(1);}
            else { 
                    #asm("sei") 
                    delay_us(480);
                    goto end_init; }
            }
     #asm("sei")     
end_init:     
     return cnt; 
}
по аналогии, глядя в datasheet, напишите DS18b20_read и DS18b20_write и все.....

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 21:25:04
*Trigger*
ChipKiller писал(а):

Код: Выделить всё

     cnt=20;
              while(cnt--){ // ждем ответа 50 мкс
            if(PIND.Ds18b20==1){ delay_us(1);}
Поясните, пожалуйста, как работают эти строки.
В даташите http://pdf1.alldatasheet.com/datasheet- ... 18B20.html на странице 20 мне не понятно, что значат заштрихованные поля. И что значат диаграммы, где написано 15, 15, и 30 us (и подобные)???

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 21:49:11
ChipKiller
*Trigger* писал(а):Поясните, пожалуйста, как работают эти строки.

Код: Выделить всё

 
........
    cnt=20;     
         while(cnt--){ // ждем ответа 50 мкс
            if(PIND.Ds18b20==1){ delay_us(1);} // если Ds18b20 не ответил "0" ждем ....

            else {  // отклик Ds18b20 (при этом cnt!=0) - даем задержку 480us
                    #asm("sei")
                    delay_us(480);
                    goto end_init; }
            }
     #asm("sei")     
end_init:     
     return cnt; 
... если не было ответа - на выходе 0 ( cnt=20 - реально хватает и 20 мкс)
*Trigger* писал(а):что значат заштрихованные поля
... если "все так плохо", погуглите есть перевод datasheeta на русском

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 22:15:45
*Trigger*
Под заштрихованными полями я имел в виду косую штриховку (редкую). Вменяемого перевода я не нашёл.

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 22:27:55
ChipKiller
*Trigger* писал(а):Вменяемого перевода я не нашёл.
... вот "невменяемый" http://usbsergdev.narod.ru/DOC/DS18B20_RU.pdf

Re: DS18b20 + ATTiny2313 = -79

Добавлено: Ср июн 22, 2011 23:44:05
*Trigger*
Спасибо.