реклама на сайте
подробности

 
 
> DS1307 + ATMega32, Часы идут, но читаются медленно
hd44780
сообщение Jun 13 2006, 12:09
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



В цикле считываются все регистры и выводятся на 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 (!) сек.
в цикле никаких задержек нету.

В чем м.б. причина?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jun 13 2006, 12:18
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

Заметно!
delay_ms (200); + delay_ms (300);
и так 7 раз это ерунда.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016