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

 
 
> 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
Ответов (1 - 11)
unichorn
сообщение Jun 13 2006, 12:13
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901



delay_ms (200);

200 * 7 = 1.4

delay_ms (300);

(200 + 300) * 7 = 3.5

сразу незаметил cranky.gif

Сообщение отредактировал unichorn - Jun 13 2006, 12:16
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 13 2006, 12:18
Сообщение #3


.
******

Группа: Участник
Сообщений: 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
WHALE
сообщение Jun 13 2006, 12:21
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



какой-то странный опрос- while(!((TWCR&0x80)==0x80))
а просто while(!(TWCR&0x80) нельзя?
и ошибки возможные вы никак не обрабатываете.
И еще,вы больше ничего делать не предполагаете?а то у вас проц только с квадратной шиной и общается-имхо,лучше по прерываниям.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
unichorn
сообщение Jun 13 2006, 12:21
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901



Да.
И почему бы несчитать все регистры разом, намного быстрее получится.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 13 2006, 12:36
Сообщение #6


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

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



Спасибо, попробуем.

А есть примерчик работы с I2c по прерываниям?
Я видел кое-где, но одни обрывки ...


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


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901



Если небоишся WinAVR загляни сюда. smile.gif

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

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

или здесь

http://electronix.ru/forum/index.php?showtopic=10934&st=15

Сообщение отредактировал unichorn - Jun 13 2006, 13:37
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 14 2006, 06:56
Сообщение #8


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Удалил посты с бранью, оскорблениями и упоминанием пресловутого "курса".
=AK=, kertis и WHALE получили предупреждения.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 14 2006, 07:36
Сообщение #9


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Хотя уважаемый unichorn и посоветовал Вам посмотреть материалы в прикрепленной теме, я бы хотел привести конкретные ссылки, дабы не запутаться в обилии всего материала)))
1. Библиотека для работы с DS1307, на Си, под IAR, реально работает) Могут быть ошибки, за нахождение которых буду очень благодарен)

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 15 2006, 06:27
Сообщение #10


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

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



Спасибо всем огромное, попробую библиотеки.

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

Никто не сталкивался?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 15 2006, 07:09
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Если напряжение основного питания меньше или равно резервному, интерфейс часов отключается, чтобы не расходовать энергию резервного источника.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 15 2006, 08:53
Сообщение #12


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

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



Да это я знаю...
Основное питание 5 вольт, от LM7805. От него работает и МК и LCD и конвертер MAX232...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

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

 


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


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