Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
krasdok
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 62
1

Нужна прошивка для подключения датчиков температуры ds18b20

06.04.2017, 06:01. Просмотров 676. Ответов 12
Метки нет (Все метки)

Здравствуйте!
У меня atmega32 (макетная плата) + DS18B20+lcd 1602 atmelstudio 4 пример рабочего кода у кого-нибудь есть???
С входами/выходами вроде уже дружу. С шаговым двигателем тоже. Дисплей к контроллеру прикрутил.
Часики тикают. Но мне нужно подключить датчик температуры и тут я уже просто туплю. Проекты скачиваю но что-то не могу получить температуру с датчика...
Очень нужна помощь...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2017, 06:01
Ответы с готовыми решениями:

Получить серийники 4-х датчиков DS18B20 на шине 1-Wire
Интересует вопрос как получить адреса 4-х устройств?

Измерение температуры окружающей среды без внешних датчиков
Где-то на хабре видел статью, в которой демонстрировался термометр на контроллере AVR. Его...

AT89C51. Работа с DS18B20 (необходимы схема и прошивка)
Здраствуйте. Мне нужно схему и прошивку, для вивода информации на LCD используя AT89C51, интерфейс...

ПММ Ariston LI 48 A 37272460000 S/N 209045352, TYPE NUMBER LD 08-BIT100, Нужна схема подключения модулей и прошивка
Добрый вечер форумчане прошу помощи.Нужна схема подключения модулей и прошивка если можно.

Прошивка для INDESIT NBA20DFNFNXH, Нужна прошивка под данну модель холодильника
Помогите подобрать прошивку для выше описаного холодильника. S/N - 204133879 Номер: 58754140010...

12
Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
06.04.2017, 15:13 2
Держите пример библиотеки для работы с DS18B20 (в приложении два файла .c и .h)

В основном коде пишете
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    #define DS18B20_DDR             DDRC
    #define DS18B20_PIN             PINC
    #define DS18B20_PORT            PORTC
    #define DS18B20_DS              7
    #define DS18B20_ERROR           0xFFFF
        
    int16_t     DS18B20_Home_Temperature;
 
void Display_Temp()
{
    DS18B20_Home_Temperature = DS18B20_Read();
    if (DS18B20_Home_Temperature != DS18B20_ERROR){
        uint8_t tls = (DS18B20_Home_Temperature & 0xFF); 
        uint8_t tms = (DS18B20_Home_Temperature >> 8); 
        if(tms&0xF8)    // если температура отрицательная                   
        {
            tls = (~tls)+1;         
            tms = ~tms;             
        }
        // получаем модуль целой части
        uint8_t temp = (tms << 4)+(tls >> 4);
        uint8_t frac = tls & 0x0F;
        // получаем дробную часть, десятые доли
                frac = (frac << 1) + (frac << 3); // * 10
        frac = frac >> 4; // *0.0625 or /16
    }
}
0
Вложения
Тип файла: txt ds18b20.c.txt (2.6 Кб, 8 просмотров)
Тип файла: txt ds18b20.h.txt (130 байт, 6 просмотров)
krasdok
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 62
07.04.2017, 07:32  [ТС] 3
Ниже приведенный код обозначает что датчик подключен к PC7???
C
1
2
3
4
5
#define DS18B20_DDR             DDRC
    #define DS18B20_PIN             PINC
    #define DS18B20_PORT            PORTC
    #define DS18B20_DS              7
    #define DS18B20_ERROR           0xFFFF
В ds18b20.c что за строчка(где взять этот файл)???
C
1
#include "../config.h"
Добавлено через 3 минуты
Да еще же датчик надо инициализировать???
0
Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
07.04.2017, 09:34 4
Да, подключен к PC7. Думаю как перенести на другой вывод разберетесь.
Файл config.h содержит константы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    #define DS18B20_ERROR           0xFFFF
    #define DS18B20_SEARCH_ROM      0xF0            // Поиск адресов всех устройств
    #define DS18B20_READ_ROM        0x33            // Считывание адреса единственного устройства
    #define DS18B20_MATCH_ROM       0x55            // Активация конкретного устройства по его адресу
    #define DS18B20_SKIP_ROM        0xCC            // Обращение к единственному на шине устройству без указания его адреса
    #define DS18B20_ALARM_SEARCH    0xEC            // Поиск устройств, у которых сработал ALARM (алгоритм поиска как у CMD_SERCH_ROM)
    #define DS18B20_CONVERT_T       0x44            // Старт преобразования температуры
    #define DS18B20_W_SCRATCHPAD    0x4E            // Запись во внутренний буфер (регистры)
    #define DS18B20_R_SCRATCHPAD    0xBE            // Чтение внутреннего буфера (регистров)
    #define DS18B20_C_SCRATCHPAD    0x48            // Сохранение регистров в EEPROM 
    #define DS18B20_RECALL_EE       0xB8            // Заносит в буфер из EEPROM значение порога ALARM
    #define DS18B20_READ_POWER      0xB4            // Определение, есть ли в шине устройства с паразитным питанием
    #define DS18B20_RES_9BIT        0x1F            // Разрешение датчика (9 бит)
    #define DS18B20_RES_10BIT       0x3F            // Разрешение датчика (10 бит)
    #define DS18B20_RES_11BIT       0x5F            // Разрешение датчика (11 бит)
    #define DS18B20_RES_12BIT       0x7F            // Разрешение датчика (12 бит)
