#Часы реального времени DS1307 от Dallas Semiconductor#

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

#Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Tom91 »

Предлагаю здесь разместить максимум информации об часах реального времени DS1307 от Dallas Semiconductor.

На данный момент меня интересует программый доступ к м/с в среде CodeVision AVR на примерах (тоесть примеры кодов программ установки времени/даты, считывание)

P.S. Спасибо за внимание, надеюсь на ваше активное участие! :)
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Fasterpast »

Хм, а F1 в CvAVR чем не устраивает?
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Tom91 »

Fasterpast писал(а):Хм, а F1 в CvAVR чем не устраивает?


1. Если бы это было на русском... :cry:
Хотелось бы ваших более подробных примеров и с комментариями на русском.

2. Насколько я понял данный пример в F1 отражает только чтение из м\с ?
Мне непонятно как задать предустановку?
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Fasterpast »

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

void rtc_set_time(unsigned char hour, unsigned char min, unsigned char sec)


      this function sets the current time of the RTC.
The hour, min and sec parameters represent the values of hour, minutes and seconds.


void rtc_get_date(unsigned char *date, unsigned char *month, unsigned char *year)


      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.


void rtc_set_date(unsigned char date, unsigned char month, unsigned char year)


      this function sets the current date of the RTC.

Из хелпа... Что тут может быть не понятно?
Функция rtc_set_time - установка времени. Часы минуты секунды.
rtc_set_date - установка даты. Число месяц год
rtc_get_date - получить дату... Вместо *date, *month итд, нужно подставить перменные в которых в вашей проге хранится дата.
ну и т.д.
По-моему в CvAVR всё элементарно как раз...
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Tom91 »

Написал пример для доступа к DS1307 на чтение, прошу проверить правильность и помощь в написание процедуры предустановки даты/времени путём кнопок подключённых к свободным линиям PORTD.

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

#include <tiny2313.h>

#asm
.equ __i2c_port=0x12     // подключил к порту PORTD
.equ __sda_bit=0
.equ __scl_bit=1
#endasm

#include <i2c.h>
#include <ds1307.h>

void main (void)
{
unsigned char  lcddate, lcdmonth, lcdyear;   // объявление переменных даты
unsigned char  lcdhour, lcdminute, lcdsecond;  // объявление переменных время
i2c_init();
rtc_init (0,1,0);  // инициализация часов, непонял о чём говорят значения в скобках?


rtc_get_date (&lcddate, &lcdmonth, &lcdyear); // читаем дату
rtc_get_time (&lcdhour, &lcdminute, &lcdsecond); // читаем время
}


P.S. сильно не пинайте, имхо незнаю ни одного языка программирования и только сегодня начал осваивать CvAVR.
Последний раз редактировалось Tom91 Вс дек 05, 2010 12:08:58, всего редактировалось 2 раза.
Foks
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Foks »

rtc_get_date (&lcddata, &lcdmonth, &lcdyear); // читаем дату
rtc_get_time (&lcdhour, &lcdminute, &lcdsecond); // читаем время

В процедуры чтения нужно передавать указатели на переменные - т.е. адрес переменной, чтобы функция записала по этому адресу число, и оно оказалось в Вашей переменной. И еще, у Вас очепятка в названии функции: "date".
Для процедур записи всё выглядело бы так, как Вы написали:

rtc_set_date (lcddata, lcdmonth, lcdyear);
И т.п.
----------
Кроме того, Вам лучше (даже нужно) изменить тип Ваших переменных с unsigned int на unsigned char (беззнаковое 8-битное целое), т.к. такой именно такой тип используют функции.
В случае установки даты (rtc_set_date) или времени, Ваша программа сама преобразует число из int в char, но при работе с указателями возникнут проблемы, поэтому тип нужно обязательно поменять.
----------
Что означают значения в скобках rtc_init(...) я Вам сказать не могу, т.к. у меня нет СVAVR и хелпа соответственно. Аналогично обстоят дела и с написанием обработки кнопок порта D.
Giggity giggity goo!
Аватара пользователя
Seal
Сверлит текстолит когтями
Сообщения: 1122
Зарегистрирован: Чт мар 05, 2009 19:51:55
Откуда: Дырасполь

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Seal »

