roboforum.ru

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

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




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

Зарегистрирован: 17 фев 2009, 13:18
Сообщения: 33
Откуда: Шахты
Как я понял из даташита в режиме "ожидания" на DS12887 такие сигналы: AS-0, DS-1, R/W-не имеет значения, CS-1, AD0-AD7-не имеет значения.
режим записи:
1. R/W=0
2. DS=0
3. AS=1
4. AD0-AD7 устанавливаем адрес (допустим 02H "минуты")
5. CS=0
6. AS=0 (при переходе с 1 в 0 микросхема считывает с AD0-AD7 информацию об адресе)
7. AD0-AD7 устанавливаем данные
8. DS-1 (при переходе с 0 в 1 микросхема считывает с AD0-AD7 данные)
после этого CS, AS и DS возврвщаются на исходную: AS-0, DS-1, CS-1.
Если не так поправте пожалуйста.
По поводу почему выбор пал именно на эту микросхему: Я ее извлек из старой материнской платы. Просто так получилось, что нужно сделать часы на этой микросхеме. (к сожалению я в выборе ограничен)

Добавлено спустя 2 часа 52 минуты 49 секунд:
Я тут навоял немного, но почему то не работает. Я пытаюсь записать, а потом считать из пзу DS12877.
Подскажите пожалуйста где я ошибся?

Код:
            ldi r27,$33
      ldi r28,$31 (соответствует цифре1)
      call clockw

      ldi r27,$33
      call clockr
      
      ldi r29,$a8
      call cmd
      mov r29,r28
      call data

clockr:   cbi portd,DS  ; подпрограмма чтения
      nop
      sbi portd,AS
      cbi portd,RW;sbi portd,RW
      ldi r16,$ff
      out DDRC,r16
      out portc,r27 в этот регстр пишется адрес
      nop
      cbi portd,CS
      nop
      cbi portd,AS
      nop
      clr r16
      out DDRC,R16
      nop
      sbi portd,DS
      nop
      cbi portd,DS
      nop
      in r28,portc регистр ввода/вывода данных
      nop
      sbi portd,DS
      nop
      sbi portd,CS
      ret

clockw:   cbi portd,DS  ; подпрограмма записи
      nop
      sbi portd,AS
      cbi portd,RW;sbi portd,RW
      ldi r16,$ff
      out DDRC,r16
      out portc,r27
      nop
      cbi portd,CS
      nop
      cbi portd,AS
      nop
      cbi portd,RW
      nop
      out portc,r28
      sbi portd,DS
      nop
      sbi portd,RW
      nop
      sbi portd,CS
      nop
      sbi portd,DS
      ret


Последний раз редактировалось blindman 12 мар 2009, 15:06, всего редактировалось 1 раз.
Используйте тэг CODE!


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

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
на асме обязательно писать?
на васике или на сях религия никак не позволяет писать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 12 мар 2009, 14:44 
Не в сети

Зарегистрирован: 17 фев 2009, 13:18
Сообщения: 33
Откуда: Шахты
EdGull писал(а):
на асме обязательно писать?
на васике или на сях религия никак не позволяет писать?


Дело не в религии, а в том что я только на асемблере могу.


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

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
ну я и говорю что религия...
религия это дело святое, поэтому никто тебя переубеждать не будет.

жди тех кто у нас на асме пишет, думаю помогут.


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

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Aptem, твой код вроде должен работать. Я особо полно не пытался разобраться ни в коде, ни в работе этой микросхемы, но ты похоже упустил одну маленькую деталь. DS12887 может работать в 2 режимах - Intel Timing и Motorola Timing. Та последовательность сигналов что ты выдаешь соответствует Motorola Timing, а микросхема по умолчанию находится в режиме Intel Timing. Чтобы перевести в режим Motorola Timing, надо на вход MOT (1 нога) подать логическую 1. И еще - на CS и DS между циклами доступа держи лог. 1 (установи ее там в самом начале программы).

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 12 мар 2009, 17:02 
Не в сети

Зарегистрирован: 17 фев 2009, 13:18
Сообщения: 33
Откуда: Шахты
Забыл упомянуть, что у меня МОТ=1
Може задержку больше сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 12 мар 2009, 17:07 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
DS12887 Часы реального времени

по русски - http://www.gaw.ru/html.cgi/txt/ic/Maxim ... S12887.htm

и даташит там же.


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

Зарегистрирован: 17 фев 2009, 13:18
Сообщения: 33
Откуда: Шахты
Так по русски только краткое описание.


Последний раз редактировалось EdGull 12 мар 2009, 17:34, всего редактировалось 1 раз.
Излишнее цитирование!!!


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

