Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Электромагнит удерживающий 3 кг

Использование интерфейса 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 чел.

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

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

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

[Автор]
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

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Конструктор для сборки: предусилитель на лампе 6N3 USB осциллограф DSO-2090
вверх