Часы, будильник и термометр на DS1307N и DS18B20

Форум, с конкретными примерами и реальными задачами и их решением.
Пишите в личку (admin, LEV-PRAV, mim) ссылки на темы, достойные быть скопированы сюда.

Модератор: Иван Николаевич

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение mim (mim) » 29 окт 2012, 15:25

masivnik писал(а):mim - не ругай меня сильно... Так, что-то навеяло и вспомнилось с прошлых, абсолютно не правильных проектов - решил поэкспериментировать... :o

А че ругаться то... ;)
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение mim (mim) » 31 окт 2012, 13:02

"А не хочет ли, много уважаемый джин..." чобы ему указали на один мааааленький павлин-мавлин...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение masivnik (Иван Николаевич) » 31 окт 2012, 15:51

mim писал(а):"А не хочет ли, много уважаемый джин..." чобы ему указали на один мааааленький павлин-мавлин...

Mim – я не "джин" :oops: «я только учусь»… :idea:
Конечно хочу что бы указали на один мааааленький (и не только) павлин-мавлин…

Вот видео двух работающих часов...
Так же - к каждому варианту часов прикрепил свое видео...
[video]http://youtu.be/RGMLotGkXvI[/video]
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение mim (mim) » 31 окт 2012, 17:42

masivnik писал(а): «я только учусь»… :idea:

Я всегда тоже так говорю...
Если внимательно читаешь форум (хотя есть сомнения), то должен был видеть периодические споры, по поводу работающих устройств, в которых, по моему мнению, заложены принципиальные ляпсусы... Несмотря на то, что устройства работают в их внутренностях идет война со скрипом...
1. Я все таки настоятельно советую еще раз внимательно изучить тему про 18в20. Не нужны лишние макросы - "oo_busreset". В макросе "DS1820_read_scratchpad" убирается опрос окончания конвертации - это почти секунда,он совсем там не нужен. Обо всем этом писалось...
2. Даже в Протеусе хорошо видно как конфликтует определение количества датчиков (поэтому ты и влепил каждый раз "oo_scanbus", очень длительная процедура если идут ошибки...), часто определение температуры не происходит несколько циклов. Тоже самое должно наблюдаться и в железе. Другое дело что это не всегда заметно, отсутствует контроль ошибок чтения (но он здесь и не нужен), но он бы дал знать о проблемах. Происходит это из за частых прерываний для подсвета сегментов. Длительность прерываний колеблется в пределах десятков мкс. Если эта задержка попадает на критические участки кода чтения или записи бита, то происходит сбой. Решение проблемы можно найти и тем самым повысить устойчивость работы.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение masivnik (Иван Николаевич) » 31 окт 2012, 19:04

mim - как всегда в точку!!! :!:
Очень редко, но сбои все таки есть - температура показывает всякую хрень (если можно так выразиться)... В первом, моем проекте, где совершенно не правильно производилась индикация и без прерывании (часы на DS1307 - старый форум), у меня до сих пор этих сбоев нет - температура всегда замеряется корректно, по крайней мере нет таких сбоев...
Отчасти, экспериментируя и пытаясь проверить причину сбоя - переделал способ пересчета температуры - сбои все равно остались, но теперь, обычно в эти редкие моменты, высвечивается -0,0. Так что я для себя, до вашего точного указания, так и подумал, что скорее всего причина в ИНДИКАЦИИ... Ну и конечно нужно ещё раз проштурмовать тему про 18в20 - постараться найти и понять Ваши указания... Надо еще раз попытаться посмотреть Ваш замечательный пример - может там что найду и пойму...
Большое спасибо!!!
Как только появится время - постараюсь прочитать более внимательно и все страницы...
Последний раз редактировалось Иван Николаевич 31 окт 2012, 19:14, всего редактировалось 1 раз.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение mim (mim) » 31 окт 2012, 19:12

masivnik писал(а):Как только появится время - постараюсь прочесть...
Дерзай, я всегда оставляю, что нибудь, о чем можно будет потом поговорить...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение masivnik (Иван Николаевич) » 15 ноя 2012, 14:16

