RTC от NXP

Давно лежали без дела семплы от NXP и наконец то пригодились. Делаю очередные часы на неонках, и раз микросхемы были под рукой, решил применить их.



имеем:
1) PCF2129T www.nxp.com/documents/data_sheet/PCF2129T.pdf
2) PCF8523 www.nxp.com/documents/data_sheet/PCF8523.pdf
для моей задачи каждая из них имеет свои плюсы и минусы
PCF2129T
+ встроенный кварц с термокомпенсацией
+ большой паябельный корпус (SO16)
+ поддержка I2C и SPI
— требует питания 3.3в (от 1.8 V до 4.2 V)
требует согласования логических уровней ошибся, I2C линии 5v tolerant (контроллер атмега запитан от 5в)
любители диптрейс могут использовать готовый шаблон от PCF2129 (без Т). отличие в том, что старая версия на 2 ноги длиннее(SO20), «лишние» ноги никуда не подключены.

PCF8523
— нужен внешний кварц
— нет термокомпенсации
— мелкий корпус (TSSOP14)
— нет поддержки SPI
+ питание 5в (от 1.0 V до 5.5 V)
+ согласовывать логические уровни не требуется
+ поддержка I2C

Была разведена универсальная плата под оба типа микросхем. Подключаем по шине I2C. В качестве преобразователя уровней для 2129 был применен PCA9517AD ( www.nxp.com/documents/data_sheet/PCA9517A.pdf ) так же доставшийся на халяву.

увеличить

Следует обратить внимание на правильное подключение питания. Производитель рекомендует подключать питание через RC цепочку, чтоб при выключении, оно пропадало «не слишком быстро». При резком выключении не гарантированно корректное переключение на резервную батарею. Из аппноута берем номиналы RC цепочки 220ом и 10мкф. Пересчитывать не стал, поверим на слово. Это касается обоих микросхем.

увеличить

Приятным сюрпризом стало то, что обе микросхемы имеют сходную адресацию. Различия только в некоторых конфигурационных регистрах. Потому бОльшая часть кода будет работать одинаково вне зависимости от используемой микросхемы.

Небольшие грабли обнаружились с PCF8523. У ней почему-то по умолчанию отключена работа от резервной батарейки. Надо принудительно выставлять в нужных регистрах Register Control_3 Bit 5-7.
Кварц применил от первого ланчпада (наконец то и ланчпад пригодился). В соответствии с документацией на кварц выставил настройку емкости встроенного конденсатора через конфигурационный регистр Register Control_1 Bit 7 (хотя работало и без этого).

UPD: ещё одни грабли нашел. NC ноги у PCF8523 никуда нельзя подключать. это даже в даташите сказано.

Из фишек применяю бит «батарейка разряжена» Register Control_3 Bit 2. При разряде начинает моргать красный светодиод, намекая что неплохо бы заменить батарейку.

Часы на 2129 тикают уже месяц. На 8523 собрал несколько дней назад. Багов пока не найдено

фрагменты кода

#define RTC_I2C_ADDR_2129   81
#define RTC_I2C_ADDR_8523   104

#define RTC_CONTROL1_REG   0x00
#define RTC_CONTROL2_REG   0x01
#define RTC_CONTROL3_REG   0x02

#define RTC_SEC_REG         0x03
#define RTC_MIN_REG         0x04
#define RTC_HOUR_REG      0x05
#define RTC_DATE_REG      0x06
#define RTC_WEEKDAY_REG      0x07
#define RTC_MONTH_REG      0x08
#define RTC_YEAR_REG      0x09

//инициализация
  RTC_I2C_ADDR = RTC_I2C_ADDR_2129; //по умолчанию 2129
  Wire.beginTransmission(RTC_I2C_ADDR_8523); // попробуем опросить 8523
  Wire.send(RTC_CONTROL1_REG);
  Wire.endTransmission();
  
  Wire.requestFrom(RTC_I2C_ADDR_8523, 1);
   
  if(Wire.available())    //если 8523 ответила, то запомним её адрес и настроим пару регистров
  { 
    RTC_I2C_ADDR = RTC_I2C_ADDR_8523;
    Wire.beginTransmission(RTC_I2C_ADDR_8523);
    Wire.send(RTC_CONTROL1_REG);
    Wire.send(B10000000);
    Wire.endTransmission();
    Wire.beginTransmission(RTC_I2C_ADDR_8523);
    Wire.send(RTC_CONTROL3_REG);
    Wire.send(B00000000);
    Wire.endTransmission();
  };

