Предлагаю здесь разместить максимум информации об часах реального времени DS1307отDallas Semiconductor.
На данный момент меня интересует программый доступ к м/с в среде CodeVision AVR на примерах (тоесть примеры кодов программ установки времени/даты, считывание)
P.S. Спасибо за внимание, надеюсь на ваше активное участие!
this function returns the current date measured by the RTC. The *date, *month and *year pointers must point to the variables that must receive the values of date, month and year.
Из хелпа... Что тут может быть не понятно? Функция rtc_set_time - установка времени. Часы минуты секунды. rtc_set_date - установка даты. Число месяц год rtc_get_date - получить дату... Вместо *date, *month итд, нужно подставить перменные в которых в вашей проге хранится дата. ну и т.д. По-моему в CvAVR всё элементарно как раз...
Написал пример для доступа к DS1307 на чтение, прошу проверить правильность и помощь в написание процедуры предустановки даты/времени путём кнопок подключённых к свободным линиям PORTD.
void main (void) { unsigned char lcddate, lcdmonth, lcdyear; // объявление переменных даты unsigned char lcdhour, lcdminute, lcdsecond; // объявление переменных время i2c_init(); rtc_init (0,1,0); // инициализация часов, непонял о чём говорят значения в скобках?
В процедуры чтения нужно передавать указатели на переменные - т.е. адрес переменной, чтобы функция записала по этому адресу число, и оно оказалось в Вашей переменной. И еще, у Вас очепятка в названии функции: "date". Для процедур записи всё выглядело бы так, как Вы написали:
rtc_set_date (lcddata, lcdmonth, lcdyear); И т.п. ---------- Кроме того, Вам лучше (даже нужно) изменить тип Ваших переменных с unsigned int на unsigned char (беззнаковое 8-битное целое), т.к. такой именно такой тип используют функции. В случае установки даты (rtc_set_date) или времени, Ваша программа сама преобразует число из int в char, но при работе с указателями возникнут проблемы, поэтому тип нужно обязательно поменять. ---------- Что означают значения в скобках rtc_init(...) я Вам сказать не могу, т.к. у меня нет СVAVR и хелпа соответственно. Аналогично обстоят дела и с написанием обработки кнопок порта D.
Здаровенько котяры! Вот такая у меня проблемка вырисовалась. Сделал часы реального времени на DS1307 по даташиту, подключил к микроконтроллеру, инициализировал. Подключил выход частоты через транзисторный ключ к светодиоду. Выставил в программе частоту 1 Гц, но светодиод просто горит и не моргает с частотой 1 Гц. Выкладываю печатки часов и индикатора секунд в SL5. На основную плату и плату индикации можно не смотреть - они рабочие. Может где-то косячок? Или я что-то не учёл?
Подскажите как написать функцию считывания в переменную дня недели?
Код:
day = rtc_read(0x03); // чтение
rtc_write(0x03, day); // запись
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Заголовок сообщения: Re: #Часы реального времени DS1307 от Dallas Semiconductor#
Добавлено: Сб янв 08, 2011 00:34:10
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 41
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
В обычном исполнении не зачем. Просто оставьте в воздухе.
Вы наверняка вытянули даташник на русском и видели какие частоты на нем можно получить.
Sounds писал(а):
я так и не понял для чего нужен вывод SQW/OUT?
для контроля частоты например. Или скажем Вы собрали устройство у которого очень важно чтобы часы шли, а как определить работает ли генератор в часах т.е. попросту идут часы или стоят ?
Для настольных часов с будильником Вы просто проспите на работу, а для какого нибудь теплонагревателя это может быть катастрофой. Можете сами придумать страшный пример.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Заголовок сообщения: Re: #Часы реального времени DS1307 от Dallas Semiconductor#
Добавлено: Вс янв 09, 2011 11:27:46
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 41
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Нет это обычный счетчик от 1 до 7. То что выставишь то и будет считать.
Я в своих часах его вообще не использую, а вычисляю.
Формула есть на Википедии.
Кусок кода из моих часов (Си CVAVR):
Код:
// в данной версии данные хранятся не в двоичной, а в двоично-десятичной системе unsigned char myhour, mymin, mysec, // текушее время mydate, mymonth, myyear, // текущий календарь myday; // день недели
// ---------- вычислить день недели по дате ---------- void date2day(void) { unsigned int y, m;
y = bcd2bin(myyear); m = bcd2bin(mymonth);
if (m > 2) { m -= 2; } else { m += 10; y--; }
myday = (unsigned char)((bcd2bin(mydate) + y + (y>>2) + ((31 * m) / 12)) % 7);
if (myday == 0) myday = 7; }//----------
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Danko Ты не поверишь, но по твоей вине, до вчерашнего дня, считал что в 1307 нет "дня недели".
а чем хуже формула которую раньше применял? // формула для вычисления дня недели по дате (ru.wikipedia.org) // a = (14 - месяц) / 12 // y = год - a // m = месяц + 12 * a - 2 //ДеньНедели = (7000 + (день + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) ОСТАТОК 7
Вот еще одна формула вычисления дня недели. dayOfWeek = (year+(int)(year4)+ mounth + day) % 7;
где - dayOfWeek - число от нуля до 7, соответсвует дню недели (0 - вс,1-пн, ...) year - год (int)(year/4) - целая часть от четверти года(математики, простите за int) mounth - число, соответствующее месяцу январь - 4(високосный) 5(невисокосный) февраль - 0(високосный) 1(невисокосный) март - 1 апрель - 4 май - 6 июнь - 2 июль - 4 август - 0 сентябрь - 3 октябрь - 5 ноябрь - 1 декабрь - 3 day - число дня в месяце
Заголовок сообщения: Re: #Часы реального времени DS1307 от Dallas Semiconductor#
Добавлено: Вс янв 09, 2011 14:44:33
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 41
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
формула с википедии полная и по ней можно расчитать день недели для любого года. Я решил зачем мне дни недели 1917 года и я упростил формулу. Сокращенная формула работает с 2001 года и на ближайшие 100 лет.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения