Я следую за этот учебник , программирование ATtiny85 с Arduino, используя его , чтобы играть в некоторые тоны (через пьезоэлектрический динамик). Я борюсь с получением тонов с нужной высотой тона (я создаю волновые формы вручную, так как функция tone () не поддерживается на ATtiny85).
Я полагаю, что проблема может быть в разной тактовой частоте на Arduino и ATtiny. Я понимаю, что тактовая частота может быть изменена на ATtiny, как мне сделать это с помощью среды Arduino?
arduino
attiny
fuse-bits
clock-speed
fearoffours
источник
источник
Ответы:
Я полагаю, что программное обеспечение 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 сейчас - спасибо за комментарии все
источник
delay(20)
insteddelay(40)
в его определенииvoid heartbeat()
.)Я успешно использую Arduino UNO + ArduinoISP.
Добавьте
-U
флаги к вашейavrdude
команде, чтобы установить один или все три предохранителя ATtiny.Выбор тактового сигнала выполняется в битах [3: 0] на третьем предохранителе («Low Byte Low»). Установите их следующим образом, чтобы использовать внешний кристалл (8 МГц или быстрее):
Его определение (я предполагаю) должно быть что-то вроде: [Fuse Low Byte]: [write]: [hex value]: [установить вручную]
Значением по умолчанию для четырех старших бит этого байта являются
0110
, поэтому оставьте значение6
in0x6f
как есть и измените только вторую цифруf
(значение по умолчанию равно2
).NB. Если ваши процессы занимают больше или меньше времени, чем вы ожидаете, проверьте прескалер часов и свое определение F _ CPU.
источник
-U lfuse:w:0x6f:m
опцию avrdude. Мне нужно сбросить его с помощью установки высокого напряжения. Таким образом, предостережение людям (таким как я), которые пытаются сбросить предохранители, не зная, что они делают.Попробуйте использовать соответствующее руководство той же группы (High-Low Tech, MIT) под названием « Программирование ATtiny w / Arduino 1.0» .
Краткое резюме: В меню Tools-> Board в IDE Arduino выберите ATtiny85 и частоту, на которой вы хотите работать (внутренние часы 1 или 8 МГц или внешний кристалл 20 МГц), а затем используйте Инструменты -> Записать загрузчик » Я полагаю, что выбор нужной скоростной платы изменяет способ задержки () и других функций Arduino, связанных со временем, для синхронизации с тактовой частотой.
Я успешно использовал этот подход, используя некоторые чипы ATtiny84. Исправлена простая программа мигания, а также более чувствительная синхронизация, необходимая для ручного управления импульсами, отправляемыми серво с помощью delayMicroseconds ().
источник
Похоже, вы используете ArduinoISP, попробуйте использовать AVR Studio или параметры командной строки для
avrdude
. В зависимости от того, как был написан ArduinoISP, он может функционировать так же, как Atmel AVRISP mkII или аналогичный.источник
Настройки предохранителя по умолчанию для 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.источник
Я думаю, что вы можете установить предохранители с ArduinoISP, но не с Arduino IDE, а с avrdude, проверьте эту ссылку . Никогда не проверял это сам.
В учебном пособии прямо сказано, что вы можете использовать Arduino UNO, и я проверил его и работал, поэтому я могу подтвердить это, так что страница ArduinoISP устарела и предупреждение UNO следует игнорировать. Если ваш UNO был одним из первых, у вас, вероятно, неисправный загрузчик, вам нужно будет перепрошить загрузчик. Проверьте эту страницу для получения дополнительной информации (игнорируйте серийные номера, все мои UNO были не из этой серии и имели проблемы).
Портированные библиотеки ядра, которые вы загрузили из учебника, написаны для использования внутреннего генератора 1 МГц (подтверждено из файлаboards.txt), поэтому, возможно, проблема с синхронизацией может быть в портированных библиотеках ядра или в вашем коде.
С уважением
источник
Выберите плату ATTiny в «Диспетчере досок», в который входит ATTiny85. Это в меню «Инструменты». Я думаю, что это включает в себя "16 МГц внутренний PLL" сейчас. (Вы можете установить один из http://drazzy.com/package_drazzy.com_index.json )
Выберите ATTiny85 явно, если требуется.
Выберите часы. Пока вы не знаете больше, выберите внутренние часы.
Нажмите «Записать загрузчик» в качестве пункта меню.
Внимание! Возможно, вы больше не сможете программировать MCU, если выберете очень низкие значения. Если это ваше намерение, делайте это в последнюю очередь, если у вас нет запасных частей или программатора высокого напряжения для сброса предохранителей.
источник