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

 
 
> 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
Ответов (1 - 9)
GDI
сообщение Nov 16 2007, 13:03
Сообщение #2


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Кварц то генерит часовой? Может слишком быстро SPI у вас работает?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 16 2007, 20:51
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



SPI работает в одном из 4 режимов. Проверьте правильность конфигурирования SPI, его скорость, протокол обмена, slave select.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 17 2007, 21:39
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Ой, с DS1305 работал давно и мало.
Возможно, дурацкий вопрос - а полярность CS правильно сделана?
Насколько я помню, он там активный высокий (т.е. при обесточенном процессоре часы автоматически запрещены по CS).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Денис555
сообщение Nov 19 2007, 03:38
Сообщение #5


Участник
*

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



Кварц точно часовой, покупал два разных. Скорость SPI пробовал тоже разную, от самой высокой до самой низкой, и во всех 4-х режимах работы SPI. Для CS активный уровень - "1", как ни странно.
На осциллографе вижу как с МК идут импульсы в сторону DS1305, а вот обратно не хотят. Пробовал менять микросхему, все без результатно. Про то что с этой микрухой были проблемы не только у меня наслышан из форумов, хотя есть и те кому удавалось запустить эту штуку. Делаю все по тех. документации, а она молчит. Буду наверное искать замену...
Go to the top of the page
 
+Quote Post
adc
сообщение Nov 19 2007, 06:25
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Денис555 @ Nov 19 2007, 06:38) *
Кварц точно часовой, покупал два разных. Скорость SPI пробовал тоже разную, от самой высокой до самой низкой, и во всех 4-х режимах работы SPI. Для CS активный уровень - "1", как ни странно.
На осциллографе вижу как с МК идут импульсы в сторону DS1305, а вот обратно не хотят. Пробовал менять микросхему, все без результатно. Про то что с этой микрухой были проблемы не только у меня наслышан из форумов, хотя есть и те кому удавалось запустить эту штуку. Делаю все по тех. документации, а она молчит. Буду наверное искать замену...

Вот могу порекомендовать замену DS1338, или DS1307, правда они с i2c.
И еще, недавно как раз был озадачен подключением ds1307 и основная заморока была с батарейкой. Т.е. без подключенной батарейки, МС уходила в спячку и отрубала интерфейс передачи. Решил вопрос притянув батарейный вход к земле. (вот тема обсуждения http://electronix.ru/forum/index.php?showt...37842&st=0)


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
Денис555
сообщение Nov 19 2007, 09:34
Сообщение #7


Участник
*

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



Спасибо, буду пробовать другие микрухи.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2007, 12:54
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Денис555 @ Nov 19 2007, 11:34) *
Спасибо, буду пробовать другие микрухи.
Вы бы лучше код показали. А если 1307 не заработает из-за того, что вы что-то делаете неправильно - будете снова искать другую микросхему?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
011119xx
сообщение Nov 21 2007, 11:10
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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
Денис555
сообщение Nov 22 2007, 04:10
Сообщение #10


Участник
*

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



Народ, спасибо большое. Я уже переделал схему на 3-Wire, все заработало. Наверное я что-то с SPI интерфейсом ни так делал. Правда за сутки на минуту отстают, но это не проблема. smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:06
Рейтинг@Mail.ru


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