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

DHT11 + avr

15.04.2014, 20:04. Просмотров 3961. Ответов 3
Метки нет (Все метки)

Моделирую в proteus.
При моделировании датчик не отвечает (не выставляет низкий уровень на шине)

Код:
Код
  .include "m16def.yms"

.def count=r18
.def temperat=r20;

risit:
ser r16;
out DDRB,r16;
clr r16;

ldi   r16,LOW(ROMEND) ;Initiate Stackpointer (for subroutines/interupts)
out   SPL,r16
ldi   r16,HIGH(ROMEND)
out   SPH,r16

jmp main

main:
cli

sbi PORTA,0;

ldi R24,125;
out PORTB,R24

ldi count,0;
ldi r16,1; PD.0 выход
out DDRA,r16;
cbi PORTA,0;прижимаем шину к земле
;out portB,r16

;ждем 25мс
;    delay loop generator
;     92160 cycles:
; -----------------------------
; delaying 92157 cycles:
ldi  R20, $8B
WGLOOP0:  ldi  R21, $DC
WGLOOP1:  dec  R21
brne WGLOOP1
dec  R20
brne WGLOOP0
; -----------------------------
; delaying 3 cycles:
ldi  R20, $01
WGLOOP2:  dec  R20
brne WGLOOP2
sbi PORTA,0;отпускаем шину

;ждем 40 мкс
;--------------------------
ldi  R20, $31
WGLOOP11:  dec  R20
brne WGLOOP11
; -----------------------------

;--------------------------
ldi r16,0;на вход
out DDRA,r16;

SBIC PINA,0x00; если на выходе до сих пор 1
jmp ERROR; то ошибка

;иначе
;ждем 80 мкс
ldi  R20, $70
WGLOOP12:  dec  R20
brne WGLOOP12
SBIS PINA,0x00; если на выходе до сих пор 0
jmp ERROR; то ошибка

clr count;

While15:
sbis PINA,0x00; c 0;ждем 1 на шине
jmp While15;

;принимаем 40 бит
While:
sbic PINA,0x00;ждем 0 на шине
jmp While;
;после 0 жднм еще 30мкс
;***************
ldi  R20, $25
WGLOOP3:  dec  R20
brne WGLOOP3
;****************
sbic PINA,0x00; если на шине 1
ldi R21,1;

sbis PINA,0x00; если на шине 0
ldi R21,0;

add R24,R21; то прибавляем 1
LSL R24;cдвигаем на 1

yms count;
cpi count,8; 8  бит приняли?
BRNE While;

;теперь в регистре 24 у нас влажность целая часть

clr count;

While2:
sbic PINA,0x00;ждем 0 на шине
jmp While2;
;после 0 жднм еще 30мкс
;***************
ldi  R20, $25
WGLOOP4:  dec  R20
brne WGLOOP4
;****************
sbic PINA,0x00; если на шине 1
ldi R21,1;

sbis PINA,0x00; если на шине 0
ldi R21,0;

add R23,R21; то прибавляем 1
LSL R23;cдвигаем на 1

yms count;
cpi count,8; 8  бит приняли?
BRNE While2;

;теперь в регистре 23 у нас влажность дробная часть

clr count;
While3:
sbic PINA,0x00;ждем 0 на шине
jmp While3;
;после 0 жднм еще 30мкс
;***************
ldi  R20, $25
WGLOOP5:  dec  R20
brne WGLOOP5
;****************
sbic PINA,0x00; если на шине 1
ldi R21,1;

sbis PINA,0x00; если на шине 0
ldi R21,0;

add R22,R21; то прибавляем 1
LSL R22;cдвигаем на 1

yms count;
cpi count,8; 8  бит приняли?
BRNE While3;

;теперь в регистре 22 у нас целая часть пемпературы

clr count;

While6:
sbic PINA,0x00;ждем 0 на шине
jmp While6;
;после 0 жднм еще 30мкс
;***************
ldi  R20, $25
WGLOOP7:  dec  R20
brne WGLOOP7
;****************
sbic PINA,0x00; если на шине 1
ldi R21,1;

sbis PINA,0x00; если на шине 0
ldi R21,0;

add R19,R21; то прибавляем 1
LSL R19;cдвигаем на 1

yms count;
cpi count,8; 8  бит приняли?
BRNE While6;
;теперь в регистре 19 у нас дробная часть пемпературы

clr count;

While9:
sbic PINA,0x00;ждем 0 на шине
jmp While9;
;после 0 жднм еще 30мкс
;***************
ldi  R20, $25
WGLOOP10:  dec  R20
brne WGLOOP10
;****************
sbic PINA,0x00; если на шине 1
ldi R21,1;

sbis PINA,0x00; если на шине 0
ldi R21,0;

add R25,R21; то прибавляем 1
LSL R25;cдвигаем на 1

yms count;
cpi count,8; 8  бит приняли?
BRNE While6;
;теперь в регистре 25 у нас контрольная сумма

jmp main

ERROR:
ldi R16,0b11110000;
out portB,r16;
jmp ERROR
[21.61 Кб]
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 20:04
Ответы с готовыми решениями:

AtTiny13 + DHT11 + TM1637. Странное поведение
Написал код для работы AtTiny13, DHT11, TM1637. Всё удачно уместилось в памяти микрухи. На первый...

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

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

AVR Atmega324PU не прошивается AVR ISP Mk2
Добрый день. На плату впаян данный микроконтроллер в корпусе tqfp. При подключении программатора...

Анализ стека AVR / AVR stack analysis
Привет! Уперся я в стек, и решил понять что почем. Нашел вот такой вот скриптик:...

3
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
15.04.2014, 20:20 2
Код не смотрел, но dht11, dht22 и т.п. с первого раза никогда не отвечают (по крайней мере в моей практике). Их приходится долбить секунды две. То есть "старт", если нет ответа, то подождем немного и опять "старт", и т.д. Если в течение двух секунд датчик не разу не просадил шину, тогда уж ошибка.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.04.2014, 20:32 3
Какой всё таки классный этот протеус , эмулирует все как в жизни. :))) Вообщем ТС долбите его 2 сек.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.04.2014, 21:16 4
;ждем 40 мкс
0
15.04.2014, 21:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 21:16

AVR Studio 6 и AVR Toolchain вопросы!
Всем доброго времени суток. Решил я написать софтинку в новой студии от Атмела AVR Studyo 6. Все...

AVR Studio 6 Avr simulator
Подскажите каким образом стартануть прогу в avr symulator с адреса boottooder (atmega8a, 0x0F80)....

Как подружить AVR+AVR?
Приветствую Вас уважаемые форумчане! Требуется связать 2 AVR-ки, по классической схеме Master ->...


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

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

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