Страница 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
Вот блин... Видать потому, что я не в теме.
Огромное спасибо! Не подскажите ещё как его запрограммировать?