Страница 1 из 2
Ds1307 изменеие времени. Посоветуйте алгоритм.
Добавлено: Ср июл 30, 2008 18:20:59
v000va
Есть Ds1307, вычитываю и пишу в неё нормально. Для установки времени есть три кнопки, по нажатию 1-й нужно чтоб увеличивалось число часов часы, 2-й минут, 3-секунд. Вычитаное из ds1307 значение времени храню в памяти. Мой алгоритм такой:
1. Проверяю нажата ли кнопка ->да
2. Считываю из памяти текщее значение времени
3. Увеличиваю на 1
4. записываю в DS1307
Фишка в том, что если просто увеличивать время по inc temp1 то после 09 достигается значение например 0А, которое нужно фиксировать и обнулять младшую часть + увеличивать старшую, чтоб было 10. К тому же при увеличении нужно контролировать для минут и секунд достижение 60, а для часов 24. Т.е. в общем получается довольно громоздко. Может кто-то посоветует более простой алгоритм записи времени в таймер?
Добавлено: Ср июл 30, 2008 19:31:35
ARV
чего ж тут посоветовать, кроме BCD-арифметики? ну оформите все в виде подпрограммы, чтобы с минимумом усилий инкрементировать числа по разной "базе"... не думаю, что это покажется вам менее громоздко, но все же....
я, когда делал часы на этом DS1307, делал инкремент/декремент времени вообще поразрядно , т.е. отдельно десятки и отдельно единицы... правда на Си, но особой красоты в программе не вышло - признаюсь...
Добавлено: Чт июл 31, 2008 08:41:27
Krik99
У меня вот сколько выляется этот DS1307, в протэусе всё работает, а на железе не в какую, пишет 00:00. Не могли бы дать схему включения DS1307. И будет ли она работать без дополнительной батерейки на 3v? И какая минимальная частота у МК должна быть?
Добавлено: Чт июл 31, 2008 10:21:59
v000va
Набросал текст программы, выходит не так уж много кода. Буду делать как задумал.
Krik99 По поводу схемы: для линии SDA и SCL обязательно нужны резисторы подтяжки по 5В, батарейку 3В лучше поставьте. Кто-то мне говорил, что i2c без неё в этой ИМС хуже работает. За основу возьмите A P P L I C A T I O N N O T E A V R 3 0 0 если на asm пишете, там в pdf даже есть ссылка на обязательные резисторы. Если на Си пишете, то апноут есть на сайте Атмела. В этом же доке есть ссылка расчета задержек исходя из частоты проца.
По поводу Proteus, тоже в нем моделировал-моделирую, в нем программа нормально не работала, а на железе заработала. Так что всецело я Proyeus теперь не доверяю, мало-ли каких багов наделали программисты.
Добавлено: Чт июл 31, 2008 11:17:36
ARV
если склероз меня не подводит, то DS1307 можно использовать и без батарейки, но при этом вывод этот надо посадить на землю (а не куда-то еще, как может показаться).
Добавлено: Чт окт 02, 2008 19:57:12
sachok
Товарищи может у ковото есть исходник на Си для работи с ds1307.?
А то я учусь программировать и теперь мне в голову пришла идея сделать часы-календарь-термометр, термометр у меня получается, а с часами проблема. Если у ковото есть исходник то поделитесь пожалуйста.
Добавлено: Пт окт 03, 2008 08:06:04
dt_andrew
скачиваеш исходники от "Усилителя с микроконтроллерным управлением"
на предпоследней страницы темы
и находиш там все что тебе нужно
как работать , алгоритм установки часов, вывод на ЖКИ и прочее
Удачи
Добавлено: Сб дек 13, 2008 19:02:37
sachok
Написал я кусочек программки но есть проблемы. После того как секунды дойдут до 59 то на дисплее остаётся цифра 9.Что с этим делать? Можно ли сделать так что бы время и дата отображалась в таком формате, например:
время: 22:05:08
дата: 13.12.08
?
Добавлено: Сб дек 13, 2008 22:11:02
ARV
sachok писал(а):Написал я кусочек программки но есть проблемы. После того как секунды дойдут до 59 то на дисплее остаётся цифра 9.Что с этим делать? Можно ли сделать так что бы время и дата отображалась в таком формате, например:
время: 22:05:08
дата: 13.12.08
?
читайте про строку формата для
printf. думаю
%.2u:%.2u:%.2u вам поможет
Добавлено: Сб дек 13, 2008 22:13:00
AndreiVV
sachok писал(а):дисплее остаётся цифра 9.Что с этим делать?
очистите экран перед выводом
sachok писал(а):Можно ли сделать так что бы время и дата отображалась в таком формате, например:
время: 22:05:08
дата: 13.12.08
?
можно
Код: Выделить всё
sprintf(lcd_buffer,"Time:%02u:%02u:%02u",hour,min,sec);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
sprintf(lcd_buffer,"Date:%02u.%02u.%02u",day,month,year);
lcd_gotoxy(0,1);
lcd_puts(lcd_buffer);
Добавлено: Вс дек 14, 2008 02:45:24
Иван23
вот видел
http://radiokot.ru/forum/viewtopic.php?t=9760 и к стати вниманию админов и модераторов листая форум находил много похожих тем,даже с одинаковым названием, может их в одно слить?
Добавлено: Вс дек 14, 2008 12:20:04
sachok
Если сделать так как предложил AndreiVV то всё работает на УРА. СПАСИБО всем!
Добавлено: Пт апр 17, 2009 22:14:09
sachok
Что бы не плодить темы напишу здесь. Есть необходимость сделать часы которые должны считать до 3000 - 4000 часов. можно ли такое чудо на DS1307 сделать или она просто как часы реального времени будет после достижения 23:59:59 сбрасываться на "0"?
Добавлено: Пт апр 17, 2009 22:36:06
ARV
sachok писал(а):Что бы не плодить темы напишу здесь. Есть необходимость сделать часы которые должны считать до 3000 - 4000 часов. можно ли такое чудо на DS1307 сделать или она просто как часы реального времени будет после достижения 23:59:59 сбрасываться на "0"?
будет сбрасываться. но в ней и календарь есть - при сбросе суток прибавится день в календаре. так что вы сможете вычислить общее количество прошедших часов математически
Добавлено: Сб апр 18, 2009 14:06:46
Pooher
А можно и взять с вывода 1307 сигнал 1 Гц и считать по прерыванию.
Добавлено: Сб апр 18, 2009 14:21:00
ibiza11
Pooher писал(а):А можно и взять с вывода 1307 сигнал 1 Гц и считать по прерыванию.
ага
а еще можно поставить ПЛИСину с внешним генератором и снимать с нее сигнал 1Гц
или к наручным часам подключить и оттуда снимать контактами сигнал 1 Гц

