реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> DS18B20 и ATtiny2313, Помогите, пожалуйста!
Прораб счастья
сообщение Nov 11 2008, 20:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-08
Из: Москва
Пользователь №: 41 264



Добрый день!

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

Помогите кто может! help.gif
Go to the top of the page
 
+Quote Post
Laptop
сообщение Nov 11 2008, 21:06
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



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

Во первых КилоБайт. Ну а далее проще не смотреть в интернет, а писать самому раз уж решили ужаться в 2К. У меня был проект с DS1990 и обменом по RS485, все влезало. Но при нынешних ценах можно и Мегу8 поставить.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Nov 12 2008, 03:06
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



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

Вот еще
http://radioded.ru/index.php?option=com_co...9&Itemid=49
Успехов.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
AlexU
сообщение Nov 12 2008, 07:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 31-05-06
Пользователь №: 17 639



Codevision -> Wizard +20 минут доводки напильником (руками). /2 недели назад срочно просили сделать.

Сообщение отредактировал AlexU - Nov 12 2008, 07:10
Go to the top of the page
 
+Quote Post
mandrew
сообщение Nov 12 2008, 07:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 28-09-05
Пользователь №: 9 021



http://electronix.ru/forum/index.php?showtopic=52634
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 12 2008, 08:08
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Прораб счастья @ 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
Go to the top of the page
 
+Quote Post
Прораб счастья
сообщение Nov 12 2008, 08:09
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-08
Из: Москва
Пользователь №: 41 264



Цитата(Laptop @ Nov 12 2008, 00:06) *
Но при нынешних ценах можно и Мегу8 поставить.


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

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

На радиодеде прога на асме. Там вообще мне никогда не разобраться smile.gif Да и остальная часть программы у меня на Си написана.

Сообщение отредактировал Прораб счастья - Nov 12 2008, 08:10
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 12 2008, 08:52
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Ну во-первых: если хотите в Тини влезть, то асм - самое то.
Во-вторых: DS1820/DS18S20 это были в старых версиях CV но либа переделывется на раз, нужно только идентификатор семейства подправить(делал такое сам но было это лет 5 назад) и тогда же появились версии CV где были уже только DS18B20.
В-третьих: сам я в итоге переделывал исходники от http://www.microsyl.com/ жмите в меню OneWire Lib, т.к. делал параллельную работу датчиков - каждый датчик на своем выводе порта - до 8 датчиков, чтобы не заморачиваться с их серийниками при замене.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 12 2008, 09:23
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



http://teslabs.com/openplayer/docs/docs/ot...s18b20_pre1.pdf


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 05:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016