А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Я тоже все микрухи на панельки ставил, но это особый случай. Я начитался что от панельки будет ёмкость паразитная и точности хода не будет вот и впаял намертво.
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 08, 2010 09:51:11
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Пт июл 09, 2010 16:03:45
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Apparatchik писал(а):
А корпус кварца заземлять ненужно?
нужно.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик
В библиотеке для програмного I2C число сразу в двоичном формате. Можно как-то в вашу библиотеку запихнуть например функцию bcd2bin и bin2bcd, чтоб в основном коде не мучится?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Пт окт 01, 2010 18:14:41
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
Выводить одинаково, а вот когда время выставляеш например min++ приходится городить switch или кучу проверок или использовать указаные функции. Если есть другой способ поделитесь плиз.
т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10.
Зачем?
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
В выводе проблем нет нада либо сдвигать для десятков и обнулять старшие биты для едениц, либо делить на 10, наверно деление занимает больше ресурсов, но для меги16 или 8 думаю это несущественно. Что там одна строка кода что там (я считаю написаные мною строки, это неправильно, но для часов сойдёт)
Danko писал(а):
т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10. Зачем?
Ну вы же всёравно используете эту функцию при hour++, значит и делите и умножаете на 10.
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Пт окт 01, 2010 20:11:44
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Да использую, но вопрос не в оптимальности кода, а в логике работы самой программы. Зачем тратить процессорное время на двойное преобразование.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
её там недолжно быть, она должна быть до "вечного цикла" тоесть перед while (1). И сбрасывать нужно только седбмой бит а не весь регистр иначе секунды будут обнулятся.
Переход по меткам тоже ненужен ведь оно и так вернётся в начало так как всё в цикле. Вместо goto я бы использовал
Кварц естественно подключен. А почему десятки часов и десятки минут сбрасываются, когда они равны единице? В программе сброс на 3 для часов и на 6 для минут...
_________________ Этот пост оказался полезен? Не поленись, нажми слева!
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Информация по моиму на индикаторы подаётся неправильно, например если 21 час то hour будет 0b0010101 и это подаётся в PORTD индикатор будет билиберду показывать. Просто вы используете програмный I2C и там из двоичнодесятичного (формат DS1307) преобразуется в двоичный. Если не переделывать схему то нужно преобразовывать в двоичнодесятичный формат
Код:
#include <bcd.h>
tmp=bin2bcd(hour); PORTD=tmp;
либо использовать апаратный I2C и библиотеку которую тут вылаживали.
Но в любом случае на индикаторах информация должна менятся хоть и неправильная. Сделайте пока без кнопок и главное меток, а потом допишете кнопки
Код:
while (1) { rtc_get_time(&hour, &min, &sec); // читаем из DS-ки время PORTA=sec; //вывод секунд PORTB=min; //вывод минут PORTD=hour; //вывод часов delay_ms(100); //задержка }
Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.
Немножко доработал проэкт в протеусе чтоб было видно симуляцию, а также написал в программе как говорил више - всё работает! Оба проэкта в архиве.
P.S. Да и запись
Код:
PORTA=0x00;
и ей подобные в самом начале безполезная так, как при сбросе там и так ноль. После автогенератора кода нужно руками чистить, всё где присваивается ноль можно удалить.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения