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

Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Сб ноя 26, 2011 08:09:55
KamomeDono
Доброго времени суток!
Бьюсь над проблемой уже 3-й день.
CVAVR.
Не работает датчик как надо. Что есть он, что нет его результат тот же.
Библиотеки подключены.

Очень прошу помочь. Кончились варианты.
Заранее спасибо!

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Сб ноя 26, 2011 09:20:01
BCluster
Почему не используете стандартные либы кодвижна для датчиков?

А так - проверяйте инициализации, чтобы все временные промежутки выдерживались как надо.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 07:31:08
KamomeDono
Этот проект сделан на основе другого. Потому и библиотеки не родные.
Библиотеки заменены, функции переписаны, датчик так и не работает.

Что посоветуете?

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 09:15:50
BCluster
Посоветую отлаживать - проверьте вообще вызывается ли инициализация, проходит ли оно ее...
Да и еще - ножка данных датчика подтянута 4.7к к "+" питания?

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 09:58:43
KamomeDono
Я так понимаю, функция инициализации из библиотки ds18b20 - ds18b20_init.
Так вот, эта функция должна выдавать 1 в случае присутствия датчика.
Если всё верно, то датчик не видится. Инициализация не проходит.
Вот часть кода:

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

#asm("cli");
if( ds18b20_init( 0, 10, 29, DS18B20_12BIT_RES ) )
{delay_ms( 500 );
 temperature=ds18b20_temperature( 0 ); //Чтение температуры, адрес нуль
   // delay_ms( 30 );
  //Анализ на отрицательную температуру
        LCD_Goto(7,0); tp=temperature;
    if ( tp<1000 ){
      LCD_WriteData('+');
    }
    else{
      LCD_WriteData('-');
      tp = 4096-tp;
    }
}
else {temperature=0;}
  //считываем результат
  LCD_Goto(8,0);
  BCD_3Lcd(temperature);
   #asm("sei");

естественно в начале:

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

#include <ds18b20.h>
// 1 Wire Bus functions
#asm
   .equ __w1_port=0x0B ;PORTD
   .equ __w1_bit=7
#endasm
Где ошибка?

Датчик впрочем подключен верно. Подтяжка в 4,7 кОм на месте.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 14:19:05
BCluster
w1_init() делаете перед этим всем?

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 14:50:22
KamomeDono
Однократно или при каждом преобразовании?
После того, как вначале процедуры была добавлена w1_init датчик по крайней мере стал опрашиваться (визуально в протеусе), но результат так и не отображается.
Может слишком часто происходит прерывание (250 мс) по которому происходит преобразование?
Вот код:

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

void TIM_Init(void)
{
  TIMSK0 = (1<<OCIE0A);     //разрешаем прерывание таймера т0 при событии совпадение
  TCCR0A = (1<<WGM01)|(0<<WGM00);
  TCCR0B = (1<<CS02)|(0<<CS01)|(1<<CS00); //режим СТС, прескалер - 1024
  TCNT0 = 0;              //обнуляем счетный регистр
  OCR0A = 0x4D;            //прерывания каждые ~ 10 мс
  
  TIMSK1 |= (1<<OCIE1A);                 //разрешаем прерывание таймера т1 при событии совпадение
  TCCR1A = (0<<WGM11)|(0<<WGM10);       
  TCCR1B = (0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10);  //режим работы СТС, прескалер - 1024
  TCNT1H = 0;  TCNT1L = 0;
  OCR1AH = 0x07;
  OCR1AL = 0xA0;
   #asm("sei");          //250 мс
}


interrupt [TIM1_COMPA] void Timer1_compa(void)
{
  ES_PlaceEvent(EVENT_TIMER); 
  TCNT1H = 0;  TCNT1L = 0;}

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 15:24:27
BCluster
Однократно.
Конечно часто, преобразование длится примерно 750 мс!

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 16:16:11
KamomeDono
Однократно в начале main так и было в начале.
Теперь прерывание раз в 1 минуту.
Результат тот же. Программа не инициализирует датчик. Показывает 0.

Что делать?

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 16:27:56
BCluster
Дайте проект в протеусе тогда уж, посмотрим вечером.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 16:30:20
john_rise
Возможно я слишком бегло просмотрел код, но... когда вы работаете с термодатчиком то после некоторых действий вы выводите на дисплей, далее снова работаете с термодатчиком. Дисплей требует довольно приличных времён для вывода информации в результате чего программа работы с термодатчиком ждёт дисплей. Попробуйте читать в буфер, а выводить уже по готовности всех обращений к термодатчику.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Пн ноя 28, 2011 16:36:24
KamomeDono
john_rise - попробую переделать.
Проект прилагаю.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Вт ноя 29, 2011 14:33:51
KamomeDono
Датчик просто не определяется. Не проходит инициализацию. Думаю дело здесь не в дисплее.

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Ср ноя 30, 2011 09:49:03
BCluster
А проблема оказалась в совершенно тупом фузе :)))
CKDIV8 надо установить в "1" (незапрограммирован)
Ибо сейчас он работает на 1 мгц, соответственно все временные задержки отрабатыватся неправильно, потому и не видит датчик, ибо проект собран под 8 мгц!

Re: Atmega1284p и датчик ds18b20 нет показаний температуры

Добавлено: Ср ноя 30, 2011 09:54:46
KamomeDono
Вот блин... Видать потому, что я не в теме.
Огромное спасибо! Не подскажите ещё как его запрограммировать?