|
Atmega16 +dht11 |
|
|
|
Nov 24 2014, 17:15
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 12-04-14
Пользователь №: 81 348

|
Всем привет! Я только начинаю свой путь. Пишу в Codevisionavr 3.12. В сети кое как нашёл пример по работе с dht11, но он на прерываниях. Вся система из-за этого висит т.к. постоянно генерирует прерывание датчик. Прошу тыкнуть меня что мне нужно исправить. Большое спасибо
Сообщение отредактировал Stiner - Nov 24 2014, 17:18
Эскизы прикрепленных изображений
Прикрепленные файлы
modul.txt ( 9.36 килобайт )
Кол-во скачиваний: 120
|
|
|
|
|
 |
Ответов
|
Nov 26 2014, 02:09
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 6-04-06
Пользователь №: 15 890

|
Вод код позаимствованный именно из библиотеки для Arduino. Великолепно работающий в моем проекте. CODE unsigned char DHT_Read(int *temperature, int *humidity, uint8_t *sign) { int temp; uint8_t data[5] = {0}; if (SENSOR_is_low) { // bus not free return 1; }
SENSOR_sda_out; SENSOR_sda_low; // MCU start signal _delay_ms(20); // start signal (pull sda down for min 0.8ms and maximum 20ms) SENSOR_sda_in;
// Bus master has released time min: 20us, typ: 30us, max: 200us uint8_t timeout = 200; while(SENSOR_is_hi) {_delay_us(1); if (!timeout--) {return 1;}}
// AM2302 response signal min: 75us typ:80us max:85us timeout = 85; while(SENSOR_is_low) {_delay_us(1); if (!timeout--) {return 1;}} // response to low time timeout = 85; while(SENSOR_is_hi) {_delay_us(1); if (!timeout--) {return 1;}} // response to high time
/* * time in us: min typ max * signal 0 high time: 22 26 30 (bit=0) * signal 1 high time: 68 70 75 (bit=1) * signal 0,1 down time: 48 50 55 */ // uint8_t data[5]={0}; for(uint8_t i = 0; i < 5; i++) { uint8_t sensor_byte = 0; for(uint8_t j = 1; j <= 8; j++) // get 8 bits from sensor { timeout = 55; while(SENSOR_is_low) {_delay_us(1); if (!timeout--) {return 1;}} // signal "0", "1" low time _delay_us(30); sensor_byte <<= 1; // add new lower byte if (SENSOR_is_hi) // if sda high after 30us => bit=1 else bit=0 { sensor_byte |= 1; timeout = 45; // 30us - 75us = 45us while(SENSOR_is_hi) {_delay_us(1); if (!timeout--) {return 1;}} } } data[i] = sensor_byte; } uint8_t sum = data[0] + data[1] + data[2] + data[3]; if(data[4] != sum) return DHT_ERROR; temp = data[2] & 0x7F; temp = (temp << 8)+data[3]; if (data[2] & 0x80) { // temp *= -1; *sign = 0; } else { *sign = 1; } *temperature = temp; temp = (data[0] << 8)+data[1]; *humidity = temp; return DHT_SUCCESS; }
Сообщение отредактировал Dust112 - Nov 26 2014, 02:11
|
|
|
|
Сообщений в этой теме
Stiner Atmega16 +dht11 Nov 24 2014, 17:15 kovigor Цитата(Stiner @ Nov 24 2014, 21:15) Прошу... Nov 25 2014, 00:09 Xenia Цитата(kovigor @ Nov 25 2014, 03:09) Если... Nov 25 2014, 00:54  kovigor Цитата(Xenia @ Nov 25 2014, 03:54) Наскол... Nov 25 2014, 09:30 Stiner Там даже не 1-wire,а какой-то свой протокол в кото... Nov 25 2014, 15:31 kovigor Цитата(Stiner @ Nov 25 2014, 19:31) Там д... Nov 25 2014, 16:07 Dust112 Stiner, поищите в инете библиотеки для Arduino по ... Nov 25 2014, 18:30 Xenia Цитата(Dust112 @ Nov 25 2014, 21:30) Stin... Nov 25 2014, 19:46  kovigor Цитата(Xenia @ Nov 25 2014, 23:46) Но что... Nov 25 2014, 20:16   Xenia Цитата(kovigor @ Nov 25 2014, 23:16) И уч... Nov 25 2014, 20:38    kovigor Цитата(Xenia @ Nov 26 2014, 00:38) Конечн... Nov 25 2014, 23:38 Stiner Я находил сотни реализаций для Arduino, но у меня ... Nov 26 2014, 10:35 kovigor Цитата(Stiner @ Nov 26 2014, 14:35) ... н... Nov 26 2014, 10:41  Stiner Цитата(kovigor @ Nov 26 2014, 14:41) Повт... Nov 26 2014, 19:44   kovigor Цитата(Stiner @ Nov 26 2014, 22:44) 1. По... Nov 26 2014, 20:02    Stiner Цитата(kovigor @ Nov 27 2014, 00:02) У ва... Nov 27 2014, 06:38     kovigor Цитата(Stiner @ Nov 27 2014, 10:38) Fuse ... Nov 27 2014, 09:37   Timmy Цитата(Stiner @ Nov 26 2014, 22:44) 1. По... Nov 27 2014, 10:08 Stiner Исправил везде мс и мкс. Сейчас датчик стал отзыва... Nov 27 2014, 17:07 kovigor Цитата(Stiner @ Nov 27 2014, 20:07) Сейча... Nov 27 2014, 18:35  Stiner Цитата(kovigor @ Nov 27 2014, 22:35) Стар... Nov 28 2014, 08:09   kovigor Цитата(Stiner @ Nov 28 2014, 12:09) нет, ... Nov 28 2014, 08:52 Stiner На реальном железе теже проблемы, осцилографа нет. Dec 3 2014, 17:11 kovigor Цитата(Stiner @ Dec 3 2014, 21:11) На реа... Dec 3 2014, 20:07 ffs2001 Вот же готовая библиотека на нормальном Си. Там ST... Dec 3 2014, 19:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|