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

 
 
> ds1305+AVR, Листинг программы
Денис555
сообщение Nov 16 2007, 12:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 29-09-06
Из: Самара
Пользователь №: 20 827



Народ help.gif
Есть у кого листинг программы для работы с DS1305 (RTC)?
Замучался уже, перепробовал все и с програмной и с электронной стороны, не работает и все, точнее не передает байты, в приемном буфере SPI одни единицы, если подключен подтягивающий резистор и одни нули если не подключен. Может я с SPI не правильно работаю?
AVR - ATmega1281, кварц на 14,7456 МГц. Пишу прогу на ассемблере. help.gif кто может.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
011119xx
сообщение Nov 21 2007, 11:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



я использовал DS1305 так (смотри схему).
исходники такие:

//----------------------------------------------------------------------------------------------
// Запись значений в RAM RTC
//----------------------------------------------------------------------------------------------
CS_RTC = 1; //Выбор RTC

SPDR = adr_control_RTC_wr; //Адрес регистра управления RTC
while (!(SPSR & SPIF_)); //Ожидание завершения передачи
SPDR = control_RTC; //Значение регистра управления RTC
while (!(SPSR & SPIF_)); //Ожидание завершения передачи

CS_RTC = 0; //Снятие выбора RTC
//----------------------------------------------------------------------------------------------
temp = 1; //Небольшая временная задержка
do
{
temp--;
}
while (temp != 0);
//----------------------------------------------------------------------------------------------
CS_RTC = 1; //Выбор RTC

SPDR = adr_control_RTC_wr; //Адрес регистра управления RTC
while (!(SPSR & SPIF_)); //Ожидание завершения передачи
SPDR = control_RTC; //Значение регистра управления RTC
while (!(SPSR & SPIF_)); //Ожидание завершения передачи

CS_RTC = 0; //Снятие выбора RTC
//----------------------------------------------------------------------------------------------
temp = 1; //Небольшая временная задержка
do
{
temp--;
}
while (temp != 0);
//----------------------------------------------------------------------------------------------
CS_RTC =1; //Выбор RTC

SPDR = adr_wr; //Адрес регистра записи во Flash
while (!(SPSR & SPIF_)); //Ожидание завершения передачи
SPDR = data>>8; //Данные регистра записи - ст. б.
while (!(SPSR & SPIF_)); //Ожидание завершения передачи
SPDR = data; //Данные регистра записи - мл. б.
while (!(SPSR & SPIF_)); //Ожидание завершения передачи

CS_RTC = 0; //Снятие выбора RTC

т.е. перед записью значений дважды нужно писать в регистр управления. без записи в регистр управления насколько я помню не работало. При чтении такого не было.

для SPI (AT89S8252): CPOL = 0, CPHA = 1, Fosc = 16МГц/128, MSB первый

Сообщение отредактировал 011119xx - Nov 21 2007, 11:04
Прикрепленные файлы
Прикрепленный файл  RTC.BMP ( 125.08 килобайт ) Кол-во скачиваний: 32
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 17:39
Рейтинг@Mail.ru


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