// основной цикл

        // проверим батарейку
        Wire.beginTransmission(RTC_I2C_ADDR);
        Wire.send(RTC_CONTROL3_REG);
        Wire.endTransmission();

        Wire.requestFrom(RTC_I2C_ADDR, 1);   
        if(Wire.available())    
        {
          c = Wire.receive();
          if((c & B00000100) > 0) 
            batLow = 1;
          else
            batLow = 0;
        }


        // опросим время
        Wire.beginTransmission(RTC_I2C_ADDR);
        Wire.send(RTC_SEC_REG);
        Wire.endTransmission();
    
        Wire.requestFrom(RTC_I2C_ADDR, 3);    // request 3 bytes from slave device 
  
        if(Wire.available())    // секунды
        { 
          c = Wire.receive(); 
          sec2 = c & B00001111; // единицы секунд
          sec1 = (c & B01110000) >> 4; // десятки секунд 
        };
        if(Wire.available())    // минуты
        { 
          c = Wire.receive(); 
          min2 = c & B00001111; // единицы минут
          min1 = (c & B01110000) >> 4; // десятки минут
        };
        if(Wire.available())    // часы
        { 
          c = Wire.receive(); 
          h2 = c & B00001111; // единицы часов 
          h1 = (c & B00110000) >> 4; // десятки часов 
        };

    
//установка часов

                // h1 десятки часов, h2 единицы часов 
                temp = h1 * 16 + h2;
                Wire.beginTransmission(RTC_I2C_ADDR);
                Wire.send(RTC_HOUR_REG);
                Wire.send(temp);
                Wire.endTransmission();

                // min1 десятки минут, min2 единицы минут
                temp = min1 * 16 + min2;
                Wire.beginTransmission(RTC_I2C_ADDR);
                Wire.send(RTC_MIN_REG);
                Wire.send(temp);
                Wire.endTransmission();
  • +8
  • 05 февраля 2013, 18:29
  • woddy

Комментарии (51)

RSS свернуть / развернуть
— требует питания 3.3в (от 1.8 V до 4.2 V)
— требует согласования логических уровней (контроллер атмега запитан от 5в)
— Замечательно питается от 5в через два диода (1N4148 + BAT41 + нагрузочный резистор 3.3k = 4.2v).
— При использовании I2C согласование уровней не требуется (page 55)
+1
  • avatar
  • Bonio
  • 05 февраля 2013, 20:36
1N4148 + BAT41
А почему не 2x1N4148?
0
Можно и так. У меня просто в качестве резервного источника питания стоит ионистор, поэтому я постарался дать максимум напряжения, чтобы побольше запаслось.
0
Спасибо. Надо было мне внимательнее читать даташиты.
0
Часы на 2129 тикают уже месяц.
И как точность? Эффект от термокомпенсированного кварца заметен? Алсо их требуется подстраивать или они уже откалиброваны?
0
  • avatar
  • Vga
  • 05 февраля 2013, 20:52
Если верить даташиту — откалиброваны. Про эффект сказать сложно, я их насилую всё время новыми прошивками :). Если подскажете методику тестирования — проверю. Или подождать еще месяц можно.
0
У меня за месяц хода показывают отличную точность, не бегут, не отстают.
Часы уже откалиброваны, но есть и подстроечный регистр.
+1
Мило. Надо тоже часики на них сделать вместо Vitek'а на LM8560 :)
0
Мда, кошерные часики тоже периодически подрывает сделать, но тут первое дело это хороший красивый корпус, по крайней мере для меня.
0
через несколько дней напишу пост о успехах с резкой на ЧПУ (фреза, лазер). около 900р корпус обошелся.
+1
О, давай. Оргстекло?
0
Им все равно из чего резать. Приноси хоть латунь хоть дерево. Искал латунь, но за разумные деньги не нашел. Пришлось из оргстекла резать (оно в конторах в наличии).
0
Ну, для меня первое дело — это хороший, большой дисплей. А за ним уже и корпус спрятать можно :)
Или, как вариант — поменять начинку все тому же витьку.
0
А как такой корпус

