Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DS1307 + ATMega32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
hd44780
В цикле считываются все регистры и выводятся на LCD:

sec = ds1307_read ( 0 ); // секунды
min = ds1307_read ( 1 ); // минуты
hour = ds1307_read ( 2 ); // часы
day = ds1307_read ( 3 ); // день недели
date = ds1307_read ( 4 ); // число
month = ds1307_read ( 5 ); // месяц
year = ds1307_read ( 6 ); // год

.............


// считывание регистра DS1307
byte ds1307_read ( byte addr )
{
char value;

// send STOP
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Tell TWCR (control register) to send STOP CONDITION

delay_ms (200);

// send START
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{
} // while

//;SLAVE
//Send Slave address
TWDR = TARGET_ADDR;
TWCR = (1<<TWINT)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{ //do nothing but loop
} // while

//;DATA1
//Send DS1307 RAM address
TWDR = addr;
TWCR = (1<<TWINT)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{ //do nothing but loop
} // while

//SECOND START CONDITION to go into writing mode
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{
} // while

//Send Address and write bit
TWDR = TARGET_ADDR | WRITE_FLAG;
TWCR = (1<<TWINT)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{ //do nothing but loop
} // while

delay_ms (300);

//;DATA
TWCR = (1<<TWINT)|(1<<TWEN);

//loop until TWINT is set
while(!((TWCR&0x80)==0x80))
{
} // while

//Store read back value
value = TWDR;

//NACK
TWCR = (1<<TWEA)|(1<<TWEN);

//STOP
TWCR = (1<<TWEA)|(1<<TWEN)|(TWSTO);

return value;
} // ds1307_read


проблема в том, что секунды на LCD обновляются раз в 8 (!) сек.
в цикле никаких задержек нету.

В чем м.б. причина?
unichorn
delay_ms (200);

200 * 7 = 1.4

delay_ms (300);

(200 + 300) * 7 = 3.5

сразу незаметил cranky.gif
GetSmart
Цитата
проблема в том, что секунды на LCD обновляются раз в 8 (!) сек.
в цикле никаких задержек нету.

Заметно!
delay_ms (200); + delay_ms (300);
и так 7 раз это ерунда.
WHALE
какой-то странный опрос- while(!((TWCR&0x80)==0x80))
а просто while(!(TWCR&0x80) нельзя?
и ошибки возможные вы никак не обрабатываете.
И еще,вы больше ничего делать не предполагаете?а то у вас проц только с квадратной шиной и общается-имхо,лучше по прерываниям.
unichorn
Да.
И почему бы несчитать все регистры разом, намного быстрее получится.
hd44780
Спасибо, попробуем.

А есть примерчик работы с I2c по прерываниям?
Я видел кое-где, но одни обрывки ...
unichorn
Если небоишся WinAVR загляни сюда. smile.gif

http://winavr.sourceforge.net/links.html

Можно найти много интересного.

или здесь

http://electronix.ru/forum/index.php?showtopic=10934&st=15
IgorKossak
Удалил посты с бранью, оскорблениями и упоминанием пресловутого "курса".
=AK=, kertis и WHALE получили предупреждения.
haker_fox
Хотя уважаемый unichorn и посоветовал Вам посмотреть материалы в прикрепленной теме, я бы хотел привести конкретные ссылки, дабы не запутаться в обилии всего материала)))
1. Библиотека для работы с DS1307, на Си, под IAR, реально работает) Могут быть ошибки, за нахождение которых буду очень благодарен)

2. Библиотека для работы с аппаратным модулем TWI, а также программная организация шины I2C по-желанию, выбирается строкой #define ....(не помню что там дальше).
hd44780
Спасибо всем огромное, попробую библиотеки.

А сейчас еще одна проблема всплыла ...
Без резервной баратеи хоть медленнно, но читается и часы идут.
Включил резервную батарею (даже менять пытался, у меня их 2).
Контроллер сразу повис, наверное на ожиданииях готовности при обмене.
Пытался вставлять батарею при включенной работающей схеме.
При "вставлянии" мгновенно виснет.

Никто не сталкивался?
IgorKossak
Если напряжение основного питания меньше или равно резервному, интерфейс часов отключается, чтобы не расходовать энергию резервного источника.
hd44780
Да это я знаю...
Основное питание 5 вольт, от LM7805. От него работает и МК и LCD и конвертер MAX232...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.