Тут можно сказать: есть задача, есть разные пути её решения. Ни когда не знаешь заранее верного пути. Как можно заранее знать, что сам себе переусложнил задачу? Я бы остановился на первом варианте, если б он заработал. Быстро, просто и легко.
Но здесь я наверное показываю, что есть путь, есть поиск, решение, есть проблемы, есть и недостаток опыта, есть его приобретение, есть отсутствие помощи, как есть и мнения уже по факту свершения и ещё до фига чего-то.
Я не считаю, что я что-либо перемудрил. Нет "правильного" и "не правильного", есть "рабочее" или "не рабочее". Это важно! "Мудрость" тут вообще не при чём. Можно было сдаться, заныть, заплатить безбашенных денег "дяде". Но когда решение найдено, то это весомее миллионов слов и мнений.
Просто советую искать и не сдаваться. Опыт дело наживное.
И наверное хватит оффтопы разводить ))
_________________ Если в голове каша, значит ваш котелок варит!
Здравствуйте!!! Вот не задача. Ранее мной был написан код для изучения и тестирования работы с часами по TWI. На тот момент все отрабатывало на УРА.Затем я снова вернулся к своему грандиозному проекту для внедрения этих часов.Немнго усовершенствовал ранее написанный код и приступил к испытаниям.Но новая версия работает как-то не стабильно.Обмен с данными по TWI не стабильны.А именно то есть ACK то нет. Долго искал причину, перепробовал всякое,тем не менее решил проверить ранее написанный код. и обнаружилось,что тоже самое происходит и с проверенным кодом. В коде ниже я привел пример на функции чтения данных из часов. каждая сессия чтения отличается, то считывается 6 байт, то 2 байта где-то есть ACK где-то его нет, а где-то анализатор выдает Missing ACK/NACK. Я максимально убрал не нужное с кода, оставил минимум нужного, чтобы было проще анализировать.Я уже подумываю на то , что конкретно измучил свой МК и нужно его менять. Дальнейшая его судьба зависит от Вас Спойлер
По-моему, уже тут ошибка. Зачем взводить TWEA бит, если это ЗАПИСЬ байта?
TWEA нужен при чтении данных. Когда он взведён - данные ещё будут читаться дальше, когда нет - значит, это был последний байт, после чего пойдёт стоп. Но при записи - зачем?
Ну и, чисто эстетически, две одинаковые функции старта не нужны.
Добавлено after 5 minutes 11 seconds: При пошаговой отладке заметил,что происходит зацикливание в while(!(TWCR&(1<<TWINT))). флаг TWINT не выставляется.С чем это может быт связано? Не помню в какой статье, велась дискуссия по поводу цикла while(!(TWCR&(1<<TWINT))). Один из участников писал, что такой цикл использовать нельзя, так как если часы отвалятся,то можно в цикле зависнуть навсегда.В даташите именно так ожидают флаг. Мое предположение,что если часы отвалятся, флаг в любом случае установиться,но будет соответствующий код ощибки в регистре стутуса. Так где истина?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
У меня в этом цикле есть дополнительный счётчик, который при переполнении выскакивает из цикла. Тоже ввёл когда-то из-за подвисаний DS1307 (или чтобы работало при её отсутствиии).
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
не понятно почему нужно вручную выходить из цикла.TWINT устанавливается аппаратно,но этого не происходит.Он же в любом случае должен устанавливаться,хоть есть часы на шине, хоть их нет.Не хочется верить,что модульTWI глючит.
Здравствуйте,уважаемые Кототроники.Сегодня весь день перечитывал здешние посты посвященные часам 1307. Девайс,скажу вам довольно капризный.И не оттого,что он такой уж и сложный,а потому что даташит многих нужных вещах просто не пишет.Китайские товары всегда идут с примечанием "догадайся,мол,сама".А часики у меня долго не запускались,периодически дохли и воскресали,теряли время при выключении питания.Пришлось не раз курить даташит и предпринимать всяческие танцы с бубном,пока набрался некоторый опыт.Итак изложу все по-порядку.В проекте я пользуюсь контроллером АТМега16А,там на порту С пин0 и 1 есть аппаратный TWI (I2C).Он довольно капризный и пришлось немало поиграться пока я его оживил.Примеры кода я приведу в БАСКОМ-АВР,поскольку в нем и пишу. 1.Когда вы пишете шапку программы, правильно укажите скорость работы кристалла.У меня TWI работает только при 4000000 Гц.На скоростях ниже часы 1307 перестают быть видимыми.Кстати этот же фокус работает и для термометра DS18B20.Если с ним программа связаться не может - понизьте такты.И обязательно не забудьте ту же частоту выставить на фюзах контроллера 2.В Баскоме в шапке программы обязательно подключите библиотеку I2C_Twi.lbx если у вас аппаратный TWI.Эта библиотека есть в штатном дистрибутиве Баскома. 3.Правильно пропишите конфигурацию порта и пинов,на которых работает TWI. У меня в АТмеге16а TWI сидит на пинах 0 и 1 портаС. Потому в шапке пишу DDRC=&Bxxxxxx00 x - здесь определяет назначение пина 1 на ввод,0 на вывод.как вам нужно,но PinC.0 и PinC.1 выставлены здесь в нули на ввод.Если вы выставите их в 1,TWI не заработает и будете долго искать причину "поломки" 4.Определяю состояние уровней на пинах порта С при старте PortC=0,т.е все линии посажены в нуль. 5."Знакомлю" программу,где у нее пины SCL и SDA. Config SCL=PortC.0 Config SDA=PortC.1 6.Если TWI (или I2C) работают неуверенно,немного притормаживаю скорость обмена config I2Cdelay=10 7.Запускаю систему TWI,чтобы правильно выставила уровни на пинах С0 и С1 I2CInit. 8.Указываю программе скорость тактирования пина SCL Config TWI=100000 Все.Если у вас технически все подключено правильно,можете приступать к работе.Не забудьте,что пины SCL и SDA должны быть подтянуты к питанию резисторами 5..10Ком.
Рабочий код запускаем как обычно I2CStart 'стартуем обмен с устройствами на шине TWI (I2C) I2Cwbyte &HD0 'вызываем часы 1307 по их адресу &HD0 I2C wbyte 0 'выставляем регистр адресов на самый первый (нулевой по даташиту) регистр.Это регистр секунд I2C wbyte 5 'Пишем в него что-нибудь в двоично-десятичном формате.Важно только,чтобы старший бит был равен 0,потому что он запускает часы 1307 Waitms 100 'даю схеме малость "опомниться" после проведенных манипуляций иначе у нее могут быть "заскоки".В иностранных программах этот "отдых" бывает даже до 500 миллисекунд.Я выставил 100.Пока хватает.Если в вашем экземпляре часов бывают каламбуры записи-чтения,пробуйте увеличивать интервалы между доступами к регистрам. A=Minut 'некой байтовой переменной А присваивается значение Минут из подпрограммы настройки времени A=MakeBCD(A) 'Дальше эта переменная конвертируется в двоично-десятичный вид функцией MakeBCD I2Cwbyte A 'Конвертированная переменная А записывается в регистр минут часов 1307 и указатель адресов в микросхеме 1307 автоматом передвигается на регистр часов. Записав данные в регистр минут снова даем схеме передышку Waitms 100 и по тому же образцу пишем часы,потом все остальное.Хотя и вроде не обязательно,но я также заношу ноль в регистр управления &HD7.Все.Заканчиваю настройку часов командой I2CStop. А теперь про "фокусы" схемы. 1.Следите,чтобы напряжение на батарейке было в допустимых пределах.Иначе либо не читает,либо не пишет,либо вообще ее не видно. 2.В микросхеме по-видимому есть куча триггеров.которые должны находиться в каком-то определенном состоянии.По разным причинам,а особенно из-за пиковых всплесков напряжения на шине питания,статического электричества эти триггеры оказываются расстроенными и микросхема "защелкивается".Вроде все есть.все подключено,все в пределах,а она "сдохла".Путем танцев с бубном случайно удалось выяснить,что кратковременное замыкание вывода Vbat на землю действует как "сброс" и схема начинает отвечать на обращения.Долго не было понятно,почему регистры не держат настроек времени после выключения основного питания.Чего только не перепробовал.Помогло одно.Линии SCL и SDA отпаял от ведущего контроллера,чтобы его не повредить,потом SCL и SDA часов замкнул между собой накоротко и кратковременно "стукнул" по ним напряжением +5 вольт от шины питания.Ныне,тьху-тьху микросхема ожила и работает как в "былой молодости".Все пишет,все считает и хранит.Правда конфуз выловился некий и это уже внешними примочками не решить.Видно грешит внутренняя математика.Когда количество минут выставляю на 59 за ними на дисплее следует 60,61... и часы не меняются.Я рот разинул от удивления ... Если минуты при настройке выставляются в 58 все идет как по-салу.Вот пока... Успехов всем Кототроникам в их кропотливом хобби.
Во-первых, на 4МГц (вроде там 6 нулей Вы нарисовали) TWI не рассчитан, частоты там на порядок меньше.. А DS1307 по даташиту вообще 100 кГц, ЕМНИП. Вот DS3231 может и на 400 кГц работать, но уж точно не на 4 МГц. Во вторых, после 59 минут точно идут 00. Специально прямо сейчас поверил. А вот если зачем-то установить в большее, чем 60, значение, то будут и дальше увеличиваться, пока не выскочат-таки в нормальный диапазон. В третьих, DS1307 - одно из самых простых устройств на шине I²C, и каких-либо сюрпризов от него ждать не приходится. Всё чётко по даташиту.
Спасибо за замечания и за Ваши интересные посты из коих я многому поучился.По канону все должно быть так как Вы и пишете,но мои экземпляры 1307 почему-то капризны и не хотят работать в таких режимах.Более того я написал здесь в посте config TWI=100000 и скажу Вам честно,микруха работать перестала.Один нуль удалил,получилось config TWI=10000 (!).Только так она пашет как ни в чем не бывало.Я думаю,что у ребят,постивших здесь о своих проблемах с 1307,тоже попались китайские микрухи "с фокусами",нетрадиционалы по даташиту" так сказать.так что у кого микруха имитирует "дохлость" попробуйте оживить ее сбросом и подбором режимов тактирования.Вещи все-таки китайские,а там не все "по-закону".И еще,уважаемый WiseLord,я хотел бы посоветоваться у Вас насчет 5807М FM радио.Сделал я его,но работает что-то оно неуверенно.Похоже там нет автоподстройки частоты,со временем станция уплывает в шумы.На какой ветке мы можем с Вами побеседовать на сию тему? Спасибо за ответ.
Вы имеете ввиду схему 5807М я так понял.Там действительно в третьем регистре есть бит TUNE.Выставив его в 1 добиваемся точной настройки на станцию,после чего он автоматом сбрасывается в 0 и за привязкой к частоте ничто уже более не следит.Или я что-то накосячил в познаниях?
Здравствуйте, коты. Вопрос по кварцу. Нормально, что часы 1307 убежали на 3 минуты за месяц? Как сделать точнее? Перебирать кварцы или как то можно подстроить? Температура и питалово стабильны. Есть и 3231, но уже всё сделано в железе.
_________________ Я всё-всё узнAю и стану профессором.
Для корректировки времени я заводил 3-и байта в EEPROM и делал в меню возможность их настройки. Каждый байт определяет свою задержку. Старший - 10 миллисекунд, средний - 100 микросекунд и младший - 1 микросекунду. Значения байтов выступают при этом множителями. Диапазон значений 0-99. Паузу выбирал в две секунды и делал коррекцию 4-е раза в сутки (можно раз в сутки). Выбор значений взвалил на пользователя, т.к. учесть (рассчитать по алгоритмам) значения практически не возможно, т.к. много всяких процессов и неопределённостей. Дал команду остановки хода, взвёл 3-х байтный таймер, дождался отклика что ход остановлен, вывел сообщение о коррекции, дождался истечения таймера, запустил ход, обновил значение времени. Со своей стороны смог только обеспечить временное окно, когда наиболее безопасно проводить коррекцию хода. В итоге за месяц погрешность не превысила 1-й секунды. При этом точность хода корректировалась ещё только на среднем байте. Младший остался в более долгосрочной перспективе. Синхронизировал по "Satellite Time Reader" с сотового телефона, каждый раз после коррекции подкручивал секунды так, что б засвечивались одновременно (муторно не выполнимо).
_________________ Если в голове каша, значит ваш котелок варит!
DrLirhium, спасибо за идею. Только сделаю "железную" коррекцию. Измерю поточнее на сколько конкретно часы спешат и последнюю секунду в сутках сделаю соответственно длиннее. Железные таймеры все заняты. Сделал на захвате протокол общения с датчиком темпер.-влажности DHT22-таймер1, ещё ШИМ и софт таймер. Asm, Mega8.
_________________ Я всё-всё узнAю и стану профессором.
Подскажите пожалуйста по инициализации DS3231! Что записывать в регистры 0EH, 0FH? Просто сколько не смотрю в даташит, то в регистр 0EH максимум требуется "пнуть" преобразование температуры.
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Согласно написанному в даташите на страницах 13 и 14 расписываем биты в байте 0EH и 0FH, конвертим в HEX и скармливаем. В зависимости от вАшей ситуации меняем биты, конвертим в HEX и обновляем. Сложного ничего нет, просто надо прочитать и понять.
Сам не юзал 3231, возился с 1338. В ней, в моём случае (мне надо только включить SQW на 1Гц, для обновления значений на дисплее) регистр 07H = 00010000 или 0x10 в HEX.
_________________ Если в голове каша, значит ваш котелок варит!
Последний раз редактировалось DrLithium Пт янв 11, 2019 01:55:32, всего редактировалось 1 раз.
Короче сам виноват Я подразумевал только пуск часов, безо всяких выходов и прочего. Просто после рассматривания даташита было у меня мнение, что вообще не надо инициализировать микросхему, если просто юзать часы без выходов и прерываний.
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Заголовок сообщения: Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Добавлено: Пн окт 05, 2020 15:08:35
Собутыльник Кота
Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2957 Откуда: Беларусь
Рейтинг сообщения:0
Может было уже у кого. ds1307. При подаче внешнего питания, время идет. При отключении внешнего питания время сбрасывается на время компиляции. В чем может быть проблема?
Добавлено after 7 minutes 42 seconds: и начинают идти занового в момента времени компиляции. Т.е "натиканное" время часы не помнят. Исходное время для них - это установленное при программировании. Странно вообще.
Сейчас этот форум просматривают: Kolin и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения