• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
krasdok

Как получить данные из датчика температуры ds18b20

14 сообщений в этой теме

krasdok    0

Здравствуйте!
У меня atmega32 (макетная плата) + DS18B20+lcd 1602 atmelstudio 4 пример рабочего кода у кого-нибудь есть???
С входами/выходами вроде уже дружу. С шаговым двигателем тоже. Дисплей к контроллеру прикрутил.
Часики тикают. Но мне нужно подключить датчик температуры и тут я уже просто туплю. Проекты скачиваю но что-то не могу получить температуру с датчика...
Очень нужна помощь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Sergey-Ufa    545

Библиотек и просто примеров рабочего кода для работы с DS18B20 в сети вагон+тележка. Все уже давно разжевано. Просто навскидку 2 первых попавшихся ссылки

http://mkprog.ru/avr/termometr-avr-ds18b20.html

http://radioparty.ru/prog-avr/program-c/378-lesson2-ds18b20

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
krasdok    0

В интернете много а толку что-то мало.

Если есть у кого рабочий пример по моим параметрам для изучения, то может поделиться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    573
Только что, krasdok сказал:

рабочий пример

Две ссылки выше. Или открывать даташит и писать библиотеку самому. За вас никто не будет разбираться, придется учиться думать самому.

Только что, krasdok сказал:

по моим параметрам

Параметры ваши, вам и разбираться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dr. West    1 899

Если весь процесс изучения у вас заключается в скачивании готовых примеров и "этот не заработал - нужен другой пример", то лучше купить готовый термометр. Нужно вникать в исходники и искать причину, почему не работает, иначе толку от такого обучения ровно ноль.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
krasdok    0

Все говорят про кучу примеров в интернете, то у меня еще ни один не заработал.

Просто я думал что зачем велосипед изобретать.

Зачем тогда с толку сбивать...

Буду изучать работу датчика и писать свою библиотеку, только зря время в поисках потратил...

Если на форуме нет специалистов в этом направление то зачем орать что ты мол лентяй подумай сам. Ведь в науке люди используют труды других или они все сами до закона ома доходят.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andryxa    221

Чем тебе помочь если у тебя ни одна библиотека не заработала, хотя у всех остальных все прекрасно работает? Сделай выводы и найди проблему, или брось этим заниматься. Только не надо ныть на форуме и обвинять в своей не способности окружающих.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 287

1-Wire требует точной выдержки временных интервалов. Если используется встроенный генератор, то может быть неправильная калибровочная константа. У меня пару раз было так на ATtiny2313A. К такому же эффекту ведёт неправильное указание тактовой частоты в программе. Если плата с кварцем, то убедись, что в проекте правильно частота кварца выставлена и фьюзы выбора источника тактирования и предделителя (CKDIV8). Ну и неисправность датчика тоже возможна. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
krasdok    0

У меня макетная плата вот ссылка http://microsin.net/programming/AVR/avr-usb-mega16.html

LCD прикрутил кнопки для настройки меню.

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

Ну и потом не только ее... Скорость не нужна а на один порт можно много подключить разных устройств, что и заинтересовало. Кварц стоит на 12 МГц. Вот что-то не получается пока. Датчика у меня три один из них оригинал. Вот и ищу помощи в рабочей библиотеке чтобы ее потом прикрутить к моему проекту

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    573
Только что, krasdok сказал:

Вот и ищу помощи в рабочей библиотеке чтобы ее потом прикрутить к моему проекту

Блин, за то время, что просиживаешь штаны на форуме в поисках халявы, можно было свою написать! Там интерфейс простейший! А при наличии осцилла или логического анализатора, обмен в течении полу часа устанавливается, да и без них не сильно дольше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 287

Среду программирования хоть укажи... В BASCOM встроенная функция прекрасно работает, никаких сторонних библиотек не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Serb_ret    10

Вот исходник на асме. Именно на асме найти мне, в свое время,  было сложно.

Контроллер 2313+ lcd+ds18b20. Кварц 4 МГц. Куда что подключено разбирайтесь сами.

Скажу сразу, это не мое творение, на вопросы по коду не отвечаю. Просили дать - даю, как говорится "Как есть". Автор указан в коментах в исходнике, а также сайт где было взято. К автору все вопросы.

Ничего подсказывать не собираюсь. Исходник рабочий 100%, по нему переписывал свою программку, работа с датчиком работает прекрасно. 

 

DS18B20 Thermometer.asm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    513

Такое ощущение, что у некоторых людей, кроме слова "библиотека", в голове нет ничего. Либо присутствует такая лень, что тратить кучу времени на ожидание, пока дадут готовое, выгоднее, чем самому начать писать.
Зачем тогда вообще садиться за программирование с такими принципами ? Сходил и купил китайский термометр за 100 рублей.

