TinyCalibrator - устройство для калибровки встроенных осцилляторов 8-выводных микроконтроллеров ATtiny и сброса Fuse-битов

Microchip ATtiny10 Attiny13 ATtiny24 ATtiny25 ATtiny44 ATtiny45 ATtiny84 ATtiny85

Простое устройство позволяет в автоматическом режиме выполнять калибровку встроенного RC-осциллятора 8-выводных микроконтроллеров серии ATtiny, а также, при необходимости, сбрасывать Fuse-биты к заводским установкам

Вебинар «Новинки и решения Traco для промышленных и отраслевых приложений» (28.10.2021)

Общие сведения

Из-за ограниченного количества доступных портов ввода/вывода 8-выводных микроконтроллеров (МК) серии ATtiny во многих проектах они используются без внешнего кварцевого резонатора. Встроенный RC-осциллятор хорошо работает в большинстве приложений, но когда дело доходит до точной синхронизации, его точность ±10% часто оказывается недостаточной. К счастью, встроенный RC-осциллятор можно откалибровать, увеличив точность до ±2% и даже лучше. Существует несколько способов ручной калибровки, которые потребуют времени и внешнего программатора.

Устройство TinyCalibrator (Рисунок 1) выполнит калибровку встроенного осциллятора полностью в автоматическом режиме нажатием одной кнопки. Чтобы устройство получилось более универсальным, автор добавил функцию сброса установок Fuse-битов (в режиме высоковольтного последовательного программирования, HVSP), которая позволяет восстановить заводские установки «заблокированных» МК серии ATtiny.

Устройство для автоматической калибровки встроенного RC-осциллятора 8-выводных микроконтроллеров ATtiny.
Рисунок 1. Устройство для автоматической калибровки встроенного
RC-осциллятора 8-выводных микроконтроллеров ATtiny.

Аппаратная часть

Напряжение питания устройства 5 В подается через разъем microUSB. Поскольку частота генерации зависит от напряжения питания МК ATtiny, в схеме используется регулятор напряжения HT7333 (Рисунок 2). Переключатель SW4 предназначен для выбора напряжения питания 5 В или 3.3 В.

Принципиальная схема устройства для автоматической калибровки RC-осциллятора 8-выводных МК ATtiny.
Рисунок 2. Принципиальная схема устройства для автоматической калибровки RC-осциллятора
8-выводных МК ATtiny.

Основным компонентом устройства был выбран МК ATtiny84 ввиду того, что он имеет ровно необходимое количество портов GPIO. Для точного измерения частоты МК ATtiny84 работает от внешнего кварцевого резонатора 12 МГц. Для текущей версии программного обеспечения требуется 3.7 Кбайт, поэтому в устройстве можно использовать МК ATtiny44.

Для получения напряжения 12 В (используется в режиме высоковольтного последовательного программирования целевого МК) была выбрана микросхема DC/DC преобразователя ST662A, специально разработанная для подобных приложений и требующая всего лишь нескольких компонентов обвязки. При включении соответствующего режима работы напряжение 12 В с помощью MOSFET Q1, подается на линию RESET целевого МК. Остальные сигнальные линии, идущие к целевому МК, защищены от короткого замыкания резисторами.

В пользовательском интерфейсе используется три кнопки и OLED дисплей с разрешением 128×64 точки. Целевой МК устанавливается в колодку DIP8 на плате; для МК в корпусе для поверхностного монтажа используйте специальный адаптер (SOP адаптер).

Программная часть

Для выполнения калибровки RC-осциллятора первоначально с помощью режима высоковольтного последовательного программирования в целевой МК загружается специальная программа. Кроме того, заводское значение калибровки осциллятора (OSCCAL) записывается в EEPROM целевого МК. Программа в целевом МК считывает EEPROM и записывает значение в регистр OSCCAL. Затем в порт PB0 выводится тактовый сигнал с частотой в два раза меньшей. Поскольку Fuse-биты ранее были настроены так, чтобы целевой МК работал с предварительным делителем тактовой частоты на 8, на PB0 будет выводиться тактовый сигнал с 1/16 частоты RC-осциллятора. Скетч основной программы, hex-файл, а также листинг программы, которая загружается в целевой МК доступны для скачивания в разделе загрузок, а также в репозитории на сайте Github [1].

Эта частота измеряется устройством и сравнивается с целевым значением. Затем значение калибровки осциллятора (OSCCAL) корректируется соответствующим образом и снова записывается в EEPROM целевого МК. Этот процесс повторяется до тех пор, пока не будет найдено значение OSCCAL, обеспечивающее наименьшее отклонение частоты (Рисунок 3).

Процесс калибровки внутреннего RC-осциллятора 9.6 МГц МК ATtiny13 с помощью устройства TinyCalibrator.
Рисунок 3. Процесс калибровки внутреннего RC-осциллятора 9.6 МГц МК ATtiny13
с помощью устройства TinyCalibrator.

Код функции высоковольтного последовательного программирования (High Voltage Serial Programming) целевого МК не представляет особого интереса. Проще говоря, для каждого действия по сигнальным линиям целевого МК отправляется последовательность инструкций и считывается соответствующий ответ (Рисунок 4). Сам процесс и инструкции хорошо описаны в технической документации на МК.