Здравствуйте. Прошу прощения, что долго не отвечал - все ни как время выбрать не мог чтобы прочитать ТЕМУ "Чтение температуры с DS18B20" с старого форума. Время появилось, прочитал, только не сразу, а за два дня. Представляю, сколько время и сил было потрачено MIM-ом на эту тему - ему памятник нужно поставить... После прочитанного, если честно, в голове каша - надо все как то в голове уложить и осмыслить (хотя для меня это тяжеловато - много чего я все равно не понял)...
Исходя из страницы 16, а так же страницы 80 и описания от MIM "Компонент 1-Wire_v4" - я изменил подход к выводу индикации (хотя, по сути, все осталось по прежнему, но без прерывания) и вроде изменил некоторые макросы компонента "1-Wire" (oo_scanbus, DS1820_start_conversion, DS1820_read_scratchpad, oo_read_device). Скорее всего что-то сделал, наверное, совершенно не правильно и зря, т.к. только изменение макроса "DS1820_start_conversion" - дает реальный результат, но не до полного решения проблемы.
В железе, пока, не проверял (да и не вижу смысла, т.к. в Протеусе и так видно, что мерцает), только в ПРОТЕУСЕ - в нем работает, но ни как не могу убрать, в момент опроса DS18B20, мерцание индикации часов - именно часы мне нужно показывать без мерцании (для этого я и стал выводить индикацию через прерывание), хотя опрос датчиков, в ПРОТЕУСЕ, сразу начинает идти стабильно и только это радует...
Макрос "oo_scanbus" я вынес в начало программы и в цикле он не используется - не знаю, правильно или нет?, но в ПРОТЕУСЕ работает.
В общем пытаюсь экспериментировать, но, на мой взгляд (т.к. не хватает знаний и понимания) у меня - ни чего не получается...
Тема с датчиком DS18B20, вроде и так все разжевывает, но все же - может у кого есть желание помочь?
Поэтому прошу помощи??? :headbang:
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение masivnik (Иван Николаевич) » 15 ноя 2012, 14:32

Забыл еще спросить про правленый фал "AVR_One_Wire.c" - не могу до конца понять, его все же нужно мне использовать или нет?
Вот еще на него ссылка.
Я так понял - он позволяет подключать DS18B20 не только к нулевому порту, а к любому... и все?
Т.е. мне в моей проблеме с индикацией он не поможет?

Заранее - большое спасибо!!!
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение Taska (Максим) » 15 ноя 2012, 17:51

masivnik писал(а): и вроде изменил некоторые макросы компонента "1-Wire"


Иван Николаевич, а где же изменения???
Здесь то задержка 1 сек при опросе датчика, пробовал закоментировать как я сделал???
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Taska
Имя: Максим
(Кривой Рог)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Часы, будильник и термометр на DS1307N и DS18B20

Сообщение mim (mim) » 15 ноя 2012, 18:51

masivnik писал(а):Я так понял - он позволяет подключать DS18B20 не только к нулевому порту, а к любому... и все?

Да...

Все гораздо проще чем может казаться... :) Но все нужно проверять.
Вернемся к модернизации твоей программы (с прерыванием).
В ней есть глюк (ИМХО), который не имеют отношения к вышесказанному. Сначала устраним его.
В какой-то момент, заметил постоянное обращение к 1307. Посмотри макрос"Ust_H_M_B_DMG". Я не стал разбираться с великой идеей... Опишу только то чего не должно быть, а ты это устранишь, сообразуясь со своими мыслями. При нажатии на кнопку .... попадаем в ветку установки часов, минут и т.д...
Ориентир - комментарий "Если не нажата комбинация кнопок, то обнуление переменных" в блоке ниже z = 1.... Так вот, поставь осциллограф на шину 1307 и ты увидишь систематический долбеж в шину, этого не должно быть (я поставил z = 0). Может я ошибаюсь...

Дальше.
Самое критичное при работе с 18b20 - выдержать временные интервалы протокола, особенно минимальные участки времени.
Если прерывание попадает в эти периоды то оно увеличивает их. Увеличение интервала 10 мкс на время прерывания (плюс еще около 13 мкс) нарушает требования протокола. В макросах чтения и записи битов 18b20 нужно запретить прерывание в эти периоды (смотри rx_bit и tx_bit). Можно немного подвигать местами запрет и включение прерывания...
Все что касается 18b20, я вижу так.... Проверяй.
Clock_mim.rar

По поводу твоей модернизации. Если делать индикацию в цикле, то обращение к датчику нужно разбить по веткам и чем больше, тем лучше (по участкам отображения сегментов в качестве дополнительных пауз). Был такой пример,
Sin_PWM_K_v4.rar

смотри в нем обращение к датчику. Это конечно напрягает, я думаю что с прерыванием лучше.

ЗЫ. Подсчет задержек я бы делал в переменную, которую подсчитывал там где обращение идет в главном цикле к часам, ведь там секундный цикл.
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Пред.След.

Вернуться в Готовые решения и примеры

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей