Хочу поделиться своим опытом знакомства с микроконтроллером ATmega328. Но сначала небольшое отступление.
Наверное уже все читали или уж точно слышали про Arduino. На мой взгляд, Arduino хорошая платформа для ознакомления с миром микроконтроллеров. Низкий порог вхождения и богатый набор различных библиотек, несомненно, является ключевым достоинством этой платформы. Под словом платформа я понимаю само устройство и штатная IDE с набором библиотек. Но к сожалению, ради обеспечения низкого порога вхождения штатная IDE вынуждена многое делать неявно для программиста. Например, процесс компиляции и прошивки, или даже формирование конечного main-файла с подключением всех include. Именно эти неявные действия и создают пробелы в знаниях при изучении платформы.Итак, наши цели:
- Написать программку на чистом C, которая будет мигать светодиодом (aka "Hello world!" только для МК)
- Собрать прошивку для МК
- Настроить fuses bits нашего МК
- Прошить МК
Начнем с железной части.
- МК ATmega328 (тот самый, что используется и в Arduino)
- Кварц на 16Mhz и два конденсатора на 22пФ
- Светодиод
- Резисторы 1кОм и 10кОм
- Программатор USBasp (как устройство)
- Источник питания на 5В.
Подготовка программной среды.
Для ОС Windows все придется скачать и установить самому руками.
Для ОС Ubuntu процесс намного проще:
sudo apt-get install gcc-avr avr-libc binutils-avr
sudo apt-get install avrdude
Весь наш код будет состоять из одного main.c файла:
Теперь необходимо собрать нашу программу:
avr-gcc -Wall -Os -mmcu=atmega328p main.c -o main.o
После чего необходимо подготовить HEX-образ для загрузки его в МК:
avr-objcopy -j .text -j .data -O ihex main.o main.hex
Перед тем как загрузить HEX-образ, МК необходимо настроить, делается это выставлением fuse bits. Установка fuse bits одна из самых ответственных частей. Собственно при неправильных настройках можно случайно заблокировать свой МК, так что будьте особо внимательны! К счастью, выставление fuse bits редкая операция, и требуется обычно лишь один раз.
Для подбора значений fuse bits я воспользовался калькулятором. Для нашего случая команда конфигурации выглядит так (16Мгц должно хватить, чтобы помигать светодиодом :)):
avrdude -c usbasp -p atmega328p -U lfuse:w:0xff:m -U hfuse:w:0xda:m -U efuse:w:0x05:m
Собственно загрузка HEX-образа в МК:
avrdude -p atmega328p -c usbasp -U flash:w:main.hex:i
Если все шаги были пройдены успешно, то после включения МК мы увидим мигающий светодиод.
PS: Код проекта выложил на github, в который включил makefile для удобства сборки и прошивки.
Советую обратить внимание на команду:
avr-objdump -h -S main.o > main.lss
Отличная статья, спасибо!
ОтветитьУдалитьPlaytech casino review - JeMhub
ОтветитьУдалитьPlaytech casinos are one 수원 출장마사지 of 제주 출장안마 the latest to come 안양 출장샵 online and 전라남도 출장샵 boast of a Some of the best casinos to play on Playtech are Microgaming, a new online 포천 출장샵