Страница 1 из 1

часы DS12887 под управлением 16f877A на СИ не могу запустить

Добавлено: Пт дек 13, 2013 10:21:02
electronik_tver
Уважаемые форумчане, столкнулся с наверно очень несложной проблемой, помогите пож кто знает,
имеется несколько девайсов DS12887
korpus.JPG
вот такой девайс
(2.52 КБ) 875 скачиваний
это часы реального времени в одном корпусе с батарейкой и кварцем. Знаю что они жутко неудобные и имеются более экономичные микрухи но часы есть и нужно их куданить применить.
Описание на русском читал

даташит на английском переводил
http://www.it.uu.se/edu/course/homepage ... 7-rtc0.pdf

диаграммы и временные характеристики есть,
TimeDelaynumber.JPG
времянки
(87.51 КБ) 813 скачиваний
Timerdelaywaveform.JPG
диаграммы Интел
(36.96 КБ) 590 скачиваний
примеры программ есть, вроде все понятно но неполучается запустить собственную программу.

Re: часы DS12887 под управлением 16f877A на СИ не могу запус

Добавлено: Пт дек 13, 2013 10:27:21
electronik_tver
вот пример с какогото буржуйского форума
time.c
(2.78 КБ) 344 скачивания
вот более распространенная в поиске версия Timothy Reitmeyer
clock.c
(13.23 КБ) 264 скачивания
тут еще немного
http://www.electro-tech-online.com/thre ... ion.96376/
http://www.ccsinfo.com/forum/viewtopic.php?p=67343

на стр 37 Радиоежегодник за 1989г хорошо описано про советский аналог

Re: часы DS12887 под управлением 16f877A на СИ не могу запус

Добавлено: Пт дек 13, 2013 10:31:06
electronik_tver
вот что получилось у меня:

#include <htc.h>
#include <stdio.h>
#include "usart.h"
#include "hard_config.h"

__CONFIG(HS & WDTDIS & PWRTEN & BOREN & LVPDIS & UNPROTECT );

#define DS_AS RC0
#define DS_WR RC1
#define DS_RD RC2
#define DS_Data PORTD

unsigned char ReadMemory (unsigned char Addr);
void WriteMemory (unsigned char Addr,unsigned char Data);
void ClockInit( void );

near unsigned char hours; //,minutes,seconds,day,mon,year,week,mem;

void main() // начало процедуры
{// установка начальных параметров
GIE = 0;init_comms();ClockInit();
//WriteMemory(0x02,0b00000000);
//hours=ReadMemory(0x02);
while(1) {
//hours=ReadClock(0x02); minutes=ReadClock(0x01); seconds=ReadClock(0x00);
//day=ReadClock(0x04); mon=ReadClock(0x05); year=ReadClock(0x06); week=ReadClock(0x03);
hours=ReadMemory(0x02);printf("\r\n=%d", hours);
DelayS(1);
//if (hours <10) printf("\r\n=0%d", hours); else printf("\r\n=%d", hours);
}// окончание бесконечного цикла
}// окончание процедуры

unsigned char ReadMemory (unsigned char Addr) { //читаем значение данных по адресу Addr
unsigned char temp = 0;
TRISD=0b00000000;
DS_RD=1;DS_WR=1;DS_AS=1;
DS_Data=Addr;
DS_AS=0;DelayUs(1);
DS_RD=0;DelayUs(1);
TRISD=0b11111111;
temp = DS_Data;
DS_RD=1;DS_AS=1;
return temp;}

void WriteMemory (unsigned char Addr, unsigned char Data ) {//записываем значение данных по адресу Addr
DS_RD=1;DS_WR=1;DS_AS=1;
TRISD=0b00000000;
DS_Data=Addr;DS_AS=0; DelayUs(1);
DS_Data=Data;DS_WR=0;DelayUs(1);
DS_WR=1;DS_AS=0;}

void ClockInit( void ){
TRISC0=0x00;TRISC1=0x00;TRISC2=0x00;PORTC=0;
WriteMemory (0x0A, 0b11110100 ); //Регистр А
WriteMemory (0x0B, 0b11111110 ); //Регистр В
}



архив проекта:
Clock_DS12887.zip
(193.3 КБ) 220 скачиваний

пробовал разные типы обмена моторола и интел, и с внешней процедурой и одной сишкой, выдает нули при чтении и часы стоят не меняют секунды, на настройки не отзываются.
Что я сделал не так?




PS Блин вообще тема специальная про часы есть, только увидел , может можно перенести туда

Re: часы DS12887 под управлением 16f877A на СИ не могу запус

Добавлено: Сб дек 14, 2013 10:13:26
electronik_tver
Ну помогите хоть ктонибудь несложный ведь протокол, у меня просто опыта маловато а разобраться хочу, на роботофоруме вообще обсмеяли, типа че тут сложного читаешь мануал и пишешь, а я уже неделю терзаю 20 строчек кода

Re: часы DS12887 под управлением 16f877A на СИ не могу запус

Добавлено: Ср янв 01, 2014 23:45:24
electronik_tver
неожиданно обсуждение переместилось сюда :

http://radiokot.ru/forum/viewtopic.php? ... 1#p1876371

если это комуто понадобится