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

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

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

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

Сообщение masivnik (Иван Николаевич) » 12 дек 2015, 19:22

Приветствую многоуважаемых форумчан ФЛАВКОДЕ!

Небольшое отступление:
Для написания "прошив" своих проектов, простите, я уже совсем не использую сам ФЛАВКОДЕ. И это не потому, что он хуже или лучше, а только по тому, что мне проще и понятней писать напрямую в СИ. Но, как уже писал, многое что беру с ФЛАВКОДЕ – т.к. не вижу смысла придумывать новый велосипед. И в любом случае, для начального познания в написании программ МК, всем рекомендую начинать именно с ФЛАВКОДЕ!!!

Ну да ладно, теперь к тому, что собираю:
Кум, зная мое хобитовское занятие, обратился ко мне с просьбой собрать ему часы на газоразрядных лампах (ГЛ) – уж очень ему понравились некоторые варианты таких часов, которых множество выложено в интернете. Показал он мне некоторые ссылки по часам на ГЛ.
В общем, перейду сразу к делу. Полазил по амбарам и поскреб по сусекам – нашлись давно залежавшиеся где-то на складе, у коллег, ГЛ типа ИН1 – других «на халяву» нет. Ну, тут уж деваться некуда – надо собирать на них часы.
Разработал принципиальную схему на базе МК Atmega16 (благо их относительно много с разбора). Источник питания 200 вольт – решил собрать на MC34063 (тоже с разбора старых кассовых аппаратов). Что касается хода часов, то вложил в принципиальную схема несколько вариантов и основной, что в итоге использовал, т.к. были с разбота, это DS1307. Остальные варианты если захочется – то вполне можно реализовать… Так-же, если понадобится, включил зуммер для будильника, датчик освещения для индикации и подключение датчиков температуры DS1820. Шину I2C к заложенным выводам МК для аппаратной реализации – не использую, так удобней расположить детали и соответственно развести печатную плату.
Далее: нарисовал печатки, вытравил, установил детали, собрал сами часы и написал прошиву – вот результат…
01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg

Не знаю, надо ли кому и стоит что либо по ним тут выкладывать??? – думаю решат наши многоуважаемые форумчане…
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе

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

Сообщение masivnik (Иван Николаевич) » 01 янв 2016, 16:59

Приветствую многоуважаемых форумчан!!! Всех с наступившим Новым 2016 годом!!! Всем всего самого наилучшего и творческих успехов!!!
Я, себе, на Новый год, сделал подарок – до-собрал часы на Газоразрядных лампах ИН1.
Вот результат того что получилось – мне очень нравится, а друзьям особенно – видя перед собой часы и что они представляют из себя изнутри… Красуются они - в прихожей…
ЧАСЫ_ГЛ_ГОТ.jpg

Выкладываю частичною информацию – которую вполне достаточно чтобы кто либо смог, для себя, повторить что-то подобное и основываясь на Flowcode – он легко может написать себе прошиву и заложить в них не только часы… Транзисторы для ИН1 взяты с разбора неисправных энергосберегающих ламп...
PS_GL_ATTMEGA16_44.GIF
ИМН_GL_hasi.rar

Всем удачи и еще раз - с Новым 2016 годом!!!
С уважением
Иван Николаевич
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе

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

Сообщение masivnik (Иван Николаевич) » 14 фев 2016, 14:03

Приветствую всех и тех - кому еще интересна тематика по датчикам DS1820.

В выложенных выше часах, на газоразрядных лампах (ГЛ), на тот момент, была только реализована функция часов с DS1307.
При этом, разрабатываемая принципиальная схема подразумевает подключение датчиков температуры DS1820, в тоже время, сама тема говорит о наличии данных датчиков и возможных готовых примеров с ними.
Так вот, в очередное свободное время продолжил дописывание прошивы с использованием датчиков температуры DS1820.

