ATmega32a в Arduino IDE
1. "Допиливаем" ArduinoIDE
Исходное условие: На компьютере установлена ArduinoIDE версии 1.6.1 (на сегодня самой свежей). Стоит она в папке .\Arduino. На самом деле не важно где она стоит - у каждого по своему. Исходная папка нужна для понимания где какие файлы править.
Первым делом ищем файл boards.txt по следующему пути .\Arduino\hardware\arduino\avr\. Открываем его в редакторе аля "Блокнот" и видим перечисление всех ардуин с кучей каких-то параметров. Идем в конец и добавляем следующий блок:
##############################################################
mega32-16.name=ATmega32-External 16mhz
mega32-16.build.mcu=atmega32
mega32-16.build.f_cpu=16000000L
mega32-16.build.core=arduino:arduino
mega32-16.build.variant=mega32
mega32-16.upload.tool=avrdude
mega32-16.upload.maximum_data_size=2048
mega32-16.upload.maximum_size=32000
mega32-16.bootloader.tool=avrdude
mega32-16.bootloader.low_fuses=0xEF
mega32-16.bootloader.high_fuses=0x89
mega32-16.bootloader.path=ATmega32
mega32-16.bootloader.file=ATmegaBOOT_32.hex
mega32-16.bootloader.unlock_bits=0x3F
mega32-16.bootloader.lock_bits=0x0F
##############################################################
Что тут к чему:
mega32-16 - обзываем наш МК как угодно. Главное, чтоб буквы были латинские и никаких спецсимволов не применялось. Все параметры для нашей меги далее будут начинаться с этого имени.
mega32-16.name - то название, которое увидим в меню;
mega32-16.build.mcu=atmega32 - тип микроконтроллера
mega32-16.build.f_cpu=16000000L - тактовая частота
mega32-16.build.core=arduino:arduino - использовать функции и библиотеки ядра Arduino (никакой самопальщины).
mega32-16.build.variant=mega32 - это фактически путь к распиновке (переназначение GPIO меги на номера ардуины).
mega32-16.upload.tool=avrdude - сама IDE - это только редактор. Для компиляции и загрузки используются сторонние утилиты. Тут как раз и указываем, что использовать.
mega32-16.upload.maximum_size=32000 - максимальный размер прошивки.
mega32-16.bootloader - эти параметры нужны только для записи загрузчика ардуины. Загрузчик мы писать не будем, но без них не работает.
Теперь качаем файл mega32 и распаковываем его содержимое в .\Arduino\hardware\arduino\avr\variants\. В конечном итоге там должна появиться папка mega32.
На этом с IDE все.
2. Собираем схему
Я собрал ее на макетке. Но несложно развести плату и распаять под шилды UNO не составит труда.
Я же ограничился небольшой макеткой в правой части. На ней собран ISP и колодка для tiny13/85. Здесь она нужна для удобства - напрямую ISP в макетку воткнуть не получится.
Еще на фото установлен светодиод на PortB0. Его предназначение - тестовый скетч blink.
3. Прошиваем
Исходные данные: Имеем микроконтроллер на котором собрали выше означенную схему. Микроконтроллер девственный - чистый, не тронутый, свеже купленный...
По умолчанию он настроен на работу от внутреннего тактового генератора. По большому счету неизвестно на что он там настроен. Никакого Arduino-загрузчика в нем точно нет. Да он и не понадобится. План будет такой:
1. Подключаем МК через ISP и USBasp к компу.
2. Устанавливаем фьюзы.
3. Зашиваем скетч.
А теперь по-порядку:
USBasp
Программатор USBasp представляет собой небольшой "свисток".
Шнурок на его конце может иметь 6 или 10 контактов.
Распиновку можно найти на картинке ниже вместе с еще несколькими контроллерами
Драйвер для USBasp можно скачать здесь.
Все подключаем, устанавливаем дрова.
Фьюзы
Фьюзы - это несколько байт, которые определяют как в схеме включен микроконтроллер и как он будет работать. ArduinoIDE прошивает фьюзы вместе с загрузчиком. Сделать это у меня не получилось и я обратился к ранее проверенному способу. С интернета качаем и устанавливаем программу eXtreme Burner – AVR.
Сначала читаем текущую настройку из контроллера. Потом устанавливаем фьюзы, галки рядом с ними и пишем обратно в контроллер. Для внешнего кварца 16МГц настройки должны быть такими:
low fuses = 0xEF
high fuses = 0x89
Теперь МК работает как задумано и его можно прошивать из IDE.
Прошивка
Запускаем IDE, пишем скетч. Честно говоря не знаю, какие порты соответствуют каким номерам Arduino. Я предпочитаю обращаться к портам напрямую. Чего и Вам советую...
Тестовый скетч Blink будет выглядеть так:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
DDRB |= 1;
}
// the loop function runs over and over again forever
void loop() {
PORTB |=1; // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
PORTB &= 0xFE; // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
В настройках среды выбираем в разделе "Плата" то, что мы понаписали в boards.txt в самом начале, а вместо выбора COM-порта выбираем USBasp в разделе "Программатор". Теперь вместо обычной кнопки загрузки скетча в меню "Файл" выбираем "Загрузить через программатор".
IDE выдаст как ошибку строки:
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
Не обращайте на них внимания - прошивка уже в контроллере.
Вот собственно и все!
По материалам rc-master, автор Зайчиков Александр