Всё по DS1307 и прочим часам Dallas (Maxim)
Re: Проблема с часами на Atmega32 и DS1307(отстают)
TO Vov123: Да батарейка при выключенном питании 3.2В. Новую брал.
TO Eugene.Negrobov: Согласен сам подумывал делать проверку по иницилизации. Думаю придется.
TO Eugene.Negrobov: Согласен сам подумывал делать проверку по иницилизации. Думаю придется.
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Проблема с часами на Atmega32 и DS1307(отстают)
Сюда перенёс.
Эммм... А чего там инициализировать? Питание подал — часы пошли. Единственный вопрос, в 12-ти или 24-х часовом формате.kapitaneo писал(а):Хм только заметил, что в коде инициализация прописана rtc_init(3,1,0).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Йошъ Dizel
- Родился
- Сообщения: 6
- Зарегистрирован: Пт мар 05, 2010 20:22:50
- Откуда: Маяк
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
в даташите сказано, что напряжение батареи доллжно быть в диапазоне 2.0 ... 3.5 В и микруха доступна при напряжении Vcc=1.25 * VBAT. то есть теоретически, если VBAT=2 В, то я смогу работать с микрухой при 2,5 вольт? у меня питание схемы 2.8-3.7 вольт, вот боюсь, что микруха не захочет работать( кто что думает и запускал ли дс1307 при 3.3 вольтах?
(эта мысль запрещена к распространению законом о защите интеллектуальной собственности)
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
kapitaneo, что - же на самом деле имеем. Отстают? или иницилизация портит время?
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Парни помогите. Собрал девайс на DS1307 и он раз а то и 2 раза в сутки виснет. Вместо секунд показывает трёхзначное число и всё. Пока не перезапустишь. От чего такое может быть? Питание отличное , батарейка новая. Кварцы менял , микрухи менял. Схема классическая. Единственное ,что так это 7 нога DS1307 используется с частотой 1 гц и это идёт на МК. Как только часы виснут , виснет и всё устройство. Я уже замахался.
Я читал где то, что нужно какой то код обнуляющий 1 раз в минуту. Только я не знаю какой. Кто знает напишите плиз.
Я читал где то, что нужно какой то код обнуляющий 1 раз в минуту. Только я не знаю какой. Кто знает напишите плиз.
- Реклама
Re: Проблема с часами на Atmega32 и DS1307(отстают)
А ничего, что в даташите жирным выделено:Gudd-Head писал(а):Эммм... А чего там инициализировать? Питание подал — часы пошли. Единственный вопрос, в 12-ти или 24-х часовом формате.
состояние ВСЕХ регистров по включению НЕ ОПРЕДЕЛЕНО. Необходимо, по крайней мере, выключить CH (остановку часов), не говорю уже про то, что в регистрах времени и даты мусор будет.Please note that the initial power-on state of all registers is not defined. Therefore, it is important to
enable the oscillator (CH bit = 0) during initial configuration.
Исчерпывающий вопросgreentm писал(а):Собрал девайс на DS1307 и он раз а то и 2 раза в сутки виснет...
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Проблема с часами на Atmega32 и DS1307(отстают)
Значит, DS1337 в этом плане выгодно отличается от DS1307, там простоa_skr писал(а):А ничего, что в даташите жирным выделено
Note: Unless otherwise specified, the state of the registers is not defined when power is first applied or VCC falls below the VOSC.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Доренский Алексей
- Родился
- Сообщения: 3
- Зарегистрирован: Чт окт 20, 2011 11:34:35
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Согласен с Eugene.Negrobov - инициализация сбивает секунды, если генератор тикает. Соответственно делаем ее только если генератор не запущен. Двадцать устройств работало без этой приписочки в коде, т.е. инициализация не сбивала секунды, на двадцать первом (новая партия микрух 1307) - оказалось что инициализация сбивает секунды, если генератор уже работает...
Решил проблему так:
void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
{
unsigned char ss=rtc_read(0x00);
if((ss&0x80)==0x80)
{
// Инициализация сбивает время, поэтому делаем ее только если генератор стоит!!!
rs&=3;
if (sqwe) rs|=0x10;
if (out) rs|=0x80;
twi_start();
twi_write(0xd0);
twi_write(7);
twi_write(rs);
twi_stop();
//---
rtc_write(0x00,ss&~0x80); // если генератор стоиn - запускаем его
}
}
Решил проблему так:
void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
{
unsigned char ss=rtc_read(0x00);
if((ss&0x80)==0x80)
{
// Инициализация сбивает время, поэтому делаем ее только если генератор стоит!!!
rs&=3;
if (sqwe) rs|=0x10;
if (out) rs|=0x80;
twi_start();
twi_write(0xd0);
twi_write(7);
twi_write(rs);
twi_stop();
//---
rtc_write(0x00,ss&~0x80); // если генератор стоиn - запускаем его
}
}
- VHEMaster
- Потрогал лапой паяльник
- Сообщения: 374
- Зарегистрирован: Сб июл 14, 2012 09:20:09
- Откуда: Украина, город Полтава
DS1307 не работает
Доброго вам времени суток! Возникла проблема с часами на DS1307. Библиотека, которую я использую рабочая, делал часы с термометром другу, у него всё работает. Но у меня не работает... Плата несколько раз чистилась щёткой и ацетоном.. В какой-то прекрасный момент всё заработало, но после перепрошивки МК (пока-что прошивка в разработке) всё потухло( В чём может быть проблема?
Вот часть кодаВот библиотека
Это был Header
Это был Source файл
Фрагмент кода, который должен запускать генератор часовФрагменты кода для вывода времени на экран
Помогите, пожалуйста( В протеусе всё работает безупречно..
И ещё. Постоянно, на железе, от часов в сегменте часов, минут и секунд получается не число, не ноли, а A5h.. Т.е. в дисплее (HD44780) показывает @A
Вот часть кода, которая показывает число на индикатор
Вот часть кода
Код: Выделить всё
while(RB1)
{
lcd_goto(0x41);
showtemp();
__delay_ms(50);
if(command == 0x36) { i = ReadHour()+1; if(i>23) i = 0; SetHour(i); SetSeconds(0); command = 255; }
if(command == 0x32) { i = ReadMin()+1; if(i>59) i = 0; SetMin(i); SetSeconds(0); command = 255; }
showtime();
__delay_ms(50);
}Код: Выделить всё
#include <htc.h>
#define _XTAL_FREQ 4000000
#define SCL1 TRISB3
#define SDA1 TRISB4
#define SCL1_IN RB3
#define SDA1_IN RB4
void i2c_delay (void);
void i2c_start(void);
void i2c_stop (void);
bit i2c_tx(unsigned char d);
unsigned char i2c_rx(unsigned char ack);
unsigned char BCDconv (unsigned char source);
unsigned char DCBconv (unsigned char source);
void SetMin(unsigned char minutes);
unsigned char ReadMin();
void SetHour(unsigned char hours);
unsigned char ReadHour();
void SetSeconds(unsigned char seconds);
unsigned char ReadSeconds();
Код: Выделить всё
#include <htc.h>
#include "softi2c.h"
void i2c_delay (void) //Задержка speed/18
{
__delay_us(5);
}
void i2c_start(void) //Старт передачи
{
SCL1 = 1;
SDA1 = 1;
i2c_delay();
SDA1 = 0;
i2c_delay();
SCL1 = 0;
}
void i2c_stop (void)
{
i2c_delay();
SDA1 = 0;
SCL1 = 0;
i2c_delay();
SCL1 = 1;
i2c_delay();
SDA1 = 1;
}
bit i2c_tx(unsigned char d)
{
char x;
static bit b;
for (x=0; x<8; x++) {
i2c_delay();
if (d&0x80) SDA1 = 1;
else SDA1 = 0;
i2c_delay();
SCL1 = 1;
d <<= 1;
i2c_delay();
SCL1 = 0;
}
i2c_delay();
i2c_delay();
SDA1 = 1;
SCL1 = 1;
i2c_delay();
b = SDA1_IN;
SCL1 = 0;
return b;
}
unsigned char i2c_rx(unsigned char ack)
{
unsigned char x,d=0;
SDA1 = 1;
for (x=0; x<8;x++) {
d <<= 1;
do {
i2c_delay();
SCL1 = 1;
} while (SCL1_IN==0);
i2c_delay();
if (SDA1_IN) d |= 1;
SCL1 = 0;
}
i2c_delay();
if (ack) SDA1 = 0;
else SDA1 = 1;
SCL1 = 1;
i2c_delay();
SCL1 = 0;
return d;
}
unsigned char BCDconv (unsigned char source) {
unsigned char temp_min=0;
unsigned char temp_maj=0;
temp_min = source&15;
temp_maj = source >> 4;
//printf("\r\n minor - %x", temp_min);
//printf("\r\n major - %x", temp_maj);
temp_maj *= 10;
//printf("\r\n major - %x", temp_maj);
return temp_maj+temp_min;
}
unsigned char DCBconv (unsigned char source) {
unsigned char temp_min=0;
unsigned char temp_maj=0;
temp_maj = source/10 ;
temp_min = source - temp_maj*10;
temp_maj <<= 4;
return temp_maj+temp_min;
}
void SetMin(unsigned char minutes) { //записываем значение в минуты
i2c_start();
i2c_tx(0b11010000);
i2c_tx(0x01);
i2c_tx(DCBconv(minutes));
i2c_stop();
}
unsigned char ReadMin() {
unsigned char clockreturn1 = 0;
i2c_start(); //читаем значение минут
i2c_tx(0b11010000);
i2c_tx(0x01);
i2c_start();
i2c_tx(0b11010001);
clockreturn1 = i2c_rx(0);
i2c_stop();
return BCDconv(clockreturn1);
}
void SetHour(unsigned char hours) { //записываем значение в часы
i2c_start();
i2c_tx(0b11010000);
i2c_tx(0x02);
i2c_tx(DCBconv(hours));
i2c_stop();
}
unsigned char ReadHour() {
unsigned char clockreturn2 = 0;
unsigned char clockreturn22 = 0;
i2c_start(); //читаем значение часов
i2c_tx(0b11010000);
i2c_tx(0x02);
i2c_start();
i2c_tx(0b11010001);
clockreturn2 = i2c_rx(0);
i2c_stop();
/*
temp2 = temp&0b00001111;
temp /= 10;
temp = temp >> 4;
temp = temp*10 + temp2;*/
return BCDconv(clockreturn2);
}
void SetSeconds(unsigned char seconds) { //записываем значение в секунды
i2c_start();
i2c_tx(0b11010000);
i2c_tx(0x00);
i2c_tx(DCBconv(seconds) & 0b01111111);
i2c_stop();
}
unsigned char ReadSeconds() {
unsigned char clockreturn = 0;
i2c_start(); //читаем значение минут
i2c_tx(0b11010000);
i2c_tx(0x00);
i2c_start();
i2c_tx(0b11010001);
clockreturn = i2c_rx(0);
i2c_stop();
return BCDconv(clockreturn);
}
Фрагмент кода, который должен запускать генератор часов
Код: Выделить всё
i = ReadSeconds();
if(i>60) i = 0;
SetSeconds(i & 0b01111111);
i = 0;
Код: Выделить всё
void showtime(void)
{
unsigned char sec;
unsigned char min;
unsigned char hur;
lcd_goto(0);
hur = ReadHour();
lcd_showno2(hur);
lcd_putch(':');
lcd_showno2(min);
min = ReadMin();
lcd_putch(':');
sec = ReadSeconds();
lcd_showno2(sec);
}
И ещё. Постоянно, на железе, от часов в сегменте часов, минут и секунд получается не число, не ноли, а A5h.. Т.е. в дисплее (HD44780) показывает @A
Вот часть кода, которая показывает число на индикатор
Код: Выделить всё
void lcd_showno2(unsigned char var)
{
if((var/10)>0)
{
unsigned char tmp = var;
lcd_putch(0x30 + (var/10));
while(tmp>=10) tmp = tmp-10;
lcd_putch(0x30 + tmp);
}
else
{
lcd_putch(0x30);
lcd_putch(0x30 + var);
}
}
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Кто-нибудь пробовал использовать микросхему без кварца в качестве энергонезависимой памяти?
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Отлично работала в проекте счетчика суммарного количества копий копира в копи-центрах. (По каждому клиенту раздельно А4/А4R/А3 с возможностью "вложенного клиента" + общая сумма за весь период эксплуатации по каждому формату и автокалибровка индивидуальной скорости протяжки листа по данному аппарату). Но вот с кварцем или нет не помню, надо архив покопать...

Кварца таки стояла однако...
Кварца таки стояла однако...
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Что-то я не нашёл упоминания о энергоНЕзависимой памяти.ks0 писал(а):в качестве энергонезависимой памяти?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Имеется ввиду использование области ОЗУ (батарейная энергонезависимка) с работой без циклов ожидания выполнения процесса записи в EEPROM как у "обычной" I2C EEPROMки. Некоторая хитрость для регистров накопителей с непрерывным многократным обращением к ячейкам.

- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Коли микра работает с I²С на скоростях до 400 кГц, у неё наверняка есть встроенный генератор. Не верю я в ФАПЧ от 32-х кГц.
Хотя в ДШ про это ни слова
Хотя в ДШ про это ни слова
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Дык зачем эксперементировать - возможно и часики на будущее сгодятся.
Кроме того 1307 не совсем I2C по протоколу побайтового доступа к ячейкам. В принципе, в былые времена вполне успешно работало, а дорабатывать до абсолюта как всегда "дело не дошло"

Кроме того 1307 не совсем I2C по протоколу побайтового доступа к ячейкам. В принципе, в былые времена вполне успешно работало, а дорабатывать до абсолюта как всегда "дело не дошло"
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
транзистор и на бОльших частотах работает, генератора в нем нет) ... шутка)Gudd-Head писал(а):Коли микра работает с I²С на скоростях до 400 кГц, у неё наверняка есть встроенный генератор.
I2C синхронный протокол, синхра идет от мастера, а DS1307 - слейв онли) В ней нет генератора.
Ставим плюсы: )
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Нельзя утверждать то, о чем абсолютно точной информации нету...
Даже "чистый" транзистор или диод как структура полупроводниковая ноне только у П4 узреть можно (или у Совковых до 85-го года выпуска). Чего там сейчас понапихано - ...
Для пользователя только гарантированный даташит. Все другое - и спецтесты и дополнительная скрытая начинка (да и в зависимости от партии выпуска "дифференциация штанов" имеется) нам практически недоступно, да в большинстве случаев и не требуется.

