В этой статье я рассмотрю довольно популярный датчик влажности и температуры DHT22 (AM2302). Датчик измеряет влажность воздуха в пределах 0…99,9 % с погрешностью ±2 %, а также температуру от -40…80 °C с погрешностью ±0,5 °C. Напряжение питания может составлять 3,3…5,5 В, кроме этого датчик обладает низким энергопотреблением, в спящем режиме ток потребления составляет всего 15 мкА. Связь с датчиком осуществляется по однопроводной линии, протокол связи схож с 1-Wire, но более упрощенный. Датчик DHT22 отличается от своего предшественника DHT11 более широкими диапазоном измеряемых величин. Я заказывал датчик здесь.
Теперь рассмотрим подробней протокол связи, на следующем рисунке представлена диаграмма передачи данных с временными характеристиками:
Для инициализации передачи данных, ведущее устройство (микроконтроллер) должно послать стартовый сигнал, путем установки низкого логического уровня на шине данных (SDA), длительностью 0,8…20 мс (Tbe). После передачи стартового сигнала микроконтроллер должен освободить шину данных (перенастройка линии ввода/вывода на вход) и перейти к опросу ее состояния. В ответ на стартовый сигнал, датчик последовательно устанавливает низкий и высокий логические уровни на шине данных, длительность каждого из которых составляет 80 мкс (Trel, Treh). Далее датчик выдает 5 информационных байтов (40 бит), содержащих данные о влажности и температуре. Байты передаются стандартно, старшим битом вперед. Сначала передается старший байт влажности (Humidity high), затем младший байт влажности (Humidity low), далее старший (Temperature high) и младший (Temperature low) байты температуры, и последний байт содержит контрольную сумму (Parity bit). Таким образом влажность и температура представлены двухбайтными числами, для преобразования необходимо поделить эти числа на 10. Например, получили двухбайтное число 638, делим на 10 и получим искомое значение 63,8; данное преобразование справедливо для влажности и температуры. При отрицательной температуре старший бит в байте Temperature high устанавливается в 1.
Бит данных представляет собой последовательность низкого и высокого логических уровней имеющих фиксированную длительность. Бит “0” передается в виде последовательности низкого лог. уровня длительностью 50 мкс (Tlow) и высокого лог. уровня с длительностью 27 мкс (Th0). Бит “1” состоит из низкого и высокого лог. уровней с длительностями 50 (Tlow) и 70 мкс (Th1). Таким образом распознать значение бита можно по длительности высокого лог. уровня.
Минимальный интервал чтения данных с датчика должен составлять 2 секунды, при частом обращении увеличивается погрешность измерений. Максимальная длина соединительного кабеля составляет 30 метров при напряжении питания 5В, при напряжении в 3,3В длина кабеля не должна превышать 1 м.
Я подключил датчик DHT22 к микроконтроллеру PIC16F628A, для отображения значений температуры и влажности использовал модуль семисегментного индикатора на микросхеме MAX7219. Ниже приведена схема подключения:
Линию данных SDA необходимо подтянуть к положительному полюсу источника питания через резистор номиналом 5,1 кОм, как это делается, например для 1-Wire или I2C.
Код программы для микроконтроллера PIC16F628A приведен ниже:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 |
#include <P16F628A.INC> LIST p=16F628A __CONFIG H'3F10' ;Конфигурация микроконтроллера Sec equ 20h ;регистры хранения временных данных для Sec1 equ 21h ;подпрограмм паузы Sec2 equ 22h ; scetbit equ 23h ;регистр счета для передачи по протоколу spi shet equ 24h ;регистр хранения временных данных bcd1 equ 25h ;регистры хранения двоично-десятичных значений bcd2 equ 26h ;двоичного числа bcd3 equ 27h ; rezHH equ 28h ;промежуточные регистры для преобразования rezLL equ 29h ; edin equ 2Ah ;регистры хранения десятичных значений desiat equ 2Bh ;двоичного числа drob equ 2Ch ; dat_ind equ 2Dh ;регистр данных для передачи по протоколу spi adr_ind equ 2Eh ;регистр адреса для передачи по протоколу spi vlag_H equ 2Fh ;регистры хранения значений влажности vlag_L equ 30h ; temp_H equ 31h ;регистры хранения значений температуры temp_L equ 32h ; res_tmp equ 33h ;промежуточные регистры счета tmp_rsv equ 34h ; tmp equ 35h ; flag equ 7Dh ;регистр флагов W_TEMP equ 7Eh ;регистр для хранения значения аккумулятора W STATUS_TEMP equ 7Fh ;регистр для хранения значения STATUS #DEFINE datchik PORTB,4 ;линия передачи данных датчика DHT22 #DEFINE datai PORTB,5 ;линия входа данных драйвера MAX7219 #DEFINE cs PORTB,6 ;линия выбора драйвера MAX7219 #DEFINE clk PORTB,7 ;линия тактирования драйвера MAX7219 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;начать выполнение программы с адреса 0000h goto Start ;переход на метку Start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Основная программа Start movlw b'01000000' ;сброс регистра PORTB movwf PORTB ; movlw b'00000111' ;выключение компараторов movwf CMCON ; bsf STATUS,RP0 ;выбрать 1-й банк movlw b'00011111' ;настройка линий ввода\вывода порта B movwf TRISB ;RB5-RB7 на выход, остальные на вход bcf STATUS,RP0 ;выбрать 0-й банк clrf flag ;очистка регистра флагов call init_lcd ;вызов подпрограммы инициализации драйвера(MAX7219) call signal_not ;вызоВ подпрограммы вывода знаков тире "- - -" на индикаторы met_3 call izm_datchik ;вызов подпрограммы измерения влажности и температуры btfsc flag,0 ;опрос флага ошибки goto met_1 ;ошибка: переход на метку met_1 call vivod ;вызов подпрограммы вывода значений темп. и влаж. на индикаторы goto met_2 ; met_1 call signal_not ;вызоВ подпрограммы вывода знаков тире "- - -" на индикаторы met_2 call pause ;вызоВ подпрограммы паузы goto met_3 ;переход на метку met_3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; izm_datchik bcf flag,0 ;сброс флага ошибки датчика call ds_comm ;вызов подпрограммы ds_comm call paus_datch ;пауза 1,5 мс инициализация датчика call ds_data ;вызов подпрограммы ds_data movlw .20 ;время ожидания ответа от датчика 100 мкс movwf shet ; init_ansv btfss datchik ;ожидание ответа от датчика goto end_ansv ;есть ответ от датчика: переход на метку end_ansv decfsz shet,F ; goto init_ansv ; bsf flag,0 ;нет ответа от датчика, установка флага ошибки return ;выход из подпрограммы end_ansv clrf tmp ;очистка вспомогательного регистра ansv_1 btfsc datchik ;ожидание освобождения шины данных от датчика goto ansv_2 ;шина данных от датчика освобождения: переход на метку end_1 incfsz tmp,F ; goto ansv_1 ; bsf flag,0 ;нет освобождения шины данных от датчика (1,2 мс), установка флага ошибки return ;выход из подпрограммы ansv_2 clrf tmp ;очистка вспомогательного регистра end_1 btfss datchik ;ожидание установки шины данных от датчика в 0 goto end_2 ;шина данных от датчика установлена в 0: переход на метку end_2 incfsz tmp,F ; goto end_1 ; bsf flag,0 ;нет установки шины данных от датчика в 0,(1,2 мс) установка флага ошибки return ;выход из подпрограммы end_2 call reseive ;вызов подпрограммы приема байта данных от датчика movwf vlag_H ;запись целого значения влажности в регистр vlag_H call reseive ;вызов подпрограммы приема байта данных от датчика movwf vlag_L ;запись дробного значения влажномти в регистр vlag_L call reseive ;вызов подпрограммы приема байта данных от датчика movwf temp_H ;запись целого значения температуры в регистр temp_H call reseive ;вызов подпрограммы приема байта данных от датчика movwf temp_L ;запись дробного значения температуры в регистр temp_L call reseive ;вызов подпрограммы приема байта данных от датчика return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма вывода десятичного значения задержки (эха) на цифровое табло vivod movf vlag_H,W ;преобразование двоичного значение влажности movwf rezHH ;в десятичное movf vlag_L,W ; movwf rezLL ; call bin2bcd ; movlw 0x01 ;Вывод значения регистра drob на 1-й индикатор movwf adr_ind ; movf drob,W ; movwf dat_ind ; call send ; bsf edin,7 movlw 0x02 ;Вывод значения регистра edin на 2-й индикатор movwf adr_ind ; movf edin,W ; movwf dat_ind ; call send ; movlw .0 ;проверка разряда десятков влажности xorwf desiat,W ; btfsc STATUS,Z ; goto vivod_1 ;влажность меньше 10%: переход на метку vivod_1 movlw 0x03 ;Вывод значения регистра desiat на 3-й индикатор movwf adr_ind ; movf desiat,W ; movwf dat_ind ; call send ; goto vivod_2 vivod_1 movlw 0x03 ;очистка 3-го индикатора movwf adr_ind ; movlw 0x0F ; movwf dat_ind ; call send ; vivod_2 btfsc temp_H,7 ;проверка отрицательной температуры bsf flag,1 ;темп. отрицательна установка флага отриц. температуры btfss temp_H,7 ; bcf flag,1 ;темп. положительна сброс флага отриц. температуры bcf temp_H,7 ; movf temp_H,W ;преобразование двоичного значение температуры movwf rezHH ;в десятичное movf temp_L,W ; movwf rezLL ; call bin2bcd ; movlw 0x05 ;Вывод значения регистра drob на 5-й индикатор movwf adr_ind ; movf drob,W ; movwf dat_ind ; call send ; bsf edin,7 movlw 0x06 ;Вывод значения регистра edin на 6-й индикатор movwf adr_ind ; movf edin,W ; movwf dat_ind ; call send ; movlw .0 ;проверка разряда десятков температуры xorwf desiat,W ; btfsc STATUS,Z ; goto vivod_3 ;температура меньше 10 градусов: переход на метку vivod_3 movlw 0x07 ;Вывод значения регистра desiat на 7-й индикатор movwf adr_ind ; movf desiat,W ; movwf dat_ind ; call send ; goto vivod_4 ; vivod_3 movlw 0x07 ;очистка 7-го индикатора movwf adr_ind ; movlw 0x0F ; movwf dat_ind ; call send ; vivod_4 btfss flag,1 ;проверка флага отриц. температуры goto vivod_5 ; movlw 0x08 ;вывод тире на 8-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; return ; vivod_5 movlw 0x08 ;очистка 8-го индикатора movwf adr_ind ; movlw 0x0F ; movwf dat_ind ; call send ; return ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; reseive movlw .8 ;подпрограмма приема байта данных от датчика movwf shet ; rsv_4 rlf res_tmp,F ; clrf tmp_rsv ; clrf tmp ; rsv_1 btfsc datchik ; goto rsv_2 ; incfsz tmp,F ; goto rsv_1 ; goto rsv_5 ;нет ответа от датчика (1,2 мс), переход на метку rsv_5 rsv_2 btfss datchik ; goto rsv_3 ; incfsz tmp_rsv,F ; goto rsv_2 ; rsv_5 bsf flag,0 ;нет ответа от датчика,(1,2 мс) установка флага ошибки return ;выход из подпрограммы ; rsv_3 movf tmp_rsv,W ; sublw .8 ; btfss STATUS,C ; bsf res_tmp,0 ; btfsc STATUS,C ; bcf res_tmp,0 ; decfsz shet,F ; goto rsv_4 ; movf res_tmp,W ; return ;выход из подпрограммы ds_comm bcf datchik ;запись нуля в выходную защелку PORT,2 bsf STATUS,RP0 ; bcf TRISB,4 ;настройка линии PORTB,4 на выход bcf STATUS,RP0 ; return ;выход из подпрограммы ds_data bsf STATUS,RP0 ; bsf TRISB,4 ;настройка линии PORTB,4 на вход bcf STATUS,RP0 ; return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; bin2bcd movlw .16 ;Подпрограмма преобразования двоичного числа movwf shet ;в десятичное clrf bcd1 ;Двухбайтное число предварительно загружается clrf bcd2 ;в регисты rezHH, rezLL clrf bcd3 ;Результат преобразования: goto start_1 ;единицы в младшем полубайте bcd3 ;десятки в старшем полубайте bcd3 adjdec movlw 0x33 ;сотни в младшем полубайте bcd2 addwf bcd1,F ;тысячи в старшем полубайте bcd2 addwf bcd2,F ;десятки тысяч в младшем полубайте bcd1 addwf bcd3,F ; ; movlw 0x03 ; btfss bcd1,3 ; subwf bcd1,F ; btfss bcd2,3 ; subwf bcd2,F ; btfss bcd3,3 ; subwf bcd3,F ; ; movlw 0x30 ; btfss bcd1,7 ; subwf bcd1,F ; btfss bcd2,7 ; subwf bcd2,F ; btfss bcd3,7 ; subwf bcd3,F ; ; start_1 rlf rezLL,F ; rlf rezHH,F ; rlf bcd3,F ; rlf bcd2,F ; rlf bcd1,F ; decfsz shet,F ; goto adjdec ; ; movf bcd3,W ;копирование значения единиц из младшего andlw b'00001111' ;полубайта bcd3 в регистр drob movwf drob ; swapf bcd3,W ;копирование значения десятков из старшего andlw b'00001111' ;полубайта bcd3 в регистр edin movwf edin ; movf bcd2,W ;копирование значения сотен из младшего andlw b'00001111' ;полубайта bcd2 в регистр desiat movwf desiat ; return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма вывода символов тире на 1-3, 5-7 индикаторы signal_not movlw 0x08 ;очистка 8-го индикатора movwf adr_ind ; movlw 0x0F ; movwf dat_ind ; call send ; movlw 0x07 ;вывод тире на 7-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; movlw 0x06 ;вывод тире на 6-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; movlw 0x05 ;вывод тире на 5-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; movlw 0x04 ;очистка 4-го индикатора movwf adr_ind ; movlw 0x0F ; movwf dat_ind ; call send ; movlw 0x03 ;вывод тире на 3-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; movlw 0x02 ;вывод тире на 2-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; movlw 0x01 ;вывод тире на 1-й индикатор movwf adr_ind ; movlw 0x0A ; movwf dat_ind ; call send ; return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма инициализации драйвера(MAX7219) цифрового табло init_lcd call pauslcd ;вызов подпрограммы паузы 2 мс movlw 0x0F ;выключить тестовый режим movwf adr_ind ; movlw 0x00 ; movwf dat_ind ; call send ; movlw 0x0C ;включение индикатора movwf adr_ind ; movlw 0x01 ; movwf dat_ind ; call send ; movlw 0x0A ;интенсивность 15/32 movwf adr_ind ; movlw 0x07 ; movwf dat_ind ; call send ; movlw 0x09 ;использовать BCD Code B для всех индикаторов movwf adr_ind ; movlw 0xFF ; movwf dat_ind ; call send ; movlw 0x0B ;использовать 8 индикаторов movwf adr_ind ; movlw 0x07 ; movwf dat_ind ; call send ; return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма отправки 2-х байт на драйвер (MAX7219) цифрового табло по пртоколу SPI send bcf cs ;Сбросить линию выбора драйвера CS movlw .8 ;Отправка содержимого адресного байта adr_ind movwf scetbit ; povtor bcf clk ; btfsc adr_ind,7 ; bsf datai ; btfss adr_ind,7 ; bcf datai ; bsf clk ; rlf adr_ind,F ; decfsz scetbit,F ; goto povtor ; movlw .8 ;Отправка содержимого байта данных dat_ind movwf scetbit ; povtr1 bcf clk ; btfsc dat_ind,7 ; bsf datai ; btfss dat_ind,7 ; bcf datai ; bsf clk ; rlf dat_ind,F ; decfsz scetbit,F ; goto povtr1 ; bcf clk ; bsf cs ;установить в 1 линию выбора драйвера CS return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; paus_datch movlw .2 ;подпрограмма пауза 1,5 мс movwf Sec1 ; p_d2 movlw .255 ; movwf Sec ; p_d1 decfsz Sec,F ; goto p_d1 ; decfsz Sec1,F ; goto p_d2 ; return ;выход из подпрограммы pauslcd movlw .4 ;подпрограмма пауза 2 мс movwf Sec1 ; p_l2 movlw .166 ; movwf Sec ; p_l1 decfsz Sec,F ; goto p_l1 ; decfsz Sec1,F ; goto p_l2 ; return ;выход из подпрограммы pause movlw .25 ; movwf Sec2 ; p_3 movlw .255 ;подпрограмма пауза 5 сек movwf Sec1 ; p_1 movlw .255 ; movwf Sec ; p_2 decfsz Sec,F ; goto p_2 ; decfsz Sec1,F ; goto p_1 ; decfsz Sec2,F ; goto p_3 ; return ;выход из подпрограммы end ;конец всей программы ; |
После настройки внутренних регистров микроконтроллера, вызывается подпрограмма инициализации драйвера цифрового табло init_lcd, затем вызывается подпрограмма вывода символов тире (signal_not), на индикаторы. Далее вызывается подпрограмма измерения температуры и влажности izm_datchik, в которой выполняется загрузка 4 байт данных от датчика, байт контрольной суммы принимается, но не сохраняется, полученные байты сохраняются в регистрах vlag_H, vlag_L, temp_H, temp_L. Если в процессе обмена данными датчик перестанет отвечать, устанавливается флаг ошибки flag,0 и выход из подпрограммы. После возвращения из подпрограммы izm_datchik, выполняется проверка флага ошибки, если обнаружена ошибка, вызывается подпрограмма вывода символов тире (signal_not) на индикаторы. В случае отсутствия ошибок вызывается подпрограмма вывода данных на индикаторы (vivod). В подпрограмме vivod двоичные значения влажности (vlag_H, vlag_L) и температуры (temp_H, temp_L) с помощью подпрограммы bin2bcd преобразуются в десятичные по разрядам (desiat, edin, drob), для дальнейшего вывода на индикаторы. Температура выводится на левой половине цифрового табло, а влажность на правой. После вывода следует пауза в 5 секунд и возврат на очередное измерение по круговому циклу.
Датчик DHT22 прост в подключении, обладает неплохой точностью, его можно использовать в автоматизированных системах контроля влажности и т.д.
На следующем видеоролике можно увидеть датчик DHT22 в рабочем режиме:
Предлагаю такую идею, PIC +DHT+RGB Led-отображение влажности цветом красный-оранж…синий.Светодиод в прозрачную фигурку, индикатор температуры в подставу и
не надо заморачиваться с процентами влажности, глянул на фигурку и все понятно. Как-то так…
Да, неплохая идея, плавно менять цвета в зависимости от влажности, красному цвету высокую влажность, синему цвету низкую, середина (влажность 50%) придется на желто-зеленый участок.
Может быть низкая влажность красн= оранж=желт, нормальная зелено=синяя, высокая фиолетовая.
Пачему у меня при меделировании виходит што на диспее только 8.8.8.8.8.8.8.8.
Я моделировать не пробовал, а что в Proteus есть модель светодиодного табло на MAX7219? Или вы по отдельности соединили все элементы?
нет я по схеме собрал идикатор сам
Пришлите мне на почту (указана на странице “Об авторе”) вашу модель, я посмотрю
модель чего???
ну вы же в Proteus моделировали? файл проекта имеется в виду.
готово
У вас много ошибок в модели, неправильно выбран индикатор, нужен с общим катодом, а у вас с общим анодом. Неправильный порядок подключения выходов DIGX драйвера MAX7219 к разрядам индикатора (нужно соединять в обратном порядке DIG7 соответствует 1 индикатору и т.д.). В свойствах микроконтроллера неправильно указана частота и конфигурация, нужно 4МГц и конфигурацию 3F10. У меня в прошивке длительность стартового сигнала для инициализации DHT22 установлена 1.5мс, в свойствах модели датчика также необходимо изменить это значение на 1ms (параметр Time Select Low).
Но несмотря на это, мне не удалось запустить вашу модель, я заново собрал новый проект, который выложил в конце статьи, версия Proteus 8.1. В моей модели все работает, температура и влажность отображаются.
рабочая схема, точность показаний датчика хорошая. сравнивал с домашним “механическим” прибором (влажность). автору большое спасибо. до этой делал две штуки на меге и тиньке. пришлось разобрать на запчасти, т.к. точность по влаге была “пол-потолок”. грешил на датчик, но судя по всему были ошибки в прошивках. здесь без проблем на том же датчике. температура тоже в норме. единственное пожелание нельзя ли сделать для удобства чтения сначала индикацию символа temp слева и hum справа, допустим 3сек индикации букв и 10сек – цифр.
Здравствуйте!
Собрал, прошил. Горят все сегменты и ни какой реакции.
В чём может быть проблема?
Я извиняюсь!
Схема и прошивка рабочие.
Сам перепутал вход и выход индикатора.