Страница 1 из 1
atmega8 ds1307
Добавлено: Вс янв 03, 2016 16:59:43
Mon
Знаю. что заезженная тема, но терзают сомнения. Прошу совета или опровержения моих мыслей.
Исходные данные: мега8 и часы 1307, код на CVAVR, подразумевается, что мега будет выключаться при снятии напряжения, а МК часов должна продолжать работать от батарейки.
Использую станд. библиотеку для часов.
В основной программе получаются пару таких строчек:
Код: Выделить всё
void main (void)
{i2c_init();
rtc_init(3,0,0);
rtc_set_time(23,59,52); //установить время: часы, минуты, секунды
rtc_set_date(1,06,11,15);
}
Есть подозрение,что при повторном включении меги, при уже установленных ручками даты/времени, мега самостоятельно установить время.
Чего хочется: чтобы при повторной подачи питания для меги, она не устанавливала самостоятельно время.
Возможно есть способ проверить такое: "1307 уже инициализирована" => "пункты уст.времени и уст. даты - пропустить"???
Re: atmega8 ds1307
Добавлено: Вс янв 03, 2016 17:08:23
dr.doc
Часы ведь должны только читать из микросхемы данные. И только в момент записи - писать (по нажатию кнопки, например).
Re: atmega8 ds1307
Добавлено: Вс янв 03, 2016 17:17:13
Mon
Это личные заморочки, но хочу изначально устанавливать определенные дату/время (для первого запуска либо при замене батарейки от 1307), что я собственно показал в том отрывке кода.
Как убедиться в том, что МК в остальных случаях не будет мне перезаписывать эти самые дату/время???
Re: atmega8 ds1307
Добавлено: Вс янв 03, 2016 17:25:42
dr.doc
А каким образом МК может узнать дату и время, чтобы ее проверить? Хотя... Почитайте внимательней даташит на микросхему. Там в регистре секунд имеется 7-й бит - бит остановки тактового генератора. Возможно он остановлен после замены батареи.
Re: atmega8 ds1307
Добавлено: Вс янв 03, 2016 18:29:03
Mon
Согласан, спасибо.
вот здесь нашёл, тот же даташит, но на русском
http://piclist.ru/D-DS-DS1307-RUS/D-DS-DS1307-RUS.html
Отсюда понял, что необходимо немного дописать библиотеку для 1307 в cvavr, чтобы считать бит 7 из 0-го регистра...
С этим поможете? Я ассемблер уже забыть успел...года 4 уже туда не лазил((
В стандартной библиотеке пример функции чтения выглядит так:
Код: Выделить всё
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_stop(); // 09022011_1
i2c_start();
i2c_write(0xd1);
*sec=bcd2bin(i2c_read(1));
*min=bcd2bin(i2c_read(1));
*hour=bcd2bin(i2c_read(0));
i2c_stop();
}
Попробовал ещё в самом коде такой вариант: сравнить значение даты/времени до момента установки. Т.е. если они неопределены, то инициализировать 1307 и установить время. Если отличаются от нулевых значений, то просто работать дальше:
Код: Выделить всё
{i2c_init();
{rtc_get_date(&week,&day,&month,&year);
rtc_get_time(&hour,&min,&sec); //проверка инициализации и даты/времени
if((hour==00)&&(min==00)&&(day==00)&&(month==00)&&(year==00))
{rtc_init(3,0,0);
rtc_set_time(12,59,52); //установить время: часы, минуты, секунды
rtc_set_date(1,07,01,16);}
}}
Re: atmega8 ds1307
Добавлено: Пн янв 04, 2016 06:53:29
dr.doc
"Имейте ввиду, что при включении питания начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (бит CH = 0) во время начальной инициализации." - может неправильный перевод? А проверить этот бит легко: вес данного бита - 128, т.е. если считанное значение нулевого байта больше 128 (секунды не могут быть больше 0x59), то генератор часов остановлен и их нужно инициализировать. Т.е. записать секунды, тогда обнулится 7-й бит регистра.
Re: atmega8 ds1307
Добавлено: Вт янв 19, 2016 23:30:09
Mon
наконец-то в желе собрал.
именно с часами и бок вылез.
В протеусе все работает
в железе же все значения часов, минут, секунд, дня, месяца, года = @5.
Вопрос как это лечить? Микросхему часов менять?
Re: atmega8 ds1307
Добавлено: Ср янв 20, 2016 10:19:09
MacSIM
как вариант купить часы, либо править грамотно программу.
Re: atmega8 ds1307
Добавлено: Ср янв 20, 2016 10:48:03
Mon
в каком случае мега видит значения @5 ?
смотрите фотку, так выдает сейчас.
Re: atmega8 ds1307
Добавлено: Ср янв 20, 2016 15:08:10
Аlex
"@5" видите Вы, а не мега. Разницу чувствуете ?
Вообще, непонятно выражение "мега видит @5". Как она вообще может что-то видеть, да ещё и какие то символы ?
При правильном подключении железа, проблема - 100% с программой. Значит совет по грамотной правке программы - самый правильный.
Re: atmega8 ds1307
Добавлено: Ср янв 20, 2016 22:13:16
Mon
всё, нашёл, всё-таки косяк в железе был