промлема с DHT11
|
|
DNM |
Дата: Вт, 02.12.2014, 09:19 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Здравствуйте! Недавно начал писать на протоне и столкнулся с тем, что по непонятным причинам, правильно написанная и скомпилированная программа не хочет работать если в ней используются, например pulsin или pulsout. если более конкретно, то пример программы, находящийся в Servo - работает не правильно, он же в picbasic pro работает без проблем. Почему, я так и не понял.
Сейчас осваивая NRF 24L01, используя пример предоставленный MiX@$, решил подключить DHT11 и передавать по радиоканалу. Причем пример программы для работы с радио модулями работает отлично, а вот ранее работающая в picbasic pro программа опроса датчика, отказывается работать напрочь, пришел к выводу, что что-то не так с задержками и pulsin, но как решить проблему так и не знаю. Может кто тоже сталкивался с этим? Пример кода для датчика, используемый мной: Код Device = 16F877 Config XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_OFF , DEBUG_OFF Xtal 20 ' ================================Íàñòðîéêà LCD =============================================== Declare LCD_Type=0 ' Òèï ÆÊÈ - áóêâåííî-öèôðîâîé Declare LCD_DTPin PORTB.4 ' Ïîðò äàííûõ ÆÊÈ Declare LCD_ENPin PORTB.3 ' Óïðàâëåíèå öåïüþ E Declare LCD_RSPin PORTB.2 ' Óïðàâëåíèå öåïüþ RS Declare LCD_Interface 4 ' 4-õ áèòíàÿ ðàçðÿäíîñòü øèíû äàííûõ Declare LCD_CommandUs 2000 ' Çàäåðæêà ïåðåä ïîñûëêîé êîìàíäû Declare LCD_DataUs 50 ' Çàäåðæêà ïåðåä ïîñûëêîé äàííûõ Declare LCD_Lines 2 ' Êîëè÷åñòâî ñòðîê ÆÊÈ
TRISD = %00000000 TRISB = %00000000 TRISC = %00001100 ADCON1 = %00000111 'pic 16F877 'PORTB.0 - äàò÷èê '-------------------------- Íà÷àëî ------------------------------------------- Dim imp As Byte Dim temp As Byte Dim hum As Byte Dim chksm As Byte Dim temp1 As Byte Dim hum1 As Byte
Dim test As Byte Dim i As Byte '-------------------------- Íàñòðîéêà TMR0 äëÿ ïðåðûâàíèé -------------------- OPTION_REG = %10001000 TMR0 = $00 ' Çíà÷åíèå ðåãèñòðà TMR0 '-------------------------- Ãëàâíàÿ ïðîãðàììà ------------------------- MainProgram: DelayMS 1000 'ïðèâîäèì ñåíñîð â ðàáî÷åå ñîñòîÿíèå
loop: chksm=0 TRISB.0 = 0 'port b íà âûõîä PORTB.0=1 'âûñîêèé óðîâåíü íà äàò÷èê DelayMS 50 'íåìíîãî ïîäîæäåì PORTB.0=0:DelayMS 18 'óñòàíîâèì íà 18ms íèñêèé óðîâåíü - çàïðîñ äàò÷èêà PORTB.0=1:DelayUS 30 'óñòàíîâèì íà 30us âûñîêèé óðîâåíü - îñâîáîäèì øèíó imp = PulsIn PORTB.0,1 'æäåì ïîêà âûñîêèé óðîâåíü If imp > 130 Then GoTo loop1 If imp < 80 Then GoTo loop '-------------------------------Ñ÷èòûâàíèå ïàðàìåòðîâ------------------------- imp = 0 For i = 7 To 0 Step -1 imp = PulsIn PORTB.0,1 If imp >70 Then SetBit hum,i Else ClearBit hum,i EndIf Next i
For i = 7 To 0 Step -1 imp = PulsIn PORTB.0,1 If imp >70 Then SetBit hum1,i Else ClearBit hum1,i EndIf Next i
For i = 7 To 0 Step -1 imp = PulsIn PORTB.0,High If imp >70 Then SetBit temp,i Else ClearBit temp,i EndIf Next i
For i = 7 To 0 Step -1 imp = PulsIn PORTB.0,High If imp >70 Then SetBit temp1,i Else ClearBit temp1,i EndIf Next i
For i = 7 To 0 Step -1 imp = PulsIn PORTB.0,High If imp >70 Then SetBit chksm,i Else ClearBit chksm,i EndIf Next i Print 1,1, #hum," %" Print 2,1, #temp," C" DelayMS 3000 GoTo loop
loop1:
DelayMS 10 Print 1,1, "sensor not ready" GoTo loop GoTo MainProgram
Более подробно здесь: http://asemlab.net/
Сообщение отредактировал
DNM - Вт, 02.12.2014, 10:24
|
|
|
|
xvovanx |
Дата: Вт, 02.12.2014, 10:04 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
В прогу сильно не вникал, но сразу бросилось в глаза:
If imp < 80us Then GoTo loop
|
|
|
|
DNM |
Дата: Вт, 02.12.2014, 10:25 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Цитата xvovanx ( ) If imp < 80us Then GoTo loop исправил, но компилятор не выдавал ошибки, кстати почему?
проблема остается
Более подробно здесь: http://asemlab.net/
Сообщение отредактировал
DNM - Вт, 02.12.2014, 10:27
|
|
|
|
ADMIN |
Дата: Вт, 02.12.2014, 11:26 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Возможно, разницы и нет, но в последних версиях компилятора пишется PulseIn, насколько я помню. Нет возможности проверить
|
|
|
|
DNM |
Дата: Вт, 02.12.2014, 12:08 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Цитата ADMIN ( ) Возможно, разницы и нет, но в последних версиях компилятора пишется PulseIn, насколько я помню. Нет возможности проверить попробовал - компилятор глотает и pulsin и pulsein вечером зашью и проверю.. странно , что компилятор так работает...
Более подробно здесь: http://asemlab.net/
|
|
|
|
MiXaS |
Дата: Вт, 02.12.2014, 12:56 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Дмитрий, здравствуйте! Есть у меня пример работы с DHT 21, точно не помню чем они отличаются (протоколом всмысле), но вроде я этот код подсовывал под DHT 11 и чуток что-то менял. Сразу скажу, что DHT 11 = shit. Лучше взять DHT21 с камнем AM2302.
Цитата DNM ( ) Config XT_OSC
Думаю лучше заменить на HS_OSC
|
|
|
|
ivan_fd |
Дата: Вт, 02.12.2014, 16:15 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
И вообще лучше не использовать PulseIn. Можно обойтись и без него.
|
|
|
|
MiXaS |
Дата: Ср, 10.12.2014, 00:55 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
DNM, Вы разобрались с проблемой? Прошу обратить Ваше внимание на то, что если Вы подключили к пику с частотой 4 МГц, (Вы как-то мне фото слали с 2 пиками, лдин был на 4 МГц),то работать не будет, по крайней мере я не смог запустить dht 22 на этом кварце, так как в инструкции к команде pulsein написано, что результат измерения это не микросекунды, а какие–то еденицы. Так при частоте 4 МГц 1 ед=10 мкс, а при частоте 20 МГц 1 ед= 2мкс. Я пробовал переписывать код с учетом этих знаний, но увы, эту команду нужно заменить своим микрокодом.
|
|
|
|
NeirRon |
Дата: Сб, 28.02.2015, 12:32 | Сообщение # 9 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
1
Замечания:
±
На сайте с 10.02.2015
Статус:
Offline
|
Написал не большую библиотеку для DHL11, может кому пригодиться. Датчик не выдавал десятичные значения, по этому запись десятичных значений в переменные я убрал Вызов из главной программы: Код Include "DHL11.pbp" Cls DelayMS 100
main:
GetDHL11(PORTD.0, Hum, Temp, ChkSum) If ChkSum <> (Hum + Temp) Then Cls:Print At 1,1," Check Sum Error! ":GoTo main
Print At 1,1,"H: ",Dec Hum," % " Print At 2,1,"T: ",Dec Temp,223,"C "
DelayMS 1000 GoTo main
Переменные Hum, Temp, ChkSum в главной программе объявлять не нужно. Название переменных может быть любым. Если датчик не готов, то значение переменных будет равным:
Hum = 0 Temp = 0 ChkSum=1
|
|
|
|
доцент2 |
Дата: Чт, 12.01.2017, 19:32 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
292
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Подскажите в чем может быть проблема. Подключил датчик DHT11 к МК с частотой 4МГц. Логический анализатор показывает, что датчик выдает посылку в соответствии с описанием. Программа определяет наличие датчика. Но читает посылку с ошибками (пробовал на дисплей выводить в двоичном формате). Последние 8 бит почему то всегда %00000000. Соответственно проверка не проходит.
Добавлено (10.01.2017, 23:05) --------------------------------------------- Разобрался. На частоте МК 4МГц данный датчик работать не хочет. Не хватает разрешения Pulsin. Работает в протеусе с 8МГц и выше. В железе завтра попробую.
Добавлено (12.01.2017, 19:32) --------------------------------------------- В железе заработало!
Сообщение отредактировал
доцент2 - Чт, 12.01.2017, 19:38
|
|
|
|