Ардуино на атмега32

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. По ней можно собрать такой самому.

Источник

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 же.)

Источник

—>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 не заработала.

Источник

Как сделать свой клон 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 порт для прошивки.

Надеюсь, что статья была вам полезна, и вы узнали что-то новое. Если есть вопросы или замечания, напишите в комментарии, спасибо за дочитывание статьи, пока!

Источник

Adblock
detector