Зарегистрирован: 11 июл 2008, 22:43
Сообщения: 134
Откуда: Воронежск
прог. языки: С, Delphi, Asm
А зачем тебе еще одни часы. В меге16 вроде есть свои реального времени. И парится особо не надо.

_________________
GIRUGAMESH!


Последний раз редактировалось EdGull 12 мар 2009, 17:35, всего редактировалось 1 раз.
Излишнее цитирование!!!


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

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
нету у меги часов.. тока таймер с возможностью подключения часового кварца...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


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

Зарегистрирован: 11 июл 2008, 22:43
Сообщения: 134
Откуда: Воронежск
прог. языки: С, Delphi, Asm
Это я и хотел сказать

_________________
GIRUGAMESH!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DS12887
СообщениеДобавлено: 13 мар 2009, 15:12 
Не в сети

Зарегистрирован: 17 фев 2009, 13:18
Сообщения: 33
Откуда: Шахты
Может всетаки кто нибудь мне обьяснит (на пальцах) как просходит чтение/запись?(в какой последовательности что выставляется) Если конечно это не идет в разрез с вашими принципами?


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

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Тоже попалась эта микросхема, решил поиграться с ней. Так как несилен в английском, даже с гуглом, не мого понять как происходит считывание и запись из/в микросхему. Поискал в интенете, нашел http://zxbyte.ru/rtc.htm на русском про режим общения с ней. Набросал программку на Си.
Вот часть её:
Код:
while(1){
CTRL_DDR=0b11111111;//DDRD, порт на выход для управления

   //RST_SET;
PORTD = PORTD | 0b10000000;

PORTD = PORTD | 0b00001000; //CS_SET, disable

PORTD = PORTD & 0b10111111; //DS_CLEAR
   
PORTD = PORTD & 0b11101111; //AS_CLR;

PORTD = PORTD & 0b11011111; //RW_CLR;

_delay_ms(1);

PORTD = PORTD & 0b11110111; //CS_CLR, enable  разрешаем работу

_delay_us(5);

AD_DDR=0xff; //шина адреса-данных на выход

PORTC = 0x00; // адрес ячейки, секунды

PORTD = PORTD | 0b01000000; //DS_SET;

PORTD = PORTD | 0b00010000; //AS_SET;

_delay_us(5);

PORTD = PORTD & 0b11101111; //AS_CLR   строб передачи адреса

_delay_us(5);

AD_DDR=0x00; //шина адреса-данных на вход

_delay_us(5);

PORTD = PORTD & 0b10111111; //DS_CLR

_delay_us(5);

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

sec=PORTC;

   }
  return 0;
}


Итог - считывается то, что и записывается. Даже если микросхему вытащить из панельки - результат не меняется. Не пойму где делаю что-то нет так. То ли микросхема неисправна, то ли я с мультиплексироаной шиной работаю неправильно.


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

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
А почему не завести отдельную переменную - теневой регистр порта D ?
Меняй все в этом регистре, а потом выводи его в порт.
А то на 16 мгц. проца можно словить глюк медленности переключения пинов:
Код:
PORTD = PORTD & 0b11101111; //AS_CLR;

PORTD = PORTD & 0b11011111; //RW_CLR;

Если это отрабатывается как "чтение - модификация - запись", что очень вероятно, то первая команда сбрасывает бит (4-й), но реально он сбросится где-то хз на каком такте проца. А след. за ней команда сбрасывает 5-й бит, но 4-й еще не сбросился и в результате в 4-й бит запишется "1" : 0bxxx1xxxx & 0b11011111 = 0bxx01xxxx

Надеюсь ни чо не перепутал. Мои слова не нести в банк :)


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

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Здесь всё так просто я записал чтоб мне наглядней было. Первоначально я изменения битов в порту делал макросами. Микросхема никак не реагировала. Расписал для себя всё развернуто. Команды выдачи управляющих сигналов реализованы согласно (ну насколько я понял) режимам из даташита и того линка что привел. Да, здесь отрабатывается как "чтение - модификация - запись" Да, возможно здесь сыграла роль медленность переключения порта, надо будет поставить задержки. Проц работает на внутреннем генераторе 8 МГц. Но интересно другое, если вынимаю часы из панельки, то потом при чтении порта (который адрес-данные) читается то же, что и записывалось. Может я неправильно работаю с шиной на выход, потом на вход?
AD_DDR=0xff; //шина адреса-данных на выход для выдачи адреса ячейки/регистра
....
PORTC = 0x00; // адрес ячейки, секунды. Собственно сама выдача
....
AD_DDR=0x00; //шина адреса-данных на вход для считывания из часов

Может здесь таже проблема...?
Попробую.


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

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


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

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


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

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