roboforum.ru

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

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




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: RTC ds1390
СообщениеДобавлено: 13 окт 2011, 11:46 
Не в сети

Зарегистрирован: 22 мар 2011, 01:02
Сообщения: 20
Появилась необходимость использовать часы ds1390 в качестве будильника для lpc2364. Часы работают отлично, а вот генерировать alarm сигнал в упор не хочет. Control регистр если настроить без будильника 0x18, то на ножке sqw/!int 32kHz. Если же включаем будильник, то всегда 0. Уже как только не вертел. Подскажите что не так.

По идее должен генерировать 100HZ.

Код:

#define DS_HC          0x00
#define DS_SECONDS     0x01
#define DS_MINUTES     0x02
#define DS_HOURS       0x03
#define DS_DAY         0x04
#define DS_DATE        0x05
#define DS_MONTH       0x06
#define DS_YEAR        0x07
#define DS_ALARM_HC    0x08
#define DS_ALARM_SEC   0x09
#define DS_ALARM_MIN   0x0A
#define DS_ALARM_HOURS 0x0B
#define DS_ALARM_DY_DT 0x0C
#define DS_CONTROL     0x0D
#define DS_STATUS      0x0E
#define DS_TR_CH       0x0F
#define DS_ALARM_UP_TIME 0x05

#define DS_WRITE       0x80

#define DS_32kHz       0x18
#define DS_8kHz        0x10
#define DS_4kHz        0x08
#define DS_1Hz         0x00


void ds1390_write_alarm(void)
{
uint16_t i=0;
for(i = 0; i < 100; i++);
pin_low(DS_CS_PORT, DS_CS_PIN);
SSP1Send(DS_ALARM_HC + DS_WRITE); // select seconds register write address
SSP1Send(0xFF);
pin_high(DS_CS_PORT, DS_CS_PIN);

      for(i = 0; i < 100; i++);
      pin_low(DS_CS_PORT, DS_CS_PIN);
      SSP1Send(DS_ALARM_SEC + DS_WRITE); // select seconds register write address
      SSP1Send(0x80);
      pin_high(DS_CS_PORT, DS_CS_PIN);

for(i = 0; i < 100; i++);
pin_low(DS_CS_PORT, DS_CS_PIN);
SSP1Send(DS_ALARM_MIN + DS_WRITE); // select seconds register write address
SSP1Send(0x80);
pin_high(DS_CS_PORT, DS_CS_PIN);

      for(i = 0; i < 100; i++);
      pin_low(DS_CS_PORT, DS_CS_PIN);
      SSP1Send(DS_ALARM_HOURS + DS_WRITE); // select seconds register write address
      SSP1Send(0x80);
      pin_high(DS_CS_PORT, DS_CS_PIN);
      for(i = 0; i < 100; i++);

for(i = 0; i < 100; i++);
pin_low(DS_CS_PORT, DS_CS_PIN);
SSP1Send(DS_ALARM_DY_DT + DS_WRITE); // select seconds register write address
SSP1Send(0x80);
pin_high(DS_CS_PORT, DS_CS_PIN);
for(i = 0; i < 100; i++);
}

void ds1390_init(void)
{
volatile unsigned char i;

pin_high(DS_CS_PORT, DS_CS_PIN);
pin_dir(DS_CS_PORT, DS_CS_PIN, OUTPUT);

for(i = 0; i < 100; i++);

pin_low(DS_CS_PORT, DS_CS_PIN);

       SSP1Send(DS_CONTROL + DS_WRITE);
      SSP1Send(0x1D); // enable osc, 32kHz sqw       
      //SSP1Send(DS_32kHz);

pin_high(DS_CS_PORT, DS_CS_PIN);

  for(i = 0; i < 100; i++);

  pin_low(DS_CS_PORT, DS_CS_PIN);

       SSP1Send(DS_TR_CH + DS_WRITE);
      SSP1Send(CHARGE_DISABLED);

  pin_high(DS_CS_PORT, DS_CS_PIN);

  ds1390_write_alarm();
 
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RTC ds1390
СообщениеДобавлено: 19 окт 2011, 13:19 
Не в сети

Зарегистрирован: 24 май 2010, 15:31
Сообщения: 92
Откуда: Екатеринбург
ФИО: Зайцев Иван Алексеевич
А почему не захотели использовать встроеный RTC?


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

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


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

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


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

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