Но сначала о небольшом «косячке» выложенных ранее часах на ГЛ:
В «ПРОТЕУСЕ» этот «косячек» не совсем заметен, да и в железе проявлялся очень редко и кратковременно, а именно – индикация время какой либо цифры могла показать не соответствующую цифру. Дело в том, что функции I2C с FC для DS1307, до этого, использовал в другом проекте на LCD. В следствии чего, вывод индикации производился в основном цикле, последовательно после чтения время с DS1307, при помощи подготовленной функции «void _read_1307(void)» файла «своей» библиотеки «ds1307.h» - где часы, минуты и секунды, при их чтении, сразу, до их преобразования в «нормальный вид» для индикации, присваивались соответствующим глобальным переменным. Соответственно при использовании LCD – все работает замечательно, т.к., до вывода данных, они сначала преобразуются в «нормальный» формат...
Так вот – я, взял уже готовые функции, для чтения DS1307 с LCD, и использовал их в часах, где индикация реализована через прерывание, при этом позабыв, что после считывания данных с DS1307 – данные «энное» время находятся, для индикации, в несоответствующем формате . В результате получался данный «косячек». «Косячек» найден и исправлен. :idea:

Теперь к DS1820:
Почему выкладываю именно здесь? – думаю, что это честно, если используешь уже готовые функции из FC и многую разжеванную информацию с данного форума.
Все функции по 1-Wire мною взяты с FC 4 версии и находятся в файле «AVR_1_Wire_FC.h».
Если кому интересно, то посмотрите - основываясь на даташите и изложенной информации данного сайта (включая прекрасно разжеванную информацию - многоуважаемого MIM), насколько я понял, в нем изложил комментарии. Расписывать каждую функцию, пошагово, не вижу смысла – считаю, что кому нужно, то почитав даташит и данный сайт, сами все поймут.
Какие цели ставил перед собой, в данном проекте, по DS1820:
1. Максимальное количество датчиков – 2;
2. Автоматическое определение наличия и количества датчиков: Есть датчик/и - вывод температуры и время с соответствующим переключением между ними. Нет датчиков – постоянный вывод время, при этом, если датчики обнаружены – автоматический вывод считанных с них данных;
3. Переключение датчиков – данные с первого датчика можно выводить вместо второго и наоборот;
4. Автоматическое определение типа датчика DS18S20 или DS18B20 и соответствующее преобразование данных с них;
5. Коррекция считанных температур с датчиков – для компенсации, допустим, дополнительного нагрева от тех же часов или еще чего либо;
6. Плавное гашение и зажигание выводимых данных между временем и датчиками.
И так, все выше изложенные цели были благополучно реализованы, но описывать, как и что было реализовано по каждому пункту, не буду – думаю разберётесь или напишите соответствующий вопрос …
Остановлюсь лишь на 2-ом пункте:
В файле «REGIM.h» находятся все функции для DS1820. Функция «void vibor_regima(uint8_t REG)» выполняет выбранный режим и, в частности, функцию «void VREM_TEMP()» - чтение время и температуры.
Функция «void VREM_TEMP()» по отношению к DS1820 выполняет:
1. Сначала запускает функцию «oo_scanbus()» - т.е. читает сколько датчиков подключено и их РОМ-коды. Если датчики не обнаружены или другие проблемы – то сразу выводим время. В любом случае – через энное количество время, перед командой конвертации данных с датчиков, всегда запускаем «oo_scanbus()» и тем самым автоматически определяемся с наличием датчиков и нужно что-либо по ним выводить или нет;
2. Если обнаружили датчик/и то при помощи функции «uint8_t TEMP_DS1820 (uint8_t NOM_DAT)» читаем с первого или второго датчика температуру. Данная функция обеспечивает:
a) если произошла ошибка при считывании байт – ей присваивается значение 255;
b) автоматически определяет, какой датчик подключен - DS1820 S или B и соответствующее преобразование полученных данных.
По первому пункту (a): первое, что делает данная функция – запускает функцию «uint8_t oo_read_device(uint8_t count)» (смотреть файл «AVR_1_Wire_FC.h»), а именно - считывает 9 байт памяти одного из датчиков, обнаруженных с помощью функцию «oo_scanbus().
По второму пункту (b): по даташиту на DS1820 S и B известно, что для DS18S20 считанный 4 байт ОЗУ - зарезервирован и всегда равен 255, а для DS18B20 считанный 4 байт ОЗУ - регистр конфигурации, который всегда меньше 255 и по умолчанию равен 127, т.е. 12 бит. Соответственно, считав 9 байт памяти датчика, по 4-му байту массива «oo_scratchpad[4]» мы можем легко определиться – кокой датчик у нас подключен. Что и делаем, включив далее условие «if(oo_scratchpad[4]<255)» - определяемся с типом датчика и включаем соответствующее преобразование в нужный нам формат считанной температуры с датчика («TEM_A=DS1820_get_temp()/2;» для DS18S20 9 бит или «TEM_A=DS1820_get_temp()>>4;» для DS18B20 12 бит);
3. По поводу отсутствия каких либо датчиков уже было сказано выше - в 1-ом пункте. А вот если их несколько или только один? Так вот, при помощи функции «uint8_t oo_get_devicecount()» (смотреть файл «AVR_1_Wire_FC.h»,), можно легко определиться с количеством подключенных датчиков – запускать данную функцию нужно только после удачного прохождения функцию «oo_scanbus()». Если датчиков нет, то по 1-му пункту, понятно, что сразу показываем время. А если датчик/и обнаружен/ы, то сначала переходим к 2-му пункту, т.е. работаем с первым датчиком, а затем при помощи функции «uint8_t oo_get_devicecount()» - определяемся с наличием второго. Если обнаружен и второй датчик, то выводим по нему данные, если его нет, то сразу, после вывода данных с первого, переходим к индикации время.
Все – далее все описанные выше пункты повторяются.

