"Превращаем" SEM0010M-88PA (ATmega88PA)
в Arduino Pro mini
В статье разобрано подключение модуля SEM0010M-88PA к IDE Arduino. Описана "заливка" bootloader в микроконтроллер. Дана схема включения модуля с ATmega88 с "распиновкой" от Arduino.
Предистория: Очень нравится мне среда разработки Algorithm Builder! Но вот по трудоемкости написания кода этот инструмент заметно уступает "сообществу Arduino". Надо отдать должное, "тамошнее библиотечное богатство" может удовлетворить любой запрос разработчика. В результате разработка любого устройства сводится к выбору подходящего примера и его "допиливания" под свои нужды...
Купленный как-то давно в Ekits.ru модуль на ATmega88PA лежал "без дела" - захотелось посмотреть, заработает ли он как "еще один клон" Arduino.
Итак, план работ такой:
"Допиливаем" схему модуля до простейшей ардуины
На принципиальной схеме модуля SEM0010M, кроме микроконтроллера ATmega88PA и "кварца" 16МГц с конденсаторами ... ничего нет. Добавляем разъемчик для подключения к UART-TTL и цепочку сброса по линии DTR (ну и контрольный светодиод на pin 13 Arduino - куда ж без него...). Разводку разъема удобно сделать совместимой с Pro mini, цепь сброса также заимствуем из этой платы. В итоге, у нас получается схема показанная ниже. Красными крестами отмечены "желательные" для установки элементы. Для подключения к компьютеру я использовал мост USB-UART на PL2303, ранее описанный мной тут. Такое подключение удобно еще и тем, что о питании не надо заботиться - оно идет прямо с компьютера...
Предистория: Очень нравится мне среда разработки Algorithm Builder! Но вот по трудоемкости написания кода этот инструмент заметно уступает "сообществу Arduino". Надо отдать должное, "тамошнее библиотечное богатство" может удовлетворить любой запрос разработчика. В результате разработка любого устройства сводится к выбору подходящего примера и его "допиливания" под свои нужды...
Купленный как-то давно в Ekits.ru модуль на ATmega88PA лежал "без дела" - захотелось посмотреть, заработает ли он как "еще один клон" Arduino.
Итак, план работ такой:
- "Допиливаем" схему модуля до простейшей ардуины
- Ищем подходящую "прошивку" с bootloader-ом, "заливаем" ее
- Проверяем...
"Допиливаем" схему модуля до простейшей ардуины
На принципиальной схеме модуля SEM0010M, кроме микроконтроллера ATmega88PA и "кварца" 16МГц с конденсаторами ... ничего нет. Добавляем разъемчик для подключения к UART-TTL и цепочку сброса по линии DTR (ну и контрольный светодиод на pin 13 Arduino - куда ж без него...). Разводку разъема удобно сделать совместимой с Pro mini, цепь сброса также заимствуем из этой платы. В итоге, у нас получается схема показанная ниже. Красными крестами отмечены "желательные" для установки элементы. Для подключения к компьютеру я использовал мост USB-UART на PL2303, ранее описанный мной тут. Такое подключение удобно еще и тем, что о питании не надо заботиться - оно идет прямо с компьютера...
Соображения: почему мы так сделали. ATmega88 во всем совпадает с ATmega168/328 (кроме объемов своих ресурсов), у них даже datasheet единый на всех. Потому нам и подходят использованные в Arduino решения. А вот наш опыт с ATmega8 тут нам не пригодится, т.к. это разные микроконтроллеры.
Ищем подходящую "прошивку" с bootloader-ом, "заливаем" ее
Идем в интернет, чтоб посмотреть, озадачивался ли кто-нибудь аналогичной идеей? Прямо, чтоб один-в-один, я не нашел, однако подходящее решение существует (и даже не в одном экземпляре). Оба эти решения расчитаны на более простой вариант: когда даже кварца к микроконтроллеру не подключено и мега заводится на "внутренних" 8 МГц. Пришлось немного "подпилить" инструкцию с учетом установки иных fuse bits и настройки самой среды Arduino. Итак, Fuse bits должны быть выставлены так:
fuse bits: SUT0, SPIEN, BOOTRST, BOOTSZ0, BOOTSZ1 - оставляем пустыми (т.е. программируем)
Чтобы Arduino "увидел" наше творение, его надо этому обучить. Для этого в текстовый файл $(ARDUINO)/hardware/arduino/boards.txt
надо добавить абзац:
################################################################
atmega88.name=ATmega88 16MHz
atmega88.upload.protocol=arduino
atmega88.upload.maximum_size=7168
atmega88.upload.speed=38400
atmega88.bootloader.low_fuses=0xef
atmega88.bootloader.high_fuses=0xdf
atmega88.bootloader.extended_fuses=0x00
atmega88.bootloader.path=atmega88
atmega88.bootloader.file=ATmegaBOOT_88_m88.hex
atmega88.bootloader.unlock_bits=0x3F
atmega88.bootloader.lock_bits=0x0F
atmega88.build.mcu=atmega88
atmega88.build.f_cpu=16000000L
atmega88.build.core=arduino
atmega88.build.variant=standard
Отличие текста от упомянутых выше источников в тех же фьюзах, скорости обмена (38400) и частоте процессора (16000000)
Теперь, после запуска среды разработки в списке доступных плат мы увидим свое творение - см картинку справа
Программируем кристалл в среде AB через ICSP программатор.
Проект с прошивкой для ATmega88PA для программирования из среды Algorithm Builder - тут (там и hex, и fuse, и alp).
На всякий случай, в папку ардуины, чтоб "прошивать будущие проекты", надо положить иной HEX-файл (он более полный): $(ARDUINO)/hardware/arduino/bootloaders/atmega88/ATmegaBOOT_88_m88.hex
И еще вариант прошивки - тут полная "заливка" всей меги 88-ой вместе с загрузчиком (может кому так же пригодится).
Ищем подходящую "прошивку" с bootloader-ом, "заливаем" ее
Идем в интернет, чтоб посмотреть, озадачивался ли кто-нибудь аналогичной идеей? Прямо, чтоб один-в-один, я не нашел, однако подходящее решение существует (и даже не в одном экземпляре). Оба эти решения расчитаны на более простой вариант: когда даже кварца к микроконтроллеру не подключено и мега заводится на "внутренних" 8 МГц. Пришлось немного "подпилить" инструкцию с учетом установки иных fuse bits и настройки самой среды Arduino. Итак, Fuse bits должны быть выставлены так:
fuse bits: SUT0, SPIEN, BOOTRST, BOOTSZ0, BOOTSZ1 - оставляем пустыми (т.е. программируем)
Чтобы Arduino "увидел" наше творение, его надо этому обучить. Для этого в текстовый файл $(ARDUINO)/hardware/arduino/boards.txt
надо добавить абзац:
################################################################
atmega88.name=ATmega88 16MHz
atmega88.upload.protocol=arduino
atmega88.upload.maximum_size=7168
atmega88.upload.speed=38400
atmega88.bootloader.low_fuses=0xef
atmega88.bootloader.high_fuses=0xdf
atmega88.bootloader.extended_fuses=0x00
atmega88.bootloader.path=atmega88
atmega88.bootloader.file=ATmegaBOOT_88_m88.hex
atmega88.bootloader.unlock_bits=0x3F
atmega88.bootloader.lock_bits=0x0F
atmega88.build.mcu=atmega88
atmega88.build.f_cpu=16000000L
atmega88.build.core=arduino
atmega88.build.variant=standard
Отличие текста от упомянутых выше источников в тех же фьюзах, скорости обмена (38400) и частоте процессора (16000000)
Теперь, после запуска среды разработки в списке доступных плат мы увидим свое творение - см картинку справа
Программируем кристалл в среде AB через ICSP программатор.
Проект с прошивкой для ATmega88PA для программирования из среды Algorithm Builder - тут (там и hex, и fuse, и alp).
На всякий случай, в папку ардуины, чтоб "прошивать будущие проекты", надо положить иной HEX-файл (он более полный): $(ARDUINO)/hardware/arduino/bootloaders/atmega88/ATmegaBOOT_88_m88.hex
И еще вариант прошивки - тут полная "заливка" всей меги 88-ой вместе с загрузчиком (может кому так же пригодится).
Проверяем...
Запускаем среду Arduino. Сервис -> Плата -> выбираем ATmega88 16MHz (см скриншот выше)
Не забываем про СОМ порт нашего моста PL2303...
Грузим стандартный пример Blink, запускаем и...
наблюдаем мигание светодиода pin13 на плате SEM0010M-88PA с ATmega88!!!
Запускаем среду Arduino. Сервис -> Плата -> выбираем ATmega88 16MHz (см скриншот выше)
Не забываем про СОМ порт нашего моста PL2303...
Грузим стандартный пример Blink, запускаем и...
наблюдаем мигание светодиода pin13 на плате SEM0010M-88PA с ATmega88!!!
размещено: 18 февраля 2015 года