Как установить предохранители тактовой частоты на ATtiny85 при использовании Arduino в качестве программиста?


17

Я следую за этот учебник , программирование ATtiny85 с Arduino, используя его , чтобы играть в некоторые тоны (через пьезоэлектрический динамик). Я борюсь с получением тонов с нужной высотой тона (я создаю волновые формы вручную, так как функция tone () не поддерживается на ATtiny85).

Я полагаю, что проблема может быть в разной тактовой частоте на Arduino и ATtiny. Я понимаю, что тактовая частота может быть изменена на ATtiny, как мне сделать это с помощью среды Arduino?


кстати, это действительно круто, спасибо, что поделились!
Викацю

Снимаю шляпу! Мне никогда не удавалось запрограммировать свой attiny85 таким образом ... У меня всегда есть ошибки "программист не синхронизирован", когда avrdude пытается записать флэш-память. Хотя замена Arduino на автобусного пирата работает ...
JonathanD

@Jon: Я не уверен в коренной причине "несинхронизированного программиста", но с помощью AVR Studio вы можете регулировать частоту программирования. В avrdude может быть похожая опция, возможно, стоит взглянуть на нее, если вы когда-нибудь снова ее обернете
Ник Т

Ответы:


2

Я полагаю, что программное обеспечение Arduino (библиотеки и все) предполагает, что вы работаете на частоте 16 МГц. Если вы примените это предположение к часам, на которых вы на самом деле работаете ... все должно сработать. Предполагая, что вы используете Tiny85 на его внутреннем генераторе, я думаю, что он работает на частоте 1 МГц, так что просто умножьте все ваши операторы задержки (и другие понятия времени) на 16.

Если вам нужна более высокая точность, чем обеспечивает внутренний генератор, вам следует подумать об использовании внешнего кристалла или резонатора, но для этого вам нужно будет изменить настройки предохранителя AVR, и я думаю, что вам понадобится такой программист, как AVRISP. mkII, чтобы сделать это с AVR Studio (моя рекомендация).

Я не очень разбираюсь в наброске ArduinoISP, но мне кажется, что он немного ломает протокол ISP для загрузки программы на целевой чип (не встроенный в Mega328), но не уверен, что он оборудован для управления предохранителями. ArduinoISP документирован здесь http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Обратите внимание, что в настоящее время вы не можете использовать UNO для запуска эскиза ArduinoISP. Мне не кажется, что вы можете использовать эскиз, чтобы сделать Arduino жизнеспособным интерфейсом для инструментов AVR Studio GUI.

РЕДАКТИРОВАТЬ : Похоже, что вещи догнали и UNO является жизнеспособным для ArduinoISP сейчас - спасибо за комментарии все


Спасибо за внимание к UNO, я на самом деле использую Duemilanove с чипом 168, замененным на 328, и могу получить нормальные эскизы ATtiny для правильной загрузки через ArduinoISP. Я попробую ваш / 16 совет!
fearoffours

@fearoffours Вы знаете еще одну вещь, которую вы могли бы попробовать - написать эскиз на основе ArduinoISP, который устанавливает плавкие предохранители на определенное значение. Если ArduinoISP может написать Flash, я не могу думать о том, что вы не могли бы побить протокол ISP, описанный в таблицах AVR, для установки предохранителей.
Викацу

1
@fearoffours, также я только что понял (и обновил пост), чтобы сказать умножить на 16 вместо деления на 16 (ваши медленные часы потребуют больше тиков, чтобы получить ту же длительность)
викацю

Я знаю, что прошло больше года, но я успешно использую и UNO в качестве программиста AVR. (Тем не менее, я изменил эскиз ArduinoISP на delay(20)insted delay(40)в его определении void heartbeat().)
JellicleCat

Я знаю, что это даже позже, но я успешно использовал Uno в качестве программиста AVR, не меняя ничего в эскизе.
ingh.am

4

Я успешно использую Arduino UNO + ArduinoISP.

Добавьте -Uфлаги к вашей avrdudeкоманде, чтобы установить один или все три предохранителя ATtiny.

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

Выбор тактового сигнала выполняется в битах [3: 0] на третьем предохранителе («Low Byte Low»). Установите их следующим образом, чтобы использовать внешний кристалл (8 МГц или быстрее):

-U lfuse:w:0x6f:m

Его определение (я предполагаю) должно быть что-то вроде: [Fuse Low Byte]: [write]: [hex value]: [установить вручную]

Значением по умолчанию для четырех старших бит этого байта являются 0110, поэтому оставьте значение 6in 0x6fкак есть и измените только вторую цифру f(значение по умолчанию равно 2).

NB. Если ваши процессы занимают больше или меньше времени, чем вы ожидаете, проверьте прескалер часов и свое определение F _ CPU.


Я хотел бы предостеречь, что я просто замуровал свой AtTiny85, используя вышеуказанную -U lfuse:w:0x6f:mопцию avrdude. Мне нужно сбросить его с помощью установки высокого напряжения. Таким образом, предостережение людям (таким как я), которые пытаются сбросить предохранители, не зная, что они делают.
MV

