Як встановити запобіжники тактової частоти на ATtiny85 при використанні Arduino як програміста?


17

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

Я вважаю, що проблема може полягати в різній швидкості тактових частот на Arduino та ATtiny. Я розумію, що тактова частота може бути змінена в ATtiny, як це досягти за допомогою середовища arduino?


до речі це дуже здорово, дякую за спільний доступ!
vicatcu

Знімаю капелюх! Мені ніколи не вдавалося програмувати свою attiny85 таким чином. У мене завжди є помилки "програміст із синхронізації", коли avrdude намагається написати спалах. Хоча обмін ардуїно піратським автобусом працює ...
ДжонатанD

@Jon: Я не впевнений у першопричині "програміста поза синхронізацією", але за допомогою AVR Studio ви можете налаштувати частоту програмування. Можливо, подібний варіант у avrdude, можливо, варто придивитись, якщо ви коли-небудь знову дасте йому кружляння
Nick T

Відповіді:


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.

EDIT : Схоже, щось наздогнало, і ООН зараз є життєздатною для ArduinoISP - дякую за коментарі всі


Дякую за голову щодо ООН, я фактично використовую Duemilanove з 168 чіпом, заміненим на 328, і можу отримати нормальні ескізи ATtiny для належного завантаження через ArduinoISP. Я спробую вашу / 16 підказку!
fearoffours

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

1
@fearoffours, також я щойно зрозумів (і оновити пост), щоб сказати, помножити на 16, а не ділити на 16 (для запуску повільнішого годинника знадобиться більше кліщів, щоб отримати таку ж тривалість)
vicatcu

Я знаю, що це вже через рік, але я успішно використовую і 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] на третьому запобіжнику ("Fuse Low Byte"). Встановіть їх наступним чином, щоб використовувати зовнішній кристал (8 МГц або швидше):

-U lfuse:w:0x6f:m

Її визначення (я роблю висновок) має бути приблизно таким: [Fuse Low Byte]: [write]: [hex value]: [set set manual]

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

Примітка: Якщо ваші процеси довший або коротший , ніж ви очікуєте, перевірте годинник дільник і ваше визначення F _ CPU.


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

@MV Ви дійсно цеглили це чи просто не використовували зовнішній XO при спробі скинути запобіжник?
чорт

Не було зовнішніх годинників для використання. Що означає стримування в жорсткішому сенсі?
JellicleCat

@JellicleCat, Якщо ви встановите запобіжник для використання зовнішнього XO, з цього часу вам потрібно буде використовувати зовнішній XO, приєднаний до mcu, для програмування / встановлення / скидання запобіжників. Якщо цього не зробити, ви створите враження, що mcu цегляна (~ більше не працює), тому що їй потрібен ext. XO для функціонування навіть для програмування через ISP.
чорт

Добре. Якщо я зрозумів справу, я встановив запобіжники, щоб очікувати XO, а потім для відновлення мікросхеми я використав Arduino для подачі стоячої хвилі, яка служила для XO.
JellicleCat

3

Спробуйте використовувати відповідний підручник тієї ж групи (MIT's High-Low Tech) під назвою Програмування ATtiny w / Arduino 1.0 .

Короткий підсумок: У меню Інструменти-> Дошка в 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. Але так, OP просто хоче використовувати "основні" частоти та "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 МГц, дякую
fearoffours

0

Я думаю, ви можете встановити запобіжники за допомогою ArduinoISP, але не з Arduino IDE, а з avrdude, перевірте це посилання . Ніколи не тестував його сам.

У підручнику прямо написано, що ви можете використовувати Arduino UNO, і я перевірив це і працював, тому я можу підтвердити це, тому сторінка ArduinoISP застаріла, і попередження ООН має ігноруватися. Якщо ваша UNO була першою з партії, у вас, ймовірно, несправний завантажувач, вам потрібно буде переробити завантажувач. Перевірте цю сторінку для отримання додаткової інформації (ігноруйте серійні номери, всі мої ООН не були з цієї серії та мали проблеми).

Передані основні бібліотеки, які ви завантажили з підручника, написані для використання внутрішнього осцилятора 1 МГц (підтвердженого з файлу Board.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.