atmega8 ds1307

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

atmega8 ds1307

Сообщение 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 уже инициализирована" => "пункты уст.времени и уст. даты - пропустить"???
Вложения
скрин протеус.JPG
(124.44 КБ) 549 скачиваний
выше головы не прыгнешь - ниже зад**цы не сядешь.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: atmega8 ds1307

Сообщение dr.doc »

Часы ведь должны только читать из микросхемы данные. И только в момент записи - писать (по нажатию кнопки, например).
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

Re: atmega8 ds1307

Сообщение Mon »

Это личные заморочки, но хочу изначально устанавливать определенные дату/время (для первого запуска либо при замене батарейки от 1307), что я собственно показал в том отрывке кода.
Как убедиться в том, что МК в остальных случаях не будет мне перезаписывать эти самые дату/время???
выше головы не прыгнешь - ниже зад**цы не сядешь.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: atmega8 ds1307

Сообщение dr.doc »

А каким образом МК может узнать дату и время, чтобы ее проверить? Хотя... Почитайте внимательней даташит на микросхему. Там в регистре секунд имеется 7-й бит - бит остановки тактового генератора. Возможно он остановлен после замены батареи.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

Re: atmega8 ds1307

Сообщение 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);}
}}
выше головы не прыгнешь - ниже зад**цы не сядешь.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: atmega8 ds1307

Сообщение dr.doc »

"Имейте ввиду, что при включении питания начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (бит CH = 0) во время начальной инициализации." - может неправильный перевод? А проверить этот бит легко: вес данного бита - 128, т.е. если считанное значение нулевого байта больше 128 (секунды не могут быть больше 0x59), то генератор часов остановлен и их нужно инициализировать. Т.е. записать секунды, тогда обнулится 7-й бит регистра.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

Re: atmega8 ds1307

Сообщение Mon »

наконец-то в желе собрал.
именно с часами и бок вылез.
В протеусе все работает
в железе же все значения часов, минут, секунд, дня, месяца, года = @5.
Вопрос как это лечить? Микросхему часов менять?
выше головы не прыгнешь - ниже зад**цы не сядешь.
MacSIM
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Чт фев 02, 2012 12:36:34

Re: atmega8 ds1307

Сообщение MacSIM »

как вариант купить часы, либо править грамотно программу.
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

Re: atmega8 ds1307

Сообщение Mon »

в каком случае мега видит значения @5 ?
смотрите фотку, так выдает сейчас.
Вложения
1.jpg
(232.09 КБ) 514 скачиваний
выше головы не прыгнешь - ниже зад**цы не сядешь.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: atmega8 ds1307

Сообщение Аlex »

"@5" видите Вы, а не мега. Разницу чувствуете ?
Вообще, непонятно выражение "мега видит @5". Как она вообще может что-то видеть, да ещё и какие то символы ?
При правильном подключении железа, проблема - 100% с программой. Значит совет по грамотной правке программы - самый правильный.
Аватара пользователя
Mon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вс авг 21, 2011 23:12:37
Откуда: Харьков

Re: atmega8 ds1307

Сообщение Mon »

всё, нашёл, всё-таки косяк в железе был
выше головы не прыгнешь - ниже зад**цы не сядешь.
Ответить

Вернуться в «Цифровая техника»