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

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

01.07.2013, 16:09. Показов 2663. Ответов 3
Метки нет (Все метки)

pic16f690 не читает DHT11 проблема следующего характера... есть библиотека DHT11 нормально использующаяся на pic24 в микробасике. прилепил ее к piic16 и не читается DHT11... такое впчатление что неправильно работает Delay_ms.так вот - я написал задержку свою на таймере расчитав предварительно период задержки в 1мкс и сделал while() с счетчиком внутри для проверки времени изменения стартовых действий DHT и вот что получилось... вместо 80мкс я получил 5. был я склонен думаль что частота работы pic16 не соответствует установленой в интерпритаторе... ан нет.. проверив биты настройки частоты - выяснил что все верно. 4 мгц. кстати у меня на работающем устройстве DHT опрашивается значительно чаще рекомендуемой частоты. проблем нет. и 10кОм. это только схема. на устройстве стоит 4.7кОм.больше мыслей пока нет. и прошу по существу... не надо обижать производителей и программистов написавших микроС и микроВасик.

Код
sub function OW_Read_Bit_DHT () as byte
 dim i, j, DHT_dat as byte
 DHT_dat = 0
 result = 0
 for j = 7 to 0 step - 1
 i = 0
 while (DHT_bit = 0)
 Delay_us(1)
 if i > 70 then ER_MK.4 = 1 break end if
 INC(i)
 wend
 Delay_us(40)
 If DHT_bit = 1 Then
 result.j = DHT_bit
 end if
 i = 0 '
 while (DHT_bit = 1)
 Delay_us(1)
 if i > 70 then ER_MK.4 = 1 break end if
 INC(i)
 wend
 next j
 end sub

 sub function Read_DHT11() as byte
 dim i as byte
 DHT_byte as byte[4]
 result = 1
 DHT_bit_Direction = 0
 DHT_bit = 0
 Delay_ms(1
 DHT_bit_Direction = 1
 Delay_us(40)
 if DHT_bit = 1 then result = 1 exit end if 'датчик не ответил
 Delay_us(80)
 if DHT_bit = 0 then result = 1 exit end if 'датчик не ответил
 i = 0
 while (DHT_bit = 1)
 Delay_us(1)
 if i > 80 then result = 1 exit end if
 INC(i)
 wend
 DHT_byte[0] = OW_Read_Bit_DHT ()
 DHT_byte[1] = OW_Read_Bit_DHT ()
 DHT_byte[2] = OW_Read_Bit_DHT ()
 DHT_byte[3] = OW_Read_Bit_DHT ()
 Sum_Byte = OW_Read_Bit_DHT ()
 DHT_bit_Direction = 0
 DHT_bit = 1
 i = DHT_byte[0] + DHT_byte[2]
 if i = Sum_Byte then
 iSHT_Humi = DHT_byte[0]
 iSHT_Temp = DHT_byte[2] * 16
 result = 0 'если все ок возврат "0" , нет - "1"
 end if

 end sub
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2013, 16:09
Ответы с готовыми решениями:

Чтение датчика температуры и влажности DHT-11 (ATMega16)
Есть почти готовая программа на мкк атмега16, с подключенным к ней датчиком DHT11, единственное что...

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

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

Получение температуры с датчика
Доброго времени суток. Такой вопрос, есть какой-нибудь датчик температуры, он подключен к...

3
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 25
01.07.2013, 16:16  [ТС] 2
вот сама программа....немножко поистязал ее..... в файле находится и схема в протеусе
Вложения
Тип файла: zip Новая папка.zip (78.3 Кб, 98 просмотров)
0
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
01.07.2013, 20:34 3
Наверно тактовая неверно выставлена в байсике и в железе отличается.
Конфигурацию портов проверте и слово конфигурации, может ватчдог мешает работать.
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 25
02.07.2013, 10:05  [ТС] 4
поправте если я не прав The clock input to the Timer2 module is the system
instruction clock (FOSC/4). 4000000/4 = 1000000 или 1/1000000 = 1мкс
вот процедура

Код
 sub procedure Pausa_us(dim us as byte)
 TMR2 = 0
 PR2 = us
 T2IF_bit = 0
 T2CON = %00000100
 while( T2IF_bit = 0 )
 wend
 TMR2ON_bit = 0
 end sub
если Pausa_us(1) то задержка 1мкс
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2013, 10:05
Помогаю со студенческими работами здесь

USART передача температуры с датчика в другой мк
Здравствуйте, дорогие форумчане! Помогите пожалуйста разрешить одну проблему! Задача: Есть...

Ошибка встроенного датчика температуры MSP430G2553
Доброго времени суток! Сваял программку по измерению температуры от встроенного датчика и...

Прием и обработка данных с цифрового датчика температуры ADT7310
Доброго времени суток Помогите написать программу приема данных с датчика температуры ADT7310 на...

Нормирование данных датчика температуры LM35 с АЦП (ATMega48)
Есть следующий код, выводит значение, считанное с АЦП во вторую строку на экранчике побитово....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru