roboforum.ru

Технический форум по робототехнике.


DS12887

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: DS12887

Сообщение Aptem » 12 мар 2009, 14:11

Как я понял из даташита в режиме "ожидания" на 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!
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: DS12887

Сообщение EdGull » 12 мар 2009, 14:38

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

Re: DS12887

Сообщение Aptem » 12 мар 2009, 14:44

EdGull писал(а):на асме обязательно писать?
на васике или на сях религия никак не позволяет писать?


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

Re: DS12887

Сообщение EdGull » 12 мар 2009, 14:57

ну я и говорю что религия...
религия это дело святое, поэтому никто тебя переубеждать не будет.

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

Re: DS12887

Сообщение blindman » 12 мар 2009, 16:01

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!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: DS12887

Сообщение Aptem » 12 мар 2009, 17:02

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

Re: DS12887

Сообщение avr123.nm.ru » 12 мар 2009, 17:07

DS12887 Часы реального времени

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

и даташит там же.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: DS12887

Сообщение Aptem » 12 мар 2009, 17:17

Так по русски только краткое описание.
Последний раз редактировалось EdGull 12 мар 2009, 17:34, всего редактировалось 1 раз.
Причина: Излишнее цитирование!!!
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: DS12887

Сообщение TrashVigor » 12 мар 2009, 17:28

А зачем тебе еще одни часы. В меге16 вроде есть свои реального времени. И парится особо не надо.
Последний раз редактировалось EdGull 12 мар 2009, 17:35, всего редактировалось 1 раз.
Причина: Излишнее цитирование!!!
GIRUGAMESH!
Аватара пользователя
TrashVigor
 
Сообщения: 134
Зарегистрирован: 11 июл 2008, 22:43
Откуда: Воронежск
прог. языки: С, Delphi, Asm

Re: DS12887

Сообщение Duhas » 12 мар 2009, 17:34

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

Re: DS12887

Сообщение TrashVigor » 12 мар 2009, 17:40

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

Re: DS12887

Сообщение Aptem » 13 мар 2009, 15:12

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

Re: DS12887

Сообщение Flint » 18 мар 2012, 17:07

Тоже попалась эта микросхема, решил поиграться с ней. Так как несилен в английском, даже с гуглом, не мого понять как происходит считывание и запись из/в микросхему. Поискал в интенете, нашел 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;
}


Итог - считывается то, что и записывается. Даже если микросхему вытащить из панельки - результат не меняется. Не пойму где делаю что-то нет так. То ли микросхема неисправна, то ли я с мультиплексироаной шиной работаю неправильно.
Flint
 
Сообщения: 23
Зарегистрирован: 05 янв 2009, 01:48
прог. языки: Си

Re: DS12887

Сообщение Dmitry__ » 18 мар 2012, 18:46

А почему не завести отдельную переменную - теневой регистр порта D ?
Меняй все в этом регистре, а потом выводи его в порт.
А то на 16 мгц. проца можно словить глюк медленности переключения пинов:
Код: Выделить всёРазвернуть
PORTD = PORTD & 0b11101111; //AS_CLR;

PORTD = PORTD & 0b11011111; //RW_CLR;

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

Надеюсь ни чо не перепутал. Мои слова не нести в банк :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: DS12887

Сообщение Flint » 19 мар 2012, 11:45

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

Может здесь таже проблема...?
Попробую.
Flint
 
Сообщения: 23
Зарегистрирован: 05 янв 2009, 01:48
прог. языки: Си

Пред.След.

Вернуться в Микроконтроллеры

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

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