Даже "чистый" транзистор или диод как структура полупроводниковая ноне только у П4 узреть можно (или у Совковых до 85-го года выпуска). Чего там сейчас понапихано - ...
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Следовательно, без часового кварца будет работать как внешняя ОЗУ. Так?ibiza11 писал(а):I2C синхронный протокол, синхра идет от мастера, а DS1307 - слейв онли) В ней нет генератора.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Опять неправильный вывод.
Следовательно без часового кварца I2C будет работать.
Исходя из функциональной схемы часов, можно сделать вывод, что кварцевый резонатор используется встроенным генератором, который в свою очередь, используется для формирования секундных импульсов для блока RTC и еще имеет программируемый выход ипульсов с частотами 1Hz/4.096kHz/8.192kHz/32.768kHz.
Исходя из даташита невозможно ясно понять, будет ли работать DS1307 без кварца в качестве быстрой внешней ОЗУ. Я думаю, что будет. Но лучше будет, если кто-нибудь из заинтересованных это проверит.
К чему я все это пишу: к тому, что нет никакой логической связи между высокой частотой I2C и наличием внутреннего генератора.
Еще мысль: поскольку в модуле приема из памяти есть только регистр адреса (нет промежуточного буфера для хранения данных), а принимать данные по I2C все же куда-то надо, то I2C использует ОЗУ напрямую. Следовательно модуль I2C совместно с модулем ОЗУ должны работать синхронно, а это говорит о том, что ОЗУ тактируется от I2C.
Следовательно без часового кварца I2C будет работать.
Исходя из функциональной схемы часов, можно сделать вывод, что кварцевый резонатор используется встроенным генератором, который в свою очередь, используется для формирования секундных импульсов для блока RTC и еще имеет программируемый выход ипульсов с частотами 1Hz/4.096kHz/8.192kHz/32.768kHz.
Исходя из даташита невозможно ясно понять, будет ли работать DS1307 без кварца в качестве быстрой внешней ОЗУ. Я думаю, что будет. Но лучше будет, если кто-нибудь из заинтересованных это проверит.
К чему я все это пишу: к тому, что нет никакой логической связи между высокой частотой I2C и наличием внутреннего генератора.
Еще мысль: поскольку в модуле приема из памяти есть только регистр адреса (нет промежуточного буфера для хранения данных), а принимать данные по I2C все же куда-то надо, то I2C использует ОЗУ напрямую. Следовательно модуль I2C совместно с модулем ОЗУ должны работать синхронно, а это говорит о том, что ОЗУ тактируется от I2C.
Ставим плюсы: )
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Казалось бы, без кварца работать как ОЗУ микросхема должна уметь.
Но по факту, у меня, например, почему-то не выходило вычитать или изменить данные при выпаянном кварце.
Но по факту, у меня, например, почему-то не выходило вычитать или изменить данные при выпаянном кварце.


