roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 фев 2025, 21:54

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 19 мар 2012, 14:17 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, я расписал то, что бросилось в глаза при беглом просмотре кода.
Опыта работы с DS12887 у меня нет. Понять, что как переключается, из приведенного кода сможет только телепат :pardon:
Выкладывай весь код, да с комментами...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 19 мар 2012, 18:24 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Да оно переключается по крайней мере на выходе МК так как надо, но вот воспринимает ли это микросхема часов неизвестно. А что код выкладывать - это практически он весь и есть. Остальное перевод числа в строку и вывод на LCD.
Порт D - порт с линиями управления AS (PD4), DS (PD6), R/W (PD5), CS(PD3)
Порт C - шина адреса-данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 19 мар 2012, 23:04 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, если тебе жалко свое время, давай тратить мое :D
Код:
PORTD = PORTD & 0b10111111; //DS_CLR

_delay_us(5);

PORTD = PORTD | 0b01000000; //DS_SET  строб считывания данных с шины

sec=PORTC;

Тут ты считываешь данные после пассивного состояния DS.
А надо перед самым спадом, ведь после пассивного состояния данные остаются только tDHR, который тенется целых 10-80 наносекунд. :)
Код:
PORTD = PORTD & 0b10111111; //DS_CLR

_delay_us(5);

sec=PORTC;

PORTD = PORTD | 0b01000000; //DS_SET  строб считывания данных с шины


Пойду дальше читать pdf на DS12887

Добавлено спустя 14 минут 47 секунд:
и кто такой "AD_DDR", какое он имеет отношение к "Порт C - шина адреса-данных."
И убери из вечного цикла настройку порта на выход, это делается один раз.
Аналогично не надо устанавливать ресет и cs


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 08:38 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Цитата:
Тут ты считываешь данные после пассивного состояния DS.

Вот тут у меня тоже возникли сомнения, когда считывание происходит - написано было по отрицательному импульсу, т.е. вроде по переходу 1->0. Пробовал и так...
Цитата:
и кто такой "AD_DDR", какое он имеет отношение к "Порт C - шина адреса-данных."

Регистр порта С, определяет на вход или на выход работает.
Да, но если мне надо сначала выдать в шину адрес, а потом с нее что-то считать, то мне по-любому необходимо менять направление работы порта. В своем примере я использовал адрес ячейки, где хранятся секунды и пытался раз в секунду считывать значения этого регистра - если часы рабочие и идут, то логично, что значение там каждый раз меняться.
Цитата:
Аналогично не надо устанавливать ресет и cs

Ну это, да, можно и один раз сделать. Пойду пробовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 13:30 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Flint писал(а):
Вот тут у меня тоже возникли сомнения, когда считывание происходит - написано было по отрицательному импульсу, т.е. вроде по переходу 1->0. Пробовал и так...

Дело не в том, что когда DS переходит: 1\0 или 0/1, а в том, что после такого перехода данные остаются на шине всего 10-80нс. У авр на 8 мгц. однотактная команда длиннее = 1/8мгц =125 ns
Данные надо считывать до перехода...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 21:11 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Цитата:
что после такого перехода данные остаются на шине всего 10-80нс

Да ну! :no: По-моему фиксирование данных на шине может происходить либо по полжительному импульсу(0->1) или по отрицательному (1->0). После чего можно спокойно считывать данные.
Цитата:
данные остаются на шине всего 10-80нс

А какже они могут на шине держаться только какие-то 10 наносекунд? Врядли...
Вот из того линка что я приводил, не думаю, что здесь что-то не правильно
Цитата:
Видим, что положительным импульсом на входе AS микросхеме указывается, что на шине данных находится номер регистра, с которым мы хотим работать. А далее положительным импульсом на входе DS указываем микросхеме, что нужно прочитать или записать данные из выбранного регистра на шину данных

Вот
Цитата:
...положительным импульсом на входе AS микросхеме указывается...
именно этот положительный импульс, т.е. 0->1 и фиксирует на шине - адрес, после такого перепада часы должны у себя это зафиксировать. Далее другим управляющим сигналом, тоже именно перепадом указываем, что делать (читать/писать). Это по Мотороловскому алгоритму, по Интеловскому чуть по-другому, но сути не меняет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 21:46 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Flint писал(а):
Да ну! По-моему фиксирование данных на шине может происходить либо по полжительному импульсу(0->1) или по отрицательному (1->0). После чего можно спокойно считывать данные.

Он считывает данные из часов после DS...
открываем пдф, смотрим:
Figure 5. BUS TIMING FOR MOTOROLA INTERFACE
Figure 7. BUS TIMING FOR INTEL INTERFACE READ CYCLE

tDHR - "Read-Data Hold Time" = 10 - 80ns.

Добавлено спустя 11 минут 13 секунд:
Если режим "BUS TIMING FOR INTEL INTERFACE READ CYCLE", то это tDHR и считывать данные надо до "DS_SET строб считывания данных с шины"
А если режим "Figure 5. BUS TIMING FOR MOTOROLA INTERFACE", то это tDDR
"Output Data Delay Time From DS/E or RD" и он не 0 нс. а 20-120 нс. т.е авр может успеть сосчитать данные, которые еще не устаканились и надо делать задержку чтения.
Т.е при любом режиме DS12887, чтение сделано неправильно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 22:05 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Вот, действительно, если внимательно посмотреть, то это надо понимать так, что данные на шине сами по себе не пропадают. Шина может перейти в друго состояние, соответственно, с потерей данных на шине по нашей воле, напрмер, изменили сигнал CS. Хотя в даташите момент изменения состояния шины не привязан ни к какому моменту по отношению к другим сигналам (максимум что заметно это к CS). А нет, привязан, к перходу DS от 0 к 1. Но к этому моменту данные на шине уже появились после перхода DS от 1 к 0 с задержкой tDDR. В моем первом примере действительно ошибка была - я считывал после цикла DS 1->0->1. Хотя я уже все варианты перебирал - результата не было. Еще один момент. Если даже внутрення батарея села, то можгут ли часы работать хоть от наличия внешнего напряжения (естественно, без сохранения данных при выключения питания)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 20 мар 2012, 22:18 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Flint писал(а):
А нет, привязан, к перходу DS от 0 к 1. Но к этому моменту данные на шине уже появились после перхода DS от 1 к 0 с задержкой tDDR.

Появившиеся данные после tDDR уже не интересны, т.к. после tDHR "DS от 0 к 1", шина данных переходит в высокоомное состояние и вы считываете погоду на луне :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 21 мар 2012, 08:20 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Да, неинтересно. Поэтому считывать надо после DS 1->0. В первоначальном примере я уже упомянул, что там ошибка, но пробовал все варианты.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO