Главная » Микроконтроллеры
Призовой фонд
на ноябрь 2021 г.
1. Рюкзак Mean Well
Компэл
2. Инвертор авто Mean Well 150 Ватт
Компэл
3. Термос MeanWell
Компэл

Использование интерфейса USI для подключения периферии I2C к Attiny2313

Вопрос о замене одного из элементов в схеме [1] на более дешёвый и распространённый подсказал идею подключения периферии I2C к широко используемым микроконтроллерам Attiny2313, не имеющим такого интерфейса. Поскольку поиск готовых решений ничего не дал, кроме аппноты AVR310, то наиболее очевидным стало пойти по пути адаптирования этого решения к подключению часов RTC с интерфейсом I2C.


Представленная на рис. схема была реализована на беспаечной макетной плате. Микросхема RTC PCF2129AT, одна из наиболее интересных, на мой взгляд - была подключена через переходник SOIC-DIP. Ввод-вывод данных осуществлялся через интерфейс UART посредством распространённой платы на базе FTDI FT232RL, которую также можно использовать и в качестве bitbang-программатора. Светодиод необязателен, но весьма полезен при отладке, т.к. его мигание с частотой 1Гц будет говорить о том, что инициализация RTC прошла успешно.

Изменения в исходных файлах библиотеки "исходников" из App. Note AVR310 [2] минимальны: заголовок дополнен определениями для МК Attiny2313A и 4313 и определение частоты МК для функции задержки.

В AVR310 интерфейс I2C  реализован «поверх» USI с программными дополнениями для старт-стоп последовательностей путём программного управления выводами SCA и SCL с соответствующими задержками, переназначения SDA с входа на выход, программного формирования очереди данных для передачи через интерфейс USI и собственно передачи сформированной последовательности или приёма данных. Приём и передача данных реализованы в универсальной функции USI_TWI_Start_Transceiver_With_Data(), причём, в общем случае они являются пакетными (bulk read/write). Чем я и воспользовался, благо, многие RTC это позволяют. Как это реализовано в данном случае, см. [3], с.6.

Ключевой момент работы интерфейса – подготовка данных для USI_TWI_Start_Transceiver_With_Data(). Начальным (0-вым) элементом очереди является адрес устройства на шине I2C. Адрес берётся «как есть», сдвигать его на 1 бит влево для освобождения младшего бита для атрибута чтения/записи, как это сделано в оригинальном примере использования [2], не нужно. Младший бит в адресе у нас уже свободен. Для операции записи этот бит должен быть сброшен, для чтения – установлен. В операции записи данных следующий элемент очереди — адрес регистра устройства, куда (откуда) будет осуществляться запись (или последующее чтение). Далее следует «полезная нагрузка» — байт данных, который необходимо передать. При чтении получаемые данные записываются, начиная с 1-го байта, следующего за адресом устройства, который остаётся неизменным и может использоваться для последующих операций.

Работа с RTC PCF2129AT строится следующим образом

Инициализация при включении. Состоит из 2-х этапов: запись 0 в регистр CLKOUT (0x0F), небольшой задержки и инициализации этого регистра значением, устанавливающим интервал измерения температуры, установкой бита OTP, который вызывает принудительное применение калибровочных параметров RTC, а также частоты на выводе CLKOUT, которая в моём примере выбрана 1Гц.

Установка времени. После получения всех 6 значений (дата и время) по UART и приведения их к формату BCD, данные записываются в RTC в 2 этапа: 4 значения, секунды, минуты, часы и день месяца — с адреса регистра секунд (0x03), и затем месяц и год — с адреса регистра месяцев (0x08). Таким образом, пропускается номер дня недели, который в данном примере не используется.

Получение данных. Операцией записи 2-х байт в RTC передаётся адрес регистра секунд, с которого будет осуществляться последующее чтение, затем устанавливается бит чтения в адресе устройства и USI_TWI_Start_Transceiver_With_Data() вызывается на чтение 8 байт данных. После разбора полученных данных, они выводятся в UART.

Строковые константы «убраны» во flash и читаются непосредственно оттуда (функция prtstr_P()), что несколько загромождает пример монструозными декларациями. Но, так это реализовано в AVR GCC. А иначе, эти константы переполнят оперативную память Attiny 2313 и прошивки не получится.

