Прошу помощи по коду на BASCOM AVR
Вот код регулятора влажности и температуры на датчике DHT11
А вот код для DHT22, но не могу скомпилировать
В чём может быть проблема?
Прошу помощи по коду на BASCOM AVR
Прошу помощи по коду на BASCOM AVR
Создать электронный мир проще,чем его понять.
Re: Прошу помощи по коду на BASCOM AVR
Ошибки описаны в начале исходника. Все комментарии, обозначены как '? поставлены мною. После исправления ошибок комментарии убрать - все должно работать.
- Вложения
-
- termostat_dht22_M.zip
- (4.76 КБ) 278 скачиваний
Re: Прошу помощи по коду на BASCOM AVR
подправил, сейчас компилятору не нравится строчка Dim Kod As Dword At $11e (файл прилагаю),что ещё можете посоветовать?
Создать электронный мир проще,чем его понять.
Re: Прошу помощи по коду на BASCOM AVR
Тут все просто. Нужно добавить overlay. И по прежнему нет процедуры Read_timings. А вызов её есть.
Re: Прошу помощи по коду на BASCOM AVR
Всё исправил, сейчас всё компилируется. Прошил показания датчика 0 0 похоже не опрашивается или опрашивается но не так. Похоже в алгоритме опроса косяк.
Создать электронный мир проще,чем его понять.
Re: Прошу помощи по коду на BASCOM AVR
Добрый день!
Я тоже хочу регулятор влажности и температуры сделать используя DHT22. Но для начала занялся поиском работающего кода баском хотя бы просто высвечивать температуру и влажность. Испробовал несколько вариантов. Только вот прикрепленный внизу код заставил корректно работать с датчиком DHT22.
Может получится измерительную часть кода отсюда взять, а исполняющую часть из кода термостата, который вы выложили выше
Я тоже хочу регулятор влажности и температуры сделать используя DHT22. Но для начала занялся поиском работающего кода баском хотя бы просто высвечивать температуру и влажность. Испробовал несколько вариантов. Только вот прикрепленный внизу код заставил корректно работать с датчиком DHT22.
Может получится измерительную часть кода отсюда взять, а исполняющую часть из кода термостата, который вы выложили выше
Код: Выделить всё
'######################## DHT-22 Humidity & Temperature Sensor####################
' DHT-22
'
' |-----o-- Vcc
' | |
' | -
' | 10k
' | -
' | |
' |-----o-- Data ~~~ PC0 (?C)
' |
' |-------- NC
' |
' |-------- GND
'
' Timings: Bit = 0 ~ 28 ?s / Bit = 1 ~ 70 ?s
' Min_time = 28 ?s < TCNT0 Value (ticks) < 70 ?s (in ticks)
' every time > Min_time >>> Bit = 1
' every time < Min_time >>> Bit = 0
'
' Min_time ~ 20 (ticks) for 3.6864 MHz
'
' ~ ticks for Bit = 0: 26 ?s * $crystal (in MHz) / Prescale = 460800*0,000026=11,96 dla mojej czestotliwoasi ==26
' ~ ticks for Bit = 1: 70 ?s * $crystal (in MHz) / Prescale = 460800*0,000070=32,25 dla mojej czestotliwosci ==70
' zmienilem Min_time z 20 na 48
'
'######################## DHT-22 Humidity & Temperature Sensor####################
$regfile = "m8def.dat"
'$crystal = 3686400
$crystal = 8000000 'taktowanie
'$baud = 115200 'Liczba okreslajaca szybkosc pracy lacza RS 232 w bitach na sekunde (bod)
'stala okreslajaca rozmiar wybranego stosu
'$hwstack = 64
'$swstack = 64
'$framesize = 64
'#####################################
Config Pind.6 = Input
Config Timer0 = Timer , Prescale = 8
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 2
Cursor = Off
Cls 'konfiguracja linii
'mikrokontrolera, do ktorych
'dolaczono wyswietlacz
'LCD
'#####################################
'Const Min_time = 20
Const Min_time = 48 'this has to be changed according to your frequency settings in $crystal
Dim Count As Byte
Dim Signaltime(43) As Byte
Dim Humidityw As Word
Dim Temperaturew As Word
Dim Humsens_chksum As Byte
Dim Humiditys As String * 16
Dim Temperatures As String * 16
'#####################################
Declare Sub Read_timings
Declare Sub Humtemp_values
Declare Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
'##################################### Main loop
Lcd "DHT22 TEST"
Wait 1
Do
Call Humtemp_values
' If Compare_chksum(humidityw , Temperaturew , Humsens_chksum) = 1 Then
Humiditys = Str(humidityw)
Temperatures = Str(temperaturew)
Cls
Lcd "Humi: " ; Format(humiditys , "0.0") ; " %"
Lowerline
Lcd "Temp: " ; Format(temperatures , "0.0") ; " C"
Waitms 100
'Else
' Lcd "Read Error"
'End If
Loop
End
'############################################################# Read timings
' measure time (in ticks) for signal = high (Start / Stop TIMER0)
' 1st two measurements do not contain sensor values
Sub Read_timings
Wait 3
Count = 1
Config Pind.6 = Output : Portc.0 = 0 ' request data
Waitms 20 ' wait 20 ms
Config Pind.6 = Input ' wait for data, receive data
While Count < 43 'collect 42 timings / signals
Bitwait Pind.6 , Set 'signal goes high > start timer
Start Timer0
Bitwait Pind.6 , Reset 'signal goes low > stop timer
Stop Timer0
Signaltime(count) = Tcnt0 'store number of ticks per signal in Signaltime byte
Tcnt0 = 0
Incr Count
Wend
End Sub
'############################################################# Humidity and temperature values
' transform timings into bits (40 timings > 40 Bits)
' every time (in ticks) > Min_time >>> Bit = 1
' every time (in ticks) < Min_time >>> Bit = 0
' first word contains humidity
' second word contains temperature
' last byte contains checksum
Sub Humtemp_values
Local X As Byte
Humidityw = 0
Temperaturew = 0
Humsens_chksum = 0
Call Read_timings
For Count = 3 To 42 ' skip first two
Select Case Count
Case 3 To 18
X = 18 - Count
If Signaltime(count) > Min_time Then Toggle Humidityw.x
Case 19 To 34
X = 34 - Count
If Signaltime(count) > Min_time Then Toggle Temperaturew.x
Case 34 To 42
X = 42 - Count
If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x
End Select
Next
End Sub
'############################################################# Calculate Checksum and compare with trasnmitted value
Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
Local Chksum As Byte
Chksum = Low(hsens_humidity ) + High(hsens_humidity )
Chksum = Chksum + Low(hsens_temperature)
Chksum = Chksum + High(hsens_temperature)
If Chksum = Hsens_chksum Then
Compare_chksum = 1
Else
Compare_chksum = 0
End If
End FunctionRe: Прошу помощи по коду на BASCOM AVR
Нашёл я рабочий код для DHT22 с минусовой температурой.
Написан он под 88 мегу я подправил на 8 мегу и протестировал.
Всё работает без глюков и корректно.
http://www.ne.jp/asahi/shared/o-family/ ... st_101.bas
Может кто поможет в исходник вставить?
http://avrproject.ru/112/22.zip
Прошу прощения так вышло.
Там Японский язык вроде . При открытии этого веб узла просит (cplexe.exe) типа установите японский с установочного диска , а у меня шрифта нету такого.
Поэтому такая белиберда вышла.
Написан он под 88 мегу я подправил на 8 мегу и протестировал.
Всё работает без глюков и корректно.
http://www.ne.jp/asahi/shared/o-family/ ... st_101.bas
Может кто поможет в исходник вставить?
http://avrproject.ru/112/22.zip
Прошу прощения так вышло.
Там Японский язык вроде . При открытии этого веб узла просит (cplexe.exe) типа установите японский с установочного диска , а у меня шрифта нету такого.
Поэтому такая белиберда вышла.
Последний раз редактировалось rozario Чт окт 16, 2014 00:03:39, всего редактировалось 1 раз.
Re: Прошу помощи по коду на BASCOM AVR
А зачем такой текст на несколько экранов вставлять? Что конкретно нужно? Вроде, как людям делать нечего, как эти погонные метры разбирать. Ну и русификатор нормальный в баском подключить не мешает. Комментарии то не читаемые.
Re: Прошу помощи по коду на BASCOM AVR
Перевёл коментарии.
- Вложения
-
- Код для DHT22 с минусовой температурой.rar
- (6.96 КБ) 356 скачиваний