реклама на сайте
подробности

 
 
> Atmega16 +dht11
Stiner
сообщение Nov 24 2014, 17:15
Сообщение #1


Участник
*

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



Всем привет!
Я только начинаю свой путь. Пишу в Codevisionavr 3.12. В сети кое как нашёл пример по работе с dht11, но он на прерываниях. Вся система из-за этого висит т.к. постоянно генерирует прерывание датчик. Прошу тыкнуть меня что мне нужно исправить.
Большое спасибо

Сообщение отредактировал Stiner - Nov 24 2014, 17:18
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  modul.txt ( 9.36 килобайт ) Кол-во скачиваний: 120
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Stiner
сообщение Nov 27 2014, 17:07
Сообщение #2


Участник
*

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



Исправил везде мс и мкс. Сейчас датчик стал отзываться, но передает ахинею, я пока тестирую только температуру (влажность всегда =0).
У меня нет доступа пока к реальнйо плате по этому и моделирую в proteus'e.
Fuse биты выставил как я понял из датиша следующим образом: CKSEL = 1111, SUT =01.
CODE

int D_1=123, D_2=456, D_3=789, D_4=012, D_5= 045;

void DHT_Read_Data(){
int data[50];
int counter = 0, sum = 0, i = 0;
// Очистить массив контролльных сумм
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
DDRD.7 = 1; // делаем вывод мк выходом
// Подготока шины для передачи
PORTD.7 = 1;
delay_ms(250);
// Инициализаруем передачу
PORTD.7 = 0; // прижимаем к земле не менее чем на 18 мс
delay_ms(20);
PORTD.7 = 1; // поднимаем и ждём реакции датчика
delay_us(35);

DDRD.7 = 0; // делаем выход мк входом
delay_us(80);

// если всё ок, идём дальше и ждём пока датчик не подымет до 1 и не начнет передачу
while( PIND.7 == 1)
{
delay_us(30); // ждём появления нуля на шине первый раз
while (counter <= 40) // принимаем 40 бит данных
{
while( PIND.7 == 0)
{
// запускаем по битовый приём
if( PIND.7 == 1)
{
data[counter] = 0;
}
delay_us(40); // если 1 держится более 28 мкс, то передаётся 1
if (PIND.7 == 1)
{
data[counter] = 1;
}
//delay_us(20); // ждём появления нуля на шине
counter++; // увеличиваем счётчик на один
}
}
}
// проверяем всё

/* sum = data[0] + data[1] + data[2] + data[3];
if( sum != data[4]){
data[0] = 999;
} */
D_1 = data[0];
D_1 = D_1 <<1;
D_1 = D_1 | data[1];
D_1 = D_1 <<1;
D_1 = D_1 | data[2];
D_1 = D_1 <<1;
D_1 = D_1 | data[3];
D_1 = D_1 <<1;
D_1 = D_1 | data[4];
D_1 = D_1 <<1;
D_1 = D_1 | data[5];
D_1 = D_1 <<1;
D_1 = D_1 | data[6];
D_1 = D_1 <<1;
D_1 = D_1 | data[7];


D_3 = data[16];
D_3 = D_3 <<1;
D_3 = D_3 | data[17];
D_3 = D_3 <<1;
D_3 = D_3 | data[18];
D_3 = D_3 <<1;
D_3 = D_3 | data[19];
D_3 = D_3 <<1;
D_3 = D_3 | data[20];
D_3 = D_3 <<1;
D_3 = D_3 | data[21];
D_3 = D_3 <<1;
D_3 = D_3 | data[22];
D_3 = D_3 <<1;
D_3 = D_3 | data[23];


D_2 = data[10];
sprintf(lcd_buffer,"d0=%i d3=%i \n%i%i%i%i%i%i%i%i",D_1, D_3, data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(100);
}



Сообщение отредактировал Stiner - Nov 27 2014, 17:17
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 27 2014, 18:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Stiner @ Nov 27 2014, 20:07) *
Сейчас датчик стал отзываться, но передает ахинею

Старшие биты с младшими не перепутаны ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Dust112   Вод код позаимствованный именно из библиотеки для ...   Nov 26 2014, 02:09
- - 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   Цитата(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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 21:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016