—>Radiomanoff+ —>
—>
« Жовтень 2022 » | ||||||
Пн | Вт | Ср | Чт | Пт | Сб | Нд |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
—>
Адаптация Atmega32 под Arduino
Аtmega32 с минимальной необходимой обвязкой розместил на макетной плате размером 55*40 мм.
Загрузчик находится на отдельной плате,изготовленой ранее,с применение микроконтролера Atmega8.
Питание от БП 5В,поэтому стабилизатор 7805 не применял.
Необходимо распаковать из архива avr-netino папку hardware\avrnetio и поместить её в папку Arduiono_ide\hardware\ .
Если Вы правильно скопировали папку avrnetio ,то после запуска Arduino IDE Вы увидите добавленные микроконтроллеры в общем списке.
Вы можете исправить или удалить некоторые ненужные микроконтроллеры в файле hardware\avrnetio \board.txt
Как уже сообщалось в источнике :
Хотя avr-netino и поставляется с загрузчиками,но загрузка через последовательный порт на ATmega32 не заработала.
Atmega32 + ArduinoIDE
Многим новичкам удобнее писать код в среде ArduinoIDE на Wirin g C++ , но как подружить эту среду с другими контроллерами? К примеру, с atmega32 . В принципе, WiringC+ + это тот же самый C++ , но только с кучкой библиотек и констант, облегчающих работу. Ведь да же ядро ArduinoIDE — WinAvr.
В папке hardware хранятся конфигурационные файлы того или иного контроллера: назначение пинов, названия таймеров и прочих. Таким образом, отредактировав эти файлы соответствующим образом, можно добавить поддержку любого контроллера семейства AVR .
На просторах интернета существовала плата ATmega32 Dev Board , это была Arduino на базе Atmega32/16 . К сожалению, этот проект распался и от них я успел отхватить лишь несколько файлов для IDE. 🙁
Схема этой ардуино-подобной платы была примерно такой:
Но через digitalWrite/Read задействованы выводы: PB6 , PB7 , PC6 , PC7 . Однако ими можно управлять напрямую через PORT X .
Чтобы добавить поддержку этой платы, необходимо загрузить архив и поместить файлы в папку arduino-x\hardware\arduino. Затем запустить среду и выбрать ArduinoMega32 . Для теста загрузим программу blink , моргающую пином 0. (это PD0 ).
Теперь нужно скомпилировать нашу программу.
А как загрузить программу? Очень просто, от ArduinoIDE нам нужен только .hex файл прошивки, остальное можно сделать через Uniprof.
Нужный нам .hex файл будет находиться довольно далеко: C:\Users\(имя пользователя)\AppData\Local\Temp\build(цифры всякие).tmp. Ищите по дате изменения; IDE не нужно закрывать.
Зашиваем программу в контроллер и все должно заработать.
Я проверял несколько библиотек (работа с символьными экранами, SD, анти-дребезг и прочие), с ними проблем нет. Системные таймеры для dela y, Micros — работают. Но весь потенциал контроллера язык раскрыть не сможет, поэтому лучше совмещать с Си/Асм , так как в этом ограничений нет. (ядро WinAVR же.)
ATmega32a в Arduino IDE
Надо начать с того, что этот микроконтроллер очень похож на ATmega328, который активно используется в классических схемах Arduino.
Мой интерес вызвало в первую очередь большее число цифровых выводов. Остальные характеристики примерно схожи. Раскурив даташит осознал, что и внутри они имеют много общего. Далее мной был проведен ряд экспериментов. Изрядная их часть сопровождалась русской народной нецензурной лексикой. Итогом стала загрузка скетча из ArduinoIDE в указанную выше атмегу, которая меня устроила. Описание экспериментов я опущу и изложу здесь некое конечное «how to. «.
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 представляет собой небольшой «свисток». Купить его можно менее чем за 300р на любом китайском углу.
Шнурок на его конце может иметь 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.
Не обращайте на них внимания — прошивка уже в контроллере.
Вот собственно и все!
Дока на USBasp. По ней можно собрать такой самому.
Как сделать свой клон Arduino, и есть ли в этом смысл
Часто у начинающих ардуинщиков и более продвинутых пользователей возникает проблема: памяти микроконтроллера недостаточно или наоборот, слишком много. Основная часть моделей имеет объем памяти 32к или 256к. С портами ввода/вывода ситуация не сильно лучше. Конечно, есть расширители портов, но тогда придется менять логику программы. Одним словом тупик. И выход есть — создать свою копию Arduino на другом микроконтроллере.
Перед использованием схем из этой статьи, проверьте, все ли в порядке. Я тоже могу допустить ошибку. Если вы это заметили, напишите в комментарии.
Выбираем микроконтроллер под свои задачи
Выбирая МК, нужно определить основные параметры:
Кол-во линий ввода/вывода
Большим плюсом при создании платы на базе официально не поддерживаемого МК, будет наличие загрузчика и ядра. Привожу некоторые МК, для которых есть ядро:
МК
Flash, k
SRAM, k
EEPROM, b
Порты
Интерфейсы
Корпус
SPI x5, I2C,UART x4
SPI x3, I2C,UART x2
Главное найти баланс: чтобы желаемого пункта хватало, но не в ущерб остальным характеристикам.
Немного о маркировке МК ATmega
Маркировка МК ATmega обычно интуитивно понятна, в качестве примера разберем маркировку чипа ATmega32l — 8AU. ATmega — семейство МК, 32 — flash память, l — пониженное напряжение питания. Буквы после модели я вынес в таблицу:
Буква
Значение
Напряжение питания от 4.5 до 5.5
Напряжение питания от 2.7 до 5.5
Напряжение питания от 1.8 до 5.5
Напряжение питания от 0.7 до 5.5
Потребление 100нА в режиме Power-down
Уменьшен ток потребления, перекрывается весь диапазон тактовых частот всех версий, напряжение питания 1,8 — 5,5 вольт
Надо учитывать, что микроконтроллер без буквы в обозначении может иметь пониженное напряжение питания, это нужно проверять по документации.
Тактирование
После выбора микроконтроллера под свои задачи можно переходить к проектированию схемы. Сначала находим пины XTAL1 и XTAL2. К ним мы подключаем кварц. Сейчас их достаточно много — есть и со встроенными конденсаторами внутри.
Обычный выводной кварц
Для его работы требуется обвязка — два конденсатора на 22 пикофарада.
Схема подключения кварца, линии от X1 идут к XTAL1 и XTAL2
Также существуют другие варианты — со встроенными конденсаторами и в других корпусах, включая SMD. Если в кварце уже есть конденсатор, то дополнительные не нужны, подключаем напрямую к XTAL1 и XTAL2.
Далее гуглим «НАЗВАНИЕ_МК максимальная частота». Для примера я загуглил «Atmega32l-8au максимальная частота». Почти гарантировано вы увидите строчку:
В этом случае смысла во внешнем кварце нет, можно использовать внутренний генератор. В большинстве случаев частота работы 16 МГц, иногда 20 МГц.
Корпус
Здесь все сводится к размерам и удобству сборки. Некоторые МК выпускаются только в SMD — в основном из-за огромного количества портов. Самые крупные выводные МК обычно выпускаются в корпусе DIP-40. Те, которые имеют 100+ выводов, конечно, идут в SMD. Паяльником реально припаять корпус TQFP-44 — ATmega16/32. Больше — я не пробовал, если у вас есть опыт — отпишите в комментарии. Однако, китайцы, если заказать у них печатную плату, могут нам припаять МК хоть TQFP-100. Естественно, это недёшево, но когда очень большая партия — это единственный выход.
Прошивка
Если мы копируем Arduino, нам необходимо добавить возможность прошивки через бутлоадер — загрузчик, через разъем USB. Существуют специализированные микросхемы — CH340, FT232, CP2102. На оригинальных Arduino для загрузки прошивки используется отдельный камень — Atmega8u2/16u2 со своей прошивкой и аппаратным USB. Я сам использую чип CH340C. Некоторые на него жалуются, но у меня все достаточно хорошо. Прилагаю рекомендуемую схему подключения:
Итоговая схема
Итак, сложим все требования воедино. Я хочу Atmega32l на частоте 8МГц с прошивкой по USB. У меня получилось это:
Итоговая схема
Вывод
Создание своего клона Arduino имеет смысл, если вам не хватает мощности UNO, а MEGA использовать нецелесообразно, а также хочется иметь USB порт для прошивки.
Надеюсь, что статья была вам полезна, и вы узнали что-то новое. Если есть вопросы или замечания, напишите в комментарии, спасибо за дочитывание статьи, пока!