Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

DS1338Z
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=17001
Страница 1 от 2

Автор:  stoyanoff [ Чет Яну 30, 2020 1:45 pm ]
Заглавие:  DS1338Z

Здравейте! Някой работил ли е с това нЯщо?! Ето го чаршафа ->DS1338Z
Не мога да му хвана чалъма. Чаршафът на страница 14 казва, че трябва да направят така- > 208(команда за запис), адрес(изпращам 0, като предполагам това трябва да е първият адрес според таблица 3 стр 10), 209(команда за четене) и чета 8 записа. Обаче така нищо не става....
Когато опитам процедурата за обикновено четене -> просто команда 209 + четене на 8 байта, първият път се изчита правилно, след което предполагам адресния регистър продължава да се инкрементира и аз чета глупости при повторен опит.
На логическия всичко е нормално - > комуникацията е правилна, получавам си АCK и т.н.
Някаква идея каква е точно процедурата за четене/запис?
Благодаря!

ПП: Някой да погледне какъв е този спам в другия раздел, ако е възможно!

Автор:  ig_ivanov [ Чет Яну 30, 2020 2:05 pm ]
Заглавие:  Re: DS1338Z

Трябва всеки път при четене на данни да се праща 0xE0, 0, 0xE1, за да ти сложи указателя в началото на клетките на RTC. Иначе продължава докато свърши и RAM паметта.

Автор:  stoyanoff [ Чет Яну 30, 2020 2:28 pm ]
Заглавие:  Re: DS1338Z

Не са 0хЕ0 и 0хЕ1, а 0xD0 и 0xD1(208 и 209)(спроред документа). И не се получава...

Автор:  ig_ivanov [ Чет Яну 30, 2020 3:58 pm ]
Заглавие:  Re: DS1338Z

Да, моя е грешката, 0xD0 е. Доколкото разгледах- чипа е същия като DS1307, само има добавен флаг за авария на кварца и поддържа до 400кХц шина.
Нещо такова трябва да е (за PIC16 e кода):
Код:

void i2c_waitForIdle()
{
while (( SSPCON2 & 0x1F ) | SSPSTATbits.R_nW ) {}; // wait for idle and not writing
}

int i2c_read( unsigned char ack )
{
unsigned char i2cReadData;

i2c_waitForIdle();
SSPCON2bits.RCEN=1;
i2c_waitForIdle();
i2cReadData = SSPBUF;
i2c_waitForIdle();
if ( ack )
  {SSPCON2bits.ACKDT=0;}
else
  {SSPCON2bits.ACKDT=1;}
  SSPCON2bits.ACKEN=1;               // send acknowledge sequence
return( i2cReadData );
}

unsigned char i2c_write( unsigned char i2cWriteData )
{
i2c_waitForIdle();
SSPBUF = i2cWriteData;
return ( !SSPCON2bits.ACKSTAT  ); // function returns '1' if transmission is acknowledged
}


void ds1307_get_date(unsigned short *day, unsigned short *mth, unsigned short *year, unsigned short *dow)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x03);            // Start at REG 3 - Day of week
  i2c_start();
  i2c_write(0xD1);
  *dow  = bcd2bin(i2c_read(1) & 0x7f);   // REG 3
  *day  = bcd2bin(i2c_read(1) & 0x3f);   // REG 4
  *mth  = bcd2bin(i2c_read(1) & 0x1f);   // REG 5
  *year = bcd2bin(i2c_read(0));          // REG 6
  i2c_stop();
}

void ds1307_get_time(unsigned short *hr, unsigned short *min, unsigned short *sec)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x00);            // Start at REG 0 - Seconds
  i2c_start();
  i2c_write(0xD1);
  *sec = bcd2bin(i2c_read(1) & 0x7f);
  *min = bcd2bin(i2c_read(1) & 0x7f);
  *hr  = bcd2bin(i2c_read(0) & 0x3f);
  i2c_stop();
}

Автор:  stoyanoff [ Пет Яну 31, 2020 10:02 pm ]
Заглавие:  Re: DS1338Z

10x! Бях забравил как точно работи този интерфейс и че трябва да се изпълни "старт" преди смяна на посоката. А и тези не са отбелязали в чаршафа...

Автор:  stoyanoff [ Съб Фев 01, 2020 1:25 pm ]
Заглавие:  Re: DS1338Z

