Pull to refresh

Альтернатива Wiring для Arduino — BASCOM-AVR

Reading time5 min
Views127K
Ну не нравится мне этот ваш 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 Files\MCS Electronics\BASCOM-AVR\*.dat).
Устанавливаем тактовую частоту:
$crystal = 16000000 

16МГц. Ни на что не влияет, кроме отсчета временных промежутков(waitms). Не устанавливает частоту для контроллера. Ее вы по прежнему должны выставлять сами, программирую Fuse-блок. Впрочем, для Arduino этим можно и не заморачиваться.
Конфигурируем порты:
Config Portb.5 = Output   

Никаких номерных пинов, только хардкор. Смотрим в даташит конкретному контроллеру, и видим имена портов:
image
PD1 = portd.1, pb4 = portb.4
Можно и устанавливать каждый порт по отдельности, а просто написать: Config Portb = Output

Запускаем безусловный цикл(можно и без него, тогда программа выполнится только один раз при запуске контроллера)
Do
Loop


И внутри него, например, моргаем светодиодом:
  Toggle Portb.5   

Portb.5 это тоже самое что pin 13 в ардуине. Соответствия(если вы привыкли к такому наименованию портов) можно посмотреть здесь:
image

Синтаксис очень простой и напоминает 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.1\hardware\arduino\boards.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 Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.exe»
А в после ниже — параметры в таком виде:
-C «C:\Program Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.conf» -p atmega168 -P com2 -c arduino -b 19200 -U flash:w:{FILE}:i
Все понятно из названий, показываем где лежит конфиг, указываем тип контроллера, порт, протокол, скорость, работа с флешем, запись, и файл. Ставим галочку Use HEX file.
Для пущей радости можно отметить и пункт Program after compile — чтоб скомпилировать и прошить одной кнопкой.
При сборке показывается потребление программой доступного флеша:

А потом запускается ARVDUDE:


Еще сбоку можно включить справку по пинам выбранного контроллера(есть по умолчанию, а если нет, то включается View — Pin Layout):

При наведении курсора на пин, показывает его имя и описание.
Если этого недостаточно, то можно скачать даташит и включить View — PDF Viewer:


Еще одна классная вещь — встроенный отладчик с симуляцией железа, бреак-поинтами и пошаговым выполнением.

Включается нажатием на кнопку с красной микросхемой, конечно, предварительно надо скомпилировать программу.

А на сладкое — код, компилируемый в 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МГц:


Ссылки:

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 35: ↑28 and ↓7+21
Comments75

Articles