Страница 1 из 2

DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 12:57:28
-=Den=-
Добрый день всем!
Подскажите новичку:
собираю таймер на Atmega8 + DS1307 программа своя(учусь) использую TWI, проблема - при выключении питания часы впадают в ступор, т.е. возвращаю питание - на индикаторе тоже время что и после выключения + часы стоят.

Если в программе при старте обнулять нулевой байт регистра DS1307 то все хорошо, время помнят, часы тикают...
Получается, у меня DS1307 при выключении не запоминает состояние бита СН? А ведь вроде по даташиту должна? Батарейка присутствует, напряжение на ноге №3 по моему тестеру 3,3 вольта.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 13:33:45
Vov123
Может чип дубовый,у меня сейчас на столе подобный часы идут,проблем нет с включение/выключением.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 13:45:32
Goodefine
Схему и программу было бы неплохо увидеть...

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 15:34:03
-=Den=-
Во вложении программа и схема, на схеме нет резисторов на линиях индикатора и диодов которые есть в реальности.
Прошу не бить по поводу программы она у меня первая и еще в процессе... :oops:


UPD.
При первом запуске с раскомментированной строкой rcall settime
Если раскомментировать ;rcall timeinit то часы идут и время помнят но при этом обнуляются секунды :(

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 18:58:52
Goodefine
Нет времени разбираться в асме. Попробуйте по логике сделать как то так:

Код: Выделить всё

void rtc_init(void)
{ uchar8 data;
  RTC_RESET_LOW();
  RTC_DATA_LINE_IS_INPUT();
  NOP();
  RTC_CLK_LOW();
  NOP();
  write_ds1302(CONTROL_REGISTER,UNPROTECT);
  data = read_ds1302(0x81);
  if (CHECK_BIT(data,7))
    write_ds1302(0x80,0x00); // if bit 7 is high, Clock is stopped
  write_ds1302(0x90,0xa5);
  write_ds1302(CONTROL_REGISTER,PROTECT);
}
Это для ds1302, но думаю должно быть что то похожее...

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 20:04:36
GP1
если потерпишь пару дней, посмотрю код, ща немного занят.
как говорится - ASM forever :kill: :kill: :kill: своих не бросаем!

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Чт сен 30, 2010 20:59:23
-=Den=-
Vov123 писал(а):Может чип дубовый,у меня сейчас на столе подобный часы идут,проблем нет с включение/выключением.
Скорее я дубовый :))) но может и чип...
Goodefine писал(а):Нет времени разбираться в асме. Попробуйте по логике сделать как то так:
спасибо, попробую
GP1 писал(а):если потерпишь пару дней, посмотрю код, ща немного занят.
как говорится - ASM forever :kill: :kill: :kill: своих не бросаем!
потерплю сколько надо :))
Да асм мне както роднее

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Пт окт 01, 2010 11:03:47
Alex Medvedev
Похоже что на самом деле чип дубовый =)
Я кстати тоже эти часы не очень давно раскуривал, таких глюканов небыло . тоже всё на асме писал. Если интересно посмотри у меня на сайте http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Пт окт 01, 2010 21:20:22
-=Den=-
Alex Medvedev писал(а):Похоже что на самом деле чип дубовый =)
Купил другой чип, проблема осталась :(
"Будем искать"...

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Сб окт 02, 2010 00:36:37
Vov123
Набросайте простенькую программку на C.От чужого asm-ма у многих голова начинает болеть.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Сб окт 02, 2010 09:37:16
-=Den=-
Vov123 писал(а):Набросайте простенькую программку на C.
Не... я еще с асмом не разобрался :)
От чужого asm-ма у многих голова начинает болеть.
Это я уже понял...

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Сб окт 02, 2010 14:43:06
Qwertty
А так и должно быть. По умолчанию 7-ой бит в регистре секунд установлен и часы стоят. Какой смысл считать непонятно какое время? При записи же правильного времени, а 59 в BCD формате это 0b01011001 7-ой бит в регистре секунд автоматом сбросится и часы запустятся.
Вам надо ввести в программу функцию установки часов, все равно без этого нормально пользоваться Вашим девайсом не получится. При старте программы считывайте время, контроллируйте 7-ой бит в регистре секунд и если он установлен выводите прочерки типа --:--. Если сброшен - выводите время. Ну или если индикатора вообще нет, то все равно нужно как то часы установить, тут Вам виднее что из интерфейсов есть, а чего нет.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Сб окт 02, 2010 18:21:22
GP1
-=Den=- писал(а): Если раскомментировать ;rcall timeinit то часы идут и время помнят но при этом обнуляются секунды :(

Код: Выделить всё

timeinit:
...
; Передача байта данных (Пишем в регистр)
          ldi r16, 0b00000000
          out TWDR, r16
ты же сам сбрасываешь секунды в 00 и запускаешь часы.
если часы уже тикают, то чтобы секунды не сбрасывались надо прочитать Reg00, посмотреть состояние бита 7, и если он сброшен пропустить инициализацию (включение часов)
При первом запуске с раскомментированной строкой rcall settime
вот тут не совсем понял саму фразу :dont_know:

ps ты бы проектик прицепил.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Вс окт 03, 2010 22:25:08
FUZZY_
Вот схемотехника старых телевизоров - timer сoхраняет работоспособность до bat=0.72

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Пн окт 04, 2010 18:07:54
-=Den=-
Qwertty писал(а):Вам надо ввести в программу функцию установки часов, все равно без этого нормально пользоваться Вашим девайсом не получится.
Конечно надо, но к этому шагу я еще не дошел, пока устанавливаю программно.
Qwertty писал(а): При старте программы считывайте время, контроллируйте 7-ой бит в регистре секунд и если он установлен выводите прочерки типа --:--. Если сброшен - выводите время.
Почти так и сделал, считываю нулевой регистр, сбрасываю 7-ой бит при этом не трогая остальные биты потом записываю полученный байт обратно. В таком варианте часы нормально работают.
GP1 писал(а):ты же сам сбрасываешь секунды в 00 и запускаешь часы.
если часы уже тикают, то чтобы секунды не сбрасывались надо прочитать Reg00, посмотреть состояние бита 7, и если он сброшен пропустить инициализацию (включение часов)
У меня получается, что бит 7 всегда при включении питания установлен ...

GP1 писал(а):При первом запуске с раскомментированной строкой rcall settime
вот тут не совсем понял саму фразу :dont_know:
ну это моя программная установка времени, это временно, пока кнопки не припаял.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Пн окт 04, 2010 18:52:26
diehard
IMHO перепутано питание VСС и BATT. Проверь внимательно.

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Вт окт 05, 2010 07:59:45
GP1
-=Den=- писал(а): У меня получается, что бит 7 всегда при включении питания установлен ...
тогда проверь работу DS-ки в автономке, задай генерацию импульсов на выходе SQW/OUT, и посмотри тикают они в автономе или нет

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Вт окт 05, 2010 10:35:31
-=Den=-
diehard писал(а):IMHO перепутано питание VСС и BATT. Проверь внимательно.
С питанием все правильно.
GP1 писал(а):тогда проверь работу DS-ки в автономке, задай генерацию импульсов на выходе SQW/OUT, и посмотри тикают они в автономе или нет
После того, как стал считывать при старте нулевой регистр, сбрасывать 7-ой бит при этом не трогая остальные биты потом записывать полученный байт обратно - часы идут так как положено и работают в автономке нормально.

Может, все таки, этот 7 бит и должен при каждом включении вручную сбрасываться?
В общем пока оставлю для себя этот вопрос открытым, может когда-нибудь дойдет что я не так делаю.
Всем спасибо кто пытался мне помочь :beer:

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Вт окт 05, 2010 13:11:43
Vov123

Re: DS 1307 + батарейка - не стартуют часы

Добавлено: Вт окт 05, 2010 13:39:27
GP1
Толи лыжи не едут... :dont_know:
ты же сам пишешь:
-=Den=- писал(а): После того, как стал считывать при старте нулевой регистр, сбрасывать 7-ой бит при этом не трогая остальные биты потом записывать полученный байт обратно - часы идут так как положено и работают в автономке нормально.
если ты хотя бы раз, после подключения батарейки, сбросишь в 0 7-й бит R00 часы будут идти как положено