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

в 18:56, , рубрики: arduino, bascom, diy или сделай сам, Электроника для начинающих, метки: ,

Ну не нравится мне этот ваш Wiring. А еще он почему-то у меня очень ме-е-едленно компилирует, а потом долго думает перед прошивкой.
Я постараюсь рассказать об альтернативной среде для программирования AVR-контроллеров, которая совмещает в себе редактор кода, компилятор, и отладчик-симулятор. К тому же, в последих версиях среда без лишних телодвижений может использоваться с загрузчиком Arduino(т.е. без переделки платы, перепрошивки загрузчика и т.д.)
Альтернатива Wiring для Arduino — BASCOM AVR

Установка

Идем на Офсайт, или просто переходим по второй ссылке в конце топика — сразу начнет загружаться демо-версия среды(30Мб). Демо всего лишь означает, что она позволит собирать проекты, чей вес в скомпилированном виде не превышает 4Кб. Для большинства проектов этого хватает(ага, особенно для Attiny2313), а если нет — кряк для последний версии на рутрекере придется купить, благо он стоит не очень дорого — 89 евро.
Установка совершенно обычная, если у кого-то не запускается в Win7 и выше — установите режим совместимости с XP. Под вайном работает совершенно нормально. Собственно, можно и не устанавливать — просто скопировать папку, вполне себе portable-версия.

Использование

Основное окно:
Альтернатива Wiring для Arduino — BASCOM AVR
Все кнопки снабжены подсказками, и думаю нет нужны пояснять что и где находится.
В последних версиях ее очень пристойно перевели на русский язык, который можно включить в Options — Environment — IDE — Language — Russian.

Вот у меня завалялась копия платы Arduino Nano, которую я долгое время использовал при отладке, прошивая напрямую, через разъем программатора, из-за нелюбви к Arduino IDE.
Альтернатива Wiring для Arduino — BASCOM AVR
Попробуем что-нибудь написать для нее. Для начала необходимо установить тип МК — Atmega168, делается это вот такой строкой:

$regfile = "m168def.dat"    

Почему строка такая, думая понятно. Конечно, установить тип контроллера можно и в Настройки — Компилятор — МК, но в тексте удобнее. Посмотреть как называются файлы для разных контроллеров можно в папке с программой(c:Program FilesMCS ElectronicsBASCOM-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-порт, и скорость.
Альтернатива Wiring для Arduino — BASCOM AVR
В моем случае скорость надо было обязательно указать именно 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 — чтоб скомпилировать и прошить одной кнопкой.
При сборке показывается потребление программой доступного флеша:
Альтернатива Wiring для Arduino — BASCOM AVR
А потом запускается ARVDUDE:
Альтернатива Wiring для Arduino — BASCOM AVR

А на сладкое — код, компилируемый в bascom значительно меньше по размеру и выполняется часто быстрее, чем код от Arduino IDE.
Например, стандартный blink(мигание светодиодом):
Для Arduino:

void setup() {                
  pinMode(13, OUTPUT);     
}
void loop() {
  digitalWrite(13, HIGH);
  digitalWrite(13, LOW); 
}

Компилируется в hex размером 3078(!!!) байт, и дергает пин с частотой 210кГц:
Альтернатива Wiring для Arduino — BASCOM AVR

А в Bascom, записанный вот так:


$regfile = "m168def.dat"
$crystal = 16000000
Config Portb.5 = Output
Do
  Toggle Portb.5
Loop

Занимает 553 байта(в пять раз меньше) hex, и мигает уже с частотой 1,6МГц:
Альтернатива Wiring для Arduino — BASCOM AVR

Ссылки:

Автор: vvzvlad

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js