Аналогичным образом можно использовать данный метод и с другими RTC, такими, как DS1307, DS3231, DS3232,PCF8583, поменяв соотв. адреса согласно их даташитам.

Также хотел бы отметить выгодные отличия PCF2129 от других, с которыми приходилось иметь дело.

  • Наличие контроля разряда батарейки
  • Наличие функции timestamp — запоминание времени от внешнего прерывания.
  • Наличие интерфейса SPI.

Недостаток — малая распространённость, в отличие от тех же DS3231.

Более детально про эту RTC с разными вариантами библиотек можно посмотреть в [4]. Там же указаны и адреса SPI для чтения/записи, которые отсутствуют в [3].

Порядок работы.

  1. После включения питания и подключения консоли (по UART), нажатие клавиши пробела выведет текущие дату и время в формате DD/MM/20YY HH/mm/SS.
  2. Клавишей S переходим к режиму ввода даты и времени, в том же порядке. Корректность введённых данных не проверяется. Ввод данных можно прервать в любой момент нажатием C.

Преимущества данного метода.

Очевидно, что он даёт возможность использования периферии I2C с микроконтроллерами, имеющими только USI, при достаточно компактном коде.

О недостатках.

  1. Как и в аппаратных реализациях I2C, выводы SDA и SCL не переназначаемы.
  2. USI, как это следует из даташита на Attiny2313, не является полноценной заменой I2C, т.к. в нём не предусмотрены ограничение скорости нарастания (slew rate limiting) сигнала на выводах и фильтрация шумов на входах (noise filtering).

Таким образом, данный метод предоставляет возможность использования периферии I2C с микроконтроллерами с USI, но при условии, что данные устройства не будут подвержены влиянию помех, способных повлиять на процесс обмена данными.

Проект в формате Atmel Studio 7.0 прилагается.
Фьюзы L:E4, H:DB, E:FF.

Ссылки:

  1. ”Часы/календарь на МК ATTiny2313 и RTC DS1305”, https://cxem.net/mc/mc93.php
  2. AVR310: Using the USI module as a TWI Master, https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en590897
  3. PCF2129 Accurate RTC with integrated quartz crystal for industrial applications , http://www.farnell.com/datasheets/1930046.pdf
  4. Работа с I2C и SPI на примере часов реального времени PCA2129T, https://cxem.net/mc/mc188.php

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (7) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1

[Автор]
O18t #
Поправка. На схеме вывод SDA/~CE номер 4, не 15.
Ответить
0
andro #
Спасибо за полезную статью. Хорошо бы эту поправку внести в неё. На счёт покупок - не понимаю зачем покупать те же рекламируемые STM, если завалялся целый ящик добра.
Ответить
-2
ashelehov #
Если не секрет, чем была вызвана необходимость использовать 2313, стоимостью 220 рублей, если есть stm32f103 стоимостью 140 рублей, в которой есть всё, даже rtc ? (цены с ЧиД).
Ответить
0

[Автор]
O18t #
Никогда не брал 2313 по 220р. Брал 4313 по 150 (ЧиД, не реклама) и то, считаю, дорого.
В данном случае, цель статьи - показать пример реализации I2C через USI интерфейс. RTC это просто какая-то периферия, в данном случае. Точно так же "прикрутил" EEPROMку по I2C к Attiny.
С STM не работаю (пока). посмотрел по диагонали - это совершенно другого класса устройство. Моя статья для него конечно неактуальна.
Ответить
0
МАГ #
"микроконтроллерам Attiny2313, не имеющим такого интерфейса." - брехня, USI это и есть I2С, только назван так, чтобы с правообладателем (Philips) не ругаться.
Ответить
0

[Автор]
O18t #
Я как бы в курсе насчёт ухода от проблемы лицензионных платежей, но попробуйте прежде обратиться к USI как к I2C, например, как с Atmega. И только потом рассуждайте, что брехня, а что нет.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Ручной фен 450 Вт с регулировкой температуры Печатная плата для усилителя "LM3886 + AD825"
вверх