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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

Доброго времени суток!
Бьюсь над проблемой уже 3-й день.
CVAVR.
Не работает датчик как надо. Что есть он, что нет его результат тот же.
Библиотеки подключены.

Очень прошу помочь. Кончились варианты.
Заранее спасибо!
Вложения
new term.rar
(617.4 КБ) 139 скачиваний
Реклама
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Почему не используете стандартные либы кодвижна для датчиков?

А так - проверяйте инициализации, чтобы все временные промежутки выдерживались как надо.
Реклама
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

Этот проект сделан на основе другого. Потому и библиотеки не родные.
Библиотеки заменены, функции переписаны, датчик так и не работает.

Что посоветуете?
Вложения
EventSystemCV-term.rar
(514.82 КБ) 130 скачиваний
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Посоветую отлаживать - проверьте вообще вызывается ли инициализация, проходит ли оно ее...
Да и еще - ножка данных датчика подтянута 4.7к к "+" питания?
Реклама
Эиком - электронные компоненты и радиодетали
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение 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 кОм на месте.
Реклама
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

w1_init() делаете перед этим всем?
Реклама
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение 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;}
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Однократно.
Конечно часто, преобразование длится примерно 750 мс!
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

Однократно в начале main так и было в начале.
Теперь прерывание раз в 1 минуту.
Результат тот же. Программа не инициализирует датчик. Показывает 0.

Что делать?
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Дайте проект в протеусе тогда уж, посмотрим вечером.
Аватара пользователя
john_rise
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн дек 17, 2007 13:15:43

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

Сообщение john_rise »

Возможно я слишком бегло просмотрел код, но... когда вы работаете с термодатчиком то после некоторых действий вы выводите на дисплей, далее снова работаете с термодатчиком. Дисплей требует довольно приличных времён для вывода информации в результате чего программа работы с термодатчиком ждёт дисплей. Попробуйте читать в буфер, а выводить уже по готовности всех обращений к термодатчику.
Боишся - не делай. Делаешь - не бойся.
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

john_rise - попробую переделать.
Проект прилагаю.
Вложения
new term.rar
(114.58 КБ) 144 скачивания
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

Датчик просто не определяется. Не проходит инициализацию. Думаю дело здесь не в дисплее.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

А проблема оказалась в совершенно тупом фузе :)))
CKDIV8 надо установить в "1" (незапрограммирован)
Ибо сейчас он работает на 1 мгц, соответственно все временные задержки отрабатыватся неправильно, потому и не видит датчик, ибо проект собран под 8 мгц!
KamomeDono
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 29, 2011 09:52:59
Откуда: Ангарск
Контактная информация:

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

Сообщение KamomeDono »

Вот блин... Видать потому, что я не в теме.
Огромное спасибо! Не подскажите ещё как его запрограммировать?
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»