Что касается самого проекта и все что его касается – выкладываю архив.
GL_1820.rar

В железе - все работает замечательно...

С уважением
ИМН – Иван Николаевич.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

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

Сообщение Volume (Евгений) » 03 мар 2016, 07:50

Здравствуйте. Решил повторить «избитую» тему с часами и термометром.
Реализовал индикацию, опрос часов, но как только в теле программы FC5 появился макрос компонента OneWire откомпилированный без ошибок и предупреждений проект в протеусе начинает сбоить. Время до процедуры опроса термометра и часов вместо заданных 3cек изменяется на 4 мс. Если удалить этот макрос, программа работает стабильно. В каком месте происходит сбой непонятно. Буду благодарен за любую помощь.
[img]
1.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Volume
Имя: Евгений
(Иркутск)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

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

Сообщение mim (mim) » 03 мар 2016, 11:27

Volume писал(а): Буду благодарен за любую помощь.
"Иркутск и Варшава, Орел и Каховка..." Повезло тебе...
:headbang: А ни че, что контроллеры разные? :D
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

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

Сообщение Volume (Евгений) » 04 мар 2016, 01:31

« - Этапы большого пути…» Холодно у нас, очки запотели. Взял проект в протеусе, на контроллер внимание не обратил :headbang: с ним редко работаю. Благодарю! :!)
Аватар пользователя
Ник: Volume
Имя: Евгений
(Иркутск)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

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

Сообщение masivnik (Иван Николаевич) » 27 мар 2016, 18:29

Приветствую всех форумчан ФЛАВКОДЕ!
Надо бы как то добить, по возможности - до конца, эту тему и, в частности, выложенный проект на газоразрядных лампах...
Выкладываю, на данный момент, финальный результат, т.к. часы уже не у меня - а благополучно работают у того, кто сподвигнул меня их собрать.
Все что нужно, включая инструкцию по настройке, к данным часам - находится в ниже выложенном архиве:
HASI_GL_final.rar

Так же, выкладываю обновленный вариант первых моих часов с старой темы часы на DS1307. Тема, хот и старая, но несколько таких часов было собрано и они работают без нареканий. Но, т.к. время на месте не стоит, то мною было принято решение - переписать на них прошиву с учетом моих новых наработок и того, что данные часы практически аналог выше выложенных на ГЛ, за исключением - используются 7-и сегментные индикаторы и нужно переназначить порты процессора. Это корректируется очень просто, разве что индикацию пришлось немного поменять... При этом, инструкция, к данным часам, такая-же как к часам на ГЛ - только в них еще добавлен будильник (описание будильника, в инструкции, тоже есть).

Всего наилучшего
С уважением
Иван.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: masivnik
Имя: Иван Николаевич
(Междуреченск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Пред.

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

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

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