0 / 0 / 0
Регистрация: 27.01.2015
Сообщений: 4
1

Чтение датчика температуры и влажности DHT-11 (ATMega16)

03.03.2015, 19:22. Показов 4256. Ответов 2
Метки нет (Все метки)

Есть почти готовая программа на мкк атмега16, с подключенным к ней датчиком DHT11, единственное что не так, на мой взгляд все правильно, не показывает точную температуру, например на датчике 30- он выводит 52, несколько раз пересмотрел программу и никак не могу понять в чем дело, может кто подскажет, мало ли я вообще не так написал. Вложу архив, а в нем проект в проеусе8, там и схема и сама программа.Ссылка на датчик http://open.e-voron.dp.ua/dht1... peraturyi/
Вложения
Тип файла: rar термометр.rar (22.6 Кб, 57 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2015, 19:22
Ответы с готовыми решениями:

Алгоритм работы датчика температуры и влажности DHT11
Здравствуйте! Решил поделиться алгоритмом работы датчика DHT11. Может быть кому-нибудь пригодится....

PIC16F690. Чтение датчика температуры и влажности DHT-11
pic16f690 не читает DHT11 проблема следующего характера... есть библиотека DHT11 нормально...

ИОН для датчика влажности
есть HIH-4010, нужно как-то запитать и его, и опору для АЦП меги. питаться всё будет от USB (т.е....

Передача данных с датчика влажности в Интернет/Интранет
НЕ АРДУИНО. Есть датчик влажности и микроконтроллер, я хочу чтобы данные с датчика передавались на...

2
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,161
Записей в блоге: 1
03.03.2015, 19:39 2
- схему приложить в явном виде.
- программу приложить в явном виде.

30-
30 c минусом? 30 градусов? Диапазон измерения температуры данного датчика 0...+50°С с точностью ±2°С.

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
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
//
//    FILE: dht11.cpp
// VERSION: 0.4.1
// PURPOSE: DHT11 Temperature & Humidity Sensor library for Arduino
// LICENSE: GPL v3 ([url]http://www.gnu.org/licenses/gpl.html[/url])
//
// DATASHEET: [url]http://www.micro4you.com/files/sensor/DHT11.pdf[/url]
//
// HISTORY:
// George Hadjikyriacou - Original version (??)
// Mod by SimKard - Version 0.2 (24/11/2010)
// Mod by Rob Tillaart - Version 0.3 (28/03/2011)
// + added comments
// + removed all non DHT11 specific code
// + added references
// Mod by Rob Tillaart - Version 0.4 (17/03/2012)
// + added 1.0 support
// Mod by Rob Tillaart - Version 0.4.1 (19/05/2012)
// + added error codes
//
 
#include "dht11.h"
 
// Return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht11::read(int pin)
{
        // BUFFER TO RECEIVE
        uint8_t bits[5];
        uint8_t cnt = 7;
        uint8_t idx = 0;
 
        // EMPTY BUFFER
        for (int i=0; i< 5; i++) bits[i] = 0;
 
        // REQUEST SAMPLE
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
        delay(18);
        digitalWrite(pin, HIGH);
        delayMicroseconds(40);
        pinMode(pin, INPUT);
 
        // ACKNOWLEDGE or TIMEOUT
        unsigned int loopCnt = 10000;
        while(digitalRead(pin) == LOW)
                if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
 
        loopCnt = 10000;
        while(digitalRead(pin) == HIGH)
                if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
 
        // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
        for (int i=0; i<40; i++)
        {
                loopCnt = 10000;
                while(digitalRead(pin) == LOW)
                        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
 
                unsigned long t = micros();
 
                loopCnt = 10000;
                while(digitalRead(pin) == HIGH)
                        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
 
                if ((micros() - t) > 40) bits[idx] |= (1 << cnt);
                if (cnt == 0)   // next byte?
                {
                        cnt = 7;    // restart at MSB
                        idx++;      // next byte!
                }
                else cnt--;
        }
 
        // WRITE TO RIGHT VARS
        // as bits[1] and bits[3] are allways zero they are omitted in formulas.
        humidity    = bits[0]; 
        temperature = bits[2]; 
 
        uint8_t sum = bits[0] + bits[2];  
 
        if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
        return DHTLIB_OK;
}
//
// END OF FILE
Вложения
Тип файла: zip dht11.zip (2.6 Кб, 35 просмотров)
0
0 / 0 / 0
Регистрация: 27.01.2015
Сообщений: 4
03.03.2015, 20:21  [ТС] 3
Вот схема и программа:
Assembler
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
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
.device ATMega16
.include "m16def.inc"
.org 0x00 
ldi r16, low (ramend)
out SPL, r16
ldi r16, high (ramend)
out SPH, r16
.cseg
////////////////////////////////////////////////////////////////////////////////////////////////настройка портов
ldi r16,0b11111111
out ddrb,r16
nop
ldi r16,0b00000111
out ddrd,r16
nop
ldi r16,0b00000001
sbi porta,0
out ddra,r16
nop
///Инициализация дисплея//////////////////////////////////////////////////////////////////////////////////////////0,5
call time
call time
///2//////////////////////////////////////////////////вывод в контрллер
ldi r17, 0b00110000
ldi r18, 0b00000000
call strob
////////////////////////////////////////////////////////////////////////////////////////////////4,1мс
ldi r16,0b00000101
out tccr0,r16; упр модулем таймера 
ldi r17,224
out tcnt0,r17 ; счетный рег
four: 
in r18,tifr
sbrs r18,tov0
jmp four
ldi r16, 0b00000000
out tccr0, r16
ldi r17, 0000000001
out tifr,r17
/////////////////////////////////////////////4////////////////////////////////////////////////////
ldi r17, 0b00110000
ldi r18, 0b00000000
call strob
//////////////////////////////////////////////////////////////////////////////////////////////100мкс
call z50
call z50
/////////////////////////////////////////////6///////////////////////////////////////////////////
ldi r17, 0b00110000
ldi r18, 0b00000000
call strob
///////////////////////////////////////////////////////////////////////////////////////////////200
call z50
call z50
call z50
call z50
////////////////////////////////////////////////8///////////////////////////////////////////////////
ldi r17, 0b00111100
ldi r18, 0b00000000
call strob
////////////////////////////////////////////////////200////////////////////////////////////////////////////
call z50
call z50
call z50
call z50
///////////////////////////////////////////////////////10///////////////////////////////////////////////////
ldi r17, 0b00001110
ldi r18, 0b00000000
call strob
//////////////////////////////////////200//////////////////////////////////////////////////////////////// 
call z50 
call z50
call z50 
call z50 
 ////////////////////////////////////////////////////12///////////////////////////////////////////////////
ldi r17, 0b00000110
ldi r18, 0b00000000
call strob
 /////////////////////////////////////////////////////////////////////////////////////////////////////
ldi r25,0x80
ldi r26,0xc0
redr:
ldi r18, 0b00000100
mov r17,r25
call strob
call z50
ldi r18, 0b00000000
call strob
ldi r16,0b00000001
out tccr0,r16; упр модулем таймера 
ldi r17,0
out tcnt0,r17 ; счетный рег
f51: in r18,tifr
sbrs r18,tov0
jmp f51
ldi r16, 0b00000000
out tccr0, r16
ldi r17, 0000000001
out tifr,r17
 ldi r18, 0b00000101
 call strob 
 call z50
 /////////////////////////////////////////////////учтановка кода символа////////////////// 
jmp DHT11
//////////////////////////////////////////////////50mks//////////////////////////////////////////////
z50: ldi r16,0b00000001
out tccr0,r16; упр модулем таймера 
ldi r17,200
out tcnt0,r17 ; счетный рег
f50: in r18,tifr
sbrs r18,tov0
jmp f50
ldi r16, 0b00000000
out tccr0, r16
ldi r17, 0000000001
out tifr,r17
ret
////////////////////////////////////////////////////////////////////strob////////////////////////////////
strob: 
out portb,r17
out portd,r18
sbi portd, 2
nop
cbi portd, 2
nop
ret
DHT11:
prov:
cbi porta,0; уст  в 0
call time; сигнал старт 
sbi porta,0; уст в 1
ldi r16,0b00000000
out ddra,r16
call timer; ждем ответ от датчика сигнал "готовься к перадче" 
chek:
clr r17
clr r16
sbis pina,0;проверка закончился сигнал "готовься к передаче" или нет
jmp rep; да в таймер подсчета 50мкс   
jmp chek;иначе продолжаем ждать 
rep:
nop
nop
nop
sbis pina,0
jmp rep
shet:
nop
nop
nop 
inc r16
sbic pina,0
jmp shet
nop
nop
cpi r16,5
brlo zer
ori r25,1
zer: 
clr r16
inc r17
cpi r17,8
breq next
lsl r25
jmp rep
next:
clr r17 
clr r16
rep2:
nop
sbis pina,0
jmp rep2
shet2:
nop
inc r16
sbic pina,0
jmp shet2
nop    
cpi r16,5
brlo zer2
ori r24,1
zer2: 
clr r16
inc r17
cpi r17,8
breq next2
lsl r24
jmp rep2
next2: 
clr r17 
clr r16
rep3:
nop
sbis pina,0
jmp rep3
shet3:
nop 
inc r16
sbic pina,0
jmp shet3
nop
cpi r16,5
brlo zer3
ori r23,1
zer3: 
clr r16
inc r17
cpi r17,8
breq next3
lsl r23
jmp rep3
next3:
clr r17 
clr r16
rep4:
nop
sbis pina,0
jmp rep4
shet4:
nop
nop
inc r16
sbic pina,0
jmp shet4
cpi r16,5
brlo zer4
ori r22,1
zer4: 
clr r16
inc r17
cpi r17,8
breq next4
lsl r22
jmp rep4
next4:
clr r17 
clr r16
rep5:
nop
sbis pina,0
jmp rep5
shet5:
nop
inc r16
sbic pina,0
jmp shet5
cpi r16,5
brlo zer5
ori r21,1
zer5: 
clr r16
inc r17
cpi r17,8
breq preobr
lsl r21
jmp rep5
preobr:
CLR R28
CLR R29
.def RR3=r26
.def RR4=r27
.def RR1=r25
.def RR2=r24
.def RR31=r28
.def RR41=r29
.def RR11=r23
.def RR21=r22
LDI R21,0
AGAIN1:
lsl RR31
sbrc RR41,7
ORi RR31,1
lsl RR41
sbrc RR11,7
ORI RR41,1
lsl RR11
sbrc RR21,7
ORi RR11,1
lsl RR21
INC R21
CPI R21,16
BREQ ascii
///пРОВЕРКА rr4///
mov r20,RR41;проверка есть ли пять в младшем полубайте 
andi r20,0b00001111;1
LDI R19,3
cpi r20,5;сравнение с 5
BRLO PROVSTAR1
ADD R20,R19;Прибавить 3
;Проверить старший полубайт
PROVSTAR1: 
andi RR41,0b11110000;2
or RR41,R20
MOV R20,RR41;r5 <-r4
SWAP R20
ANDI R20,0B00001111;3
cpi r20,5;сравнение с 5
BRLO NEXT1
ADD R20,R19
NEXT1:
ANDI RR41,0B00001111;4
SWAP R20
OR RR41,R20
MOV R20,RR31
ANDI R20,0B00001111;5
CPI R20,5
BRLO NEXT21
ADD R20,R19
NEXT21: 
ANDI RR31,0B11110000;6
OR RR31,R20
MOV R20,RR31
SWAP R20
ANDI R20,0B00001111
CPI R20,5
BRLO NEXT31
ADD R20,R19
NEXT31:
ANDI RR31,0B00001111
SWAP R20
OR RR31,R20
jmp AGAIN1
time:
ldi r16,0b00000101
out tccr0,r16; упр модулем таймера 
ldi r17,238 ;18 ms
out tcnt0,r17 ; счетный рег
f35: in r18,tifr
sbrs r18,tov0
jmp f35
ldi r16, 0b00000000
out tccr0, r16
ldi r17, 0000000001
out tifr,r17
ret
timer:
ldi r16,110
out tcnt0,r16 ; счетный рег
ldi r16,0b00000001
out tccr0,r16; упр модулем таймера
k5: in r18,tifr
sbrs r18,tov0
jmp k5
ldi r16, 0b00000000
out tccr0, r16
ldi r16, 0000000001
out tifr,r16
ret
ascii:
call strob
call timer 
ldi r18, 0b00000100
ldi r17,0x80
call strob
call z50
ldi r17,0
ldi r18, 0b00000000
call z50
call z50
call strob
ldi r16,0b00000001
out tccr0,r16 
ldi r17,0
out tcnt0,r17 
f52: in r18,tifr
sbrs r18,tov0
jmp f52
ldi r16, 0b00000000
out tccr0, r16
ldi r17, 0000000001
out tifr,r17
ldi r18, 0b00000101
call strob 
call z50
/////Вывод на экран...
LDI r17,0x54
call strob 
call timer 
ldi r17,0x45 
call strob 
call timer 
ldi r17,0x4d
call strob
call timer 
ldi r17,0x50 
call strob 
call timer 
ldi r17,0x45 
call strob 
call timer 
ldi r17,0x52 
call strob 
call timer 
ldi r17,0x41 
call strob 
call timer 
ldi r17,0x54 
call strob 
call timer 
ldi r17,0x55 
call strob 
call timer 
ldi r17,0x52 
call strob 
call timer 
ldi r17,0x41 
call strob 
call timer 
ldi r18, 0b00000100
ldi r17,0xc0
call strob
call z50
ldi r17,0x20 
call strob 
call timer
ldi r17,0x20 
call strob 
call timer
ldi r17,0x20 
call strob 
call timer
ldi r17,0x20 
call strob 
call timer
ldi r17,0x20 
call strob 
call timer
mov r17,RR31
andi r17,0b11110000
swap r17 
ldi r30,0x30 
add r17,r30 
cpi r17,0x30
breq l
call strob
l:call timer
mov r17,RR31
andi r17,0b00001111
ldi r30,0x30
add r17,r30 
cpi r17,0x30
breq lk
call strob
lk: call timer
mov r17,RR41
andi r17,0b11110000
swap r17 
ldi r30,0x30 
add r17,r30 
call strob
call timer
ldi r17, 0xdf
call strob
call timer 
ldi r17,0x43
call strob
call timer
call time 
call time
clr r26
clr r27
clr r28 
clr r29
clr r25
clr r24
clr r23
clr r22
clr r21
clr r20
clr r19 
clr r17
clr r16
clr r18
jmp DHT11
Миниатюры
Чтение датчика температуры и влажности DHT-11 (ATMega16)  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2015, 20:21

Orange pi считывание датчиков температуры, влажности
Orange pi считывание датчиков температуры, влажности и так далее Есть orange pi можно ли...

BME280 сенсор давления температуры и влажности
Всем привет. Имею такую проблему с BME280 Все делаю по даташит. Температуру измеряет, а давление...

Датчики температуры, влажности и дыма в загородном доме
Всем доброго времени суток. Уже довольно давно хотел приступить к этой тематике и вот настало...

Датчик температуры и влажности CJMCU-1080 HDC1080 на ATtiny85
Всем привет. Решил сделать небольшую домашнюю метеостанцию. Есть приемник с экраном, куда...


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

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

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