Ну не нравится мне этот ваш Wiring. А еще он почему-то у меня очень ме-е-едленно компилирует, а потом долго думает перед прошивкой.
Я постараюсь рассказать об альтернативной среде для программирования AVR-контроллеров, которая совмещает в себе редактор кода, компилятор, и отладчик-симулятор. К тому же, в последих версиях среда без лишних телодвижений может использоваться с загрузчиком Arduino(т.е. без переделки платы, перепрошивки загрузчика и т.д.)
Установка
Идем на Офсайт, или просто переходим по второй ссылке в конце топика — сразу начнет загружаться демо-версия среды(30Мб). Демо всего лишь означает, что она позволит собирать проекты, чей вес в скомпилированном виде не превышает 4Кб. Для большинства проектов этого хватает(ага, особенно для Attiny2313), а если нет — кряк для последний версии на рутрекере придется купить, благо он стоит не очень дорого — 89 евро.
Установка совершенно обычная, если у кого-то не запускается в Win7 и выше — установите режим совместимости с XP. Под вайном работает совершенно нормально. Собственно, можно и не устанавливать — просто скопировать папку, вполне себе portable-версия.
Использование
Основное окно:
Все кнопки снабжены подсказками, и думаю нет нужны пояснять что и где находится.
В последних версиях ее очень пристойно перевели на русский язык, который можно включить в Options — Environment — IDE — Language — Russian.
Вот у меня завалялась копия платы Arduino Nano, которую я долгое время использовал при отладке, прошивая напрямую, через разъем программатора, из-за нелюбви к Arduino IDE.
Попробуем что-нибудь написать для нее. Для начала необходимо установить тип МК — Atmega168, делается это вот такой строкой:
$regfile = "m168def.dat"
Почему строка такая, думая понятно. Конечно, установить тип контроллера можно и в Настройки — Компилятор — МК, но в тексте удобнее. Посмотреть как называются файлы для разных контроллеров можно в папке с программой(c:Program FilesMCS ElectronicsBASCOM-AVR*.dat).
Устанавливаем тактовую частоту:
$crystal = 16000000
16МГц. Ни на что не влияет, кроме отсчета временных промежутков(waitms). Не устанавливает частоту для контроллера. Ее вы по прежнему должны выставлять сами, программирую Fuse-блок. Впрочем, для Arduino этим можно и не заморачиваться.
Конфигурируем порты:
Config Portb.5 = Output
Никаких номерных пинов, только хардкор. Смотрим в даташит конкретному контроллеру, и видим имена портов:
PD1 = portd.1, pb4 = portb.4
Можно и устанавливать каждый порт по отдельности, а просто написать: Config Portb = Output
Запускаем безусловный цикл(можно и без него, тогда программа выполнится только один раз при запуске контроллера)
Do
Loop
И внутри него, например, моргаем светодиодом:
Toggle Portb.5
Portb.5 это тоже самое что pin 13 в ардуине. Соответствия(если вы привыкли к такому наименованию портов) можно посмотреть здесь:
Синтаксис очень простой и напоминает basic. 7 типов переменных: Bit, Byte, Integer, Word, Long, Single, String.
Которые обьявляются в начале программы вот так: Dim A as Single
Очень простое подключение к экранам на контроллере HD44780:
Config lcd = 16*2
Config lcdpin = PIN, DB4 = PORTB.1,DB5=PORTB.2,DB6=PORTB.3,DB7=PORTB.4,E=PORTB.5,RS=PORTB.6
Config lcdmode = PORT
И такой же простой вывод на них текста:
Lcd "Hello, habr! " ; time
Но несмотря на простоту, есть управление курсором, встроенный редактор символов, поддержка кириллицы.
Простая генерация звука:
Sound, Portb.0, 100, 500
Что означает, выдать на PB0 меандр частотой 500гц и длительностью 100мс.
Генерация тонов DTMF:
Dtmfout, 15, 100
15-й тон в течении 100мс.
Работа с UART(как с железным, так и программным):
Dim Name as String * 10
$Baud = 9600
Input "Hello, print you name", Name
Print "Name: " ; Name
Работа с прерываниями:
On Int0 Button - Имя подпрограммы
Config Int0 = Low Level - Прерывание по низкому уровню
Enable Interrupts - Включить прерывания
Enable Int0
Button:
Incr Cntr
Return
С таймерами:
Config Timer0 = Timer , Prescale = 64 - Настраиваем таймер и предделитель
On Timer0 Pulse: - Имя подпрограммы
Enable Interrupts - Включить прерывания
Enable Timer0
Pulse:
Incr Cntr
Return
Прошивка Arduino
В последней версии разработчики добавили поддержку загрузчика Ардуины, и нам необходимо только сделать несколько настроек.
Options — Programmer — ARDUINO. После чего указать com-порт, и скорость.
В моем случае скорость надо было обязательно указать именно 19200, иначе плата не прошивалась. Посмотреть параметры всех плат можно в файле по адресу arduino-1.0.1hardwarearduinoboards.txt
Кстати, там же есть и размер памяти, и частота кристалла:
nano.name=Arduino Nano w/ ATmega168
nano.upload.maximum_size=14336
nano.upload.speed=19200
nano.bootloader.low_fuses=0xff
nano.bootloader.high_fuses=0xdd
nano.bootloader.extended_fuses=0x00
nano.build.mcu=atmega168
nano.build.f_cpu=16000000L
Альтернативный способ загрузки(мне не нравится встроенный прошивальщик своей медлительностью) — с помощью AVRDUDE, мощнейшего консольного программатора.
Скачиваем последнюю версию вот отсюда , например avrdude-5.11.tar.gz. Распаковываем в папку с программой.
Идем в Options — Programmer — External Programmer, и указываем в после Programm путь до исполняемого файла:
«C:Program FilesMCS ElectronicsBASCOM-AVRARVDUDEavrdude.exe»
А в после ниже — параметры в таком виде:
-C «C:Program FilesMCS ElectronicsBASCOM-AVRARVDUDEavrdude.conf» -p atmega168 -P com2 -c arduino -b 19200 -U flash:w:{FILE}:i
Все понятно из названий, показываем где лежит конфиг, указываем тип контроллера, порт, протокол, скорость, работа с флешем, запись, и файл. Ставим галочку Use HEX file.
Для пущей радости можно отметить и пункт Program after compile — чтоб скомпилировать и прошить одной кнопкой.
При сборке показывается потребление программой доступного флеша:
А потом запускается ARVDUDE:
А на сладкое — код, компилируемый в bascom значительно меньше по размеру и выполняется часто быстрее, чем код от Arduino IDE.
Например, стандартный blink(мигание светодиодом):
Для Arduino:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
Компилируется в hex размером 3078(!!!) байт, и дергает пин с частотой 210кГц:
А в Bascom, записанный вот так:
$regfile = "m168def.dat"
$crystal = 16000000
Config Portb.5 = Output
Do
Toggle Portb.5
Loop
Занимает 553 байта(в пять раз меньше) hex, и мигает уже с частотой 1,6МГц:
Ссылки:
- Офсайт
- Последняя версия Bascom-AVR
- Около 100 примеров с подробными схемами и листингами кода
- Замечательный русский учебник от WildCat(стоит перейти по ссылке даже просто ради чтения вступления)
- Еще один учебник на русском. А еще там есть учебник по microC и microPascal написанный многоуважаемой moriam, у которой нет инвайта(да, это намек)
- Русскоязычный сайт с проектами
- Активный русский форум
- Еще кучка статей, книг и проектов
- Тема обсуждения на радиокоте
- Тема обсуждения на cqham
- Не ходите сюда, и тем более ничего не читайте. Сайт «для поисковиков», на котором в примерах куча ошибок. А все для того, чтоб перепродать пару модулей.
Автор: vvzvlad