|
|
  |
DS1307 и день недели |
|
|
|
May 6 2008, 11:14
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(ILYAUL @ May 6 2008, 13:49)  Дополнительный материал. Собственно можно взять D/S на микросхему и к приложенному файлу подставлять из D/S рисунки и таблицы Так это ж другая микросхема. У меня 1307, а это 1337
|
|
|
|
|
May 6 2008, 12:24
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
К сожалению, самого главного в 1337 нет (как и в 1307). Я имею ввиду автоматическое вычисление дня недели  Но этот вопрос я уже решил. Кстати, ещё интересно, есть ли такая функция в PCF8583 от Philips?
|
|
|
|
|
May 6 2008, 14:05
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(arttab @ May 6 2008, 16:42)  Извините что не в тему, но по 1307. если я не делал больших пайз между считыванием данных, то данные косячились. Работал по флагу готовности. А у вас как со считыванием данных? Без проблем? А что Вы называете большими паузами? У меня считывание данных идёт в бесконечном цикле, в котором помимо этого содержится также проверка состояний кнопок (антидребезговая задежка 30ms на 2 кнопки), проверка режима работы устройства и обработка нажатий кнопок (изменение режима работы). Кроме того, примерно 100-150 раз в секунду срабатывает прерывание от таймера (для динамической индикации). Сбоев вроде не было
|
|
|
|
|
May 6 2008, 15:43
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(ILYAUL @ May 6 2008, 17:45)  Я считываю по прерыванию от DS каждую секунду , вроде проблем нет Я тоже изначально думал так сделать, но функции работы с i2c и с DS в частности связаны с ожиданием. Поэтому в момент прерывания у меня на мгновение стала пропадать индикация  Пришлось сделать так, как я описал
|
|
|
|
|
May 6 2008, 15:44
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(defunct @ May 6 2008, 00:01)  .. А на деле - ведь нет никакой проблемы. +1 бОльшая проблема будет когда будет 2070 год...от тогда проблема будет..а пока...фигня енто всё... с уважением (круглый)
|
|
|
|
|
May 6 2008, 17:20
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(ILYAUL @ May 6 2008, 19:44)  Вот тут же и нашёл , и что интересно ровно год назад . Так сказать все ответы на Ваши вопросы в одной куче http://electronix.ru/forum/index.php?showt...=23755&st=0Та это и проблемами назвать как-то трудно. Работает то всё нормально...
|
|
|
|
|
May 8 2008, 08:41
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(arttab) //start TWCR=(1<<TWINT)|(1<<TWSTA)|(0<<TWSTO)|(1<<TWEN); // on TWE and START while (TWCR&(1<<TWINT)==1) {;} // wait set START on the TWI __delay_cycles(9000); // UDR=TWSR; //ask device on adres and Write TWDR=ADRESDS|0x00; // adres and read TWCR=(1<<TWINT)|(0<<TWSTA)|(0<<TWSTO)|(1<<TWEN); // on TWE and Adres R while (TWCR&(1<<TWINT)==1) {;} // wait TWI __delay_cycles(9000); // UDR=TWSR; //read and send adres cell TWDR=0x00; // adres ask cell TWCR=(1<<TWINT)|(0<<TWSTA)|(0<<TWSTO)|(1<<TWEN); // on TWE while (TWCR&(1<<TWINT)==1) {;} // wait TWI __delay_cycles(9000); // UDR=TWSR; У меня сделано немного иначе. Функция не бесконечно ждёт сброса TWINT, а определённое время, по прошествии которого выдаёт сообщение об ошибке. Код void i2c_delay(void) { if (i2c_error) return; for (unsigned char i = 0; i < 100; i++) { if (TWCR & (1 << TWINT)) return; _delay_loop_1(0.000001 * F_CLK); } i2c_error = 1; } Вообще, по-моему, так сильно сложнополучается. Работу с TWI лучше разбить на функции, так проще.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|