@MV Вы действительно замуровали его или просто не использовали внешний XO при попытке сброса предохранителя?
Черт

Не было внешних часов для использования. Что значит кирпич в более строгом смысле?
JellicleCat

@JellicleCat, если вы установите предохранитель для использования внешнего XO, вам нужно будет использовать внешний XO, подключенный к mcu, для программирования / установки / сброса предохранителей. Если вы этого не сделаете, у вас будет впечатление, что mcu находится в кирпичном режиме (~ больше не работает), потому что ему нужно доп. XO функционировать, даже для программирования через ISP.
Черт

Хорошо. Если я понимаю, я установил предохранители, чтобы ожидать XO, а затем, чтобы восстановить чип, я использовал Arduino для подачи стоячей волны, которая служила для XO.
JellicleCat

3

Попробуйте использовать соответствующее руководство той же группы (High-Low Tech, MIT) под названием « Программирование ATtiny w / Arduino 1.0» .

Краткое резюме: В меню Tools-> Board в IDE Arduino выберите ATtiny85 и частоту, на которой вы хотите работать (внутренние часы 1 или 8 МГц или внешний кристалл 20 МГц), а затем используйте Инструменты -> Записать загрузчик » Я полагаю, что выбор нужной скоростной платы изменяет способ задержки () и других функций Arduino, связанных со временем, для синхронизации с тактовой частотой.

Я успешно использовал этот подход, используя некоторые чипы ATtiny84. Исправлена ​​простая программа мигания, а также более чувствительная синхронизация, необходимая для ручного управления импульсами, отправляемыми серво с помощью delayMicroseconds ().


1

Похоже, вы используете ArduinoISP, попробуйте использовать AVR Studio или параметры командной строки для avrdude. В зависимости от того, как был написан ArduinoISP, он может функционировать так же, как Atmel AVRISP mkII или аналогичный.


Я не думал, что Arduino сам был программистом ISP - я думал, что на нем есть заголовок ISP, чтобы вы могли записать новый загрузчик на новый ATMega328 в цепи ...
vicatcu

читая статью более внимательно, кажется, что вы можете использовать эскиз ArduinoISP, чтобы сделать это - вы узнаете что-то новое каждый день! :)
vicatcu

AVR studio - это нормально, если вы используете Windows. Знайте, что есть плагин AVR для Eclipse (это отличается от плагина Arduino, известного как Sloeber). В разделе «Свойства» -> «AVR» ​​доступен удобный диалог предохранителей. Но да, ОП просто хочет использовать «основные» частоты и «Burn Bootloader».
mckenzm

1

Настройки предохранителя по умолчанию для ATtiny85: lfuse 0x62, hfuse 0xdf, efuse 0xff. При этом используется внутренний RC (8 МГц) генератор с «делением на 8», поэтому тактовая частота составляет 1 МГц.

См. Http://www.engbedded.com/fusecalc для получения дополнительных настроек предохранителей.

Вы по-прежнему можете использовать avrdude напрямую для изменения настроек предохранителей ATtiny85 даже при использовании ArduinoISP в качестве программиста.

Если вы в конечном итоге вручную измените плавкий предохранитель, чтобы изменить время, обязательно отредактируйте attiny85.build.f_cpuстроку вашего файла [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.


+1 это действительно полезно, особенно тактовая частота 1
МГц

0

Я думаю, что вы можете установить предохранители с ArduinoISP, но не с Arduino IDE, а с avrdude, проверьте эту ссылку . Никогда не проверял это сам.

В учебном пособии прямо сказано, что вы можете использовать Arduino UNO, и я проверил его и работал, поэтому я могу подтвердить это, так что страница ArduinoISP устарела и предупреждение UNO следует игнорировать. Если ваш UNO был одним из первых, у вас, вероятно, неисправный загрузчик, вам нужно будет перепрошить загрузчик. Проверьте эту страницу для получения дополнительной информации (игнорируйте серийные номера, все мои UNO были не из этой серии и имели проблемы).

Портированные библиотеки ядра, которые вы загрузили из учебника, написаны для использования внутреннего генератора 1 МГц (подтверждено из файлаboards.txt), поэтому, возможно, проблема с синхронизацией может быть в портированных библиотеках ядра или в вашем коде.

С уважением


0
  1. Выберите плату ATTiny в «Диспетчере досок», в который входит ATTiny85. Это в меню «Инструменты». Я думаю, что это включает в себя "16 МГц внутренний PLL" сейчас. (Вы можете установить один из http://drazzy.com/package_drazzy.com_index.json )

  2. Выберите ATTiny85 явно, если требуется.

  3. Выберите часы. Пока вы не знаете больше, выберите внутренние часы.

  4. Нажмите «Записать загрузчик» в качестве пункта меню.

Внимание! Возможно, вы больше не сможете программировать MCU, если выберете очень низкие значения. Если это ваше намерение, делайте это в последнюю очередь, если у вас нет запасных частей или программатора высокого напряжения для сброса предохранителей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.