А вот такая тема ?
viewtopic.php?f=20&t=5560
ученые долго думали,в чем измерять частоту.... С тех пор и пишут Hz
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Tom91 »

Foks, так если у вас нет СVAVR, чем вы пользуетесь?
P.S. Отредактировал код выше, по замечаниям Foks'а, за что ему спасибо. :)
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение zhu4er »

Здаровенько котяры! Вот такая у меня проблемка вырисовалась. Сделал часы реального времени на DS1307 по даташиту, подключил к микроконтроллеру, инициализировал. Подключил выход частоты через транзисторный ключ к светодиоду. Выставил в программе частоту 1 Гц, но светодиод просто горит и не моргает с частотой 1 Гц. Выкладываю печатки часов и индикатора секунд в SL5. На основную плату и плату индикации можно не смотреть - они рабочие. Может где-то косячок? Или я что-то не учёл?
4asiki.lay
(167.66 КБ) 846 скачиваний

И программа по инициализации и запуску генератора в CVAVR. Стандарт визарда.
4asiki.c
(2.84 КБ) 874 скачивания
Даже у стен есть уши...
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение zhu4er »

Всё разобрался! Требовалось всёго-навсего установить начальное время!
Даже у стен есть уши...
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Sounds »

Подскажите как написать функцию считывания в переменную дня недели?
Для каких целей нужен вывод SQW/OUT?
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Danko »

Sounds писал(а):Для каких целей нужен вывод SQW/OUT?
ответ здесь http://piclist.ru/D-DS-DS1307-RUS/D-DS-DS1307-RUS.html

Sounds писал(а):Подскажите как написать функцию считывания в переменную дня недели?

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

day = rtc_read(0x03);  // чтение

rtc_write(0x03, day);  // запись
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Sounds »

Может я тупой, но я так и не понял для чего нужен вывод SQW/OUT?
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Danko »

В обычном исполнении не зачем. Просто оставьте в воздухе.

Вы наверняка вытянули даташник на русском и видели какие частоты на нем можно получить.

Sounds писал(а):я так и не понял для чего нужен вывод SQW/OUT?
для контроля частоты например. Или скажем Вы собрали устройство у которого очень важно чтобы часы шли, а как определить работает ли генератор в часах т.е. попросту идут часы или стоят ?

Для настольных часов с будильником Вы просто проспите на работу, а для какого нибудь теплонагревателя это может быть катастрофой. Можете сами придумать страшный пример.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Sounds »

Спасибо за разъяснения!
Аватара пользователя
tipoya
Открыл глаза
Сообщения: 79
Зарегистрирован: Ср дек 30, 2009 18:36:00
Откуда: БЕЛАРУСЬ

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение tipoya »

Sounds писал(а):Может я тупой, но я так и не понял для чего нужен вывод SQW/OUT?

Я, например, с него вывел мигающее двоеточие.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение IM1 »

Знатоки, подскажите: "У DS1307 день недели вычисляется автоматически или надо устанавливать вручную?"
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Danko »

Нет это обычный счетчик от 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. Рассказ нечаянного революционера"
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение O-LED »

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 - число дня в месяце

Итак, в моем примере
dayOfWeek = (1980 + 495 + 0 + 17 ) % 7 = 0(воскресенье)
KIT
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: #Часы реального времени DS1307 от Dallas Semiconductor#

Сообщение Danko »

формула с википедии полная и по ней можно расчитать день недели для любого года. Я решил зачем мне дни недели 1917 года и я упростил формулу. Сокращенная формула работает с 2001 года и на ближайшие 100 лет.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Ответить

Вернуться в «Периферия»