Преобразование запускается функцией DS18B20_Start(), далее читаете, если результат не равен DS18B20_ERROR - значит преобразование прошло успешно и можно выводить данные. Инициализировать отдельно датчик не нужно.

Добавлено через 42 минуты
Забыл упомянуть, по умолчанию используется 12-битное преобразование, можно поменять, например на 9-битное, так
C++
1
2
3
4
5
6
7
owi_write(DS18B20_W_SCRATCHPAD);
owi_write(0x00);
owi_write(0x00);
owi_write(DS18B20_RES_9BIT);
owi_reset();
owi_write(DS18B20_SKIP_ROM);
owi_write(DS18B20_C_SCRATCHPAD);
0
07.04.2017, 09:34
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
07.04.2017, 15:12 5
Все в Интернете есть.
0
krasdok
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 62
11.04.2017, 09:59  [ТС] 6
В интернете много а толку что-то мало.

Если есть у кого рабочий пример по моим параметрам (atmega32a+lcd1602+ds18b20) для изучения, то может поделиться...Для Atmel Studio 4 или 6.2

Просто сил нет...Вроде все просто а не получаетя
0
Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
11.04.2017, 13:13 7
Приведенный мною код не заработал? Или не разобрались? Спрашивайте
0
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
11.04.2017, 14:22 8
Я имею ввиду в Интернете есть библиотеки или готовые примеры кода работы с термометорм DS18B20. Вы что искать не умеете? Там этого барахла навалом. Тема уже 100 лет в работе. Интерфес там 1-Wire - вот с ним Вам и надо работать.
Насчет дисплея - про готовое не скажу, но тут наверное по datasheet самому можно легко написать.

Добавлено через 2 минуты
Первая попавшаяся статья:http://radioparty.ru/prog-avr/program-c/378-lesson2-ds18b20 - там есть функции записи байта в термометр и чтения из него байта. Код программы на вид страшный, но разобраться можно.
0
krasdok
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 62
18.04.2017, 09:53  [ТС] 9
Skyer, пробовал другой пример, но там библиотека на ASM. Показывает постоянно ноль вот ссылка http://mkprog.ru/avr/termometr-avr-ds18b20.html. Пример как раз для меня. Подскажите какие библиотеки надо включать в заголовке. И нужно какую частоту устанавливать, ведь от нее все очень зависит, от задержек. Вот если не трудно то помогите начать...буду потихоньку разбираться...
0
Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
19.04.2017, 20:26 10
Не совсем понял, вы с каким примером пытаетесь разобраться? Моим или по ссылке?
0
krasdok
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 62
20.04.2017, 16:17  [ТС] 11
Вот где нужно эту функцию вставить DS18B20_Start()
Так же где это прописывается
1
2
3
4
5
6
7
owi_write(DS18B20_W_SCRATCHPAD);
owi_write(0x00);
owi_write(0x00);
owi_write(DS18B20_RES_9BIT);
owi_reset();
owi_write(DS18B20_SKIP_ROM);
owi_write(DS18B20_C_SCRATCHPAD);
И чем отличается 9 от 12 битного?
0
magirus
20.04.2017, 16:24
  #12

Не по теме:

очередной, который читает только то, что ему хочется читать.

Цитата Сообщение от Skyer Посмотреть сообщение
вы с каким примером пытаетесь разобраться? Моим или по ссылке?
Цитата Сообщение от krasdok Посмотреть сообщение
Вот где нужно эту функцию вставить
...

0
Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
20.04.2017, 18:11 13
Функция старт прописывается в начале, второй случай с изменением разрядности, это нужно оформить в виде функции в модуле DS18B20 и далее после старта вызывать. Завтра выложу вам готовый скомпилированный пример, сегодня не успеваю
0
20.04.2017, 18:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2017, 18:11

Датчик температуры DS18B20: на выходе неверные данные
Вечер добрый. Подскажите как решить проблему с датчиком температуры. В общем если не углубляться,...

СМА Whirlpool AWE 6515 12NC-859365184057, Нужна прошивка, фьюзы процессора и схема подключения к программатору
Уважаемые коллеги. Нужна прошивка, фьюзы процессора atmega 32l и схема подключения субмодуля к...

Как повысить скорость снятия температуры с датчика DS18B20?
Работаю над неким проэктом где очень важно максимально точно поддерживать температуру. Столкнулся с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.