Работаем с Arduino Nano из Mac OS X

arduino nano v3

Arduino Nano v.3.0

Arduino Nano v3.0 - небольшой модуль на базе микроконтроллера ATmega328P. Помимо микроконтроллера он содержит микросхему стабилизатора и преобразователь USB-UART на основе FT232RL (в оригинальной версии) либо CH340G (в китайских клонах, широко продаваемых в интернете). Вторую реализацию платы можно купить по цене около 3$ с доставкой. За эти деньги получаем весьма серьезный девайс - распаянный МК имеет на борту 32КБ флеш памяти, 2КБ ОЗУ и 1 КБ EEPROM и работает на частоте 16МГц. Также МК имеет 6 каналов аппаратного ШИМа (D3, D5, D6, D9, D10, D11), 7 каналов 10-битного АЦП (A0 - A7) и прошитый bootloader, позволяющий заливать прошивку МК через USB.

Распиновка платы:

Распиновка Arduino nano

Установка ПО и драйверов

Для программирования устройства можно использовать Arduino IDE, но лично я предпочитаю чистый С-код и AVR GCC. Вне зависимости от того, на чем программировать, сначала надо установить драйвер для CH340G. Его можно найти на сайте производителей чипа www.wch-ic.com, либо скачать драйвер версии 1.3 по этой ссылке. Драйвер весрии 1.3 без проблем поддерживает MacOS X Sierra (10.12).
Замечу, что драйверы более ранних версий (ниже 1.3) не были подписаны производителем и вызывали kernel panic на Sierra.

Далее потребуется среда разработки. Все необходимые пакеты включая AVR GCC и avrdude для MacOS можно скачать единым пакетом тут: www.obdev.at/products/crosspack

После чего настроить пути следующей командой (ее лучше прописать в автозапуск)

export PATH=$PATH:/usr/local/CrossPack-AVR/bin

Arduino IDE можно взять с официального сайта arduino.cc/en/Main/Software, она пригодится нам чтобы разобраться, как работать с bootloader-ом ардуины.

Загрузка прошивки

Теперь можно проверить работоспособность платы закачав туда прошивку. Проще всего сделать это из IDE Arduino. В меню Tools выбираем:
Board: Arduino Nano
Processor: ATmega328
Port: /dev/tty.wchusbserial801330

После чего делаем Upload (Cmd+U) и видим, как заливается прошивка. Если все прошло успешно, то можно озадачиться вопросом прошивки платы через консоль используя avrdude. Для этого надо определить используемый загрузчик и его параметры. Чтобы сделать это, выходим из Arduino IDE, открываем в текстовом редакторе ее конфиг ~/Library/Arduino15/preferences.txt и добавляем туда две строки (либо устанавливаем в true уже существующие параметры):

build.verbose = true
upload.verbose = true

После чего заново запускаем IDE и повторно прошиваем плату. При этом видим, какие команды выполняются при сборке и прошивке.

В моем случае прошивка выполнялась командой

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/tty.wchusbserial801330 -b57600 -D -Uflash:w:/var/folders/qz/xqm7fm914mz4h63k9wpfx2nw0000gn/T/build8058511828618706614.tmp/sketch_mar04a.cpp.hex:i 

Т.е., получается, что программатор называется “arduino” и работает на скорости 57600 бод. Теперь не составит труда работать с прошивкой из консоли.

Например, создать резервную копию текущей прошивки можно командой

avrdude -v -patmega328p -carduino -P/dev/tty.wchusbserial801330 -b57600 -U flash:r:"backup.hex”:i

После выполнения команды прошивка будет сохранена в файл backup.hex, который можно сохранить на будущее, если возникнет необходимость восстановить оригинальный загрузчик.

Проект для AVR GCC

В заключении можно создать проект для компиляции чистым AVR GCC. Для чего выполняем команду

avr-project ArduinoDemo

После выполнения получаем директорию ArduinoDemo с исходником main.c, скриптом сборки Makefile и проектом для XCode.

В Makefile меняем параметры для нашего микроконтроллера, получая что-то в таком роде:

# This is a prototype Makefile. Modify it according to your needs.
# You should at least check the settings for
# DEVICE ....... The AVR device you compile for
# CLOCK ........ Target AVR clock rate in Hertz
# OBJECTS ...... The object files created from your source files. This list is
#                usually the same as the list of source files with suffix ".o".
# PROGRAMMER ... Options to avrdude which define the hardware you use for
#                uploading to the AVR and the interface where this hardware
#                is connected. We recommend that you leave it undefined and
#                add settings like this to your ~/.avrduderc file:
#                   default_programmer = "stk500v2"
#                   default_serial = "avrdoper"
# FUSES ........ Parameters for avrdude to flash the fuses appropriately.

DEVICE     = atmega328p
CLOCK      = 16000000
PROGRAMMER = -carduino -P/dev/tty.wchusbserial801330 -b57600
OBJECTS    = main.o
FUSES      = #-U hfuse:w:0xd9:m -U lfuse:w:0x24:m

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

# symbolic targets:
all:	main.hex

.c.o:
$(COMPILE) -c $< -o $@

.S.o:
$(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.

.c.s:
$(COMPILE) -S $< -o $@

flash:	all
$(AVRDUDE) -U flash:w:main.hex:i

fuse:
$(AVRDUDE) $(FUSES)

# Xcode uses the Makefile targets "", "clean" and "install"
install: flash fuse

# if you use a bootloader, change the command below appropriately:
load: all
bootloadHID main.hex

clean:
rm -f main.hex main.elf $(OBJECTS)

# file targets:
main.elf: $(OBJECTS)
$(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=$(DEVICE) main.elf
# If you have an EEPROM section, you must also create a hex file for the
# EEPROM and add it to the "flash" target.

# Targets for code debugging and analysis:
disasm:	main.elf
avr-objdump -d main.elf

cpp:
$(COMPILE) -E main.c

Все, имеем проект, с которым можно работать в XCode и компилировать нажатием Command+B либо явно с помощью утилиты make.

Рейтинг: 
0
Голосов еще нет