2 заглушки от 5.25 отсека, через плату сверлятся отверстия для выводов индикатора, кнопок, держателя батарейки. Вставляем их через заглушки и пропаиваем. Спаял платы и собрал часы за 1 вечер. Большая картинка
+1
Красиво. Правда для меня цифры маловаты.
0
Можно и побольше.
+1
0
не влезет в 5-и дюмовый отсек. Придется брать системный блок типа «descktop» или даже «minitower»
0
Зачем системный блок, это и есть «корпус». Висели в офисе на стене.
0
Варварский корпус, но, черт побери, красивый!
0
Если про материнку согласен по-варварски, но что с ними делать, их уже собралось более 200 шт. Пытался раздавать, но город небольшой больше десятка раздать не удалось.
0
оххх!!! сколько полезного с них сдуть или выпилить можно… причем, деталек, которые просто так и не купишь порой.
я недавно из интеловой двупроцессорной матери тупо выпилил синхронный многофазный buck, который стал стабилизатором тока.
0
Ну, если их много то, пожалуй, да… Платок я бы забрал, но далеко… Как вариант, можешь поучаствовать в мусоровозе) Хотя туда тоже много плат не напихаешь.
Кстати, мне кажется или это SLOT1-материнка?
0
Socket-7, а слот для расширения кеша. Гараж где находится все это добро стоит на трассе М4 (Москва-Ростов), если кто-то будет ехать мимо, заезжайте отсыплю.
0
это я к коменту woddy. У него по ссылке большие часы, вот я про них и толкую.
0
Скажите, по DS вторая(SDI) ножка PCF2129 сидит на земле, а у вас на схеме она не подключена. На плате как сделано?
0
В даташите написано «SDI 2 serial data input for SPI-bus; may float when SDA/CE inactive». Т.к. общаемся по I2C нам она не нужна. Но с другой стороны в том же даташите в примере она подключена на землю. странно, но работает.
0
Просто я сделал макетную плату по DS и сначала у меня она работала, но после очередного подключения PCF2129 начала глючить, я подумал что спалил ее и перепаял другую. Новая сразу начала глючить. В процессе экспериментов выяснилось что данные в мс записываются, но читаются только тогда, когда перезапускаю управляющий контроллер, и он читает данные только один раз.
0
прилетает мусор в ответ? или что происходит? батарейка подключена?
0
Проверил на другом контроллере все работает. Оказалось что это «глючил» контроллер (ATtiny2313).
0
Если можно, поделитесь кодом:)
0
  • avatar
  • ArmiT
  • 06 февраля 2013, 09:46
добавил кусок сорцов в заметку
0
а фото, фото часов будет? они, насколько я помню, должны быть тёплыми ламповыми?:)
0

+3
прекрасно! (поставил бы плюсов, но карма не велит)
ИН-12Б со светодиодной подсветкой снизу?
+1
ин-12а(без десятичной точки). сзади под каждой лампой ргб светодиоды (выводные, дорогие ппц). цена корпуса порядка 900р вышла
0
спасибо за плюс
а панельки под лампы где брали?
0
мне подарили лампы + панельки + 155ид1. всё б/у с выброшенного на помойку оборудования с завода. www.adslclub.ru/upload/img/2012-12/05-18080391391.jpg
0
Да это прям аттракцион неслыханной щедрости:)
Мне как-то принести три штучки ИН-12Б, обещали принести еще и на этом всё заглохло… а ехать покупать еще страшно в лом, так что так и валяются.
0
+1. Хотя сам принципиально не использую RTC, но… Красиво, блин!
0
  • avatar
  • akl
  • 09 февраля 2013, 18:27
А вот интересно, надолго ли хватит ионистора 0.1-0.22Ф вместо батарейки для данных RTC?
0
ток указан же, считать надо…
0
Не пробовали ли запустить будильник у PCA2129t? У меня микросхема работает во всех режимах и по I2C и по SPI, и генерит нужные прерывания (battery low detection, watchdog timer и second or minute timer) но прерывание ALARM не хочет никак выдавать. Хотя контролирую все значения в регистрах- вроде всё должно работать.
0
нет не пробовал и не планировал.
0
Добрый день.

Помогите пожалуйста с часиками 2129. Читает и пишет время нормально, но почему-то не работает от батарейки при выключении питания. Схема в пдф тут:
схема
0
схема взорвала мой моск…
что значит не работает от батарейки? какая полная схема?
0
кстати микросхема *T или *AT? у них немного разная распиновка хоть и совместимая. чертеж и/или фото платы покажи
0
При выключении внешнего питания время тикало вперед. Сейчас сохраняется только значения, при которых пропало питание.
PCF2129AT

разводка
0
батарейка живая? пайка оторвалась? конфигурационные регистры запорол? проверь регистры
0
Блин. Проблема нашлась в софте. Делал ночью и забыл закомментировать установку даты. Всем спасибо.
0
ещё одни грабли нашел. NC ноги у PCF8523 никуда нельзя подключать. это оказывается даже в даташите сказано. сижу режу лишние дорожки.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.