Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DS18B20 и ATtiny2313
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Прораб счастья
Добрый день!

Помогите, пожалуйста, связать DS18B20 и ATtiny2313. У меня никак не получается.
Задача простая - считать показания с трех датчиков (максимум), преобразовать их в int и присвоить отдельные переменные temp1, temp2 и temp3.
Все приведенные в инете примеры очень избыточны, а мои попытки выцепить из них нужные куски кода, не приносят результатов. Или просто ничего не работает или добавление пары строк сразу отъедает более 40% всей памяти программ (для 2313 это 2МБ. Сей момент вообще мне не понятен).
Пытаюсь программить на CodeVisionAVR.

Помогите кто может! help.gif
Laptop
Цитата(Прораб счастья @ Nov 11 2008, 23:26) *
... (для 2313 это 2МБ. Сей момент вообще мне не понятен).

Во первых КилоБайт. Ну а далее проще не смотреть в интернет, а писать самому раз уж решили ужаться в 2К. У меня был проект с DS1990 и обменом по RS485, все влезало. Но при нынешних ценах можно и Мегу8 поставить.
domowoj
http://invent-systems.narod.ru/DS18B20.htm
Здесь перевод даташита.
Обрати внимание на чтение - чтобы прочитать бит информации нужно датчику послать короткий
импульс (bus master = 3мкс).
Чтобы работать с n датчиками на одной шине нужно знать идентификационный номер каждого.
Процесс распознавания его на первый взгляд - сложная задача, тем более для новичка.
Научись работать сначала с одним - читать его код, температуру и т.д., а затем можно идти дальше.

Вот еще
http://radioded.ru/index.php?option=com_co...9&Itemid=49
Успехов.
AlexU
Codevision -> Wizard +20 минут доводки напильником (руками). /2 недели назад срочно просили сделать.
mempfis_
Цитата(Прораб счастья @ Nov 12 2008, 00:26) *
Добрый день!

Помогите, пожалуйста, связать DS18B20 и ATtiny2313. У меня никак не получается.
Задача простая - считать показания с трех датчиков (максимум), преобразовать их в int и присвоить отдельные переменные temp1, temp2 и temp3.


На форуме эта тема мелькала много раз. Сам скачал исходники и переделал именно под этот тип датчика. При считывании 2х чатчиков столкнулся с проблемой - мне не удалось номер термодатчика передать как параметр функции т.е.

Код
//Сброс шины 1-wire: 2 таймслота 480мкс - мастер тянет шину вниз (RESET PULSE)
//480 мкс - датчик тянет шину вниз (присутствие на шине) OW_PORT &= ~(1<<OW_DQ);
unsigned char OW_reset(unsigned char sensor_num)
{
  __disable_interrupt();
  unsigned char answer;
  //формируем RESET PULSE
  OW_PORT &= ~(1<<sensor_num);  //это не работает!!!!
  OW_DDR  |=  (1<<sensor_num); //set DDR  in 1
  //удерживаем 480 мкс
  delay_us(480);

  ...........................................................
}



Обошёл эту проблему через switch-case
Код
//Сброс шины 1-wire: 2 таймслота 480мкс - мастер тянет шину вниз (RESET PULSE)
//480 мкс - датчик тянет шину вниз (присутствие на шине) OW_PORT &= ~(1<<OW_DQ);
unsigned char OW_reset(unsigned char sensor_num)
{
switch(sensor_num)
{
case 1: //кусок кода для сенсора 1
           __disable_interrupt();
          unsigned char answer;
         //формируем RESET PULSE
         OW_PORT &= ~(1<<OW_DQ_1); //set PORT in 0
         OW_DDR  |=  (1<<OW_DQ_1); //set DDR  in 1
         //удерживаем 480 мкс
         delay_us(480);
         .........................................................................
break;

case 2: //кусок кода для сенсора 2
           __disable_interrupt();
          unsigned char answer;
         //формируем RESET PULSE
         OW_PORT &= ~(1<<OW_DQ_2); //set PORT in 0
         OW_DDR  |=  (1<<OW_DQ_2); //set DDR  in 1
         //удерживаем 480 мкс
         delay_us(480);
         .........................................................................
break
}
}


В чём была проблема толком не разбирался из-за отсутствия времени, но вариант со switch-case работае стабильно.

По поводу перевода показаний температуры в int. С датчика температура приходит в виде signed int. Объявляйте temp как знаковые, храните там температуру и работайте с ней как со знаковой величиной но учитывайте что 4 младших бита хранят дробную часть с шагом 0.0625, целая часть температуры хранится в битах 15:4.
Удачи smile.gif
Прораб счастья
Цитата(Laptop @ Nov 12 2008, 00:06) *
Но при нынешних ценах можно и Мегу8 поставить.


Не в цене дело. Устройство уже собрано на 2313... Приходится исходить из этого

CodeVision предлагает DS1820/DS18S20 вместо моего DS18B20. Доводка напильником это хорошо, когда знаешь с какой стороны к устройству подойти smile.gif

На радиодеде прога на асме. Там вообще мне никогда не разобраться smile.gif Да и остальная часть программы у меня на Си написана.
GDI
Ну во-первых: если хотите в Тини влезть, то асм - самое то.
Во-вторых: DS1820/DS18S20 это были в старых версиях CV но либа переделывется на раз, нужно только идентификатор семейства подправить(делал такое сам но было это лет 5 назад) и тогда же появились версии CV где были уже только DS18B20.
В-третьих: сам я в итоге переделывал исходники от http://www.microsyl.com/ жмите в меню OneWire Lib, т.к. делал параллельную работу датчиков - каждый датчик на своем выводе порта - до 8 датчиков, чтобы не заморачиваться с их серийниками при замене.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.