Добавлено: Сб апр 18, 2009 15:40:04
sachok
я хотел использовать ds1307 для того что бы отказаться от прерываний:)
Добавлено: Сб апр 18, 2009 17:20:04
Pooher
А можно и взять с вывода 1307 сигнал 1 Гц и считать по прерыванию.
я хотел использовать ds1307 для того что бы отказаться от прерываний Smile
Ну ет я скорее пошутил, чем посоветовал

Добавлено: Чт май 14, 2009 07:22:04
R2D2
Доброго времени суток Уважаемые!
По необходимости пришлось, столкнулся вышеупомянутыми часами (DS1307), и недавно освоенным семейством MSP430. и как всегда возникли свои НО: MSP430 питается от трех вольт, а DS1307, от пяти. При всем этом выводы данного контроллера не поддерживают пяти вольтовою логику.
Что я сделал:
- часики посадил на 5В (точнее 4,7В).
- подтягивающие резисторы линий шины I2C подключил к напряжению питания 3В. Земля общая.
Процесс записи данных в часы, проходит без проблем, а при попытке считать данные, не поступает сигнал АСК после байта адреса (0D1h). На двух микросхемах проверял, результат тот же.
Где собака зарыта? Из-за чего такое может быть, подскажите пожалуйста.
P.S. Если возникнет вопрос, почему именно такой набор микросхем?
Отвечу на перед: Партия сказала надо!
Добавлено: Чт май 14, 2009 18:32:10
Yellow Tiger
R2D2 писал(а):...MSP430 питается от трех вольт, а DS1307, от пяти.
В простейшем случае выводы соединяют через гасящие резисторы, некоторые применяют для такого сопряжения полевики, кто-то - буферы (скажем, 74AHC125), а как то же самое сделать кошерно, можно почитать вот
здесь.