В данной статье пойдет речь о том, как подключить датчик температуры DS18B20 к ATtiny2313 и отображать данные на ЖКИ-дисплее 16×1 на базе HD44780. Для проверки работоспособности программы и схемы я использовал эмулятор Proteus 7 (ISIS 7 Professional). Код программы (проект в Atmel Studio 7 целиком) вы сможете скачать по ссылке в конце статьи. Прошивку (.hex файл) можно установить и на реальный микроконтроллер ATtiny2313, программа будет работать нормально, главное не забыть менять фьюзы: CKSEL3…0 = 0100 – Внутренний тактовый генератор — частота 8 МГц и поставить галочку на SCKDIV8 – деление тактовой частоты на 8.
- 1 Цифровой датчик температуры DS18B20
- 2 Пример программы в Atmel Studio 7
- 3 Схема подключения LSD дисплея на базе HD44780 и датчика температуры DS18B20 к ATtiny2313 в ISIS 7 Professional — Proteus. Симуляция.
- 4 Купить ATTINY2313A на Aliexpress
- 5 Купить LCD1602 HD44780 на Aliexpress
- 6 Купить DS18B20 на Aliexpress
- 7 Похожие записи
Цифровой датчик температуры DS18B20
DS18B20 цифровой датчик температуры (термометр) с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Все процессы на шине управляются центральным микропроцессором: AVR, PIC, Arduino, STM, Raspberry Pi и др..
Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных («parasite power»), при отсутствии внешнего источника напряжения.
Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20, распределенных по большому участку.
Смотрите также:
Подключение LCD на базе HD44780 к ATmega16 (LM016L LCD 16×2)
Мигание светодиодом на ATmega16/32
Atmel Studio 7 — Создание нового проекта
Характеристики
Диапазон измеряемых температур | −55…+125 °C |
Точность | ±0,5°C (в пределах −10…+85 °C) |
Время получения данных | 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении |
Напряжение питания | 3–5.5 В |
Потребляемый ток при бездействии | 750 нА |
Потребляемый ток при опросе | 1 мА |
Подключение
Герметичный датчик на основе микросхемы DS18B20 можно подключить двумя способами:
- По трём проводам: питание (красный), земля (чёрный) и сигнал (белый).
- По двум проводам: земля и сигнал. В этом случае датчик изредка может давать неверные показания, которые легко исключить из конечного результата фильтрацией.
Независимо от способа подключения, сигнальный провод необходимо соединить с питанием через резистор 4,7 кОм. При подключении только одного датчика, подойдёт и резистор на 10 кОм.
Назначение выводов
SO* | SOP* | TO-92 | СИМВОЛ | ОПИСАНИЕ |
---|---|---|---|---|
5 | 4 | 1 | GND | Общий. |
4 | 1 | 2 | DQ | Вывод данных ввода/вывода (Input/Output pin). Open-drain 1-Wire interface pin. По этой линии подается питание в режиме работы с паразитным питанием. |
3 | 8 | 3 | VDD | VDD ножка питания. Для режима работы с паразитным питание VDD необходимо соединить с общим проводом. |
*Все остальные выводы должны оставаться не подключенными.
Пример программы в Atmel Studio 7
ds18b20.h
#ifndef DS18B20_H_ #define DS18B20_H_ #include <avr/io.h> // установки подключения к DS18B20 #define DS18B20_PORT PORTB #define DS18B20_DDR DDRB #define DS18B20_PIN PINB #define DS18B20_DQ PB7 // команды #define DS18B20_CMD_CONVERTTEMP 0x44 #define DS18B20_CMD_RSCRATCHPAD 0xbe #define DS18B20_CMD_WSCRATCHPAD 0x4e #define DS18B20_CMD_CPYSCRATCHPAD 0x48 #define DS18B20_CMD_RECEEPROM 0xb8 #define DS18B20_CMD_RPWRSUPPLY 0xb4 #define DS18B20_CMD_SEARCHROM 0xf0 #define DS18B20_CMD_READROM 0x33 #define DS18B20_CMD_MATCHROM 0x55 #define DS18B20_CMD_SKIPROM 0xcc #define DS18B20_CMD_ALARMSEARCH 0xec // остановить любое прерывание во время чтения данных с DS18B20 #define DS18B20_STOPINTERRUPTONREAD 1 //functions extern double getTempDS18B20(); #endif
ds18b20.c
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "ds18b20.h" /* * ds18b20 - инициализация */ uint8_t resetDS18B20() { uint8_t i; // импульс сброса, минимум 480?s DS18B20_PORT &= ~(1 << DS18B20_DQ); DS18B20_DDR |= (1 << DS18B20_DQ); // выход _delay_us(480); // Когда DS18B20 обнаруживает положительный перепад, он ждет от 15?s до 60?s DS18B20_DDR &= ~(1 << DS18B20_DQ); // вход _delay_us(60); // и затем передает импульс присутствия, перемещая шину в логический «0» на длительность от 60?s до 240?s. i = (DS18B20_PIN & (1 << DS18B20_DQ)); _delay_us(420); //return the read value, 0=ok, 1=error return i; } /* * написать один бит */ inline void writeBitDS18B20(uint8_t bit) { // логический «0» на 1?s DS18B20_PORT &= ~(1 << DS18B20_DQ); DS18B20_DDR |= (1 << DS18B20_DQ); // выход _delay_us(1); // если нужно написать 1, нужно освободить линию (если не - держать низкий уровень) if (bit) { DS18B20_DDR &= ~(1 << DS18B20_DQ); // вход } // ждать 60?s и освободить линию _delay_us(60); DS18B20_DDR &= ~(1 << DS18B20_DQ); // вход } /* * прочитать один бит */ uint8_t readBitDS18B20(void) { uint8_t bit = 0; // логический «0» на 1?s DS18B20_PORT &= ~(1 << DS18B20_DQ); DS18B20_DDR |= (1 << DS18B20_DQ); // вход _delay_us(1); // освободить линию и ждать 14?s DS18B20_DDR &= ~(1 << DS18B20_DQ); // вход _delay_us(14); // прочитать значение if (DS18B20_PIN & (1 << DS18B20_DQ)) { bit = 1; } // ждать 45?s и вернуть значение _delay_us(45); return bit; } /* * написать один байт */ void writeByteDS18B20(uint8_t byte) { uint8_t i = 8; while (i--) { writeBitDS18B20(byte & 1); byte >>= 1; } } /* * прочитать один байт */ uint8_t readByteDS18B20(void) { uint8_t i = 8, n = 0; while (i--) { n >>= 1; n |= (readBitDS18B20() << 7); } return n; } /* * получить температуру */ double getTempDS18B20() { uint8_t temperatureL; uint8_t temperatureH; double retd = 0; if (DS18B20_STOPINTERRUPTONREAD == 1) { cli(); } resetDS18B20(); // сброс writeByteDS18B20(DS18B20_CMD_SKIPROM); // пропуск ПЗУ(ROM) writeByteDS18B20(DS18B20_CMD_CONVERTTEMP); // начать преобразование показаний температуры while (!readBitDS18B20()); // ждать, пока преобразование не завершится resetDS18B20(); // сброс writeByteDS18B20(DS18B20_CMD_SKIPROM); // пропуск ПЗУ(ROM) writeByteDS18B20(DS18B20_CMD_RSCRATCHPAD); // читать scratchpad // прочитать 2 байта из scratchpad temperatureL = readByteDS18B20(); temperatureH = readByteDS18B20(); if (DS18B20_STOPINTERRUPTONREAD == 1) { sei(); } // преобразовать полученное 12 битное значение retd = ((temperatureH << 8) + temperatureL) * 0.0625; return retd; }
main.c
// site: http://micro-pi.ru // подключение LSD на базе HD44780 и DS18B20 к ATtiny2313 #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <math.h> #include "ds18b20.h" #include "LCD.h" /* * -123.4 * numbers[0] = 123 * numbers[1] = 4 */ inline void explodeDoubleNumber(int* numbers, double flt) { /* * Функция abs() вычисляет абсолютное значение и возвращает модуль значения flt (|flt|). */ numbers[0] = abs((int) flt); /* из -123.4 получаем 123 */ numbers[1] = abs((int) ((flt - ((int) flt)) * 10)); /* из -123.4 получаем 4 */ } inline void printTemp(double d) { char text[17] = "T="; int fs[2]; char num[5]; explodeDoubleNumber(fs, d); if (d < 0) { strcat(text, "-"); } itoa(fs[0], num, 10); strcat(text, num); strcat(text, "."); itoa(fs[1], num, 10); strcat(text, num); strcat(text, "'C"); lcdClear(); lcdGotoXY(0, 0); lcdPuts(text); } int main(void) { _delay_ms(100); lcdInit(); lcdClear(); lcdSetDisplay(LCD_DISPLAY_ON); lcdSetCursor(LCD_CURSOR_OFF); while (1) { double d = getTempDS18B20(); printTemp(d); _delay_ms(1000); } }
*библиотека для работы с LSD дисплеем находится в архив проекта. Скачать можно по ссылке ниже.
Схема подключения LSD дисплея на базе HD44780 и датчика температуры DS18B20 к ATtiny2313 в ISIS 7 Professional — Proteus. Симуляция.
Соединяем все компоненты так, как указано на картинке. Если не знаете как сделать проект в Протеус, переходим на страницу Мигание светодиодом на ATmega16/32.
В микроконтроллере ATtiny2313 заводская установленная частота внутреннего RC генератора равняется 8000000Гц (8МГц), также по умолчанию установлен фьюз деления частоты — CLKDIV8 (Clock Divide by 8), поэтому реальная рабочая частота кристалла 1000000Гц (1МГц). По этому не забываем снять этот фьюз.
Температура ниже нуля
Температура выше нуля
Скачать:
DS18B20 — документация на русском (datasheet ru)
проект в Atmel Studio 7 DS18B20 + LCD HD44780 + ATtiny2313
проект в Proteus 7 DS18B20 + LCD HD44780 + ATtiny2313
online pharmacies legitimate
sildenafil dose
магазин аккаунтов маркетплейс для реселлеров
платформа для покупки аккаунтов https://marketplace-akkauntov-top.ru/
продажа аккаунтов соцсетей аккаунты с балансом
Account Selling Platform Account Buying Service
Website for Selling Accounts Account Sale
Database of Accounts for Sale Account Catalog
Accounts for Sale Account exchange
Account Catalog Gaming account marketplace
Account market socialmediaaccountsshop.com
Account Purchase Account trading platform
Account market Sell Account
account catalog sell account
verified accounts for sale socialaccountssale.com
account sale account acquisition
secure account purchasing platform account sale
accounts for sale find accounts for sale
gaming account marketplace website for buying accounts
marketplace for ready-made accounts account marketplace
account buying service account selling platform
website for selling accounts marketplace for ready-made accounts
gaming account marketplace account trading platform
account acquisition account trading service
account trading platform profitable account sales
verified accounts for sale sell account
accounts marketplace account trading service
social media account marketplace buy pre-made account
account selling platform account marketplace
buy pre-made account account market
sell accounts database of accounts for sale
account marketplace account exchange service
verified accounts for sale database of accounts for sale