Един въпрос за интегралката! Как се изгражда програмата, за да не сетва всеки път времето контролерът при рестарт? Примерно задавам си колко е часа при първоначална инициализация и го ставям да работи. Обаче при някакви обстоятелства контролерът ми трябва да се ресетне. Как да разбере, че след ресета не трябва да инициализира часовника отново?! Ясно, че мога да заделя една клетка EEPROM, обаче не съм се сетил като проектирах платката да сложа ЕЕПРОМ. Мислех, че ще проверявам флага CH обаче изглежда той винаги си е 0, ако няма изключителна ситуация за интегралката.
Благодаря!

Автор:  ig_ivanov [ Съб Фев 01, 2020 1:35 pm ]
Заглавие:  Re: DS1338Z

Проверяваш дали прочетените стойности от часовника за валидни, т.е. са в разрешения диапазон за всеки един параметър. Ако не е настройван часовника в него може да показва, примерно, че е 35:88:73ч. и флага пак да си показва, че всичко е наред.

Автор:  itso.t [ Съб Фев 01, 2020 1:42 pm ]
Заглавие:  Re: DS1338Z

stoyanoff написа:
...Ясно, че мога да заделя една клетка EEPROM, обаче не съм се сетил като проектирах платката да сложа ЕЕПРОМ...

Чипът има NV RAM...

Автор:  stoyanoff [ Съб Фев 01, 2020 6:54 pm ]
Заглавие:  Re: DS1338Z

Интегралката се оказа доста точна! Едва ли ще се настройва често. От обяд днес не е дала видима разлика. Най-вероятно ще направя някаква тъпа процедурка за настройка понеже имам 2х7 сегментен индикатор + 4 бутона.

Автор:  Cekins [ Пон Фев 03, 2020 4:58 pm ]
Заглавие:  Re: DS1338Z

За проверка дали е минал сетъп - ползваш NVRAM-а - записваш в няколко байта нещо си + чексума и няма как при махане на батерията да се възстанови същото :) Ама да кажеш точен в рамките на ден - нищо не значи. Точен се казва в рамките на година. Примерно DS3232 дава +/-30 сек. на година.

Автор:  stefan63 [ Пон Фев 03, 2020 7:29 pm ]
Заглавие:  Re: DS1338Z

Цитат:
Интегралката се оказа доста точна! Едва ли ще се настройва често. От обяд днес не е дала видима разлика.

Точна,точна...колко да е точна? Колкото кварца, дето си запоил.
На кое казваш видима разлика?

Автор:  Cekins [ Пон Фев 03, 2020 7:58 pm ]
Заглавие:  Re: DS1338Z

Ами от лични наблюдения - кварц от Комет дава половин до една минута на месец при стайна температура - иде реч секунда - две на ден. В сравнение с DS3232 е направо супер неточно - там е 0.08 - 0.12 секунди на ден макс. Направо в порядък. Да не говорим какво става при студено или топло.

Автор:  slav4o.com [ Пон Фев 03, 2020 8:38 pm ]
Заглавие:  Re: DS1338Z

Е може да се сложи външен термостатиран осцилатор. Само че консумацията няма да е батерийна и се обезсмисля.
Все пак може би може с тримеркондензатор няколко пикофарада да се бута леко, ако разбира се няма влияние от температурата.
п.с. в една руска книга имаше схема на часовни с ТТЛ схеми точността беше под 1сек. на месец.

Автор:  Cekins [ Пон Фев 03, 2020 10:09 pm ]
Заглавие:  Re: DS1338Z

Ами аз какво говоря :) DS3232 си е с вграден кварц и автоматична температурна компенсация и е с батерийна консумация. Даже като бонус има достъп до регистъра с термометъра и може да се ползва за мерене на температурата в кутията. И това съм ползвал - едно устройство дето го искаха с точен часовник и акумулатори в кутията - вместо да слагам допълнителен термометър ползвам тоя на часовника за да компенсирам температурно заряда на батерията. И половината NVRAM му ползвам да си пазя разни параметри дето не са съвсем за EEPROM. Отначало като бяха новинка бяха скъпички ама сега им паднаха цените.

Автор:  stoyanoff [ Вто Фев 04, 2020 7:25 pm ]
Заглавие:  Re: DS1338Z

Гледах го това DS3232, просто ми се стори прекалено скъпо за конкретния случай. На практика у-вото следи 2 температури - една в бойлер и една в котел. Като стане топло в котела и студено в бойера пуска помпа. Часовникът е за задаване на някакви часови активности(не знам точно какво ще го прави ...). Така че мисля 1-2 минути на месец при положени, че работи само зимата...

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/