Интерфейс высоковольтного последовательного программирования (HVSP) для МК AVR.
Рисунок 4. Интерфейс высоковольтного последовательного программирования (HVSP) для МК AVR.

Для измерения частоты используются таймеры/счетчики МК ATtiny84. Выходной порт PB0 целевого МК, который выводит тактовый сигнал с частотой 1/16 его осциллятора, подключен к входу T0 МК ATtiny84. Таймер 0 (Timer0) выполняет подсчет импульсов на входе T0, а таймер 1 (Timer1) останавливает измерение через 32 мс. Исходя из этих данных, выполняется расчет частоты осциллятора целевого МК.

Протокол I2C для управления OLED дисплеем реализован методом программной эмуляции. Алгоритм специально разрабатывался под ограниченные ресурсы ATtiny10 и Attiny13, но должен работать и на некоторых других микроконтроллерах AVR, включая ATtiny84. Функции управления адаптированы для контроллера OLED дисплея SSD1306, но их можно легко изменить для работы с другими дисплеями. В целях экономии ресурсов реализованы только необходимые для этого проекта функции.

Компиляция и загрузка

При использовании Arduino IDE

  • Удостоверьтесь, что в Arduino IDE установлено ядро ATtinyCore [2].
  • Пройдите Tools -> Board -> ATtinyCore и выберите ATtiny24/44/84(a) (No Bootloader).
  • Откройте Tools и выберите следующие опции платы:
    • Chip: ATtiny84
    • Clock: 12 MHz (external)
    • Millis/Micros: disabled
  • Остальные опции оставьте без изменений
  • Подключите программатор к ПК и разъему внутрисхемного программирования на плате.
  • Перейдите к Tools -> Programmer и выберите свой внутрисхемный программатор (то есть, USBAsp).
  • Перейдите к Tools -> Burn Bootloader для записи фьюзов.
  • Откройте скетч TinyCalibrator и кликните Upload.

При использовании предварительно скомпилированного hex-файла

  • Удостоверьтесь, что консольная программа AVRDude [3] установлена.
  • Подключите программатор к ПК и ATtiny.
  • Откройте терминальную программу.
  • Перейдите в папку с hex-файлом.
  • Выполните следующую команду (при необходимости замените «usbasp» на имя того программатора, который используете вы):
    avrdude -c usbasp -p t84 -U lfuse:w:0xff:m -U hfuse:w:0xd5:m -U efuse:w:0xff:m -U flash:w:tinycalibrator.hex

Работа с устройством

  • С помощью переключателя выберите напряжение питания (3.3 В или 5.0 В).
  • С помощью кабеля microUSB подайте питание 5 В на устройство.
  • Установите целевой микроконтроллер Attiny13/25/45/85 в колодку и нажмите любую кнопку.
  • С помощью кнопок управления выберите необходимый режим работы устройства и следуйте инструкциям на OLED дисплее.

По завершении процесса калибровки оптимальное значение OSCCAL остается в EEPROM целевого МК по адресу 0, и его можно использовать. Для этого необходимо запрограммировать Fuse-бит EESAVE для защиты области EEPROM от стирания, иначе значение OSCCAL будет потеряно после загрузки новой прошивки. В этом случае ваш код инициализации МК и периферии должен содержать функцию чтения значения из EEPROM и записи его в регистр OSCCAL.

Конечно, значение OSCCAL также можно установить напрямую без использования EEPROM. Помните, что значение OSCCAL отображается на OLED дисплее в шестнадцатиричном формате (например, OSCCAL = 0x66).

Ссылки

  1. Страница проекта на сайте Github
  2. Ядро ATtinyCore для Arduino IDE
  3. Программатор AVRDude

Загрузки

  1. Принципиальная схема, проект печатной платы, скетч, исходные коды и файл прошивки

Материалы по теме

  1. Datasheet Microchip ATtiny10
  2. Datasheet Microchip Attiny13
  3. Datasheet Microchip ATtiny24/44/84
  4. Datasheet Microchip Attiny25/45/85
  5. Datasheet Holtek HT7333
  6. Datasheet STMicroelectronics ST662A
  7. Datasheet AOS AO3401A
  8. Datasheet ON Semiconductor 1N5817
  9. Datasheet Diodes MMBT3904

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: TinyCalibrator - OSC Calibrator and High-Voltage Fuse Resetter

Изготовление 1-4 слойных печатных плат за $2

36 предложений от 23 поставщиков
Корпус SOT236 , Ядро AVR , Максимальная частота ядра 12 МГц, Объём памяти программ 1.02 кБайт, Объём оперативной памяти 32 Байт,...
ATtiny10-TSHR
Atmel
20 ₽
T-electron
Россия и страны СНГ
ATtiny10-TSHR
Microchip
20 ₽
Элитан
Россия
ATTINY10-TSH
Microchip
42 ₽
МосЧип
Россия
ATTINY10-MAHR
Atmel
по запросу
Прецизионный высоковольтный операционный усилитель ADA4097−1 с низким потреблением от Analog Devices
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя