Микроконтроллеры Atmel AVR, с чего начать?
Intro
Заметка написана после того, как я потерял массу времени в поисках
информации о том, как быстро начать работать с AVR, на какие грабли
можно наступить и все прочее. Информации в сети как всегда куча, но
много воды, советы часто взаимоисключающие и пр.
Поэтому и родился вот такой краткий конспект.
Схемотехника
Выходные линии контроллеров AVR при логическом нуле тянут гораздо
больший ток, поэтому прямой смысл сделать активным уровнем низкий,
например светодиоды на +5 через резистор, а не наоборот и.т.д.
Неочевидно, но не все выходы портов доступны сразу после
программирования flash. Например выводы могут быть задействованы под
JTAG интерфейс и при чтении/записи ничего не будет происходить.
Все это лечится правильной установкой FUSE битов.
Если есть FUSE'ы BODLEVEL0/1/?, то при работе с EEPROM их нужно
запрограммировать на соответствующее напряжение. В этом случае при
пропадании питания ничего в EEPROM не изгадится.
Очень полезно использовать UART для связи с компьютером. Цена вопроса
- одна дополнительная микросхема MAX232 и четыре конденсатора, а при
отладке возможность печатать что-то в порт очень экономит время.
При расчете необходимого размера flash всегда умножайте на 2. RISC код не
очень компактный, кроме того AVR работает со словами, а не байтами и
указанные 16 Kбайт превращаются в 8 Кслов, что более правдоподобно.
Средства разработки
Мне показалось неразумным тратить время на изучение еще одного
ассемблера, поэтому все инструменты, которые не поддерживают
программирование на Си я не рассматривал. В сухом остатке:
- GCC AVR. Open source C/C++ компилятор, линковщик и все прочее.
Все работает, но все более-менее сложные библиотечные
функции нужно писать самостоятельно, готового кот
наплакал.
- AVR Studio. Какая-никакая, но уже среда разработки, окошки,
менюшки. Бесплатная, но опять же замаешься без готовых
библиотек. Может использовать компилятор AVR-GCC.
- IAR Embedded Workbench for AVR. С/С++. Платный. Мне этот пакет
показался тяжеловатым, да и некогда вдумчиво вкуривать документацию.
Возможно стоит присмотреться, если планируется постоянная работа с AVR.
- CodeVision AVR. С без ++. Платный, но работает без лицензии для маленьких
проектов. Запускается и под Win98, что позволяет гонять где угодно. Есть
кодогенератор для инициализации микроконтроллера. Готовые библиотеки тоже
есть для разной периферии - LCD, температурные датчики, RTC,
файловая система FAT и многое другое. Я остановился на CodeVision AVR.
С и CodeVision AVR
Установка запуск CodeVision AVR не вызывают вопросов.
При создании нового проекта очень удобен
CodeWidard, который сам создает код для инициализации
контроллера.
Библиотечные функции работают, но я наткнулся на некоторые
особенности:
По причине архитектуры AVR указатели могут быть:
- просто указателями на RAM
(если выбрана модель tiny, то такие указатели 8-битные),
- указателями на flash, 16 бит, например
flash char[]
- указателями на eeprom, 16 бит, например
eeprom char[]
Они НЕ кастятся между собой, потому что адресуют разную память и могут
быть разного размера, хотя при прямом доступе к памяти компилятор
скрывает эти ньюансы.
Указатели могут быть нулевыми. Кто сказал
if (ptr == NULL) { ...
:)
Вот вкратце и все.
Tags: avr microcontrollers electronic
Назад
|