Ещё и форумчан хают за то, что ему ничего не дают и за него ничего не делают... :crazy:
 

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Ага, типа того: Сидят два ангела, скучают. - А давай вон того анодным от кинескопа пощекочем?! - Давай! - Смотри ка! Выдержал и рыпается ещё!! Давай ка к реннтгеновской установке "подключим"!? - Давай!! ...Ты смотри какой прыгучий и живучий!!! - А давай в него молнией попадём!!! - Давай!! Только лета надо будет дождаться, а то как они объснят в протоколе, что его шарахнуло молнией, зимой, дома, при очередном просмотре "Модного приговора" - никто ж не поверит, начнут копать, а там глядишь и до ГЛАВНОГО дойдёт, чем мы тут занимаемся !!! ... С уважением, Сергей
    • @Andrey 69 Если бы у нас сметана столько стоила,на неё наверное только и облизывались БЫ. У вас наверное всё привозное\в смысле ну Очень издалека ? Хотя всё относительно-доходы у вас выше(несоизмеримы с нашими),потому и расходы выше. (если не забуду-щелкну наши цены) ------------------------ Ну и немного позитива.  
    • Да цап от Мазилы "DYK DAC",  звучит очень хорошо, даже не ожидал если честно, с той акустикой что у меня сейчас с D47V3 пока сравнить по звучанию не выйдет, не тот уровень ,через недельку будет готова трех полоска от Крылова с Пирлесом 830869, купольном СЧ и Мореле ЕТ338, вот тогда будет и сравнение , но основным  цапом естественно у меня будет D47V3 ,"DYK DAC"  собрал чисто для сравнения почитав хорошие отзывы о нем, самому стало интересно.
    • Я надеюсь у Вас @ARV не пойдет кровь из глаз...   #include "main.h" char trig[4], butdown[4], //переменные для обработки нажатия на рычаг поворотника и кнопок code, old_code, //переменные кода команды prog_available=TRUE, count_right_prog, count_left_prog, prog_ini, prog_start,//переменные для режима программирования count_turn=10, count_thx, //переменные для чтения из eeprom accept_mode, accept_count, //переменные для режима подтверждения turn_count, long_ini=FALSE, //переменные для режима удлинения поворотника thx_count, thx_ini, //переменные для режима "Спасибо!" count_right, count_left; //переменные для счёта мыргов от правого и от левого поворотника int prog_available_count=0; uint8_t EEMEM turn; //переменная EEPROM для хранения количества повторений поворотника в режиме удлинения uint8_t EEMEM thx; //переменная EEPROM для хранения количества повторений аварийки в режиме "Спасибо" uint8_t get_button(void) { return PINB & ANY_K; } void press_button() //функция обработки нажатия на кнопку спасибо или включение заднего хода { if(PINB&(1<<THX_REAR)) //опрос входа от кнопки спасибо\заднего хода { if(trig[THX_REAR]==OFF) { if(butdown[THX_REAR]<LONG) { butdown[THX_REAR]++; _delay_ms(10); } else //обработка при включении заднего хода { trig[THX_REAR]=ON; PORTB|=(ON<<LEFT_OUT)|(ON<<RIGHT_OUT); } } } else { if(trig[THX_REAR]==OFF) { if(SHORT<butdown[THX_REAR])// обработка при коротком нажатии на кнопкку спасибо { trig[THX_REAR]=ON; if((PINB&(1<<LEFT_OUT))){PORTB&=~(ON<<LEFT_OUT); PORTB&=~(ON<<RIGHT_OUT);} else{PORTB|=(ON<<LEFT_OUT)|(ON<<RIGHT_OUT);} } } else { if(butdown[THX_REAR]==LONG){PORTB&=~(1<<LEFT_OUT);PORTB&=~(1<<RIGHT_OUT);} trig[THX_REAR]=OFF; butdown[THX_REAR]=OFF; } } } void Stand_by(void) //рычаг ПП выключен, огни погашены { if(old_code==0) { if((count_right==1)||(count_left==1)) { if(count_right==1) { PORTB|=(ON<<RIGHT_OUT); } if(count_left==1) { PORTB|=(ON<<LEFT_OUT); } else { if(accept_mode==0) { PORTB|=(ON<<LEFT_OUT);PORTB|=(ON<<RIGHT_OUT); } } } } else { if(old_code==6) { if(prog_ini==ON) { eeprom_write_byte(&turn, count_turn); eeprom_write_byte(&thx,count_thx); accept_mode=ON;PORTB|=(ON<<LEFT_OUT);PORTB|=(ON<<RIGHT_OUT); } } } } void Ligts_On_Right(void) //рычаг ПП включен вправо, горит правый поворотник { if(old_code==2) { if(long_ini==ON) { count_right++; } else { if(prog_available==ON) { turn_count++; } else { long_ini=ON;count_right++;PORTB|=(ON<<RIGHT_OUT); if(prog_available==TRUE) { count_right_prog++; } } } } else { if(old_code==0) { if(long_ini==ON) { count_right++; } else { if(count_right==1) { count_right=0; } if(prog_ini==ON) { if(turn_count<MAX_TURN) { turn_count++; } } else { if(prog_available==TRUE) { count_right_prog++; if(count_right_prog>3) { prog_available=FALSE; } } } } } } } void Ligts_On_Left(void) //рычаг ПП включен влево, горит левый поворотник { if(old_code==2) { if(long_ini==ON) { count_left++; }else { if(prog_ini==ON) { thx_count++; } else { long_ini=ON;PORTB|=(1<<LEFT_OUT); count_left++; if(prog_available==TRUE) { count_left_prog++; } } } } else { if(old_code==0) { if(long_ini==ON) { count_left++; } else { if(count_left==1) { count_left=0; } if(prog_ini==ON) { if(thx_count<MAX_THX) { thx_count++; } } else { if(prog_available==TRUE) { if(count_right_prog==3) { count_left_prog++; if(count_left_prog==3) { prog_ini=ON; thx_count=0; turn_count=0;prog_available=FALSE;prog_start=0; } } else { prog_available=FALSE; } } } } } } } void Lights_Pause(void) //рычаг ПП включен в какую-либо сторону, либо включена аварийка, огни погашены { if(old_code==3) { if(count_right==1) { long_ini=OFF;PORTB&=~(1<<RIGHT_OUT); } if(long_ini==ON) { if(count_right==count_turn) { long_ini=OFF;PORTB&=~(1<<RIGHT_OUT);count_right=0; } } } else { if(old_code==6) { if(count_left==1) { long_ini=OFF;PORTB&=~(1<<LEFT_OUT); } else { if(long_ini==ON) { if(count_left==count_turn) { long_ini=OFF;PORTB&=~(1<<LEFT_OUT);count_left=0; } } else { if(prog_ini==ON) { if(prog_start==ON) { accept_mode=ON; } } } } } else { if(old_code==7) { if(thx_ini) { if(thx_count==count_thx) { thx_count=0;thx_ini=OFF;PORTB&=~(1<<LEFT_OUT);PORTB&=~(1<<RIGHT_OUT); } } else { if(accept_mode==ON) { if(accept_count==3) { accept_mode=OFF;PORTB&=~(1<<LEFT_OUT);PORTB&=~(1<<RIGHT_OUT); accept_count=0;prog_start=0; } } } } } } } void Ligts_On_All(void) //включена аварийка горит оба поворотника { if(old_code==3) { long_ini=ON;PORTB&=~(1<<RIGHT_OUT);count_right=0; } if(old_code==6) { long_ini=ON;PORTB&=~(1<<LEFT_OUT);count_left=0; } if(old_code==2) { if(thx_ini==ON) { thx_count++; } else { if(accept_mode==ON) { accept_count++; } } } if(old_code==0) { if(long_ini==ON) { long_ini=OFF;PORTB&=~(1<<LEFT_OUT);PORTB&=~(1<<RIGHT_OUT); } } if(thx_ini==ON) { thx_count++; } else { if(accept_mode==ON) { accept_count++; } } } void get_command(char mode) { if(!((old_code)==mode)) { switch(mode) { case 0:{Lights_Pause(); break;} //рычаг ПП включен в какую-либо сторону, либо включена аварийка, огни погашены case 2:{Stand_by(); break;} //рычаг ПП выключен, огни погашены case 3:{Ligts_On_Right(); break;} //рычаг ПП включен вправо, горит правый поворотник case 6:{Ligts_On_Left(); break;} //рычаг ПП включен влево, горит левый поворотник case 7:{Ligts_On_All(); break;} //включена аварийка горит оба поворотника break; } old_code=mode; } } void pol_ports(void) //опрос портов { code=get_button(); _delay_ms(10); if(code!=get_button()){code=10;} } ISR(TIM0_OVF_vect) { if(prog_available==TRUE){prog_available_count++;if(prog_available_count>1220){PORTB|=(ON<<RIGHT_OUT);prog_available=FALSE;}} //отключаем возможность //входа в режим программирования после истечения 10 секунд с момента включения устройства } int main(void) { port_ini(); timer_ini(); sei(); while(1) { pol_ports(); get_command(code); //вызов команды press_button(); //опрос кнопки спасибо/ЗХ } } Вот такую схемку накидал для проверки.
    • Спасибо за ответы. А увеличить частоту модуляции возможно?