0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 25
|
|
1 | |
PIC16F690. Чтение датчика температуры и влажности DHT-1101.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
|
|
01.07.2013, 16:09 | |
Ответы с готовыми решениями:
3
Чтение датчика температуры и влажности DHT-11 (ATMega16) Алгоритм работы датчика температуры и влажности DHT11 BME280 сенсор давления температуры и влажности Получение температуры с датчика |
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 25
|
|
01.07.2013, 16:16 [ТС] | 2 |
вот сама программа....немножко поистязал ее..... в файле находится и схема в протеусе
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
0
|
02.07.2013, 10:05 | |
Помогаю со студенческими работами здесь
4
USART передача температуры с датчика в другой мк Ошибка встроенного датчика температуры MSP430G2553 Прием и обработка данных с цифрового датчика температуры ADT7310
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |