Сопряжение 5V Arduino с 3.3V часами DS1302

Тема в разделе "Глядите, что я сделал", создана пользователем Unixon, 22 апр 2012.

  1. Unixon

    Unixon Оракул Модератор

    Хотелось бы поделиться опытом по сопряжению устройств с разными питающими напряжениями на примере Arduino (Uno/Mega) и часов реального времени (RTC) Dallas DS1302. Несмотря на видимую простоту задачи и наличие некоторых известных решений, некоторые моменты реализации оказались неожиданными и не совсем тривиальными. Возможно, это окажется кому то полезным.

    Микросхемы Dallas DS1302/DS1307 одни из самых простых и популярных часов реального времени. DS1302 имеет двойное питание - основное (например, от Arduino) и запасное от батареи (аккумулятора) и содержит схему заряда батареи с программируемым ограничителем тока, питающее напряжение может изменяться в довольно широких пределах - от 2V до 5V. В качестве запасного источника питания было решено использовать батарею типа CR2032 с напряжением 3.3V. Общение с часами происходит по трехпроводному последовательному интерфейсу (две однонаправленные линии CE,CLK и одна двунаправленная IO).

    Поскольку DS1302 может работать от 5V, как и ATmega, сначала было решено запитать часы от основного источника 5V и напрямую подключить сигнальные линии к портам контроллера. Здесь никаких проблем не возникло и схема заработала как и положено. Первые проблемы начались при тестировании переключении источников питания с основного на запасной и обратно. Возникли дополнительные условия:
    1) Пока DS1302 питается от батареи, нужно гарантировать, что ни на одной интерфейсной линии не будет напряжения выше напряжения питания (3.3V);
    2) При возвращении основного источника 5V часы переставали функционировать, а встроенная схема зарядки грозилась спалить чип, что вероятно усугублялось нестрогим соблюдением (1);

    Далее часы были переведены на питание только от 3.3V, но возникла проблема согласования логических уровней с ATmega, работающей на 5V. Для однонаправленных шин достаточно было простого делителя напряжения на резисторах, для двунаправленной же линии это решение естественно не годилось. Из найденных схем согласования были опробованы преобразователь на полевом транзисторе и на базе I2C преобразователя PCA9306. Схему на полевике почему то заставить работать корректно так и не удалось, а вот микросхема PCA9306 показала себя идеально.

    Воизбежание возможных проблем со схемой зарядки DS1302 в случае сбоя в незапрограммированном состоянии, она была зашунтирована. Батарея была подключена через диод для предотвращения утечки основного источника - при необходимости его можно заменить на ограничительный резистор - что хоть и снизило питающее напряжение до 2.8V, но для часов этого оказалось вполне достаточно. После добавления фильтрующих емкостей по питанию получилась следующая схема:
    ds1320vc.gif
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Спасибо, что поделились опытом. Как добавить часы реального времени в проект — вопрос, который таки возникает время от времени.
     
  3. Unixon

    Unixon Оракул Модератор

    Развел плату для вышеприведенной схемы в виде SIP модуля (штырьковая вилка с одной стороны) под SMD компоненты. В архиве файлы для Eagle и фотошаблоны.
     

    Вложения:

  4. Unixon

    Unixon Оракул Модератор

    Более компактная двусторонняя версия часового модуля.
     

    Вложения:

  5. Unixon

    Unixon Оракул Модератор

    Девайс собран и работает :)
    ds1302vc_sip-assembled-top.jpg ds1302vc_sip-assembled-bottom.jpg

    Исходники здесь:
     

    Вложения:

  6. Chiper

    Chiper Нуб

    А библиотека для работы с ней?
     
  7. Unixon

    Unixon Оракул Модератор

    Библиотеку можно взять здесь.
     
  8. Chiper

    Chiper Нуб

    Спасибо.
     
  9. foxii

    foxii Нуб

    А я думал почему у меня сгорело пару DS1307 SO8... всю голову сломал и просто перешёл на диповые DS1307 - гораздо устойчивее к любым не типовым ситуациям.. пока ни одной не сгорело.
     
  10. Unixon

    Unixon Оракул Модератор

    Ну с DS1307 все должно быть проще в плане питания хотя бы, у нее лишь одна точка запитки, но в плане трансляции уровней напряжения то же самое скорее всего. Тестировал я сначала тоже DIP вариант, только потом распаял SO8 для компактности.
     
  11. foxii

    foxii Нуб

    Я вот сейчас бьюсь как подсоединить к контроллеру с 5В питанием датчик давления BMP085 от фирмы Bosch с питанием 3,3В по шине I2C без использования дорогих преобразователей уровня..
     
  12. Unixon

    Unixon Оракул Модератор

    Какую-то схему трансляции уровней все равно придется делать...
    У датчика шина I2C, электрически это то же самое, что и у DS130x.
    Мелкосхема транслятора PCA9306 стоит $2, с обвязкой будет не больше $3. Это дорого?
    Есть еще схемка на копеечном полевике и паре резисторов, но у меня она как то странно себя вела, не так как нужно для транслятора уровней. Может я что-то не так делал, номиналы резисторов не те были или еще что то.
     
  13. foxii

    foxii Нуб

    PCA9306 вообще не дорого. Посмотрел про неё, очень даже простая и дешёвая (например на http://platan.ru по 22 рубля предлагают). Вот смотрел какой то ADUM, там с гальванической развязкой, так та по 160 руб ))) Решил собирать на PCA9306, почитал datasheet там пример с 1,8 В и 3,3 В. Возник вопрос к Unixon, как вы выбирали резисторы R2, R3, R6, R7 (Рис. с самого первого сообщения)(вроде как по datasheet другие предлагают поставить) и почему Vref2 к 5V а не как в datasheet через R1 (200kOm)
     
  14. Unixon

    Unixon Оракул Модератор

    В Платане ее по факту нет - в каталоге есть, а в реальности нет. Резисторы расчитываются в зависимости от напряжений и токов по обе стороны, методика расчета есть в даташите PCA9306. Кажется у меня еще остались готовые платы и заготовки для конвертера (переходники на DIP для макетки). Интересует?
     
  15. foxii

    foxii Нуб

    Это не важно что нет, главное цена, а найти то уж не проблема.
    Нее, спасибо, растравить для меня не составляет труда..
     
  16. foxii

    foxii Нуб

    Кстати PCA9515 поинтереснее будет..
     
  17. Unixon

    Unixon Оракул Модератор

    Только цена запросто будет другой, или такой же, но в партии от 1000 шт :D
     
  18. Unixon

    Unixon Оракул Модератор

    У нее совершенно другое предназначение, это силитель/повторитель, как например P82B715.
     
  19. foxii

    foxii Нуб

    Да действительно, дороговата. Хотя тоже бы справилась с данной задачей.
    Ну с напряжением понятно, а ток какой лучше выбрать? В даташите предлагают 15, 10 и 3 mA!?
     
  20. Unixon

    Unixon Оракул Модератор

    Минимальный, при котором будут работать входы и выходы сопрягаемых микросхем по обе стороны