LEV-PRAV писал(а):1. Игрался датчиком dht11.
2. Решил выложить как учебное пособие...
1. Видать сильно заигрался на вольных хлебах -
забив на форум, вот и выложил чушь... Пример-то не рабочий...
2. Всем кто скачал этот пример советую подумать над тем - мог ли этот пример работать в железе (при тех параметрах которые в исходнике) - как об этом утверждает автор. В программе есть комментарии, повеселило вот это выражение "а 1й элемент ХЗ откуда берётся"... Поэтому и берется что программа написана как ХЗ. С точки зрения алгоритма - так сяк, как говорят для начала сойдет, а вот с точки зрения расчетных параметров, не понятно... При такой частоте кварца и при таких значениях переменной "
terminator=7" программа работать с датчиком не будет... Тем более что на картинках указано совсем другое значение, да и прерывание на картинке указано верно - по ниспадающему фронту (третья картинка, если стрелочки считать указание на фрон, хотя я думаю, что автор об этом и не подумал), а в программе по нарастающему, вот и ответ на "ХЗ откуда берётся"...
А вот цветные картинки - нужно удалить, они совсем не верно трактуют ДШ на датчик, и таким образом вводят в заблуждение!!! С точки зрения определения длительности отдельных импульсов (0 или 1) - это все равно, а с точки зрения начала сигнала - стартовых и преамбулы - возникает сдвиг... Поэтому периодически пропадает последний разряд в контрольной сумме... и выскакивает сбой.
Вот это верная картинка
CombinedTiming.jpg
Длительность
terminator легко расчитывается из частоты прерывания. Теперь про частоту прерывания - очень плохо когда для работы выбирается такая высокая частота. Прерывание все время рвет программу, если программа ничего не делает, то на это можно наплевать, но когда мы начнем работать не только с датчиком, мы удивимся тому как медленно будут происходить вычисления. Нужно читать регистр таймера и прерывание при этом будет всего лишь чуть более 900 гц...
Повеселила пауза 40 мс... При таком подходе нет смысла в прерываниях, если все равно ждем, то проще написать программу, в основе которой будет непосредственное измерение времени импульсов в циклах, как это было выше...
Все остальное потом, после ответа автора.

Ну, извини, Лев, ты сам попросил... Если в железе и работает, то только НЕ ЭТОТ вариант!!!
ЗЫ Вот на таком примере и ответ на вопрос - "почему одинаковые устройства работают поразному, но одно периодически сбоит, а другое работает как часы?" Подобрав параметры можно заставить эту программу работать в железе, но неверный алгоритм работы будет давать свои результаты.
У вас нет доступа для просмотра вложений в этом сообщении.